在大系数矩阵中查找高相关性



我有一个包含56个数字特征的数据集。加载到pandas,我可以很容易地生成一个相关系数矩阵。

但是,由于它的大小,我想找到高于(或低于(某个阈值的系数,例如>0.8 或 <-0.8,并列出相应的变量对。有没有办法做到这一点?我认为这需要在所有列中按值选择,然后返回,不是行,而是值的列名和行索引,但我也不知道该怎么做!

谢谢!

我认为你可以做wherestack():这个:

np.random.seed(1)
df = pd.DataFrame(np.random.rand(10,3))
coeff = df.corr()
# 0.3 is used for illustration 
# replace with your actual value
thresh = 0.3
mask = coeff.abs().lt(thresh)
# or mask = coeff < thresh
coeff.where(mask).stack()

输出:

0  2   -0.089326
2  0   -0.089326
dtype: float64

输出:

0  1    0.319612
2   -0.089326
1  0    0.319612
2   -0.687399
2  0   -0.089326
1   -0.687399
dtype: float64

如果您还希望对相关结果进行重复数据删除,则此方法将起作用。

thresh = 0.8
# get correlation matrix
df_corr = df.corr().abs().unstack()
# filter
df_corr_filt = df_corr[(df_corr>thresh) | (df_corr<-thresh)].reset_index()
# deduplicate
df_corr_filt.iloc[df_corr_filt[['level_0','level_1']].apply(lambda r: ''.join(map(str, sorted(r))), axis = 1).drop_duplicates().index]

相关内容

  • 没有找到相关文章

最新更新