python - 如何在相关矩阵中找到高值?
问题描述
如何在correlation matrix
? 例如,在下面的示例中,A1 和 A3 具有高度相关性。
import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO('''Sentence, A1, A2, A3
text, 0.23, 0.54, 39
text, 0.33, 0.7, 36
text, 0.8, 0.41, 29'''), sep=',')
print(df.corr())
结果:
A1 A2 A3
A1 1.000000 -0.732859 -0.991352
A2 -0.732859 1.000000 0.637235
A3 -0.991352 0.637235 1.000000
解决方案
继续示例并使用 numpy:
c = df.corr()
import numpy as np
threshold = .99
np.abs(c.values) > threshold
这给出了:
array([[ True, False, True],
[False, True, False],
[ True, False, True]])
您可以通过以下方式获得非对角线的重要值的索引:
[(i, j) for i,j in zip(*np.where(np.abs(c.values) > threshold)) if i!=j]
这给出了:
[(0, 2), (2, 0)]
更新:
利用相关矩阵的对称性,可以获得具有列名的可读字符串列表:
[f"{c.columns[i]} and {c.columns[j]}" for i, j in zip(*np.where(np.abs(c.values) > threshold)) if i < j]
->
[' A1 and A3']