【Python】相関行列を計算してヒートマップで可視化する方法

データの分析や機械学習モデルを作成する際に,変数間の相関係数を知りたいということはよくあると思います.データの変数が多いとき,相関係数も多くなるので,一度に確認したい場合はヒートマップなどで可視化することが望まれます.

Pythonの「seabornライブラリ」は,簡単にヒートマップを作成することができ,相関行列の確認にも非常に役立ちます.

そこでこの記事では,Pythonで相関行列を計算してヒートマップで可視化する方法を解説します.

スポンサーリンク

実行環境

  • Windows 11
  • Python 3.8.3
  • Jupyter Notebook 6.0.3

相関係数

相関係数とは2つの項目の関係性の強さを-1から+1の範囲で表したものです.

+1に近いときは2つの項目には正の相関があるといい,-1に近いときは負の相関があるといいます.

相関係数の計算方法には以下のようなものがあります.

  • Pearsonの積率相関係数
  • Kendallの順位相関係数
  • Spearmanの順位相関係数

良く使用されるのは,2つの量的変数間の直線的関連の程度を表す,Pearsonの積率相関係数だと思いますが,すべての場合に使用できるわけではありません.

例えば,アンケートの5段階評価やテスト結果の順位などの相関を知りたい時は,順位相関係数を使う必要があります.

データの作成

この記事では,5教科のテストを想定したデータを作成し,相関行列の計算をします.

まずは,必要なライブラリをインポートします.

# 必要なライブラリのインポート
import numpy as np
import pandas as pd
import seaborn as sns

生徒10人分,5教科のテストの点数をランダムに生成し,データフレームを作成します.

# 乱数シードを0に設定
np.random.seed(0)
# 10行5列の配列を生成
arr = np.random.randint(0,101,50).reshape(10, 5)
# データフレームの作成
col = ['国語', '数学', '社会', '理科', '英語']
df = pd.DataFrame(arr, columns=col)
df

相関行列の計算

作成したデータフレームに関して,各列の間の相関係数を算出します.

テストの点数は比例尺度の変数なので,ピアソンの積率相関係数を使用します.

「corr()メソッド」はデフォルトがピアソンの積率相関係数なので,以下のコードを実行します.

# 相関行列の算出
df.corr()

ヒートマップの作成

先ほど計算した,相関行列のヒートマップを作成します.

# 相関行列の算出
corr = df.corr()
# ヒートマップの作成
sns.heatmap(corr)

色だけで分かりにくい場合は,「annot=True」を追加することで,相関係数を表示できます.

sns.heatmap(corr, annot=True)

このように,ヒートマップで可視化することで,英語と理科の相関係数が高いことが一目でわかります.

色を変えたい場合は「cmap」を指定します.「matplotlibライブラリ」のカラーマップの名前で色の指定が可能です.

Choosing Colormaps in Matplotlib — Matplotlib 3.7.1 documentation
# 青で作成
sns.heatmap(corr, annot=True, cmap='Blues')
# パステルカラーで作成
sns.heatmap(corr, annot=True, cmap='Pastel1')

セルの間に線を描画することも可能です.

# セルの間に太さ3の線を描画
sns.heatmap(corr, annot=True, linewidths=3)

まとめ

この記事では,Pythonで相関行列を計算してヒートマップで可視化する方法を解説しました.

色や線以外にも,パラメータを指定することで設定の変更は可能なので,興味のある方はAPIリファレンスを確認してみてください.

seaborn.heatmap — seaborn 0.12.2 documentation