PythonのPandasを使った箱ひげ図(Boxplot)の作成について、詳しく解説します。
箱ひげ図は、データの分布の概要(中央値・四分位数・外れ値)を視覚的に把握するのにとても役立つ可視化手法です。
目次
箱ひげ図とは?
箱ひげ図(boxplot)は、以下の統計量を視覚化します。
要素 | 説明 |
---|---|
中央値 | データの中央値(2分の1点) |
四分位範囲 | Q1(25%点)~Q3(75%点)の範囲。箱(box)として表示されます。 |
ひげ(whiskers) | 通常、Q1−1.5×IQR 〜 Q3+1.5×IQR の範囲に含まれるデータ。 |
外れ値 | 上記の範囲を超えるデータ(通常、点で表示) |
Pandas での箱ひげ図の描き方
Pandas の DataFrame.plot.box()
メソッドを使います。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成
np.random.seed(0)
data = {
'国語': np.random.normal(70, 10, 100),
'数学': np.random.normal(65, 15, 100),
'英語': np.random.normal(75, 12, 100),
}
df = pd.DataFrame(data)
# 基本的な箱ひげ図の描画
df.plot.box(title='教科別得点の分布')
plt.ylabel('得点')
plt.grid(True)
plt.show()
plot.box()
は、matplotlib
を内部的に使用して描画されます。
詳細なオプションとカスタマイズ
plot.box()
には多くの引数があります。
引数 | 説明 |
---|---|
by | 特定のカテゴリごとにグループ化(カテゴリ変数で箱ひげ図を分ける) |
column | 対象とするカラムの指定 |
grid | グリッド線の有無(デフォルト: True) |
vert | 垂直 or 水平(デフォルト: True) |
patch_artist | 色付きの箱(True にすると色を塗れる) |
figsize | グラフサイズの指定 (例: (10, 6) ) |
fontsize | 軸ラベルのフォントサイズ |
カテゴリごとに描画
# 性別列を追加
df['性別'] = ['男性']*50 + ['女性']*50
# 性別ごとの箱ひげ図
df[['国語', '数学', '英語', '性別']].plot.box(by='性別')
plt.title('性別ごとの教科得点分布')
plt.suptitle('') # 上部タイトルを消す
plt.xlabel('性別')
plt.ylabel('得点')
plt.grid(True)
plt.show()
外れ値の有無を調整する
# 外れ値(fliers)を非表示にした箱ひげ図
df[['国語', '数学', '英語']].plot.box(showfliers=False, title='外れ値非表示の箱ひげ図')
plt.ylabel('得点')
plt.grid(True)
plt.show()
横向きの箱ひげ図
# 横向き(水平)の箱ひげ図
df[['国語', '数学', '英語']].plot.box(vert=False, title='横向き箱ひげ図')
plt.xlabel('得点')
plt.grid(True)
plt.show()
複数条件でグループ化(Pandas + seaborn連携もおすすめ)
Pandasでも可能ですが、seaborn
のboxplot()
を使うとより細かくデザインできます。
import seaborn as sns
# 教科・得点の形にデータを整形(long-form)
df_melted = df.melt(id_vars='性別', var_name='教科', value_name='得点')
# Seabornでの描画
plt.figure(figsize=(10, 6))
sns.boxplot(data=df_melted, x='教科', y='得点', hue='性別')
plt.title('教科・性別ごとの得点分布(Seaborn)')
plt.grid(True)
plt.show()
箱ひげ図の読み解きポイント
- 箱が狭い → データが集中している(分散が小さい)
- 箱が広い → データがばらついている(分散が大きい)
- 中央値が箱の中心からずれている → 偏り(スキュー)がある可能性
- 外れ値が多い → 異常な観測値や分布の裾の重さ(heavy tail)がある
よくある注意点
注意点 | 解説 |
---|---|
欠損値(NaN)があるとエラーになる | 事前に dropna() で除去が必要な場合あり |
非数値カラムは自動的に除外される | boxplotは数値型データだけを対象とします |
軸ラベルが長いと重なって見にくい | plt.xticks(rotation=45) などで回転させて対応可能 |
まとめ:箱ひげ図の使いどころ
箱ひげ図は、平均だけでは見えない分布の「かたち」や異常値の存在を一目で把握できる非常に便利なツールです。
Pandasだけで手軽に描けますが、よりリッチな表現が必要な場合はSeabornの利用もおすすめです。
以上、PythonのPandasの箱ひげ図についてでした。
最後までお読みいただき、ありがとうございました。