PandasとSeabornでヒートマップを簡単作成!データ相関とパターンを可視化


 

データ分析において、大量の数値データの中からパターンや関係性を素早く見つけ出すには、適切な可視化が不可欠です。特に、複数の変数間の相関関係や、データがどのように集中・分散しているかを示すには、**ヒートマップ(Heatmap)**が非常に強力なツールとなります。

Pythonのデータ分析ライブラリであるPandasと、統計的データ可視化ライブラリであるSeabornを組み合わせることで、このヒートマップを驚くほど簡単に作成できます。この記事では、ヒートマップの基本から、Seabornを使った作成方法、そして分析のポイントまでを丁寧に解説します。


 

ヒートマップとは?🔥

 

ヒートマップは、データの値を色の濃淡で表現するグラフです。グリッド状に並んだ各セルが数値に対応し、値が大きいほど濃い色、小さいほど薄い色(またはその逆)で塗られます。これにより、数値の大小関係や、全体的なパターンの傾向を直感的に把握できます。

主な用途としては、以下のようなケースが挙げられます。

  • 相関行列の可視化: 複数の変数間の相関係数をヒートマップで表示することで、どの変数同士が強く関連しているかを一目で把握できます。

  • 大規模データのパターン分析: Webサイトのアクセスログやセンサーデータなど、大量のデータの中から特定の時間帯や条件での集中度合いを見る。

  • クラスタリング結果の可視化: データポイントのグループ分け(クラスタリング)の結果を視覚的に確認する。


 

PandasデータとSeaborn heatmapでヒートマップを作成

 

ヒートマップの作成は、Pandas DataFrameとSeabornのheatmap関数を使えば、わずか数行のコードで実現できます。

 

サンプルデータの準備

 

まずは、ヒートマップを作成するためのサンプルデータとして、いくつかの数値変数を持つPandas DataFrameを用意しましょう。ここでは、擬似的な売上データとコストデータの相関を可視化する例を考えます。

Python
 
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の相関行列を可視化することです。相関行列は、各変数間の相関係数を示します。

Python
 
# データフレームの相関行列を計算
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)

 

ヒートマップの右側にあるカラーバー(凡例)の表示/非表示を制御できます。

Python
 
# カラーバーを非表示にする例
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='viridis', cbar=False)
plt.title('相関ヒートマップ (カラーバーなし)')
plt.show()

 

境界線を追加する (linewidths, linecolor)

 

セルの境界線を追加することで、視認性を高めることができます。

Python
 
# 境界線を追加する例
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='Blues', linewidths=.5, linecolor='black')
plt.title('相関ヒートマップ (境界線あり)')
plt.show()

 

マスクで特定のセルを非表示にする (mask)

 

ヒートマップの特定のセル(例えば、相関行列の上半分や対角線上の1.0)を非表示にしたい場合に便利です。

Python
 
# 相関行列の上半分をマスクする例
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: 不要なセルを非表示にする。

ヒートマップは、探索的データ分析の強力な味方であり、データ間の隠れた洞察を発見する手助けとなります。ぜひ、ご自身のデータでこの便利な機能を活用し、新たな発見につなげてみてください!