【Python】seabornを使ったヒートマップの書き方を解説

こんにちは!

今回は、Pythonでのヒートマップの書き方を紹介していきます。

ヒートマップとは何?というところから触れていくので、ヒートマップの特性を理解しつつ、実際に使ってみてください^^

おしゃれなヒートマップを描画して、データをより見やすいものにしていきましょう。

ヒートマップとは

ヒートマップは、行列のある二次元データのそれぞれの値を、色や濃淡で表現したグラフです。

ヒートマップの例(wikipediaより)

単純にヒートマップと言っても、その種類は実に多様です。ヒートマップと呼ばれるものには、以下のようなものが挙げられます。

  • Webページ上で、ユーザのクリックやスクロールなど、行動を可視化する(Webヒートマップ)
  • 地図上に、あるサービスの需要の高さを色や濃淡でリアルタイムに表示する
  • 二次元の表データを値ごとに色や濃淡で表現する(モザイクプロット)

特に今回は、モザイクプロットの書き方を紹介していきます。

使いどころ

生のデータをヒートマップで描画するという機会はあまりないと思います。ヒートマップを用いる場面としては、各特長量の相関関係を可視化するといった場合が挙げられます。

単一の尺度(スケール)で各特長量を比較したい場合などに、ヒートマップが有効と言えると思います。

ヒートマップ使用時の注意点

ヒートマップは色や濃淡でデータの特徴を示すため、配色が非常に重要になります。配色を間違えてしまうと、読み手のミスリードを招きかねません。

特に配色についての決まりはありませんが、常識的な色の選択が求められます(簡単なようで難しい?)

グラフを印刷する場合、インクによって輝度が変わってしまう可能性にも注意が必要とのことです。

まあ実際そこまで気にするケースは稀だと思いますが、色を使ってデータを表現するので、誤解が生じないような配慮は必要ということですね。

ヒートマップを描いていく

seabornを使う

今回は、Pythonライブラリであるseabornを使ってヒートマップを描画していきます。seabornはmatplotlibをベースに作られたライブラリで、グラフの描画に用いられます。

ざっくりとした印象ですが、seabornでは、matplotlibよりおしゃれなグラフが描ける気がします(処理速度などは差があるかも)。

https://seaborn.pydata.org/index.html

今回使用するデータ

今回も例によって、ボストンの住宅価格データを用います。

ただし今回は、そのデータセットの各特徴量の相関係数を算出したデータを用います。

import pandas as pd
from sklearn.datasets import load_boston


data = load_boston()
name = pd.DataFrame(data.target).rename(columns={0:"name"})
df = pd.DataFrame(data.data, columns=data.feature_names).merge(name, left_index=True, right_index=True)

df = pd.DataFrame(data.data, columns=data.feature_names)
#相関係数を算出
use_data = df.corr()

シンプルに描画する

まずはシンプルにヒートマップを描画していきます。

seabornをインポートしますが、“sns”としてインポートするのが慣習のようです。

import seaborn as sns

sns.heatmap(use_data)

こんな感じになります。明るい色になるほど、相関係数が高くなっています。

このように、一目でデータ全体の特徴を把握できるのが、ヒートマップの利点です。

それでは、もう少しヒートマップをカスタマイズしていきましょう^^

数値を表示する

上記のヒートマップで大体の値はわかりますが、やはり具体的な数字も併せて見たい場合もあります。

そんなときには、各タイルに数値を表示させます。数値を表示させるには、annot=True を引数に渡します。

import seaborn as sns

#見やすくするために、小数点第1位に丸めている
use_data = df.corr().round(1)
sns.heatmap(use_data, <span class="red">annot=True</span>)

こんな感じで数値を表示できるので、よりデータの詳細を把握しやすいですね。

色を変更する

次は、ヒートマップの色を変更します。

色の変更は、cmap=○○で行います。

○○に入れるワードは、以下のサイトを参考に入れてください。

https://matplotlib.org/2.0.2/users/colormaps.html

例えば、

import seaborn as sns

use_data = df.corr()
sns.heatmap(use_data, cmap="winter")

とか、

import seaborn as sns

use_data = df.corr()
sns.heatmap(use_data, cmap="prism")

みたいなヒートマップになります。ちなみにどれも同じデータで描画しています(こんなに見え方が変わってくるとは!)。

最大値、最小値を指定する

最後に、最大値、最小値を指定してみます。相関係数のデータを扱っているので、デフォルトでは-1~1までのデータです。

例えば、0~0.5までの範囲で色分けを行いたい場合を実践してみます。最小値の指定はvmin、最大値の指定はvmaxで指定します。

import seaborn as sns

use_data = df.corr()
sns.heatmap(use_data, vmin=0, vmax=0.5)

最小値以下は全て同じ色になります。同様に、最大値以上も全て同じ色になります。

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

まとめ

seabornを使って、ヒートマップを描く方法を紹介してきました。個人的には、様々な配色が使える点が非常に面白く感じます。

見やすい図を作るもよし、個性的でカラフルな図を作るもよし、場面に応じて使い分けてくださいね^^

ではでは👋