首页 > 解决方案 > 如何在相关矩阵中找到高值?

问题描述

如何在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

标签: pythondataframecorrelationcross-correlationpearson-correlation

解决方案


继续示例并使用 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']

推荐阅读