データの分析や機械学習モデルを作成する際に,変数間の相関係数を知りたいということはよくあると思います.データの変数が多いとき,相関係数も多くなるので,一度に確認したい場合はヒートマップなどで可視化することが望まれます.
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ライブラリ」のカラーマップの名前で色の指定が可能です.
# 青で作成
sns.heatmap(corr, annot=True, cmap='Blues')
# パステルカラーで作成
sns.heatmap(corr, annot=True, cmap='Pastel1')
セルの間に線を描画することも可能です.
# セルの間に太さ3の線を描画
sns.heatmap(corr, annot=True, linewidths=3)
まとめ
この記事では,Pythonで相関行列を計算してヒートマップで可視化する方法を解説しました.
色や線以外にも,パラメータを指定することで設定の変更は可能なので,興味のある方はAPIリファレンスを確認してみてください.