gpt4 book ai didi

Python:如何将 statsmodels 结果保存为图像文件?

转载 作者:行者123 更新时间:2023-12-02 08:59:32 28 4
gpt4 key购买 nike

我正在使用 statsmodels 进行 OLS 估计。可以使用 print(results.summary()) 在控制台中研究结果。我想将同一个表存储为 .png 文件。下面是一个带有可重现示例的片段。

import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import statsmodels.api as sm

# Dataframe with some random numbers
np.random.seed(123)
rows = 10
df = pd.DataFrame(np.random.randint(90,110,size=(rows, 2)), columns=list('AB'))
datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=rows).tolist()
df['dates'] = datelist
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
print(df)

# OLS estimates using statsmodels.api
x = df['A']
y = df['B']

model = sm.OLS(y,sm.add_constant(x)).fit()

# Output
print(model.summary())

enter image description here

我使用建议做了一些天真的尝试here ,但我怀疑我偏离了目标:

os.chdir('C:/images')
sys.stdout = open("model.png","w")
print(model.summary())
sys.stdout.close()

到目前为止,这只会引发一条很长的错误消息。

谢谢您的建议!

最佳答案

这是一项非常不寻常的任务,你的方法有点疯狂。您正在尝试将字符串(在某些度量空间中没有位置)与某些图像(基于绝对位置;至少对于基于像素的格式 -> png、jpeg 等)组合起来。

无论您做什么,都需要一些文本渲染引擎!

我尝试使用 pillow ,但结果很丑陋。可能是因为它非常有限,并且后处理抗锯齿并不能节省任何东西。但也许我做错了什么。

from PIL import Image, ImageDraw, ImageFont
image = Image.new('RGB', (800, 400))
draw = ImageDraw.Draw(image)
font = ImageFont.truetype("arial.ttf", 16)
draw.text((0, 0), str(model.summary()), font=font)
image = image.convert('1') # bw
image = image.resize((600, 300), Image.ANTIALIAS)
image.save('output.png')

当你使用 statsmodels 时,我假设你已经得到了 matplotlib 。这个也可以用。这是一些方法,虽然不完美,但还不错(一些换行;我不知道为什么;编辑:OP设法使用等宽字体修复了这些):

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(16, 8))
summary = []
model.summary(print_fn=lambda x: summary.append(x))
summary = '\n'.join(summary)
ax.text(0.01, 0.05, summary, fontfamily='monospace', fontsize=12)
ax.axis('off')
plt.tight_layout()
plt.savefig('output.png', dpi=300, bbox_inches='tight')

输出:

enter image description here

编辑:OP通过使用等宽字体设法改进了matplotlib方法!我在这里合并了它,它反射(reflect)在输出图像中。

将此作为演示并研究 python 的文本渲染选项。也许 matplotlib-approach 可以改进,但也许你需要使用类似 pycairo 的东西。 Some SO-discussion .

备注:在我的系统上,您的代码确实会发出这些警告!

编辑:seems你可以向 statsmodels 询问 latex 表示。所以我建议使用这个,可能将其写入文件并使用子进程调用 pdflatex 或类似的东西(这里是一些 similar approach )。 matplotlib 也可以使用 latex (但我不会测试它,因为我目前在 Windows 上),但在这种情况下,我们再次需要以某种方式调整文本与窗口的比率(与给定一些 A5 格式的完整 latex 文档相比) .

关于Python:如何将 statsmodels 结果保存为图像文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664082/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com