記述統計量の計算
平均値、分散など
記述統計量の算出を行う。データが配列として与えられたときは、配列の計算として行うとスクリプトが簡潔になる。配列の計算について、このウェブサイトで簡単な例を扱った。Excelファイル、CSVファイルの読み込みの説明も、このウェブサイトで行った。不偏分散に関わるシミュレーションも行った。分散が定義できない母集団の例もシミュレーションを示した。この場合は、不偏分散は無意味である。
気象庁ホームページのデータ
から、図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世紀アート