箱ひげ図(ボックスプロット)の見方・意味・書き方を解説してみた
データ分析をするとき、データセットの中央値やばらつきを見るために有効なのが、箱ひげ図(ボックスプロット)です。
箱ひげ図の可視化
ライブラリをインポートします。
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は、平均値とその信頼区間を示しています)
箱ひげ図には以下のような情報が縮約されています。
箱ひげ図の書き方の手順
- 中央値を求める = 50パーセンタイル、Q2(第二四分位数)
- 中央値よりも大きい値すべての中央値を求める = 75パーセンタイル、Q3(第三四分位数)
- 中央値よりも小さい値すべての中央値を求める = 25パーセンタイル、Q1(第一四分位数)
- Q3 - Q1 = IQR(四分位範囲)
- Q3 + (IQR * 1.5) よりも大きい値を外れ値とする
- Q1 - (IQR * 1.5) よりも小さい値を外れ値とする
- 外れ値を除いた最大値 = 100パーセンタイル、Q4
- 外れ値を除いた最小値 = 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)
このように、四分位範囲で統計量を確認したり、外れ値の処理を行ったりできるため、箱ひげ図はデータサイエンスでよく使われるテクニックです。