例えば、irisデータセットに対してpandasのcorrメソッドを使うと、こんな風に相関係数行列が出てくると思います。
python
df.corr(method='pearson')
ただ、相関係数のランキングを作りたい場合は、こんな感じで1列に並んでいた方が扱いやすかったりします。
そこで、相関係数を上の様に出力する関数を作ってみました。
python
import numpy as np
import pandas as pd
# 引数は、相関係数を作成したいdf
def calc_corr(df):
# 相関係数行列を作成
corr_mat = df.corr(method='pearson')
# 行(列)サイズを取得
n = corr_mat.shape[0]
# 項目名を取得
columns = corr_mat.columns.tolist()
# 変数名1, 変数名2, 値を一つの配列に入れたものを作成
# 相関係数行列の下三角部分(対角成分除く)だけ
corr_ary = []
var1_ary = []
var2_ary = []
for i in range(n):
for j in range(i):
if i == j:
continue
corr_ary.append(corr_mat.iloc[i,j])
var1_ary.append(columns[i])
var2_ary.append(columns[j])
# dfにする
df_new = pd.DataFrame([])
df_new["var1"] = var1_ary
df_new["var2"] = var2_ary
df_new["corr"] = corr_ary
return df_new
使用例は以下の通りです。
python
from sklearn import datasets
iris = datasets.load_iris()
df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
corr(df)
これでさっきのdfが得られます。