見出し画像

【第11回】Seabornでボックスプロット&バイオリンプロットをマスター〜 ペアプロットで多次元データを一気に可視化! 〜


こんにちは!
前回は、Seabornのヒストグラム・散布図・ヒートマップを使ってデータの分布や相関関係をチェックする方法を学びました。
今回は、カテゴリ × 数値の可視化や、多次元データの関係を一気に把握できるPairplotを紹介します。

「箱ひげ図(boxplot)ってどういうときに使うの?」 「バイオリンプロット(violinplot)って何が違うの?」 「pairplotで変数を全部並べると見やすいの?」

こんな疑問を持っている方は、ぜひコードを動かしながら確認してみてください!


▼ 目次

  1. ボックスプロット (Boxplot) でグループ間の分布を比較

  2. バイオリンプロット (Violinplot) で分布の形状を可視化

  3. ペアプロット (Pairplot) で多次元データを一気に把握

  4. サンプルコード:Boxplot / Violinplot / Pairplot を実践

  5. まとめ & 次回予告


1. ボックスプロット (Boxplot) でグループ間の分布を比較

1-1. ボックスプロットとは

  • 箱ひげ図 (Boxplot) は、データの四分位数(25%, 50%, 75%)や最大・最小外れ値を視覚化するのに優れたグラフ。

  • 中央の太い線が中央値(50%点)、箱の上下が第1四分位数(Q1)第3四分位数(Q3) などを表します。

  • 外れ値(ひげ部分より飛び出した点)を見つけやすいため、データの異常検知や分布の広がりを比較するのに有効。

1-2. Seabornでの実装

sns.boxplot(data=df, x="category", y="value")
  • x=カテゴリ列y=数値列 によってグループごとの箱ひげ図を横並びで表示。

  • グループ間の中央値の違いや、外れ値の多いグループなどが一目でわかる。


2. バイオリンプロット (Violinplot) で分布の形状を可視化

2-1. バイオリンプロットとは

  • Violinplot は、ボックスプロット+カーネル密度推定を掛け合わせたようなグラフ。

  • データ分布の“厚み”(どのあたりに多くのデータが集中しているか)を曲線で表すため、対称な楽器(バイオリン)の形に見えます。

  • ボックスプロットよりも、「分布の形状」が直感的にわかりやすいメリットがあります。

2-2. Seabornでの実装

sns.violinplot(data=df, x="category", y="value", inner="box")
  • inner="box" を指定すると、内部にミニ・ボックスプロットが描かれ、中央値や四分位数を確認可能。

  • split=True などのオプションで、2群を左右に分けて表示する高度な可視化もできます。


3. ペアプロット (Pairplot) で多次元データを一気に把握

3-1. ペアプロットとは

  • Pairplot は、DataFrame内の複数の数値列ペアで組み合わせ、散布図や分布図を一度に表示してくれる機能。

  • 対角線上には、各変数のヒストグラムKDEが表示され、オフダイアゴナルでは散布図が並ぶ。

  • 多次元データをまとめて俯瞰するのに便利で、どの変数がどの変数と強い関係を持つのかイメージをつかむ手助けになります。

3-2. Seabornでの実装

sns.pairplot(df, vars=["price", "sales", "rating"], hue="category", diag_kind="kde")
  • vars= で可視化したい数値列を指定。

  • hue="category" を指定すると、カテゴリ列で色分けされた散布図を描く。

  • diag_kind="kde" は対角線上をKDEプロットに。デフォルトはヒストグラム。


4. サンプルコード:Boxplot / Violinplot / Pairplot を実践

以下では、架空のデータを作って実際にプロットする例を紹介します。
(「category」「price」「sales」「rating」などの列があるDataFrameを仮定)

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

def advanced_seaborn_plots_demo():
    # サンプルデータ作成
    np.random.seed(42)
    categories = np.random.choice(["A", "B", "C"], size=100)
    prices = np.random.normal(50, 15, 100).round(1)
    sales = np.random.normal(200, 50, 100).round(0)
    rating = np.random.uniform(1, 5, 100).round(1)

    df = pd.DataFrame({
        "category": categories,
        "price": prices,
        "sales": sales,
        "rating": rating
    })

    sns.set_theme(style="whitegrid")

    # 1. Boxplot
    plt.figure()
    sns.boxplot(data=df, x="category", y="price")
    plt.title("Boxplot: Price by Category")
    plt.show()

    # 2. Violinplot
    plt.figure()
    sns.violinplot(data=df, x="category", y="rating", inner="box")
    plt.title("Violinplot: Rating by Category")
    plt.show()

    # 3. Pairplot
    sns.pairplot(df, vars=["price", "sales", "rating"], hue="category", diag_kind="kde")
    plt.show()

if __name__ == "__main__":
    advanced_seaborn_plots_demo()

コード解説

  1. categories = np.random.choice(["A", "B", "C"], size=100)

    • ランダムにA/B/Cのカテゴリを割り当て、サンプルデータを生成。

  2. Boxplot

    • sns.boxplot(data=df, x="category", y="price") でカテゴリごとの価格分布を箱ひげ図に。

  3. Violinplot

    • inner="box" で内部にボックスプロットも表示。

  4. Pairplot

    • vars=["price", "sales", "rating"] を指定し、hue="category" で色分け。対角線は diag_kind="kde" を適用。

実行してみると、カテゴリーごとの価格分布評価値の形状、そしてpriceとsales, ratingの関係などを一度に把握できるでしょう。


5. まとめ & 次回予告

  • Boxplot で外れ値や四分位範囲を把握し、グループ間の分布の違いを比較

  • Violinplot で「分布の形」そのものを視覚的にとらえる。バイオリンの厚みが密度を表す

  • Pairplot複数変数同士の散布図を一気に表示。対角線にヒストグラムやKDEを並べることで、各列の分布を俯瞰できる

  • カテゴリ (hue) を使った色分けを組み合わせると、さらに深い分析が可能

次回は、Seabornのさらに高度な機能として、FacetGrid や JointPlot, LMPlot など、データを細かく分割しながら可視化する手法を紹介予定です。
より大きなデータセットでも、ファセット(面)を使ってカテゴリ別にグラフを並べて分析できるようになり、エクスプロラトリーデータ分析がスムーズになります。


おわりに

今回は、Seabornが提供するBoxplot / Violinplot / Pairplotにフォーカスしました。

  • 「カテゴリーと数値の組み合わせ」 に強いBoxplot/Violinplotは、グループ間の違いや外れ値の確認に最適。

  • Pairplot多次元データを一括で可視化できる便利ツールで、実務でもよく使われています。

これらのプロットを使いこなせると、スクレイピングで集めたデータから「どんな分布傾向があるのか?」「どの変数に影響されやすいか?」など、多彩な切り口で洞察を得られるようになります。
ぜひコードを動かしてみて、自分のデータを分析する練習をしてみてください!

最後までお読みいただき、ありがとうございました。
次回もどうぞお楽しみに!

いいなと思ったら応援しよう!