【Python】相関関係のヒートマップを作る方法

Python
Image by Mudassar Iqbal from Pixabay
スポンサーリンク

Pandasの“background_gradient”を使えば、ヒートマップを表示できます。

corrでの相関係数の計算と組み合わせると便利です。

load_boston

sklearnのdatasetsにある”load_boston”をインポートしましょう。

import pandas as pd
from sklearn.datasets import load_boston

data = load_boston()
df = pd.DataFrame(data["data"], columns = data["feature_names"])
df["target"] = data["target"]
print(df.shape)
df.head()

“target”が予測したい列だとします。

自分で分析したいデータを持っている方はそれを使ってください。

相関係数

pandasの”corr”で相関係数を一瞬で計算してくれます。

df.corr()

このように各列の相関係数が出てきます。

background_gradient

pandasの“background_gradient”でヒートマップにしてみましょう。

df.corr().style.background_gradient()

値が大きいほど濃い青色になっていますね。

しかしこのままではわかりにくいので、ちょっと引数を設定しましょう。

df.corr().style.background_gradient(cmap = "bwr", vmin = -1, vmax = 1, axis = None)
cmap:カラーマップの種類
vmin:最小値
vmax:最大値
axis:色勾配をつける方向(Noneは方向なし)

相関係数は-1~+1までの値です。

なので上記設定にすると-1で真っ青、+1で真っ赤、0で真っ白になります。

“axis”はカラーマップの方向で、例えばデフォルト(axis = 0)が縦方向です。

Noneにしておけば縦横関係なくカラーマップしてくれます。

各列同士の相関ではなく、”目的変数(target)と特徴量との相関”だけ見たい場合は以下の通り。

df.corr()[["target"]].style.background_gradient(cmap = "bwr", vmin = -1, vmax = 1, axis = None)

このように”target”との関係だけ確認できます。

縦長でうっとうしいなら転置させる”T”を加えましょう。

df.corr()[["target"]].T.style.background_gradient(cmap = "bwr", vmin = -1, vmax = 1, axis = None)

seaborn

グラフ作成ライブラリの“seaborn”でもヒートマップを作ることができます。

import matplotlib.pyplot as plt
import seaborn as sns
sns.heatmap(df.corr())
plt.show()

“heatmap”でヒートマップが作れます。

()の中にデータを入れるだけでOKです。

こちらの方がコンパクトで見やすいかもしれませんね。

sns.heatmap(df.corr(), cmap = "bwr", vmin = -1, vmax = 1)
plt.show()

seabornでもvmin,vmax,cmapの設定ができます。

しかしaxisはなく、デフォルトで全方向です。

ちなみに”cmap”の候補を探したいなら、わざとエラーを起こすといいですよ。

sns.heatmap(df.corr(), cmap = "", vmin = -1, vmax = 1)
plt.show()

cmap = “”として何も入れないで実行するとエラーになります。

この中から適当に選択してお好みの色合いを探しましょう。

seabornでも”target”との相関だけ抜き取ることができます。

sns.heatmap(df.corr()[["target"]].T, cmap = "bwr", vmin = -1, vmax = 1)
plt.show()

まとめ:ヒートマップを使ってみよう

今回はヒートマップの作り方を解説しました。

慣れると1分で作れるので、データ分析の初手として使えるようになりたいですね。

コメント

タイトルとURLをコピーしました