Up

記述統計量の計算

平均値、分散など

 

 

記述統計量の算出を行う。データが配列として与えられたときは、配列の計算として行うとスクリプトが簡潔になる。配列の計算について、このウェブサイトで簡単な例を扱った。Excelファイル、CSVファイルの読み込みの説明も、このウェブサイトで行った。不偏分散に関わるシミュレーションも行った。分散が定義できない母集団例もシミュレーションを示した。この場合は、不偏分散は無意味である。

 

 

気象庁ホームページのデータ

 

https://www.data.jma.go.jp/stats/etrn/view/monthly_s1.php?prec_no=44&block_no=47662&year=2025&month=&day=&view=a2#nheader

 

から、図1のExcelファイルを作成した。

 

図1 Excelファイルtokyo2025.xlsx

2025年の東京の気温(気象庁ホームページデータより作成)

 

図1のファイルを読み込み、グラフ描画と記述統計量の算出を行うスクリプトを、リスト1のように作成した。ファイルは、samplefiles.zipにまとめた。

 

 

リスト1 図1のデータの統計処理スクリプト

 

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import japanize_matplotlib

 

dframe = pd.read_excel('tokyo2025.xlsx')

var_names = dframe.keys()

data = dframe.values.T

print('data =\n', data)

 

plt.figure(figsize=(7,4))

c_dic = {'平均':'g', '最高':'orange', '最低':'aqua'}

plt.hlines(30, dframe[''][0], dframe[''][11], color='r', lw=1,

           label='30')

plt.hlines(0, dframe[''][0], dframe[''][11], color='b', lw=1,

           label='0')

for i in range(3):

    plt.plot(dframe[''], data[i+1], c=c_dic[var_names[i+1]],

             label=var_names[i+1])

plt.xticks(dframe['']) 

plt.xlabel('', fontsize=14)

plt.ylabel('気温℃', fontsize=14)

plt.legend(bbox_to_anchor=(1,1))

plt.title('東京の気温2025', fontsize=16)

plt.tight_layout()

plt.show()

 

means = np.mean(data[1:], axis=1)

print('means =', means)

maxs = np.max(data[1:], axis=1)

print('max =', maxs)

mins = np.min(data[1:], axis=1)

print('min =', mins)

percentiles = np.percentile(data[1:], [25, 50, 75], axis=1)

print('percentiles =\n', percentiles)

print(np.percentile(data[1], [25, 50, 75]))

Vars = np.var(data[1:], ddof=0, axis=1)

print('vars =', Vars)

uvars = np.var(data[1:], ddof=1, axis=1)

print('uvars =', uvars)

sds = np.std(data[1:], ddof=0, axis=1)

print('sds =', sds)

u_sds = np.std(data[1:], ddof=1, axis=1)

print('(u)sds =', u_sds)

 

 

 

図1のファイルをリスト1のスクリプトと同じフォルダに置いて、リスト1を実行すると、図2のグラフが表示される。

 

 

図2

 

図2のWindowを閉じると、統計量が算出される。

平均値は、

 

 

で与えられる値であるが、リスト1では次のコードで算出、出力されている。

 

means = np.mean(data[1:], axis=1)

print('means =', means)

 

出力結果は次のようである。

 

means = [17.29166667 28.03333333  8.9       ]

 

最大値と最小値は、

 

 

であるが、次のコードで算出、出力されている。

 

maxs = np.max(data[1:], axis=1)

print('max =', maxs)

mins = np.min(data[1:], axis=1)

print('min =', mins)

 

出力結果は、以下のようである。

 

max = [29.6 38.5 23.8]

min = [ 6.5 15.6 -1. ]

 

第1四分位数、第2四分位数(中央値)、第3四分位数は、25%タイル、50%タイル、75%タイルとして、次のコードで算出、出力している。

 

percentiles = np.percentile(data[1:], [25, 50, 75], axis=1)

print('percentiles =\n', percentiles)

print(np.percentile(data[1], [25, 50, 75]))

 

出力結果は、以下のようである。

 

percentiles =

 [[10.125 21.8    0.25 ]

 [17.05  28.55   7.4  ]

 [25.15  35.2   15.725]]

[10.125 17.05  25.15 ]

 

1行目が各変数の25%タイル、2行目が各変数の50%タイル(中央値)、3行目が75%タイルである。

4行目は、データdata[1]25%タイル、50%タイル、75%タイルが順に出力されている。

 

分散、標準偏差の式は、

 

 

である。は、delta degrees of freedomであるが、のときが分散、のときが不偏分散である。

分散、標準偏差を算出するコードは、以下のようである。

 

Vars = np.var(data[1:], ddof=0, axis=1)

print('vars =', Vars)

uvars = np.var(data[1:], ddof=1, axis=1)

print('uvars =', uvars)

sds = np.std(data[1:], ddof=0, axis=1)

print('sds =', sds)

u_sds = np.std(data[1:], ddof=1, axis=1)

print('(u)sds =', u_sds)

 

実行結果の出力は、以下のようである。

 

vars = [66.33243056 56.75555556 71.88166667]

uvars = [72.36265152 61.91515152 78.41636364]

sds = [8.14447239 7.53362831 8.47830565]

(u)sds = [8.50662398 7.86861815 8.85530144]

 

 

なお、不偏分散に関わるシミュレーションも行っている。

 

 

 

 

参考書

岡本安晴.データを使いこなすための統計入門――確率モデルに基づく統計学的分析の基礎と考え方を学ぶ.22世紀アート

 

 

 

Home