我有一个包含大量特征的数据集,因此分析相关矩阵变得非常困难。我想画一个相关矩阵,它是我们使用Pandas图书馆的dataframe.corr()函数得到的。Pandas图书馆有没有内置的函数来绘制这个矩阵?
dataframe.corr()
juzqafwq16#
Seborn的热图版本:
import seaborn as sns corr = dataframe.corr() sns.heatmap(corr, xticklabels=corr.columns.values, yticklabels=corr.columns.values)
omjgkv6w17#
如果您的主要目标是可视化关联矩阵,而不是创建曲线图本身,那么方便的pandasstyling options是一个可行的内置解决方案:
pandas
import pandas as pd import numpy as np rs = np.random.RandomState(0) df = pd.DataFrame(rs.rand(10, 10)) corr = df.corr() corr.style.background_gradient(cmap='coolwarm') # 'RdBu_r', 'BrBG_r', & PuOr_r are other good diverging colormaps
请注意,这需要位于支持呈现HTML的后端,例如JupyterLab Notebook。
您可以轻松地限制数字精度:
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
或者,如果您更喜欢不带注解的矩阵,则完全去掉数字:
corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
样式文档还包括更高级样式的说明,例如如何更改鼠标指针悬停在其上的单元格的显示。
在我的测试中,使用10x10矩阵的style.background_gradient()比plt.matshow()快4倍,比sns.heatmap()快120倍。遗憾的是,plt.matshow()的可扩展性不如plt.matshow():100x100矩阵的速度与plt.matshow()相同,而1000x1000矩阵的plt.matshow()速度则快10倍。
style.background_gradient()
plt.matshow()
sns.heatmap()
有几种可能的方法可以保存风格化的 Dataframe :
render()
to_excel()
.xslx
通过设置axis=None,现在可以基于整个矩阵而不是按列或按行计算颜色:
axis=None
corr.style.background_gradient(cmap='coolwarm', axis=None)
由于很多人都在阅读这个答案,我想我应该加上一个提示,告诉你如何只显示相关性矩阵的一角。我觉得我自己读起来更容易,因为它去掉了多余的信息。
# Fill diagonal and upper half with NaNs mask = np.zeros_like(corr, dtype=bool) mask[np.triu_indices_from(mask)] = True corr[mask] = np.nan (corr .style .background_gradient(cmap='coolwarm', axis=None, vmin=-1, vmax=1) .highlight_null(null_color='#f1f1f1') # Color NaNs grey .set_precision(2))
17条答案
按热度按时间juzqafwq16#
Seborn的热图版本:
omjgkv6w17#
如果您的主要目标是可视化关联矩阵,而不是创建曲线图本身,那么方便的
pandas
styling options是一个可行的内置解决方案:请注意,这需要位于支持呈现HTML的后端,例如JupyterLab Notebook。
造型
您可以轻松地限制数字精度:
或者,如果您更喜欢不带注解的矩阵,则完全去掉数字:
样式文档还包括更高级样式的说明,例如如何更改鼠标指针悬停在其上的单元格的显示。
时间对比
在我的测试中,使用10x10矩阵的
style.background_gradient()
比plt.matshow()
快4倍,比sns.heatmap()
快120倍。遗憾的是,plt.matshow()
的可扩展性不如plt.matshow()
:100x100矩阵的速度与plt.matshow()
相同,而1000x1000矩阵的plt.matshow()
速度则快10倍。节省时间
有几种可能的方法可以保存风格化的 Dataframe :
render()
方法返回HTML,然后将输出写入文件。to_excel()
方法,以条件格式另存为.xslx
文件。整矩阵归一化颜色(Pandas>=0.24)
通过设置
axis=None
,现在可以基于整个矩阵而不是按列或按行计算颜色:单角热图
由于很多人都在阅读这个答案,我想我应该加上一个提示,告诉你如何只显示相关性矩阵的一角。我觉得我自己读起来更容易,因为它去掉了多余的信息。