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