Seaborn でヒートマップを作成する

Last update: 2017-06-01

[期間限定記事] オンライン学習サイト Udemy で Python とデータサイエンスを学ぼう

本ページでは、Python のデータ可視化ライブラリ、Seaborn (シーボーン) を使ってヒートマップを出力する方法を紹介します。

Seaborn には、ヒートマップの可視化を行うメソッドとして seaborn.heatmapseaborn.clustermap の 2 つが実装されています。seaborn.heatmap は通常のヒートマップを出力しますが、seaborn.clustermap は、クラスタ分析を行い、デンドログラムとともにヒートマップを出力します。

heatmap: ヒートマップの可視化

seaborn.heatmap メソッドは、色の濃淡や色相でデータの密度や値の分布を可視化します。

seaborn.heatmap の使い方

seaborn.heatmap の主要な引数

data ndarray 形式に変換可能な 2 次元のデータセット指定。Pandas のデータフレームを指定した場合、列名とインデックスが使われます。
vmin, vmax カラーマップと値の範囲を関連付ける必要がある際に最小値、最大値を指定します。指定しない場合、データや他の引数から推測されます。発散的 (diverging) なデータセット (0 を起点として正負に広がるデータ) と推測された場合、これらの値は無視される場合があります。(デフォルト値: None)
cmap Matplotlib のカラーマップまたは、オブジェクトを指定。値の大小をどの色に変換する際に用います。指定のない場合、cubehelix カラーマップ (値が連続量の場合) もしくは、RdBu_r カラーマップ (発散的なデータの場合) が利用されます。参考: color example code: colormaps_reference.py — Matplotlib 2.0.2 documentation (デフォルト値: None)
center colormap の 中心とする値。この値を指定すると、発散的なカラーマップを使うことを意味します。(デフォルト値: None)
robust True に設定し vminvmax が設定されていない場合、カラーマップが使う色とその値の範囲はロバストな推定を行い、極端に大きな値や小さい値の影響を受けないように計算されます。(デフォルト値: False)
annot True に設定すると、セルに値を出力します。行列などのデータセットを指定すると、任意の値を出力できます。(デフォルト値: None)
fmt annot=True に設定した場合、またはデータセットを指定した場合の出力フォーマットを文字列で指定します。(デフォルト値: ‘.2g’)
annot_kws annot=True に設定した場合、またはデータセットを指定した場合のオプションを Matplotlib のキーワードを設定します。参考:Text properties and layout — Matplotlib 2.0.2 documentation (デフォルト値: None)
linewidths 各セル間の線の太さを数値で指定。(デフォルト値: 0)
linecolor 各セル間の線の色。参考:matplotlib で指定可能な色の名前と一覧 (デフォルト値: ‘white’)
cbar True に設定すると、カラーバーを出力します。(デフォルト値: True)
cbar_kws カラーバーのオプションを Matplotlib のキーワードをで指定します。参考:colorbar — Matplotlib 2.0.2 documentation (デフォルト値: None)
cbar_ax カラーバーを出力する際の軸を Matplotlib の軸で指定します。(デフォルト値: None)
square True に設定すると、X 軸、Y 軸を正方形になるように調整し、軸を設定します。(デフォルト値: False)
ax 図を出力する際の軸を Matplotlib の軸で指定。(デフォルト値: None)
xticklabels True に設定すると、データフレームの列名を x 軸に出力します。False に設定すると、カラム名を出力しません。リストを指定すると、x 軸に任意のテキストを出力します。整数を指定すると、カラム名を出力しますが指定した数毎に出力します。(デフォルト値: True)
yticklabels True に設定すると、データフレームの列名を y 軸に出力します。False に設定すると、カラム名を出力しません。リストを指定すると、y 軸に任意のテキストを出力します。整数を指定すると、カラム名を出力しますが指定した数毎に出力します。(デフォルト値: True)
mask 値をマスクするセルを指定。True または False の 2 値で構成されるデータフレームまたは、行列で指定します。なお、欠損値は、自動的にマスクされます。(デフォルト値: None)
kwargs Matplotlib の ax.pcolormesh に渡すオプションをディクショナリ形式で指定。(デフォルト値: None)

グラフの出力例

一様乱数を生成し、ヒートマップを出力

heatmap01


スケールの最小値を 0.3、最大値を 1.0 に設定

heatmap02


平均 0, 標準偏差 1 の正規乱数を 10×12 個生成
(発散的なデータセットとみなされ、0 が中心となるカラーマップが採用されています)

heatmap03


旅客機の運行実績のデータを用いてヒートマップを出力

heatmap04


乗客数をテキストで出力

heatmap05


乗客数をテキストで小数点以下 1 桁まで出力

heatmap06


各セルの間に太さ 0.5 で線を描画

heatmap07


カラーマップを Reds (赤系の色のグラデーション) に指定して描画

heatmap08


カラースケールの値の中心が 250 になるように調整して描画

heatmap09


Y 軸のラベルを表示しない

heatmap10


X 軸のラベルを 3 つ (3 年) おきに出力

heatmap11


カラーバーを出力しない

heatmap12


March 1952 の値を隠す(マスクする)

heatmap13


CSV ファイルを読み込み、Pandas のデータフレームに加工、ヒートマップを出力

heatmap14


形が正方形になるように調整する

heatmap15

clustermap: 階層的クラスタリングの結果とヒートマップを同時に可視化

seaborn.clustermap メソッドは、階層的クラスタリングを行い、デンドログラム (樹形図) とともに、近い属性を持つカテゴリを近くになるよう色の濃淡や色相でデータの密度や値の分布を可視化します。

seaborn.clustermap の使い方

seaborn.clustermap の主要な引数

data クラスタリングに用いるデータセットを指定、NA を含むことはできません。
pivot_kws データが整理されたデータフレームの場合、キーワードを用いて、ピボットによるデータフレームを作ることができます。値はディクショナリ形式で指定します。(デフォルト値: None)
method クラスタを計算する際に用いる方法。詳細は、
scipy.cluster.hierarchy.linkage を参照。(デフォルト値: ‘average’)
metric クラスタリングに用いる距離行列を指定。詳細は、scipy.spatial.distance.pdist を参照。(デフォルト値: ‘euclidean’)
z_score Z スコア ( z = (x – mean ) / std ) を計算するかどうかを、0 (行), または 1 (列) で指定。これは、平均 0, 分散 1 になるように変換します。(デフォルト値: None)
standard_scale 標準化 (各列または各行の値と最小値の差を取り、それを最大値で割ること) を行うかどうかを、0 (行), または 1 (列) で指定。(デフォルト値: None)
figsize 作成する図の大きさを指定。整数 2 つのタプルで指定。(デフォルト値: None)
cbar_kws seaborn.heatmap の cbar_kws に渡すオプションを設定。 (カラーバーにラベルを追加する際などに利用) (デフォルト値: None)
row_cluster, col_cluster True に設定すると、行方向 (row) または、列方向 (col) でクラスタリングを行います。(デフォルト値: True)
row_linkage, col_linkage 予め計算された距離行列を Numpy の行列で指定する場合に利用。詳細は、
scipy.cluster.hierarchy.linkage を参照。(デフォルト値: None)
row_colors , col_colors 行または列のラベルの色をリストや Pandas のデータフレーム、系列で指定。例えば、グループ内のサンプルがどのようにクラスタリングされたかを確認する際に有用です。(デフォルト値: None)
mask 値をマスクするセルを指定。True または False の 2 値で構成されるデータフレームまたは、行列で指定します。なお、欠損値は、自動的にマスクされます。(デフォルト値: None)
kwargs Seaborn の sns.heatmap に渡すオプションをディクショナリ形式で指定。(デフォルト値: None)

グラフの出力例

データを読み込む


クラスタマップを作成

clustermap01


列方向でのクラスタリングは行わない (行方向のみクラスタリングを実施)

clustermap02


カラーマップを Blues に設定し、セル間に太さ0.5で線を引く

clustermap03


出力する図のサイズを 7×5 (単位: インチ) に設定

clustermap04


標準化(スケールを 0.0-1.0 の間に調整)を実施

clustermap05


行方向で平均 0, 分散 1 の分布になるよう変換

clustermap06


クラスタを計算する際のの条件として、単連結法 (method=”single”), 距離をコサイン距離によって算出

clustermap07


行方向での見出しとしての色を Set2 に設定

clustermap08

参考・サンプルコード一部出典:
seaborn.heatmap — seaborn 0.7.1 documentation
seaborn.clustermap — seaborn 0.7.1 documentation

See also