Python

【5分で分かる】箱ひげ図のPythonでの書き方を学ぼう!

箱ひげ図
記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、データを理解する最初のステップとして欠かせない箱ひげ図(boxplot)のPythonでの書き方について徹底解説します!実際に手を動かしながら箱ひげ図をマスターしていきましょう!

こんにちは!スタビジ編集部です!

この記事では”箱ひげ図“について解説したあと、実際に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では、pyplotboxplot関数を使用していきます!

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.boxplot(data)
plt.show()

 

これだけで簡単に箱ひげ図を出力することができました!

Matplotlibについて詳しくは以下の記事にまとめていますので参考にしてみてください。

matplotlib
【5分で分かる】実データで学ぶPythonのMatplotlibの使い方まとめ!当サイト【スタビジ】の本記事では、Pythonでの可視化に非常によく利用されるMatplotlibの使い方について徹底的に見ていきます!よく使われるデータセットを使った可視化とデータコンペのデータを使った実践的な可視化を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
【5分で分かる】実データで学ぶPythonのSeabornの使い方まとめ! こんにちは! データサイエンティストのウマたん(@statistics1012)です! この記事では、Pythonで...

使用するデータは先程入力したものと一緒です。

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つのやり方で箱ひげ図の描画を行いました!

MatplotlibSeabornを使って、箱ひげ図を作りましたが2つで出来ることは実際ほとんど変わりません!

ただ、Seabornの方がよりシンプルで扱いやすく、最初から色が付いているのでサクっと出すにはこちらがおすすめです!

また、Matplotlibの方がコードが長くなることが多いですがその分、カスタマイズのしやすさが勝っている印象を受けます!

お好きな方で、実際に箱ひげ図を作ってデータの理解に活かしてもらえればと思います!

また、MatplotlibとSeaborn両者の違いをもっと知りたい方はこちらの記事もあわせてご活用ください!

Matplotlib Seaborn
実データで学ぶMatplotlibとSeabornの違いと描画方法!当サイト【スタビジ】の本記事では、Pythonでの可視化に非常によく利用されるMatplotlibとSeabornの違いについて見ていきます!それぞれの違いを理解するためにも実データを用いて可視化を行っていきますよ!MatplotlibとSeabornを使いこなしてデータの可視化を進めよう!...

箱ひげ図を書いてデータを眺めるのはデータ分析の工程において非常に大事であり、探索的データ分析(EDA)と呼ばれる工程での作業になります。また外れ値の見地にも使えるのでぜひ見てくださいね!

外れ値 アイキャッチ
外れ値の定義と外れ値の箱ひげ図や標準偏差での求め方について解説!当サイト【スタビジ】の本記事では、外れ値について解説してきます。外れ値とは「測定された値の中で、他の値とはかけ離れている値」と定義されています。分析において外れ値を処理しないと統計指標がゆがむ可能性が大きくなるため、対処方法を知っておく必要があります。今回は外れ値の定義と外れ値の対処方法について解説します!...
探索的データ分析
探索的データ分析(EDA)の手順と方法について実データ×Pythonで理解しよう!当サイト【スタビジ】の本記事では、データ分析において非常に重要な探索的データ分析(EDA)のステップと方法について解説していきます!地味に思えるかもしれませんが、非常に重要でEDAなしには精度の高いモデルは構築できませんし、意味のある意思決定はできません。実データを題材にPythonを使いながら手を動かしてEDAを学んでいきますよ。...

探索的データ分析から前処理からモデル構築までを網羅的に学べるスクール「スタアカ」を当メディアで運営しておりますので是非チェックしてみてください!

めちゃくちゃオススメです!

スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら