統計で一番最初に勉強するのが、度数分布表とヒストグラムです。
Pythonで度数分布表とヒストグラムを描いてみましょう。
度数分布表のためのデータは、例題で学ぶ統計入門での演習問題で使われている、過去40日間の救急車出動回数模擬データを、excel ファイルにまとめたものを使っています。
Excel データの読み込みと整形
まずはデータを「pd.read_excel()」関数を使って読み込みます。
import pandas as pd
import numpy as np
ambulance_Dep = pd.read_excel("ambulance.xlsx")
ambulance_Dep
DataFrameをよく見ると、出動回数の前にインデックス番号「0」がついていますね。
このままでは後々処理がしにくいので、「出動回数」そのものを「.set_index()」関数を使って、インデックスにしてしまいます。
ambulance_Dep.set_index("Unnamed: 0", inplace=True)
ambulance_Dep
次に、DataFrameをSeriesに変換します。
ambulance_Dep_s = ambulance_Dep.loc['出動回数',:] ambulance_Dep_s
ambulance_Dep_s.describe()
度数分布表を作る
度数分布表を作るために必要なのが、階級の数をどうするかですが、それはスタージェスの公式で求められます。
これを実装してみると、以下の通り。
# 度数分布表を作る
# スタージェスの公式から階級の数を求める
from math import log
class_size = 1 + log(len(ambulance_Dep_s), 2)
print(class_size)
6.321928094887363
階級の数は6に設定することにしました。
次に階級の幅を求める必要がありますので、実装してみましょう。
# 階級の幅を求める
class_width = (max(ambulance_Dep_s) - min(ambulance_Dep_s))/6
print(class_width)
0.8333333333333334
ということで階級値を1に設定します。
階級の数、階級値が定まったらデータを各階級に振り分けていきます。
# 階級に振り分ける
# 各観測値を階級値にする
def frequency_distribution(ambulance_Dep_s, class_with):
cut_data = []
for colmun in ambulance_Dep_s:
cut = colmun // class_with
cut_data.append(cut)
return cut_data
#頻度を数える
frequency_data = pd.Series(frequency_distribution(ambulance_Dep_s, 1)).value_counts()
print(frequency_data)
度数分布表の並び順がバラバラなので、順番を整えてみます。
# インデックスでソートする
F_data = frequency_data.sort_index()
F_data
コードを書くにあたっては、こちらとこちらのサイトを参考にさせていただきました。
ヒストグラムで表示する
このデータをヒストグラムに落とし込んでみようと思いますが、その前にデータを反転させます。
もっと別なやり方があるかもしれませんが、まだ発見できてないのです。
「.T」を使ってDataFrameを反転させます。
ambulance_Dep_t = ambulance_Dep.T ambulance_Dep_t
ヒストグラムを表示してみましょう。
import matplotlib.pyplot as plt
ambulance_Dep_t['出動回数'].hist(bins=6)
plt.show()
いい感じのヒストグラムができましたね。
結果から読み取れることは、過去40日間で一日2回出動した日が14日あり、一回も出動していない4日間を除いてすべて出動があったということになります。
関連記事


コメント