
今回はヒートマップで相関関係を可視化する方法を解説します。
モデルにどの特徴を与えるか考えるきっかけになりますので、
ぜひ使ってみてください。

・テーブルデータでの特徴量同士の関係を調べたい
・モデルにどの特徴を入れるか検討したい
・特徴量エンジニアリングのきっかけを作りたい
こんな方におススメの記事です。
今回はヒートマップを作って特徴量同士の相関係数を可視化しましょう。
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)

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分で作れるので、データ分析の初手として使えるようになりたいですね。
コメント