PythonのPandasによる相関係数の算出について

Python,イメージ

AI実装検定のご案内

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といった中程度の相関になることが多いです。

可視化と組み合わせる

相関行列は数値だけだと分かりづらいので、matplotlibseabornを使ってヒートマップ化すると見やすいです。

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による相関係数の算出についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次