PandasとSeabornでペアプロット図を簡単作成!データ関係性を一目で把握
データ分析において、複数の変数間の関係性を視覚的に把握することは非常に重要です。特に、データセット内のすべての数値変数間の散布図を一度に確認できる**ペアプロット図(散布図行列)**は、変数間の相関や分布、外れ値などを素早く発見するための強力なツールとなります。
Pythonのデータ分析ライブラリであるPandasと、統計的データ可視化ライブラリであるSeabornを組み合わせることで、このペアプロット図を驚くほど簡単に作成できます。この記事では、ペアプロット図の基本から、Seabornを使った作成方法、そして分析のポイントまでを丁寧に解説します。
ペアプロット図(散布図行列)とは?
ペアプロット図は、データセット内の各数値変数の組み合わせについて、以下の情報を一度に表示する可視化手法です。
非対角部分: 異なる変数間の散布図。これにより、2つの変数間の相関関係(正の相関、負の相関、無相関など)や、線形・非線形の関係性、クラスターの有無などを視覚的に確認できます。
対角部分: 各変数の分布を示す図(ヒストグラムやKDEプロットなど)。これにより、各変数の値の範囲、集中度、歪みなどを把握できます。
特に、データセットに初めて触れる際や、機械学習モデル構築前の探索的データ分析(EDA)において、変数間のパターンを見つけるのに非常に役立ちます。
PandasデータとSeaborn pairplot
でペアプロット図を作成
ペアプロット図の作成は、Pandas DataFrameとSeabornのpairplot
関数を使えば、わずか数行のコードで実現できます。
サンプルデータの準備
まずは、Seabornに標準で用意されている「Iris(アヤメ)」データセットを使って、ペアプロット図を作成してみましょう。このデータセットには、アヤメの種類(目的変数)と、がく片や花びらの長さ・幅(特徴量)が含まれています。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt # グラフ表示に必要
# Irisデータセットをロード
df_iris = sns.load_dataset('iris')
print("Irisデータセット (一部):\n", df_iris.head())
pairplot
の基本的な使い方
pairplot
関数にPandas DataFrameを渡すだけで、自動的に数値列間のペアプロット図が作成されます。
# ペアプロット図を作成
sns.pairplot(df_iris)
# グラフを表示
plt.suptitle('Irisデータセットのペアプロット図', y=1.02) # タイトル
plt.show()
上記のコードを実行すると、がく片と花びらの長さ・幅の全ての組み合わせで散布図が描かれ、対角線にはそれぞれの変数のヒストグラムが表示されます。これだけでも変数間の関係性を大まかに把握できます。
hue
引数: カテゴリで色分けする
データにカテゴリカルな変数(例:Irisデータセットのspecies
(種類))が含まれている場合、hue
引数にその列名を指定することで、カテゴリごとに色分けしてプロットできます。これは、異なるグループ間での変数間の関係性を比較する際に非常に強力です。
# 'species'で色分けしてペアプロット図を作成
sns.pairplot(df_iris, hue='species')
# グラフを表示
plt.suptitle('Irisデータセットのペアプロット図 (種類別)', y=1.02)
plt.show()
この色分けされたペアプロット図を見ると、アヤメの種類によってがく片や花びらのサイズに明確な違いがあることが一目で分かります。例えば、petal_length
とpetal_width
の散布図では、setosa
という種類が他の2種類とはっきり分離しているのが見て取れます。
pairplot
の応用とカスタマイズ
pairplot
は、さらに多くの引数を指定することで、表示をカスタマイズしたり、特定の分析要件に合わせたりすることができます。
対角部分のプロットタイプを変更する (diag_kind
)
対角部分のデフォルトはヒストグラムですが、diag_kind
引数を使ってKDE (Kernel Density Estimate) プロットに変更することもできます。KDEプロットは、データの分布をより滑らかな曲線で表現します。
# 対角部分をKDEプロットにしてペアプロット図を作成
sns.pairplot(df_iris, hue='species', diag_kind='kde')
# グラフを表示
plt.suptitle('Irisデータセットのペアプロット図 (KDE付き)', y=1.02)
plt.show()
使用する変数を選択する (vars
, x_vars
, y_vars
)
もし、データセットのすべての変数ではなく、特定の変数間の関係性だけを見たい場合は、vars
, x_vars
, y_vars
引数を使用します。
vars
: 指定した変数の組み合わせのみをプロットx_vars
,y_vars
: 指定したx軸、y軸の変数の組み合わせのみをプロット
# 'petal_length'と'petal_width'、'sepal_length'のみをプロット
sns.pairplot(df_iris, vars=['petal_length', 'petal_width', 'sepal_length'], hue='species')
# グラフを表示
plt.suptitle('選択した変数と種類別のペアプロット図', y=1.02)
plt.show()
ペアプロット図から読み取れること
ペアプロット図は、以下のような洞察を得るのに役立ちます。
相関関係: 散布図の点の集まり方から、正の相関(右上がりの傾向)、負の相関(右下がりの傾向)、無相関(点がランダムに散らばる)などを視覚的に判断できます。
データの分布: 対角部分のプロットから、データが正規分布に近いか、歪んでいるか、複数のピークがあるかなどを把握できます。
外れ値: 他のデータ点から大きく離れた点がないかを確認し、データクレンジングの必要性を判断できます。
グループ間の分離:
hue
で色分けした場合、異なるカテゴリのデータが散布図上で明確に分離しているかを確認し、その変数が分類タスクに有効かどうかを判断できます。
まとめ
PandasとSeabornのpairplot
関数を使うことで、データセット内の複数の数値変数間の関係性を網羅的に、かつ直感的に可視化するペアプロット図を簡単に作成できます。
sns.pairplot(df)
: DataFrameを渡すだけで基本のペアプロット図を作成。hue
引数: カテゴリ変数でデータを色分けし、グループ間の比較を容易にする。diag_kind
引数: 対角部分のプロットタイプ(ヒストグラムやKDE)を変更。vars
など: 特定の変数に焦点を当ててプロットを絞り込む。
ペアプロット図は、探索的データ分析の初期段階で非常に強力なツールとなります。ぜひ、ご自身のデータでこの便利な機能を活用し、新たな発見につなげてみてください!