PythonのPandasを使った相関係数の算出方法について、基本から実践的な使い方まで詳しく解説します。
目次
相関係数とは
相関係数(correlation coefficient)は、2つの変数間の関係の強さと方向を示す統計的な指標です。
Pandasではピアソン相関係数(Pearson’s correlation coefficient)を標準で計算します。
- 値の範囲: -1.0 ~ +1.0
- +1.0 → 完全な正の相関(片方が増えるともう片方も必ず増える)
- -1.0 → 完全な負の相関(片方が増えるともう片方は必ず減る)
- 0 → 相関なし
Pandasでの基本的な使い方
Series同士で相関を求める
import pandas as pd
# サンプルデータ
data = {
"x": [10, 20, 30, 40, 50],
"y": [15, 25, 35, 45, 55]
}
df = pd.DataFrame(data)
# xとyの相関係数
corr = df["x"].corr(df["y"])
print(corr) # 1.0
完全に比例関係なので相関係数は1.0になります。
DataFrame全体の相関行列を求める
corr_matrix = df.corr()
print(corr_matrix)
すべての数値列の相関をまとめて確認できます。
相関係数の種類(method引数)
DataFrame.corr(method=...)
で異なる方法を選べます。
method="pearson"
(既定値):線形関係を測定method="spearman"
:順位相関(非線形関係にも有効)method="kendall"
:順位相関の一種、外れ値に比較的強い
# スピアマン相関を求める
df.corr(method="spearman")
実用的な例(複数の変数の関係を見る)
import numpy as np
data = {
"height": [160, 165, 170, 175, 180],
"weight": [55, 60, 65, 70, 75],
"age": [20, 25, 30, 35, 40]
}
df = pd.DataFrame(data)
print(df.corr())
この例ではすべて直線的に比例させているため、完全相関になっています。
現実のデータでは、必ずしも1.0にならず、0.3や0.5といった中程度の相関になることが多いです。
可視化と組み合わせる
相関行列は数値だけだと分かりづらいので、matplotlib
やseaborn
を使ってヒートマップ化すると見やすいです。
import seaborn as sns
import matplotlib.pyplot as plt
corr = df.corr()
sns.heatmap(corr, annot=True, cmap="coolwarm", vmin=-1, vmax=1)
plt.show()
色で強弱を視覚化することで、相関の強い変数を一目で確認できます。
注意点・落とし穴
- 相関が高い = 因果関係があるとは限らない
(例:夏にアイスの売上と熱中症患者数が増える → 両方の原因は「気温」) - 外れ値があると相関が大きく歪む可能性がある
- 非線形な関係ではピアソン相関では見抜けない(→Spearmanを検討)
まとめると
.corr()
で手軽に相関行列を計算できる.corr(method="spearman")
やkendall
で非線形の関係も確認できる- 実務では可視化+相関行列のセットが有効
以上、PythonのPandasによる相関係数の算出についてでした。
最後までお読みいただき、ありがとうございました。