PythonのPandasの箱ひげ図について

Python,イメージ

AI実装検定のご案内

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でも可能ですが、seabornboxplot()を使うとより細かくデザインできます。

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の箱ひげ図についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次