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