使用pandas绘制相关矩阵

361

我有一个由大量特征组成的数据集,因此分析相关矩阵变得非常困难。我想绘制一个相关矩阵,使用 pandas 库中的 dataframe.corr() 函数获得。pandas 库是否提供任何内置函数来绘制此矩阵?


1
相关的答案可以在这里找到 从pandas DataFrame中制作热图 - joelostblom
Seaborn的clustermap可能也是可视化相关矩阵的有趣方式:sns_plot = sns.clustermap(dataframe.corr(), cmap="rocket_r") - nim.py
19个回答

5

statmodels图形还可以很好地展示相关矩阵。

import statsmodels.api as sm
import matplotlib.pyplot as plt

corr = dataframe.corr()
sm.graphics.plot_corr(corr, xnames=list(corr.columns))
plt.show()

请注意,这也显示了列名,这是一个很大的优点。 - kris

3

当处理大量特征之间的相关性时,我发现将相关特征聚类在一起非常有用。这可以通过 seaborn 的 clustermap 绘图来实现。

import seaborn as sns
import matplotlib.pyplot as plt

g = sns.clustermap(df.corr(), 
                   method = 'complete', 
                   cmap   = 'RdBu', 
                   annot  = True, 
                   annot_kws = {'size': 8})
plt.setp(g.ax_heatmap.get_xticklabels(), rotation=60);

enter image description here

clustermap函数使用分层聚类将相关特征组合在一起,并生成树状图。

此图中有两个显著的聚类:

  1. y_desdew.point_des
  2. irradiancey_seasonaldew.point_seasonal

顺便提一下,生成此图的气象数据可以通过这个Jupyter笔记本访问。


3

除了其他方法外,还建议使用pairplot,它将为所有情况提供散点图 -

import pandas as pd
import numpy as np
import seaborn as sns
rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
sns.pairplot(df)

2

有很多有用的答案。我只想添加一种可视化相关矩阵的方法。因为有时候颜色对您来说不太清楚,heatmap库可以绘制一个显示每个相关度量的方块大小的相关矩阵。

import matplotlib.pyplot as plt
from heatmap import corrplot

plt.figure(figsize=(15, 15))
corrplot(df.corr())

enter image description here


1

生成相关矩阵,在我的情况下,zdf是我需要执行相关矩阵的数据框。

corrMatrix =zdf.corr()
corrMatrix.to_csv('sm_zscaled_correlation_matrix.csv');
html = corrMatrix.style.background_gradient(cmap='RdBu').set_precision(2).render()

# Writing the output to a html file.
with open('test.html', 'w') as f:
   print('<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-widthinitial-scale=1.0"><title>Document</title></head><style>table{word-break: break-all;}</style><body>' + html+'</body></html>', file=f)

然后,我们可以进行屏幕截图或将HTML转换为图像文件。

0

我更喜欢使用Plotly,因为它提供了更多交互式图表,并且更容易理解。您可以使用以下代码片段。

import plotly.express as px

def plotly_corr_plot(df,w,h):
    fig = px.imshow(df.corr())
    fig.update_layout(
        autosize=False,
        width=w,
        height=h,)
    fig.show()

0
你可以使用seaborn中的heatmap()函数来查看不同特征之间的相关性:
import matplot.pyplot as plt
import seaborn as sns

co_matrics=dataframe.corr()
plot.figure(figsize=(15,20))
sns.heatmap(co_matrix, square=True, cbar_kws={"shrink": .5})

-1
请检查以下易读的代码。
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(36, 26))
heatmap = sns.heatmap(df.corr(), vmin=-1, vmax=1, annot=True)
heatmap.set_title('Correlation Heatmap', fontdict={'fontsize':12}, pad=12)```

  [1]: https://istack.dev59.com/I5SeR.webp

-2
corrmatrix = df.corr()
corrmatrix *= np.tri(*corrmatrix.values.shape, k=-1).T
corrmatrix = corrmatrix.stack().sort_values(ascending = False).reset_index()
corrmatrix.columns = ['Признак 1', 'Признак 2', 'Корреляция']
corrmatrix[(corrmatrix['Корреляция'] >= 0.7) + (corrmatrix['Корреляция'] <= -0.7)]
drop_columns = corrmatrix[(corrmatrix['Корреляция'] >= 0.82) + (corrmatrix['Корреляция'] <= -0.7)]['Признак 2']
df.drop(drop_columns, axis=1, inplace=True)
corrmatrix[(corrmatrix['Корреляция'] >= 0.7) + (corrmatrix['Корреляция'] <= -0.7)]

1
您的回答可以通过提供更多的支持信息而得以改善。请编辑并添加更多的细节,例如引用或文档,以便他人可以确认您的答案是否正确。您可以在帮助中心中找到有关如何撰写良好答案的更多信息。 - Community
在您的代码中添加解释,说明为什么它比已接受的答案更好,并确保在代码中使用英语。 - gshpychka

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