Python を使った度数分布表とヒストグラムの作成

統計

データ分析をするうえで重要なのが、データがどのような状態なのかを確認することです。

そのための方法として一般的なのが、度数分布表とヒストグラムです。

この記事では、Pythonを使って

  • Pythonで度数分布表とヒストグラムを作成する方法
  • Matplotlibを用いた数値データのヒストグラム表示方法
  • Pythonで累積度数分布表を計算し、ヒストグラムに反映させる方法

について解説していきます。

プログラミング、機械学習など、無料体験はこちら↓↓↓

Pythonで度数分布表とヒストグラムを作成する方法

Pythonを使って度数分布表を作成するために必要なものは、データと同数分布表を書くために必要なモジュールになります。

必要なモジュールとデータセットの読み込み

まずデータですが、データは「例題で学ぶ統計入門」の救急車の出動回数を使ってみました。

基本的にデータは何でもいいので、お近くの手に入りやすいデータを使ってください。

度数分布表を書くために必要なモジュールが以下の二つになります。

  • pandas: 数表および時系列データ解析用
  • numpy: 数値計算

では早速データを読み込んでみましょう。

#
# 必要なモジュールの読込
#

import pandas as pd
import numpy as np

# データファイルの読込
ambulance_Dep = pd.read_excel("救急車出動回数.xlsx")
ambulance_Dep.head() # 先頭の5行だけ表示

次に後々便利なので、読み込んだデータの列をset_index()関数を使って、「年月日」の列をインデックスにします。

ambulance_Dep = ambulance_Dep.set_index('年月日') 
ambulance_Dep.head()

要約統計量を取得

データの内容がどうなっているのか知りたいので、describe()関数を使って、救急車出動回数の基本統計量を見てみます。

ambulance.describe()

    • count 40: サンプルサイズ40日間
    • mean 2.05: 期間中の一日の平均出動数
    • std 1.299: 標準偏差
    • min 0: 一日の最小出動数
    • max 5: 一日の最大出動数

このように、基本的なデータの情報を知ることができます。

度数分布表の作成

スタージェスの公式から階級の数を求める

度数分布表を作る際に、一つの列にサンプルが何個入るかを決める階級の数を決める必要があります。

そんなときに便利なのが、スタージェスの公式です。

スタージェスの公式:

  • は階級の数です。
  • はサンプルサイズ(観測値の数)です。

この公式をデータに当てはめる前に、DataFrameの数値をndarrayオブジェクトに変換します。

dispatch = np.array(ambulance_Dep['出動回数'])

ここからこちらのページを参考に、度数分布表までを一気に作成します。

以下のコードを実行すると、

def frequency_distribution(data, class_width=None):
  data = np.asarray(data)
  if class_width is None:
    class_size = 1 + int(np.log2(data.size).round())
    class_width = round((data.max() - data.min())/class_size)

  bins = np.arange(0, data.max() + class_width + 1, class_width)
  hist = np.histogram(data, bins)[0]
  cumsum = hist.cumsum()

  return pd.DataFrame({'階級値': (bins[1:] + bins[:-1])/2,
  '度数': hist,
  '累積度数': cumsum,
  '相対度数':hist/cumsum[-1],
  '累積相対度数':cumsum/cumsum[-1]},
  index=pd.Index([f'{bins[i]}以上{bins[i+1]}未満' 
          for i in range(hist.size)], 
          name='階級'))

frequency_distribution(dispatch)

この度数分布表からヒストグラムを描画してみます。

必要なモジュールは描画モジュールmatplotlib です。

import matplotlib.pyplot as plt # 描画モジュールのインポート
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.hist(dispatch, bins = 6, histtype = 'barstacked', ec = 'black')
plt.show()

以上度数分布表からヒストグラムの描画までをについて書いてみました。

プログラミング、機械学習など、無料体験はこちら↓↓↓

コメント

タイトルとURLをコピーしました