STEP 16:ペアプロットと分布の視覚化

🔍 STEP 16: ペアプロットと分布の視覚化

複数の変数を一度に比較できる、便利なペアプロットをマスターしよう!

📋 このステップで学ぶこと

  • 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_kwsdiag_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_lengthbody_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()
✅ データ探索の流れまとめ

プロのデータサイエンティストは、以下の流れでデータを探索します:

  1. pairplot()で全体を俯瞰:すべての変数の関係を一度に確認
  2. 興味深いパターンを発見:相関、クラスタ、外れ値を探す
  3. jointplot()で深掘り:気になる2変数を詳しく分析
  4. kdeplot()で分布を比較:グループ間の違いを確認
  5. 結論をまとめる:発見した知見をビジネスに活かす

📝 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: ペアプロットで発見したパターンから、どうやってビジネスに活かせばいいですか?

発見したパターンを「仮説」として検証し、行動につなげましょう。

例えば、「広告費と売上に強い正の相関がある」と発見したら:

  • 仮説:広告費を増やせば売上が増える
  • 検証:一部地域で広告費を増やして効果を測定
  • 行動:効果があれば全国展開

ペアプロットは「発見」のツール。発見した後の「検証」と「行動」が重要です。

📝

学習メモ

データ可視化マスター - Step 16

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE