Python で相関分析

相関分析とは

2つのデータの関係の強さを表す指標(相関係数)を計算し、数値化する分析手法です。
相関係数は 1 に近づくほど正の相関(正比例)の関係が強くなり、-1 に近づくほど負の相関(反比例)の関係が強くなります。
また、0 に近づくほど無関係になります。

  1. 正の相関
    片方の数値が大きくなる(小さくなる)と、もう片方の値も大きなる(小さくなる)
  2. 負の相関
    片方の数値が大きくなる(小さくなる)と、もう片方の値は小さくなる(大きくなる)
  3. 無相関
    片方の数値が大きくなる(小さくなる)としても、もう片方の値に決まった変化が見られない。

正の相関

負の相関

無相関

相関係数について

相関関係の強さを示す数値で、-1 から 1 で示されます。
数値が大きければ、より強い相関があるということになり、例えば 0.8 では強い正の相関、-0.8 では強い負の相関があるということなります。

Python で相関分析

実行例

以下の血液検査の結果(sample.csv)を取込み、相関分析を行います。

日付WBCHGBPLTT-PALBCRP治療
2021/1/15.412.32807.13.71.68治療薬A
2021/2/15.812.52957.23.72.13治療薬A
2021/3/15.812.82717.23.81.03治療薬A
2021/4/1613.12567.43.90.79治療薬A
2021/5/16.312.82547.44.10.32治療薬B
2021/6/1913.53416.33.12.74治療薬B
2021/7/16.712.32397.54.30.17治療薬C
2021/8/15.312.42347.14.20.07治療薬C
2021/9/15.812.62207.14.30.09治療薬C

次のコードを実行します。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

def main():

    df_data = pd.read_csv("sample.csv",index_col="日付")
    df_corr = df_corr = df_data.corr()
    sns.heatmap(df_corr, annot=True,fmt='.2f',cmap='Blues',square=True)
    plt.show()

if __name__ == '__main__':
    main()

実行すると、以下のような図が表示されます。
例として、この結果から CRP(炎症値)と PLT(血小板数)は強い正の相関(0.96)があり、CRP と ALB(蛋白質)は、強い負の相関(-0.95)であることがわかります。

解説

データフレーム読み込み

上記の CSV ファイル(sample.csv)を Pandas を使ってデータフレームとして読み込みます。

import pandas as pd

df_data = pd.read_csv("sample.csv",index_col="日付")
相関関係を確認

df_corr を呼び出すと相関関係を確認できます。
データから数値の列のみ抽出し、全ての組み合わせについて相関関係を計算します。

 df_corr = df_corr = df_data.corr()
相関係数を可視化

Seaborn ライブラリを使用し、相関係数を可視化・出力します。

import matplotlib.pyplot as plt
import seaborn as sns

sns.heatmap(df_corr, annot=True,fmt='.2f',cmap='Blues',square=True)
plt.show()
散布図の確認

pairplot メソッドを使用すると、全ての値の散布図を確認することができます。

import japanize_matplotlib

sns.pairplot(df_data,hue="治療")

実行結果は次のとおりとなり、治療薬 C では CRP(炎症値)が低く、効果が高いことがわかります。

以上

参考サイト

データサイエンス情報局

相関分析をPythonで実行し、可視化まで行ってみます。Excelでも相関分析は可能ですが、Pythonで実行すれば一度…