ヒートマップと散布図 — 相関関係の可視化
このトピックを終えると
2つの変数の関係を散布図で可視化し、複数の変数間の相関関係をヒートマップで一目で把握できるようになります。
相関関係とは
「身長が高いほど、体重も重い」— これは正の相関関係です。一方が上がると、もう一方も上がる傾向。
「気温が高いほど、ホットチョコレートの販売量は減る」— これは負の相関関係です。一方が上がると、もう一方は下がる傾向。
この「傾向の強さ」を数値で表したものが相関係数です。
| 値 | 意味 |
|---|---|
| +1.0 | 完璧な正の相関(一緒に上がる) |
| +0.7〜+0.9 | 強い正の相関 |
| +0.3〜+0.7 | 弱い〜普通な正の相関 |
| 0 | 相関なし |
| -0.3〜-0.7 | 弱い〜普通な負の相関 |
| -1.0 | 完璧な負の相関(逆の動きをする) |
散布図 — 2つの変数の関係を見る
import seaborn as snsimport matplotlib.pyplot as plt
sns.scatterplot(data=df, x='experience', y='salary')plt.title('経験年数 vs 年収')plt.show()点が右上に集まると正の相関、右下に集まると負の相関、点が四方に散らばっている場合は相関なしです。
傾向線を追加
sns.regplot(data=df, x='experience', y='salary', scatter_kws={'alpha': 0.5}, line_kws={'color': 'red'})regplotは散布図+回帰線を一緒に描画します。線がどれだけ点の間をうまく通過するかを見ると、相関の強さを視覚的に判断できます。
相関行列 — 一度に複数の変数
変数が2つの場合は、散布図1つで済みます。しかし、10個の場合は?すべての組み合わせを見るには、45個の散布図が必要です。この時に相関行列を使います。
# 相関係数行列を計算corr = df[['salary', 'experience', 'age', 'projects']].corr()print(corr)salary experience age projects
salary 1.000 0.850 0.620 0.430
experience 0.850 1.000 0.780 0.350
age 0.620 0.780 1.000 0.120
projects 0.430 0.350 0.120 1.000数値の行列なので、一目でわかりません。これを色に変換したものがヒートマップです。
ヒートマップ — 相関行列の可視化
plt.figure(figsize=(8, 6))sns.heatmap(corr, annot=True, # セルに数値を表示 fmt='.2f', # 小数点2桁 cmap='coolwarm', # 赤(正)〜青(負) vmin=-1, vmax=1, # 色の範囲を固定 square=True, # 正方形のセル linewidths=0.5) # セルの間の線plt.title('変数間の相関関係')plt.tight_layout()plt.show()ヒートマップの読み方:
- 赤いセル — 強い正の相関(一緒に上がる)
- 青いセル — 強い負の相関(逆の動きをする)
- 白いセル — 相関なし(独立)
- 対角線 — 常に1.0(自分自身との相関)
実践的な解釈の注意点
相関 ≠ 因果
「アイスクリームの販売量」と「水難事故の件数」は相関係数が高いです。アイスクリームが人を水に沈めるわけではありません — どちらも「夏(気温)」という隠れた変数の影響です。
相関関係は**「一緒に動く」という事実だけを伝えます。「一方がもう一方を引き起こす」**という因果関係とは異なります。
非線形の関係
相関係数(ピアソンの相関係数)は直線的な関係のみを測定します。U字型の関係(例:ストレスが適度にあるとパフォーマンスが向上するが、多すぎると低下する)は、相関係数が0に近くなることがあります。常に散布図で目で確認してください。
pairplot — 散布図の行列
変数が少ない場合は、すべての組み合わせの散布図を格子状に表示するpairplotが便利です。
sns.pairplot(df[['salary', 'experience', 'age', 'projects']], diag_kind='kde')plt.show()- 対角線:各変数の分布(ヒストグラムまたはKDE)
- それ以外:すべての変数ペアの散布図
変数が5個以上ある場合、グラフが小さすぎて読みづらくなります。ヒートマップで全体の傾向を見て、興味のあるペアだけを散布図で拡大するのが効率的です。
重要なポイント
散布図は2つの変数の関係を、ヒートマップは複数の変数の相関関係を一目で示します。 相関係数は-1(完璧な負の相関)〜+1(完璧な正の相関)—0の場合は直線的な関係がありません。 相関 ≠ 因果 — 数値だけを見ず、常に散布図で確認してください。