箱ひげ図(ボックスプロット)の見方・意味・書き方を解説してみた

データ分析をするとき、データセットの中央値やばらつきを見るために有効なのが、箱ひげ図(ボックスプロット)です。

箱ひげ図の可視化

ライブラリをインポートします。

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

五人の身長、体重、ウエストのデータセットをDataFrameで作成します。

df = pd.DataFrame(
    {
        'height':[170, 166, 181, 162, 158],
        'weight':[59, 54, 62, 85, 59],
        'waist':[69, 68, 76, 90, 74],
        'sex':['m','f','m','m','f']
    }
)

箱ひげ図(ボックスプロット)をプロットする

fig = plt.figure()
ax = fig.add_subplot(111)

sns.boxplot(x='sex', y = 'height', data=df)
sns.pointplot(x='sex', y = 'height', data=df, color='g')

ax.set_ylabel('height')
ax.set_title("height by sex")

plt.tight_layout()

これが箱ひげ図です。(緑色の線、pointplotは、平均値とその信頼区間を示しています)

箱ひげ図には以下のような情報が縮約されています。

箱ひげ図の書き方の手順

  1. 中央値を求める = 50パーセンタイル、Q2(第二四分位数)
  2. 中央値よりも大きい値すべての中央値を求める = 75パーセンタイル、Q3(第三四分位数)
  3. 中央値よりも小さい値すべての中央値を求める = 25パーセンタイル、Q1(第一四分位数)
  4. Q3 – Q1 = IQR(四分位範囲)
  5. Q3 + (IQR * 1.5) よりも大きい値を外れ値とする
  6. Q1 – (IQR * 1.5) よりも小さい値を外れ値とする
  7. 外れ値を除いた最大値 = 100パーセンタイル、Q4
  8. 外れ値を除いた最小値 = 0パーセンタイル、Q0

つまり、

  • Q0: 0パーセンタイル。外れ値を除いた最小値
  • Q1: 25パーセンタイル(全データの中央値よりも小さなデータだけの中央値)
  • Q2: 50パーセンタイル。中央値
  • Q3: 75パーセンタイル(全データの中央値よりも大きなデータだけの中央値)
  • Q4: 100パーセンタイル。外れ値を除いた最大値

上記のようにすれば、「他の日と比べてめちゃくちゃ売上が多い / 少ない日」などを数値的にもとめて除外することができ、中央値やばらつき、どの範囲にデータが多いかなどの大枠がつかめます。

四分位範囲を用いた外れ値の除外は、機械学習の前処理でもよく使われるテクニックです。

ちなみにPythonでは、以下のようにパーセンタイルで外れ値を除外します。

q1 = df[col].quantile(0.25)
q3 = df[col].quantile(0.75)
iqr = q3 - q1
df[col] = df[col].clip(q1 - (iqr * 1.5),q3 + (iqr * 1.5),axis=1)

このように、四分位範囲で統計量を確認したり、外れ値の処理を行ったりできるため、箱ひげ図はデータサイエンスでよく使われるテクニックです。