こんにちは!スタビジ編集部です!
この記事では”箱ひげ図“について解説したあと、実際にPythonでデータを入力して箱ひげ図を描画していきます!
以下のYoutube動画でも解説していますのであわせてチェックしてみてください!
目次
箱ひげ図とは
“箱ひげ図“とはBox plotとも呼ばれ、ずばり「データがどのように分布されているか?」「値のばらつきはどのくらいか?」を図として分かりやすく可視化したものです!
箱ひげ図に含まれる情報としては、データの値が小さい方から、最小値・第一四分位数・第二四分位数(中央値)・第三四分位数・最大値の5つです!
それぞれについて説明していきます!
と、その前に”パーセンタイル“という概念が出てくるのでそれについて解説します!
〇〇パーセンタイルといったときには、データを小さい順に並べた時に最小値から数えて〇〇パーセントに位置する値を指します
例えば30パーセンタイルといった場合、その位置の値より小さい数が全データ数の30%であり、その位置を基準として上の値の数が全体の70%存在しているということになります!
それでは、各統計量について簡単に一つずつ紹介します。
- 最小値→全データの中で最も小さい値
- 第一四分位数→25パーセンタイル
- 第二四分位数→50パーセンタイル(別名:中央値!)
- 第三四分位数→75パーセンタイル
- 最大値→全データの中で最も大きい値
箱ひげ図ではこれらの情報が一挙にわかるので重宝されます!
箱ひげ図のグラフを改めて眺めてみると、ひと目でこれらの統計量を確認できることが分かりますね!
箱ひげ図のPythonライブラリMatplotlibでの書き方
本ステップで、実際に箱ひげ図を作ってみましょう!
今回は、ある学校の生徒の身長のデータが取れたとして、その身長データを箱ひげ図に起こしてみます!
まずはデータを入力します!
#ある学校の男子生徒10人の身長をdataに格納
data = [171, 185, 178, 167, 161, 154, 170, 177, 163, 175]
もちろん、データは直接コード上で入力するのではなく、引用データを用いることもできます!
※データの順番は昇順や降順に入力する必要はなく、適当でかまいません!
データが入力できましたので、さっそく箱ひげ図を作成します!
Matplotlibでは、pyplotのboxplot関数を使用していきます!
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.boxplot(data)
plt.show()
これだけで簡単に箱ひげ図を出力することができました!
Matplotlibについて詳しくは以下の記事にまとめていますので参考にしてみてください。
外れ値の検出
また、このboxplot関数では、外れ値(異常値)を自動的に検出してくれます!
ここでは詳しい計算は割愛しますが、第一四分位数や第三四分位数を利用し、幅を持たせて大きく外れている箇所は外れ値と判定してくれます!
実際に先程入力した身長データに250や100などの値を加えてもう一度箱ひげ図を作ってみましょう!(コード省略)
すると以下のように外れ値が箱ひげ図を逸脱した〇点としてプロットされているのが確認できます!
箱ひげ図を複数表示
箱ひげ図は、同じ画面上に2つ以上表示させることもできます!
今回は男子生徒と女子生徒の身長としてデータを格納した後にそれぞれの箱ひげ図を出してみます!
#ある学校の男子生徒10人,女子生徒10人の身長をdata1,data2に格納
data1 = [171, 185, 178, 167, 161, 154, 170, 177, 163, 175]
data2 = [166, 157, 161, 153, 156, 143, 150, 149, 169, 157]
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
#☟箱ひげ図1つの時との違いは,ここでデータを2個引用するだけ!☟
ax.boxplot((data1, data2))
plt.show()
出力結果です。
結果を見ると、男子生徒と女子生徒の身長には確かな差が存在していて、ばらつきや範囲については似ている分布を示していることが視覚的にわかります!
その他のカスタマイズ
箱ひげ図のその他の機能としては、平均値を表示・箱ひげ図を横向きに変更などがあります!
#箱ひげ図に平均値を表示(変更部分だけ記述)
ax.boxplot(data, showmeans=True)
#箱ひげ図を横向きに表示(変更部分だけ記述)
ax.boxplot(data, vert=False)
参考までにそれぞれの結果です!
箱ひげ図のPythonライブラリSeabornでの書き方
今度は、Seabornのライブラリを使って箱ひげ図を書いてみます!
Seabornに関しては以下にまとめているので、こちらも参考にしてみてください。
使用するデータは先程入力したものと一緒です。
seabornに含まれるboxplot関数を使用していきます!
#ある学校の男子生徒10人の身長をdataに格納
data = [171, 185, 178, 167, 161, 154, 170, 177, 163, 175]
import seaborn as sns
import matplotlib.pyplot as plt
sns.boxplot(data);
plt.show()
出力結果は以下になります
Matplotlibとは異なり、Seabornではデフォルトでは横向きで箱ひげ図が出力されるんですね!
一方で、
sns.boxplot(y = data);
plt.show()
のように軸を指定してあげると、向きを変えることができます!
ドットプロットの追加
ドットプロットを追加すると、実際のデータの点が表示されるのでより分布をイメージしやすくなるかもです!
sns.boxplot(y = data);
sns.swarmplot(y = data, color="r") # ドットプロットを追加(カラーは赤に指定)
plt.show()
以下、出力結果になります!
Seabornではその他にも、色を変えたりサイズを変えたり、複数の描画、平均値を表示することも可能です!
Matplotlibと比較しても、箱ひげ図作成までのコーディングがよりシンプルでとっても簡単!
これならとりあえず箱ひげ図を出してみようという気持ちになるね~!
箱ひげ図まとめ
本記事では、箱ひげ図が何なのかについて簡単にまとめた後で、実際にPythonで2つのやり方で箱ひげ図の描画を行いました!
MatplotlibとSeabornを使って、箱ひげ図を作りましたが2つで出来ることは実際ほとんど変わりません!
ただ、Seabornの方がよりシンプルで扱いやすく、最初から色が付いているのでサクっと出すにはこちらがおすすめです!
また、Matplotlibの方がコードが長くなることが多いですがその分、カスタマイズのしやすさが勝っている印象を受けます!
お好きな方で、実際に箱ひげ図を作ってデータの理解に活かしてもらえればと思います!
また、MatplotlibとSeaborn両者の違いをもっと知りたい方はこちらの記事もあわせてご活用ください!
箱ひげ図を書いてデータを眺めるのはデータ分析の工程において非常に大事であり、探索的データ分析(EDA)と呼ばれる工程での作業になります。また外れ値の見地にも使えるのでぜひ見てくださいね!
探索的データ分析から前処理からモデル構築までを網羅的に学べるスクール「スタアカ」を当メディアで運営しておりますので是非チェックしてみてください!
めちゃくちゃオススメです!