post Image
【プログラマーのための統計学】箱ひげ図

目次

プログラマーのための統計学 – 目次

箱ひげ図とは

箱ひげ図とは、データの分布やばらつきをわかりやすくするためのグラフです。
例えば、ある10人のテストの点数が以下だったとします。

No 数学の点数 国語の点数
1 74 81
2 65 62
3 40 32
4 62 67
5 85 41
6 67 50
7 82 85
8 71 70
9 60 67
10 99 97

このデータを元に、matplotlibを使って箱ひげ図を作ります。

%matplotlib inline
import matplotlib.pyplot as plt

# 数学の点数
math = [74, 65, 40, 62, 85, 67, 82, 71, 60, 99]
# 国語の点数
literature = [81, 62, 32, 67, 41, 50, 85, 70, 67, 97]
# 点数のタプル
points = (math, literature)

# 箱ひげ図
fig, ax = plt.subplots()

bp = ax.boxplot(points)
ax.set_xticklabels(['math', 'literature'])

plt.title('Box plot')
plt.xlabel('exams')
plt.ylabel('point')
# Y軸のメモリのrange
plt.ylim([0,100])
plt.grid()

# 描画
plt.show()

以下のようなグラフが出来上がります。

download (10).png

この青い部分を箱、縦の黒い線をヒゲと呼びます。
ヒゲは、最小値と最大値の間に引かれています。
箱は四分位数を表しています。

四分位数とは何かを、次の項で説明します。

四分位数とは

四分位数を理解するために必要な用語がいくつかあるので、順を追って説明します。

パーセンタイル

データを小さい順にならべたときに、頭から数えて、N%の位置にあるデータを、Nパーセンタイルと呼びます。
例えば、30パーセンタイルであれば、頭から30%の位置にあるデータのことになります。
0パーセンタイルは最小値、100パーセンタイルは最大値となります。

四分位数

本題の四分位数です。
四分位数とは、以下のパーセンタイルのことをいいます。
この3つの位置で区切ると、データの個数を4分割することができます。

パーセンタイル 別名
25パーセンタイル 第一四分位数
50パーセンタイル 第二四分位数(中央値)
75パーセンタイル 第三四分位数

四分位範囲(interquartile range / IQR)

以下の式で算出されるものを、四分位範囲、またはIQRと呼びます。

四分位範囲(IQR) = 75パーセンタイル(第三四分位数)-25パーセンタイル(第一四分位数)

箱ひげ図と四分位数

download (8).png

四分位数とは、データの個数で4分割したものなので、以下の区間には、同じデータ数が入っています。

  • 最小値 -> 第一四分位数
  • 第一四分位数 -> 第二四分位数
  • 第二四分位数 -> 第三四分位数
  • 第三四分位数 -> 最大値

しかし、上記のグラフでは、各区間の長さが異なっています。
これは、データにばらつきがあるということです。
第一四分位数 -> 第二四分位数の区間がとても短くなっていますが、これはテストの結果が40点前後の人が一番多く、偏っているということになります。

また、第一四分位数 -> 第二四分位数 -> 第三四分位数の、3つの区間を合わせると、全体の半分のデータ数となります。つまり、半数の人のテストの点数が、39点から70点くらいの間にあるということになります。

外れ値のある箱ひげ図

中央値や四分位数は、最大値、最小値が極端であったとしても、引きづられることはありませんが、最大値、最小値は当然引きづられます。
測定ミスなどによる異常データが原因で、極端なデータ存在している場合もあります。
そこで、極端な値がある場合は、外れ値とみなして、箱ひげ図を作成する方法を説明します。

前述の箱ひげ図の場合、最大値、最小値が極端であった場合、ヒゲが長くなります。
外れ値を考慮する箱ひげ図の場合は、ヒゲの長さは、最大値側、最小値側でそれぞれ、箱の1.5倍以下とし、それを超えるデータは、外れ値とみなします。

pythonのmatplotlibでは、外れ値を自動で検出してくれるようです。
以下のコードでは、国語の点数結果に170点、190点を追加してみました。
テストは100点満点なので、この2つは外れ値になるはずです。
グラフの目盛りは200までに増やしています。
これでグラフを作成してみます。

%matplotlib inline
import matplotlib.pyplot as plt

# 国語の点数
literature = [81, 62, 32, 67, 41, 50, 85, 100, 170, 190]
# 点数のタプル
points = (literature)

# 箱ひげ図
fig, ax = plt.subplots()

bp = ax.boxplot(points)
ax.set_xticklabels(['literature'])

plt.title('Box plot')
plt.xlabel('exams')
plt.ylabel('point')
# Y軸のメモリのrange
plt.ylim([0,200])
plt.grid()

# 描画
plt.show()

download (9).png

グラフの上部の方に、 + が2つできました。
この2つは、170点、190点が外れ値としてみなされたものです。
pythonのmatplotlibでは、特に外れ値を定義しなくても、このように自動で判別してくれるようなので、非常に便利ですね。

以上

参考


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。