如何加速Seaborn的pairplot函数?

29

我有一个数据框,它有250,000行但只有140列,并且我试图构建变量之间的对比图。 我知道子图的数量很多,画图所需的时间也很长。(我在一台i5处理器,3.4GHZ和32GB RAM的电脑上等待了一个多小时。)

记得scikit-learn可以并行构建随机森林,我在查看是否可以在seaborn中实现类似功能。 然而,我没有找到任何相关信息。源代码似乎为每个单独的图像调用matplotlib绘图函数。

这个过程能够并行化吗?如果是,从这里开始哪种方式是好的?


你知道在散点图中使用rasterized=True作为参数是否有帮助吗?此外,我只想映射其中一个三角形半部分 - 这不是浪费时间在重复工作的时候。 - creanion
3个回答

42

如果速度瓶颈确实出现在此处,与其并行化,你可以将你的DataFrame降采样为1000行来进行快速预览。通常1000点足以获得大致了解。

sns.pairplot(df.sample(1000))


5
对我而言,我曾经遇到过直方图所需时间非常长的情况,这是由于数据的差异性导致的。我的数据只有1200行和4列,但在我放弃之前花了半个小时。我认为,它是如此分散和无序,以至于直方图一直在更新。一个解决方法可能是调整bin参数,但我的解决方案是改用对角线上的KDE。使用KDE,只需要几秒钟。
sns.pairplot(df, diag_kind='kde')

为什么只在对角线上使用kde? - jtlz2
正如我在答案中所说,我不完全知道为什么直方图很慢。我提出了一些猜测。直接回答你的问题,因为它要快得多。 - Marcel
抱歉,我的意思是为什么不在非对角线上也这样做呢? - jtlz2
1
离对角线的应该是散点图,用来比较两个变量。显然,这可以很快完成,不像直方图。如果需要,您可以使用不同的设置制作这些二维KDE图。 - Marcel

4

将你的Pairplot保存为图片,然后显示该图片,而不是在浏览器中呈现它。

from IPython.display import Image
import seaborn as sns
import matplotlib.pyplot as plt 

sns_plot = sns.pairplot(df, size=2.0)
sns_plot.savefig("pairplot.png")

plt.clf() # Clean parirplot figure from sns 
Image(filename='pairplot.png') # Show pairplot as image

2
这也是一个重要的想法。但我认为当时创建图像是更大的瓶颈。 - Quickbeam2k1
如果需要,您也可以通过缓冲区而不是文件进行操作。 - jtlz2
同时,size已经被弃用,请使用height代替。 - jtlz2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接