PythonのNumPyライブラリには、入力データとなる多次元配列(ndarray)の平均・分散・標準偏差を求める関数が用意されている。今回は、入力データ\(x\),\(y\)の値(全20個)の合計・平均・分散・標準偏差を求めてみたので、そのサンプルプログラムを共有する。
なお、入力データを\(x_1\), \(x_2\), …, \(x_n\)とした場合の平均・分散・標準偏差は、以下の公式で求められる。
●平均
●分散
出所:統計WEB_分散
●標準偏差
出所:統計WEB_標準偏差
入力データの合計・平均は、NumPyのsum関数・mean関数を利用して算出できる。その実行結果は、以下の通り。
import numpy as np
def sum_input_data(input_data):
ret = 0
for tmp in range(input_data.shape[0]):
ret = ret + input_data[tmp]
return ret
# 入力データの読み込み
input_data = np.array([[33,352], [33,324], [34,338], [34,317], [35,341],
[35,360], [34,339], [32,329], [28,283], [35,372],
[33,342], [28,262], [32,328], [33,326], [35,354],
[30,294], [29,275], [32,336], [34,354], [35,368]])
# x座標、y座標の抜き出し
input_data_x = input_data[:, 0]
input_data_y = input_data[:, 1]
# x座標、y座標の合計を求める
print("x座標の合計(sum_input_data) : " + str(sum_input_data(input_data_x)))
print("x座標の合計(numpy_sum) : " + str(np.sum(input_data_x)))
print()
print("y座標の合計(sum_input_data) : " + str(sum_input_data(input_data_y)))
print("y座標の合計(numpy_sum) : " + str(np.sum(input_data_y)))
print()
# x座標、y座標の平均を求める
print("x座標の平均(x座標の合計÷要素数) : " + str(sum_input_data(input_data_x) / input_data_x.shape[0]))
print("x座標の平均(numpy_mean) : " + str(np.mean(input_data_x)))
print()
print("y座標の平均(y座標の合計÷要素数) : " + str(sum_input_data(input_data_y) / input_data_y.shape[0]))
print("y座標の平均(numpy_mean) : " + str(np.mean(input_data_y)))
また、入力データの分散・標準偏差は、NumPyのvar関数・std関数を利用して算出できる。その実行結果は、以下の通り。
import numpy as np
def variance_input_data(input_data):
ret = 0
input_data_cnt = input_data.shape[0]
input_data_mean = np.mean(input_data)
for tmp in range(input_data.shape[0]):
ret = ret + ((input_data[tmp] - input_data_mean) ** 2) / input_data_cnt
return ret
def sd_input_data(input_data):
return np.sqrt(variance_input_data(input_data))
# 入力データの読み込み
input_data = np.array([[33,352], [33,324], [34,338], [34,317], [35,341],
[35,360], [34,339], [32,329], [28,283], [35,372],
[33,342], [28,262], [32,328], [33,326], [35,354],
[30,294], [29,275], [32,336], [34,354], [35,368]])
# x座標、y座標の抜き出し
input_data_x = input_data[:, 0]
input_data_y = input_data[:, 1]
# x座標、y座標の分散を求める
print("x座標の分散(variance_input_data) : " + str(variance_input_data(input_data_x)))
print("x座標の分散(numpy_var) : " + str(np.var(input_data_x)))
print()
print("y座標の分散(variance_input_data) : " + str(variance_input_data(input_data_y)))
print("y座標の分散(numpy_var) : " + str(np.var(input_data_y)))
print()
# x座標、y座標の標準偏差を求める
print("x座標の標準偏差(sd_input_data) : " + str(sd_input_data(input_data_x)))
print("x座標の標準偏差(numpy_std) : " + str(np.std(input_data_x)))
print()
print("y座標の標準偏差(sd_input_data) : " + str(sd_input_data(input_data_y)))
print("y座標の標準偏差(numpy_std) : " + str(np.std(input_data_y)))
print() 
要点まとめ
- PythonのNumPyライブラリには、入力データとなる多次元配列(ndarray)の平均・分散・標準偏差を求める関数があり、平均はmean、分散はvar、標準偏差はstdという関数となる。








