【发布时间】:2021-11-29 01:28:12
【问题描述】:
对于 ML/DL 项目,我有一组要转换为图像的功能。
数据格式如下
Group Name Feat X Feat y .... Feat z
1 A.
1. B.
1. C.
2. D
2. A.
2. E
其中特征 X 到 Z 是 60 个数字的有序列表。目标是使用 1 到 60 作为 X 轴并将特征值作为 Y 绘制成一条线,按每组的名称分组。 所以第 1 组图形将有 3 行(A、B、C)。
这是我目前拥有的函数,其中 subs 是 groupby by ['Group'] 之后的 pandas 数据帧
ids = list(subs['Group'])[0]
subs.set_index('Name', inplace=True)
subs = subs.T
fig=subs.plot(figsize=(32,32), legend=False).get_figure()
plt.axis('off')
# convert figure to PIL image
buf = io.BytesIO()
fig.savefig(buf, bbox_inches='tight')
buf.seek(0)
img = Image.open(buf).convert('LA')
img.save("{}/{}.png".format(path, ids),"PNG", optimize=True,quality=50)
buf.close()
plt.close()
这适用于 df.groupby['Group'].apply(lambda x: data2img(x, img_path))。
代码工作并生成正确的数字,但我有数百万组并且需要永远。
我对这类事情的首选通常是 dask,但是当我使用它时,它引发了一个安全问题,因为 matplotlib 不是线程安全的。 关于如何规避这个问题的任何想法/关于如何加快图像生成的其他想法?
【问题讨论】:
标签: python pandas matplotlib thread-safety