1. ホーム
  2. python

[解決済み] Pandasで大規模相関行列から最高相関ペアをリストアップする?

2022-07-29 03:47:48

質問

Pandasで相関行列の上位相関を見つけるにはどうしたらいいでしょうか?Rでこれを行う方法については、多くの回答があります ( 相関を大きな行列としてではなく、順序付きリストとして表示する または PythonやRで大規模なデータセットから相関の高いペアを取得する効率的な方法 を参照)、しかし、私はpandasでそれを行う方法について疑問に思っています。私の場合、行列が4460x4460なので、ビジュアル的には無理です。

どのように解決するのでしょうか?

この場合 DataFrame.values を使用してデータのnumpy配列を取得し、次のようなNumPyの関数を使用します。 argsort() などのNumpy関数を用いて、最も相関の高いペアを取得します。

しかし、これをpandasで行う場合、以下のようになります。 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