126

パンダとの相関行列で上位の相関を見つけるにはどうすればよいですか? Rでこれを行う方法については多くの答えがあります(大きな行列としてではなく、順序付けられたリストとして相関を表示するか、PythonまたはRの大規模なデータセットから高度に相関したペアを取得する効率的な方法)が、私はそれを行う方法を疑問に思っていますパンダと?私の場合、マトリックスは4460x4460なので、視覚的にはできません。

4

14 に答える 14

115

を使用DataFrame.valuesしてデータの numpy 配列を取得し、次に NumPy 関数を使用argsort()して、最も相関性の高いペアを取得できます。

ただし、パンダでこれを行いたい場合はunstack、DataFrame を並べ替えることができます。

import pandas as pd
import numpy as np

shape = (50, 4460)

data = np.random.normal(size=shape)

data[:, 1000] += data[:, 2000]

df = pd.DataFrame(data)

c = df.corr().abs()

s = c.unstack()
so = s.sort_values(kind="quicksort")

print so[-4470:-4460]

出力は次のとおりです。

2192  1522    0.636198
1522  2192    0.636198
3677  2027    0.641817
2027  3677    0.641817
242   130     0.646760
130   242     0.646760
1171  2733    0.670048
2733  1171    0.670048
1000  2000    0.742340
2000  1000    0.742340
dtype: float64
于 2013-07-22T01:43:58.870 に答える
61

@HYRYの答えは完璧です。重複および自己相関と適切な並べ替えを回避するために、もう少しロジックを追加して、その答えを構築するだけです。

import pandas as pd
d = {'x1': [1, 4, 4, 5, 6], 
     'x2': [0, 0, 8, 2, 4], 
     'x3': [2, 8, 8, 10, 12], 
     'x4': [-1, -4, -4, -4, -5]}
df = pd.DataFrame(data = d)
print("Data Frame")
print(df)
print()

print("Correlation Matrix")
print(df.corr())
print()

def get_redundant_pairs(df):
    '''Get diagonal and lower triangular pairs of correlation matrix'''
    pairs_to_drop = set()
    cols = df.columns
    for i in range(0, df.shape[1]):
        for j in range(0, i+1):
            pairs_to_drop.add((cols[i], cols[j]))
    return pairs_to_drop

def get_top_abs_correlations(df, n=5):
    au_corr = df.corr().abs().unstack()
    labels_to_drop = get_redundant_pairs(df)
    au_corr = au_corr.drop(labels=labels_to_drop).sort_values(ascending=False)
    return au_corr[0:n]

print("Top Absolute Correlations")
print(get_top_abs_correlations(df, 3))

次の出力が得られます。

Data Frame
   x1  x2  x3  x4
0   1   0   2  -1
1   4   0   8  -4
2   4   8   8  -4
3   5   2  10  -4
4   6   4  12  -5

Correlation Matrix
          x1        x2        x3        x4
x1  1.000000  0.399298  1.000000 -0.969248
x2  0.399298  1.000000  0.399298 -0.472866
x3  1.000000  0.399298  1.000000 -0.969248
x4 -0.969248 -0.472866 -0.969248  1.000000

Top Absolute Correlations
x1  x3    1.000000
x3  x4    0.969248
x1  x4    0.969248
dtype: float64
于 2017-01-03T23:15:39.440 に答える