PandasとSeabornでヒートマップを簡単作成!データ相関とパターンを可視化
データ分析において、大量の数値データの中からパターンや関係性を素早く見つけ出すには、適切な可視化が不可欠です。特に、複数の変数間の相関関係や、データがどのように集中・分散しているかを示すには、**ヒートマップ(Heatmap)**が非常に強力なツールとなります。
Pythonのデータ分析ライブラリであるPandasと、統計的データ可視化ライブラリであるSeabornを組み合わせることで、このヒートマップを驚くほど簡単に作成できます。この記事では、ヒートマップの基本から、Seabornを使った作成方法、そして分析のポイントまでを丁寧に解説します。
ヒートマップとは?🔥
ヒートマップは、データの値を色の濃淡で表現するグラフです。グリッド状に並んだ各セルが数値に対応し、値が大きいほど濃い色、小さいほど薄い色(またはその逆)で塗られます。これにより、数値の大小関係や、全体的なパターンの傾向を直感的に把握できます。
主な用途としては、以下のようなケースが挙げられます。
-
相関行列の可視化: 複数の変数間の相関係数をヒートマップで表示することで、どの変数同士が強く関連しているかを一目で把握できます。
-
大規模データのパターン分析: Webサイトのアクセスログやセンサーデータなど、大量のデータの中から特定の時間帯や条件での集中度合いを見る。
-
クラスタリング結果の可視化: データポイントのグループ分け(クラスタリング)の結果を視覚的に確認する。
PandasデータとSeaborn heatmapでヒートマップを作成
ヒートマップの作成は、Pandas DataFrameとSeabornのheatmap関数を使えば、わずか数行のコードで実現できます。
サンプルデータの準備
まずは、ヒートマップを作成するためのサンプルデータとして、いくつかの数値変数を持つPandas DataFrameを用意しましょう。ここでは、擬似的な売上データとコストデータの相関を可視化する例を考えます。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt # グラフ表示に必要
import numpy as np
# サンプルDataFrameの作成
np.random.seed(42) # 再現性のためのシード値
data = {
'売上': np.random.rand(10) * 100,
'コスト': np.random.rand(10) * 80 + 10,
'広告費': np.random.rand(10) * 50,
'顧客満足度': np.random.rand(10) * 20 + 80
}
df = pd.DataFrame(data)
print("元のデータ (一部):\n", df.head())
heatmapの基本的な使い方:相関行列の可視化
ヒートマップの最も一般的な使い方は、DataFrameの相関行列を可視化することです。相関行列は、各変数間の相関係数を示します。
# データフレームの相関行列を計算
corr_matrix = df.corr()
print("\n相関行列:\n", corr_matrix)
# 相関行列をヒートマップで表示
plt.figure(figsize=(8, 6)) # グラフのサイズを設定
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('変数間の相関ヒートマップ')
plt.show()
上記のコードのポイントは以下の通りです。
-
df.corr(): DataFrameの各数値列間のピアソン相関係数を計算し、相関行列(DataFrame)を返します。 -
sns.heatmap(): ヒートマップを作成する関数です。-
corr_matrix: プロットするデータを指定します。 -
annot=True: 各セルに数値(相関係数)をアノテーションとして表示します。 -
cmap='coolwarm': カラーマップを指定します。'coolwarm'は正の相関を暖色系、負の相関を寒色系で表現し、相関の強さが色の濃淡で分かります。他にも'viridis','plasma','Blues'など多くの選択肢があります。 -
fmt=".2f": 表示される数値のフォーマットを小数点以下2桁に指定します。
-
このヒートマップから、「売上」と「コスト」には強い正の相関があることや、「顧客満足度」は他の変数とあまり相関がないことなどが直感的に読み取れます。
heatmapの応用とカスタマイズ
heatmap関数は、さらに多くの引数を指定することで、見た目をカスタマイズしたり、特定の分析要件に合わせたりすることができます。
カラーバーの表示制御 (cbar)
ヒートマップの右側にあるカラーバー(凡例)の表示/非表示を制御できます。
# カラーバーを非表示にする例
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='viridis', cbar=False)
plt.title('相関ヒートマップ (カラーバーなし)')
plt.show()
境界線を追加する (linewidths, linecolor)
セルの境界線を追加することで、視認性を高めることができます。
# 境界線を追加する例
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='Blues', linewidths=.5, linecolor='black')
plt.title('相関ヒートマップ (境界線あり)')
plt.show()
マスクで特定のセルを非表示にする (mask)
ヒートマップの特定のセル(例えば、相関行列の上半分や対角線上の1.0)を非表示にしたい場合に便利です。
# 相関行列の上半分をマスクする例
mask = np.triu(np.ones_like(corr_matrix, dtype=bool)) # 上三角行列のマスクを作成
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f", mask=mask)
plt.title('相関ヒートマップ (上半分をマスク)')
plt.show()
ヒートマップから読み取れること
ヒートマップは、以下のような洞察を得るのに役立ちます。
-
強い相関関係: 色が非常に濃い(または薄い)セルは、変数間に強い関係があることを示します。
-
負の相関:
coolwarmのようなカラーマップでは、負の相関が異なる色(例:青)で強調されます。 -
グループ化されたパターン: 行や列に沿って似たような色のパターンが見られる場合、それはデータの中に何らかの構造やグループが存在することを示唆します。
-
外れ値/異常値: 予期せぬ色が目立つセルがあれば、それはデータのエラーや特異な事象を示している可能性があります。
まとめ
PandasとSeabornのheatmap関数を使うことで、データセット内の数値間の関係性やパターンを、色の濃淡を通して直感的かつ効率的に可視化できます。
-
sns.heatmap(data): 基本的なヒートマップを作成。 -
annot=True: セルに値を表示。 -
cmap: カラーマップで色の表現を調整。 -
mask: 不要なセルを非表示にする。
ヒートマップは、探索的データ分析の強力な味方であり、データ間の隠れた洞察を発見する手助けとなります。ぜひ、ご自身のデータでこの便利な機能を活用し、新たな発見につなげてみてください!

