📋 このステップで学ぶこと
pairplot()の基本と活用法(全変数の関係性を一度に表示)
jointplot()による2変数の詳細分析
kdeplot()によるカーネル密度推定
データの分布パターンの発見方法
クラスタリング(グループ化)の視覚化
実践的なデータ探索テクニック
🎯 1. pairplot()の基本
pairplot()とは何か
pairplot()(ペアプロット) は、データセット内のすべての数値変数の組み合わせ を一度に可視化できる、非常に強力なツールです。
例えば、4つの変数があるデータセットでは、4×4=16個のグラフが自動的に生成されます。これにより、どの変数とどの変数に関係があるのか、一目で把握できます。
pairplot()は、EDA(探索的データ分析)の最初のステップ として最適です。データを分析する前に、まずpairplot()で全体像を把握するのがプロの定石です。
💡 身近な例で考えてみよう
健康診断の結果を想像してください。
身長、体重、血圧、コレステロール値など、複数の測定値があります。これらの関係を調べるとき、「身長と体重」「体重と血圧」「血圧とコレステロール」…と、1つずつグラフを作るのは大変ですよね。
pairplot()を使えば、すべての組み合わせを1行のコードで一度に可視化 できます。どの測定値とどの測定値が関連しているか、異常値がないか、一目でわかるのです。
🔍 pairplot()でわかること
発見できること
どう見えるか
ビジネスでの活用例
変数間の相関
散布図が右上がり/右下がり
広告費と売上の関係
分布の形
対角線のヒストグラム
顧客年齢の分布パターン
外れ値
他から離れた点
異常な取引の検出
クラスタ(塊)
複数の点の集まり
顧客セグメントの発見
pairplot()の構造を理解する
pairplot()が生成するグラフの構造を理解しておきましょう。これを理解すると、グラフの読み方がわかります。
【pairplot()の構造イメージ】
例:3つの変数(A、B、C)がある場合
変数A 変数B 変数C
┌──────────┬──────────┬──────────┐
変数A │ Aの分布 │ A vs B │ A vs C │
│(ヒストグラム)│(散布図) │(散布図) │
├──────────┼──────────┼──────────┤
変数B │ B vs A │ Bの分布 │ B vs C │
│(散布図) │(ヒストグラム)│(散布図) │
├──────────┼──────────┼──────────┤
変数C │ C vs A │ C vs B │ Cの分布 │
│(散布図) │(散布図) │(ヒストグラム)│
└──────────┴──────────┴──────────┘
【読み方のポイント】
・対角線 = 各変数の分布(ヒストグラムまたはKDE)
・対角線以外 = 2変数間の散布図
・左下と右上は同じ内容(対称)
💡 pairplot()の読み方のコツ
見る場所
何がわかるか
注目すべきパターン
対角線
各変数の分布
正規分布か、偏りがあるか、複数の山があるか
散布図(右上がり)
正の相関
一方が増えると他方も増える
散布図(右下がり)
負の相関
一方が増えると他方が減る
散布図(まばら)
相関なし
ランダムに散らばっている
📊 2. 基本的なpairplot()の作成
最もシンプルなpairplot()
まずは、最もシンプルなpairplot()を作成してみましょう。Seabornには練習用のデータセットが内蔵されており、その中の「iris(アヤメ)」データセットを使います。
irisデータセットには、3種類のアヤメの花の測定データ(がくの長さ・幅、花びらの長さ・幅)が含まれています。
【irisデータセットの内容】
sepal_length : がくの長さ(cm)
sepal_width : がくの幅(cm)
petal_length : 花びらの長さ(cm)
petal_width : 花びらの幅(cm)
species : 種類(setosa, versicolor, virginica)
合計150サンプル(各種類50サンプル)
以下のコードをGoogle Colabに入力して実行してください。たった数行で、すべての変数の関係性を可視化できます。
※ コードが横に長い場合は横スクロールできます
# ライブラリのインポート
# seaborn: 美しいグラフを簡単に作成できるライブラリ
# matplotlib.pyplot: グラフの表示や調整に使用
import seaborn as sns
import matplotlib.pyplot as plt
# グラフのスタイルを設定
# ‘whitegrid’: 白い背景にグリッド線を表示(見やすい)
sns.set_style(‘whitegrid’)
# カラーパレットを設定
# ‘colorblind’: 色覚バリアフリー対応の色
sns.set_palette(‘colorblind’)
# アヤメのデータセットを読み込む
# sns.load_dataset(): Seaborn内蔵のサンプルデータを読み込む
iris = sns.load_dataset(‘iris’)
# ペアプロットを作成
# irisデータの全数値変数の組み合わせを自動で可視化
sns.pairplot(iris)
# グラフ全体のタイトルを設定
# y=1.02: タイトルをグラフの上に少し離して配置
plt.suptitle(‘アヤメデータのペアプロット’,
fontsize=16, fontweight=’bold’, y=1.02)
# レイアウトを自動調整
plt.tight_layout()
# グラフを表示
plt.show()
💡 コードのポイント解説
コード
意味
なぜ必要か
sns.set_style('whitegrid')
背景を白、グリッド線を表示
値が読みやすくなる
sns.load_dataset('iris')
irisデータを読み込む
練習用データを取得
sns.pairplot(iris)
ペアプロットを作成
全変数の関係を可視化
plt.suptitle(..., y=1.02)
全体タイトルを上に配置
グラフと重ならないように
カテゴリ別に色分けする(hueパラメータ)
pairplot()の真価は、hue(ヒュー)パラメータ で色分けしたときに発揮されます。カテゴリ変数を指定すると、グループごとに異なる色で表示され、グループ間の違いが一目でわかる ようになります。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
# スタイル設定
sns.set_style(‘whitegrid’)
# データ読み込み
iris = sns.load_dataset(‘iris’)
# 種類(species)で色分けしたペアプロット
# hue=’species’: species列の値(setosa, versicolor, virginica)で色分け
# height=2.5: 各小グラフの高さ(インチ)
# aspect=1: 縦横比(1=正方形)
sns.pairplot(
iris,
hue=’species’, # この列の値で色分け
height=2.5, # 各グラフの高さ
aspect=1 # 縦横比
)
plt.suptitle(‘アヤメの種類別ペアプロット’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
✨ hueパラメータの威力
hue=’species’ を指定すると、3つの種類(setosa, versicolor, virginica)が自動で色分けされます。
このグラフから読み取れる重要な発見:
petal_length(花びらの長さ) とpetal_width(花びらの幅) で、3種類がきれいに分かれる
setosa(青) は他の2種類と完全に分離している
versicolor(オレンジ) とvirginica(緑) は少し重なっている
→ つまり、花びらのサイズを見れば、アヤメの種類を高精度で分類できる ことがわかります!
🎨 3. pairplot()のカスタマイズ
なぜカスタマイズが必要か
デフォルトのpairplot()でも十分有用ですが、カスタマイズすることでより詳細な分析 やより見やすい表示 が可能になります。
主なカスタマイズオプションを見ていきましょう。
📊 pairplot()の主なパラメータ
パラメータ
説明
よく使う値
hue
色分けに使う列名
‘species’, ‘category’など
diag_kind
対角線のグラフ種類
‘hist’(ヒストグラム), ‘kde’(密度曲線)
kind
散布図の種類
‘scatter’(散布図), ‘reg’(回帰直線付き)
vars
表示する変数のリスト
[‘var1’, ‘var2’, ‘var3’]
height
各グラフの高さ(インチ)
2〜4程度
aspect
縦横比
1(正方形)
対角線をKDE(カーネル密度推定)に変更
デフォルトでは対角線にヒストグラムが表示されますが、KDE(カーネル密度推定) に変更すると、より滑らかな分布曲線が表示されます。
KDEは、ヒストグラムのようなギザギザがなく、複数のグループの分布を重ねて比較するときに特に見やすい です。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset(‘iris’)
# 対角線をKDE(カーネル密度推定)に変更
# diag_kind=’kde’: 対角線にKDE(滑らかな分布曲線)を表示
# デフォルトは ‘hist’(ヒストグラム)
sns.pairplot(
iris,
hue=’species’,
diag_kind=’kde’, # 対角線をKDEに変更
height=2.5
)
plt.suptitle(‘KDEを使ったペアプロット’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
【ヒストグラムとKDEの違い】
ヒストグラム(diag_kind=’hist’)
┌─────────────┐
│ ▄█▄ │
│ ▄███▄ │ ← 棒グラフ(階段状)
│ ▄█████▄ │ ビン(区間)の幅で見え方が変わる
└─────────────┘
KDE(diag_kind=’kde’)
┌─────────────┐
│ ╱╲ │
│ ╱ ╲ │ ← 滑らかな曲線
│ ╱ ╲ │ 重ねて比較しやすい
└─────────────┘
【KDEを使う場面】
・複数グループの分布を比較したいとき
・滑らかな曲線で見やすくしたいとき
・プレゼンテーション用のきれいなグラフが必要なとき
散布図に回帰直線を追加
kind=’reg’ を指定すると、散布図に回帰直線(最もデータにフィットする直線)が追加されます。これにより、2変数間の関係性の強さと方向 がより明確になります。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset(‘iris’)
# 散布図に回帰直線を追加
# kind=’reg’: 各散布図に回帰直線と信頼区間を表示
sns.pairplot(
iris,
hue=’species’,
kind=’reg’, # 回帰直線を表示
height=2.5,
diag_kind=’kde’ # 対角線はKDE
)
plt.suptitle(‘回帰直線付きペアプロット’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
💡 回帰直線から読み取れること
直線の傾き(右上がり) :正の相関(一方が増えると他方も増える)
直線の傾き(右下がり) :負の相関(一方が増えると他方が減る)
直線の周りの帯(信頼区間) :予測の不確実性を示す。帯が狭いほど相関が強い
グループ別の傾き :グループによって関係性が異なるかどうかがわかる
特定の変数のみを表示
変数が多いデータセットでは、pairplot()のグラフ数が膨大になり、見にくくなります。vars パラメータを使って、表示する変数を絞り込むことができます。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset(‘iris’)
# 花びら(petal)の変数のみ表示
# vars: 表示したい列名のリストを指定
sns.pairplot(
iris,
hue=’species’,
vars=[‘petal_length’, ‘petal_width’], # この2変数のみ表示
height=4, # 変数が少ないので大きめに
aspect=1.2 # 横長に
)
plt.suptitle(‘花びらの変数のみ(ペアプロット)’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
⚠️ 変数が多いときの注意点
変数が10個以上あると、pairplot()は100個以上のグラフを生成します。これでは見にくく、処理にも時間がかかります。
対処法:
vars パラメータで重要な変数だけ選ぶ
事前に相関分析をして、関係がありそうな変数を絞り込む
次のセクションで学ぶjointplot() で、2変数ずつ詳しく見る
散布図のスタイルを調整
plot_kws とdiag_kws パラメータを使うと、散布図と対角線のグラフの見た目を細かく調整できます。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset(‘iris’)
# 散布図と対角線のスタイルを調整
sns.pairplot(
iris,
hue=’species’,
diag_kind=’kde’,
height=2.5,
# plot_kws: 散布図(非対角線)の設定
plot_kws={
‘alpha’: 0.6, # 透明度(重なりを見やすく)
‘s’: 50 # 点のサイズ
},
# diag_kws: 対角線(KDEまたはヒストグラム)の設定
diag_kws={
‘alpha’: 0.7 # 透明度
}
)
plt.suptitle(‘スタイル調整済みペアプロット’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
【よく使うスタイル調整オプション】
◆ plot_kws(散布図用)
alpha : 透明度(0〜1)。0.5〜0.7で重なりが見やすい
s : 点のサイズ。30〜100程度が見やすい
marker: マーカーの形。’o’(丸), ‘s’(四角)など
◆ diag_kws(対角線用)
alpha : 透明度。0.5〜0.8で重なりが見やすい
fill : Trueで塗りつぶし(KDEの場合)
bins : ヒストグラムの棒の数(histの場合)
🔬 4. jointplot()(2変数の詳細分析)
jointplot()とは何か
jointplot()(ジョイントプロット) は、2つの変数の関係 に焦点を当てて詳しく分析するためのグラフです。
pairplot()が「全体を俯瞰する」ツールなら、jointplot()は「特定の2変数を深掘りする」ツールです。中央に散布図、上と右にそれぞれの変数のヒストグラム(または密度曲線)が配置されます。
💡 使い分けのイメージ
地図アプリで考えてみましょう。
pairplot(): 日本全体の地図を見て、「どの地域が気になるか」を探す
jointplot(): 気になった地域(例:東京)にズームインして詳しく見る
通常は、まずpairplot()で全体を見てから、気になる2変数をjointplot()で詳しく調べます。
📊 jointplot()の構造
【jointplot()の構造イメージ】
┌────────────────┐
│ Y変数のヒストグラム │ ← 上部:Y変数の分布
│ (縦向き) │
┌─────────┼────────────────┤
│X変数の │ │
│ヒストグラム│ 散布図 │ ← 中央:2変数の関係
│(横向き) │ │
└─────────┴────────────────┘
↑
X変数の分布
【メリット】
・2変数の関係と、それぞれの分布を同時に確認できる
・相関係数やp値を表示できる
・回帰直線や密度推定など、様々な表示が可能
基本的なjointplot()
まずは、最もシンプルなjointplot()を作成してみましょう。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
# データ読み込み
iris = sns.load_dataset(‘iris’)
# 2変数の詳細分析
# x, y: 分析したい2つの変数を指定
# height: グラフ全体の高さ(インチ)
sns.jointplot(
data=iris,
x=’sepal_length’, # X軸:がくの長さ
y=’sepal_width’, # Y軸:がくの幅
height=8 # グラフのサイズ
)
plt.suptitle(‘がくの長さと幅の関係’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
jointplot()のkindパラメータ
jointplot()には、kind パラメータで表示方法を変えられます。用途に応じて使い分けましょう。
📊 jointplot()のkind一覧
kind
表示内容
適した用途
‘scatter’
通常の散布図(デフォルト)
一般的な関係性の確認
‘kde’
カーネル密度推定
データの密度分布を滑らかに表示
‘hex’
六角形ビン
大量データで点が重なるとき
‘reg’
回帰直線と信頼区間
相関関係の強さを確認
‘hist’
2次元ヒストグラム
データの集中箇所を確認
KDE(密度推定)版のjointplot()
kind=’kde’ を指定すると、散布図の代わりに等高線図 が表示されます。データがどこに集中しているかが、山の高さで表現されます。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset(‘iris’)
# KDE(密度推定)で表示
# kind=’kde’: 散布図の代わりに等高線図を表示
# fill=True: 等高線の内側を塗りつぶし
sns.jointplot(
data=iris,
x=’petal_length’,
y=’petal_width’,
kind=’kde’, # KDE密度推定
fill=True, # 塗りつぶしあり
height=8
)
plt.suptitle(‘花びらの長さと幅(KDE)’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
ヘキサゴナルビン(大量データ向け)
データが大量にあると、散布図の点が重なって真っ黒になってしまいます。kind=’hex’ を使うと、六角形のビン(区画)ごとにデータ数をカウントし、色の濃さで表現します。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
# tipsデータセット(レストランのチップデータ)
tips = sns.load_dataset(‘tips’)
# 六角形のビンで表示
# kind=’hex’: 六角形の区画でデータ数をカウント
# 色が濃いほどデータが多い
sns.jointplot(
data=tips,
x=’total_bill’, # X軸:合計金額
y=’tip’, # Y軸:チップ
kind=’hex’, # ヘキサゴナルビン
height=8
)
plt.suptitle(‘会計額とチップ(ヘキサゴナル)’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
回帰直線付きのjointplot()
kind=’reg’ を指定すると、散布図に回帰直線と信頼区間が追加されます。2変数間の相関の強さと方向 を視覚的に確認できます。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset(‘tips’)
# 回帰直線と信頼区間を表示
# kind=’reg’: 散布図に回帰分析の結果を追加
sns.jointplot(
data=tips,
x=’total_bill’,
y=’tip’,
kind=’reg’, # 回帰直線
height=8
)
plt.suptitle(‘会計額とチップ(回帰分析)’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
💡 jointplot()のkindの使い分け
状況
おすすめのkind
理由
まず関係性を見たい
‘scatter’
最もシンプルで直感的
相関の強さを確認したい
‘reg’
回帰直線で傾向がわかる
データが多い(1000件以上)
‘hex’
点の重なりを解消
密度の高い場所を知りたい
‘kde’
等高線で集中箇所がわかる
📈 5. kdeplot()(カーネル密度推定)
kdeplot()とは何か
kdeplot()(KDEプロット) は、データの分布を滑らかな曲線 で表現するグラフです。ヒストグラムと同じく「データがどこに多いか」を示しますが、より見やすく美しい曲線になります。
KDEは「Kernel Density Estimation(カーネル密度推定)」の略で、統計学の手法を使って、離散的なデータポイントから連続的な確率密度関数を推定します。
💡 ヒストグラムとKDEの違い
同じデータの分布を表すのに、なぜ2つの方法があるのでしょうか?
ヒストグラム: 棒グラフで表示。ビン(区間)の幅によって見え方が変わる。階段状でギザギザ。
KDE: 滑らかな曲線で表示。ビンの影響を受けない。複数の分布を重ねても見やすい。
特に複数のグループを比較するとき は、KDEの方が圧倒的に見やすいです。
📊 KDEのメリット
メリット
説明
滑らかで見やすい
ヒストグラムのようなギザギザがない
比較しやすい
複数の分布を重ねても見やすい
連続性を表現
データの連続的な性質を適切に表現
美しい
プレゼンテーションに最適
1次元のKDE(単一変数の分布)
まずは、1つの変数の分布を表示する1次元KDE を作成してみましょう。複数のグループを色分けして比較できます。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset(‘iris’)
# グラフのサイズを設定
plt.figure(figsize=(12, 6))
# 1次元KDE(滑らかな分布曲線)
# x: 分布を見たい変数
# hue: 色分けに使う変数
# fill: Trueで曲線の下を塗りつぶし
# alpha: 透明度(重なりを見やすくする)
sns.kdeplot(
data=iris,
x=’petal_length’,
hue=’species’, # 種類別に色分け
fill=True, # 塗りつぶしあり
alpha=0.5 # 50%の透明度
)
plt.title(‘花びらの長さの分布(種類別)’,
fontsize=16, fontweight=’bold’, pad=15)
plt.xlabel(‘花びらの長さ(cm)’, fontsize=12)
plt.ylabel(‘密度’, fontsize=12)
plt.legend(title=’種類’, fontsize=10)
plt.tight_layout()
plt.show()
💡 このグラフから読み取れること
3種類のアヤメの花びらの長さの分布が、色分けされた曲線で表示されます。
setosa(青) :花びらが最も短い(1〜2cm付近にピーク)
versicolor(オレンジ) :中程度の長さ(4〜5cm付近にピーク)
virginica(緑) :花びらが最も長い(5〜6cm付近にピーク)
3つの分布がほぼ重なっていないことから、花びらの長さだけで種類を高精度に分類できる ことがわかります。
2次元のKDE(2変数の密度分布)
2次元KDE は、2つの変数を同時に使って、等高線図 のような形でデータの密度を表示します。地図の等高線と同じで、線が密集している場所はデータが多い場所です。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset(‘iris’)
plt.figure(figsize=(10, 8))
# 2次元KDE(等高線図)
# x, y: 2つの変数を指定
# levels: 等高線の本数
sns.kdeplot(
data=iris,
x=’petal_length’,
y=’petal_width’,
hue=’species’,
fill=True, # 塗りつぶしあり
alpha=0.5,
levels=5 # 等高線を5段階で表示
)
plt.title(‘花びらの長さと幅の密度分布(種類別)’,
fontsize=16, fontweight=’bold’, pad=15)
plt.xlabel(‘花びらの長さ(cm)’, fontsize=12)
plt.ylabel(‘花びらの幅(cm)’, fontsize=12)
plt.legend(title=’種類’, fontsize=10)
plt.tight_layout()
plt.show()
【2次元KDEの読み方】
等高線の見方:
・線が密集している場所 = データが集中している場所
・色が濃い場所 = データ密度が高い(山の頂上)
・色が薄い場所 = データ密度が低い(山の裾野)
このグラフからわかること:
・setosa(青): 左下に集中(花びらが小さい)
・versicolor(オレンジ): 中央付近に集中
・virginica(緑): 右上に集中(花びらが大きい)
・3種類がほぼ重ならない = 花びらのサイズで分類可能
KDEの滑らかさを調整する
KDEが滑らかすぎると細かいパターンが見えなくなり、ギザギザしすぎるとノイズに惑わされます。bw_adjust パラメータで滑らかさを調整できます。
【bw_adjustの調整】
bw_adjust = 0.5 : 細かく(ギザギザ)
bw_adjust = 1.0 : デフォルト
bw_adjust = 2.0 : 滑らかに
【使い分け】
・データのばらつきを詳しく見たい → 0.5〜0.8
・全体の傾向を見たい → 1.0〜1.5
・プレゼン用にきれいにしたい → 1.5〜2.0
🎯 6. 実践例:総合的なデータ探索
penguinsデータセットの完全分析
ここまで学んだ技術を組み合わせて、penguins(ペンギン)データセット を総合的に分析してみましょう。
penguinsデータセットには、3種類のペンギン(アデリー、ヒゲ、ジェンツー)の体の測定データが含まれています。
【penguinsデータセットの内容】
bill_length_mm : くちばしの長さ(mm)
bill_depth_mm : くちばしの深さ(mm)
flipper_length_mm : ヒレの長さ(mm)
body_mass_g : 体重(g)
species : 種類(Adelie, Chinstrap, Gentoo)
island : 生息する島
sex : 性別
合計344サンプル
まず、pairplot()で全体を俯瞰します。以下のコードをGoogle Colabに入力して実行してください。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
# 警告メッセージを非表示にする
warnings.filterwarnings(‘ignore’)
# ペンギンデータセットを読み込む
penguins = sns.load_dataset(‘penguins’)
# 欠損値(データがない行)を削除
# dropna(): 欠損値がある行を削除
penguins = penguins.dropna()
# スタイル設定
sns.set_style(‘whitegrid’)
sns.set_palette(‘husl’) # カラフルなパレット
# ペアプロット(種類別に色分け)
pair = sns.pairplot(
penguins,
hue=’species’, # 種類で色分け
vars=[‘bill_length_mm’, ‘bill_depth_mm’,
‘flipper_length_mm’, ‘body_mass_g’], # 数値変数のみ
diag_kind=’kde’, # 対角線はKDE
height=2.5,
plot_kws={‘alpha’: 0.6, ‘s’: 50}, # 散布図の設定
diag_kws={‘alpha’: 0.7} # 対角線の設定
)
# 全体タイトル
pair.fig.suptitle(‘🐧 ペンギンデータの種類別分析’,
fontsize=18, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
💡 pairplot()から読み取れる発見
このペアプロットから、以下のことがわかります:
Gentoo(緑) は、ヒレの長さと体重が明らかに大きい
Adelie(青) は、くちばしが短いが深い(縦に長い形)
Chinstrap(オレンジ) は、くちばしの長さでAdelieと区別できる
flipper_length とbody_mass に強い正の相関がある
詳細分析:2変数の深掘り
pairplot()で興味深い関係を発見したら、jointplot()やkdeplot()で詳しく調べます。
※ コードが横に長い場合は横スクロールできます
import seaborn as sns
import matplotlib.pyplot as plt
penguins = sns.load_dataset(‘penguins’)
penguins = penguins.dropna()
# 2つのグラフを横に並べて表示
fig, axes = plt.subplots(1, 2, figsize=(16, 6))
# 左: くちばしの長さと深さの散布図(種類別)
for species in penguins[‘species’].unique():
# 種類ごとにデータを抽出
species_data = penguins[penguins[‘species’] == species]
axes[0].scatter(
species_data[‘bill_length_mm’],
species_data[‘bill_depth_mm’],
label=species,
alpha=0.6,
s=100
)
axes[0].set_xlabel(‘くちばしの長さ(mm)’, fontsize=12, fontweight=’bold’)
axes[0].set_ylabel(‘くちばしの深さ(mm)’, fontsize=12, fontweight=’bold’)
axes[0].set_title(‘くちばしの形状による種類分類’,
fontsize=14, fontweight=’bold’)
axes[0].legend(title=’種類’, fontsize=10)
axes[0].grid(True, alpha=0.3)
# 右: ヒレの長さの分布(KDE)
sns.kdeplot(
data=penguins,
x=’flipper_length_mm’,
hue=’species’,
fill=True,
alpha=0.5,
ax=axes[1]
)
axes[1].set_xlabel(‘ヒレの長さ(mm)’, fontsize=12, fontweight=’bold’)
axes[1].set_ylabel(‘密度’, fontsize=12, fontweight=’bold’)
axes[1].set_title(‘ヒレの長さの分布(種類別)’,
fontsize=14, fontweight=’bold’)
axes[1].legend(title=’種類’, fontsize=10)
# 全体タイトル
plt.suptitle(‘🐧 ペンギン種類の特徴分析’,
fontsize=18, fontweight=’bold’)
plt.tight_layout()
plt.show()
✅ データ探索の流れまとめ
プロのデータサイエンティストは、以下の流れでデータを探索します:
pairplot()で全体を俯瞰 :すべての変数の関係を一度に確認
興味深いパターンを発見 :相関、クラスタ、外れ値を探す
jointplot()で深掘り :気になる2変数を詳しく分析
kdeplot()で分布を比較 :グループ間の違いを確認
結論をまとめる :発見した知見をビジネスに活かす
📝 STEP 16 のまとめ
✅ このステップで学んだこと
トピック
重要ポイント
pairplot()
全変数の組み合わせを一度に表示。EDAの最初のステップ
hueパラメータ
カテゴリ別に色分け。グループの違いを発見
jointplot()
2変数を詳しく分析。散布図+ヒストグラム
kdeplot()
滑らかな分布曲線。複数グループの比較に最適
データ探索の流れ
全体俯瞰(pairplot)→ 深掘り(jointplot/kde)
💡 最重要ポイント
ペアプロットはデータ探索の最強ツール です。たった1行のコードで、すべての変数の関係性を一度に確認できます。
覚えておきたい3つのコマンド:
sns.pairplot(data, hue=’category’) :全体を俯瞰
sns.jointplot(data, x, y, kind=’…’) :2変数を深掘り
sns.kdeplot(data, x, hue=’category’) :分布を比較
次のステップでは、カテゴリカルデータの可視化 (棒グラフ、箱ひげ図、バイオリンプロットなど)を学びます!
📝 実践演習
演習 1
基礎
irisデータセットのペアプロットを作成してください(色分けなし)。
解答を見る
【解答例】
import seaborn as sns
import matplotlib.pyplot as plt
# スタイル設定
sns.set_style(‘whitegrid’)
# データ読み込み
iris = sns.load_dataset(‘iris’)
# シンプルなペアプロット(色分けなし)
sns.pairplot(iris)
plt.suptitle(‘irisデータのペアプロット’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
演習 2
応用
irisデータで、petal_lengthとpetal_widthのjointplotを作成してください(kind=’kde’、fill=True)。
解答を見る
【解答例】
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style(‘whitegrid’)
iris = sns.load_dataset(‘iris’)
# KDE版のjointplot
sns.jointplot(
data=iris,
x=’petal_length’,
y=’petal_width’,
kind=’kde’, # カーネル密度推定
fill=True, # 塗りつぶしあり
height=8
)
plt.suptitle(‘花びらの長さと幅(KDE)’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
演習 3
発展
penguinsデータで、種類別(hue=’species’)のペアプロットを作成し、対角線をKDE、散布図に透明度0.6を設定してください。
解答を見る
【解答例】
import seaborn as sns
import matplotlib.pyplot as plt
# スタイル設定
sns.set_style(‘whitegrid’)
sns.set_palette(‘husl’)
# データ読み込みと欠損値削除
penguins = sns.load_dataset(‘penguins’)
penguins = penguins.dropna()
# カスタマイズしたペアプロット
sns.pairplot(
penguins,
hue=’species’, # 種類で色分け
diag_kind=’kde’, # 対角線はKDE
height=2.5,
plot_kws={‘alpha’: 0.6} # 散布図の透明度
)
plt.suptitle(‘ペンギンデータの種類別ペアプロット’,
fontsize=16, fontweight=’bold’, y=1.02)
plt.tight_layout()
plt.show()
❓ よくある質問
Q1: pairplotの変数が多すぎて見づらいです。どうすればいいですか?
varsパラメータで表示する変数を絞りましょう。 例えば、vars=['var1', 'var2', 'var3']と指定すると、その3変数だけが表示されます。
また、事前に相関分析(STEP 15のヒートマップ)を行い、関係がありそうな変数を選ぶと効率的です。
Q2: jointplotとpairplotはどう使い分けるべきですか?
探索範囲で使い分けましょう。
全体を俯瞰したい → pairplot()
特定の2変数を詳しく分析したい → jointplot()
通常は、pairplot()で全体を見てから、気になる変数の組み合わせをjointplot()で詳しく調べます。
Q3: KDEが滑らかすぎて実際のデータの様子がわかりません。調整できますか?
bw_adjustパラメータで滑らかさを調整できます。
bw_adjust=0.5:細かく(ギザギザ)
bw_adjust=1.0:デフォルト
bw_adjust=2.0:滑らかに
データの特性に応じて調整しましょう。詳細を見たいときは値を小さく、全体傾向を見たいときは値を大きくします。
Q4: pairplot()の実行に時間がかかります。速くする方法はありますか?
以下の方法で高速化できます。
変数を絞る :varsパラメータで必要な変数だけ表示
サンプリング :data.sample(1000)でデータ数を減らす
diag_kind=’hist’を使う :KDEよりヒストグラムの方が高速
Q5: ペアプロットで発見したパターンから、どうやってビジネスに活かせばいいですか?
発見したパターンを「仮説」として検証し、行動につなげましょう。
例えば、「広告費と売上に強い正の相関がある」と発見したら:
仮説:広告費を増やせば売上が増える
検証:一部地域で広告費を増やして効果を測定
行動:効果があれば全国展開
ペアプロットは「発見」のツール。発見した後の「検証」と「行動」が重要です。
×
artnasekai
#artnasekai #学習メモ