我有一个由大量特征组成的数据集,因此分析相关矩阵变得非常困难。我想绘制一个相关矩阵,使用 pandas 库中的 dataframe.corr()
函数获得。pandas 库是否提供任何内置函数来绘制此矩阵?
我有一个由大量特征组成的数据集,因此分析相关矩阵变得非常困难。我想绘制一个相关矩阵,使用 pandas 库中的 dataframe.corr()
函数获得。pandas 库是否提供任何内置函数来绘制此矩阵?
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()
当处理大量特征之间的相关性时,我发现将相关特征聚类在一起非常有用。这可以通过 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);
clustermap函数使用分层聚类将相关特征组合在一起,并生成树状图。
此图中有两个显著的聚类:
y_des
和dew.point_des
irradiance
,y_seasonal
和dew.point_seasonal
顺便提一下,生成此图的气象数据可以通过这个Jupyter笔记本访问。
除了其他方法外,还建议使用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)
有很多有用的答案。我只想添加一种可视化相关矩阵的方法。因为有时候颜色对您来说不太清楚,heatmap
库可以绘制一个显示每个相关度量的方块大小的相关矩阵。
import matplotlib.pyplot as plt
from heatmap import corrplot
plt.figure(figsize=(15, 15))
corrplot(df.corr())
生成相关矩阵,在我的情况下,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)
我更喜欢使用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()
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})
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
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)]
sns_plot = sns.clustermap(dataframe.corr(), cmap="rocket_r")
。 - nim.py