度数分布表とヒストグラム

2018年11月17日 mathematics

データを統計学ではどの様に見て行くのかをまとめます。
また今回は実際にデータを可視化していきます。サンプルで使うデータとしてirisデータセットを使用します。

環境はcolaboratoryで行い、python、scikit-learn、pandasなどを用います。

データの準備

import pandas as pd
from sklearn import datasets

iris = datasets.load_iris()
pd.DataFrame(iris.data, columns=iris.feature_names)

実行すると以下の様なデータが取得できます。

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
5 5.4 3.9 1.7 0.4
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8

このデータはあやめの花のデータでそれぞれの変数は以下の様な意味です。

feature_name 意味
sepal length (cm) がく片の長さ
sepal width (cm) がく片の幅
petal length (cm) 花弁の長さ
petal width (cm) 花弁の幅

今回はこのデータを使って見ていきます。

データについて

まず、pandasで簡単にデータの詳細を確認できるので以下のコマンドで見ておきます。

df.describe()

実行結果はこんな感じ。

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.054000 3.758667 1.198667
std 0.828066 0.433594 1.764420 0.763161
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000

度数分布表とヒストグラム

度数分布表とヒストグラムは、取得したデータを可視化する手法の一つです。

度数分布表

度数分布表は、データの区間をN等分して、その区間にどのようにデータが分布しているかを示した表になります。
それではirisのデータの中のsepal length(がく片の長さ)で度数分布表を作ってみます。
区間は10等分することとします。

sepal_lengths = pd.Series(df['sepal length (cm)'])
cut = pd.cut(sepal_lengths, 10).value_counts()
cut.sort_index()

上記を実行すると以下の様な結果となります。

改めて表にしてみると以下の様になります。

範囲
(4.296, 4.66] 9
(4.66, 5.02] 23
(5.02, 5.38] 14
(5.38, 5.74] 27
(5.74, 6.1] 22
(6.1, 6.46] 20
(6.46, 6.82] 18
(6.82, 7.18] 6
(7.18, 7.54] 5
(7.54, 7.9] 6

前述のデータの詳細と比べると、最小値の約4.3から最大値の7.9までを10等分していて、そこにそれぞれどの様な分布になっているかが示されています。(3.6の幅ずつに分けられている)

ヒストグラム

ヒストグラムは度数分布表をプロットしたものとなります。

pandasでは簡単にヒストグラムを生成できるため、以下のコードでヒストグラムを表示してみます。

df.hist(bins=10)

結果は以下のような感じです。

上記のヒストグラムは df.hist(bins=10)でデータを10個の区間に分けています。
前述の度数分布表と見比べても、だいたい同じ様になっているかと思います。

まとめ

  • 度数分布表とヒストグラムはデータを可視化する基本的な手法
  • pythonとその周辺ライブラリをつかえば、簡単実装できる
  • ヒストグラムは探索的データ解析(EDA)の基礎中の基礎

参考

https://www.codexa.net/basic-exploratory-data-analysis-with-python/