
【第11回】Seabornでボックスプロット&バイオリンプロットをマスター〜 ペアプロットで多次元データを一気に可視化! 〜
こんにちは!
前回は、Seabornのヒストグラム・散布図・ヒートマップを使ってデータの分布や相関関係をチェックする方法を学びました。
今回は、カテゴリ × 数値の可視化や、多次元データの関係を一気に把握できるPairplotを紹介します。
「箱ひげ図(boxplot)ってどういうときに使うの?」 「バイオリンプロット(violinplot)って何が違うの?」 「pairplotで変数を全部並べると見やすいの?」
こんな疑問を持っている方は、ぜひコードを動かしながら確認してみてください!
▼ 目次
ボックスプロット (Boxplot) でグループ間の分布を比較
バイオリンプロット (Violinplot) で分布の形状を可視化
ペアプロット (Pairplot) で多次元データを一気に把握
サンプルコード:Boxplot / Violinplot / Pairplot を実践
まとめ & 次回予告
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()
コード解説
categories = np.random.choice(["A", "B", "C"], size=100)
ランダムにA/B/Cのカテゴリを割り当て、サンプルデータを生成。
Boxplot
sns.boxplot(data=df, x="category", y="price") でカテゴリごとの価格分布を箱ひげ図に。
Violinplot
inner="box" で内部にボックスプロットも表示。
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は多次元データを一括で可視化できる便利ツールで、実務でもよく使われています。
これらのプロットを使いこなせると、スクレイピングで集めたデータから「どんな分布傾向があるのか?」「どの変数に影響されやすいか?」など、多彩な切り口で洞察を得られるようになります。
ぜひコードを動かしてみて、自分のデータを分析する練習をしてみてください!
最後までお読みいただき、ありがとうございました。
次回もどうぞお楽しみに!