PythonのNumPyライブラリには、入力データとなる多次元配列(ndarray)の平均・分散・標準偏差を求める関数が用意されている。今回は、入力データ\(x\),\(y\)の値(全20個)の合計・平均・分散・標準偏差を求めてみたので、そのサンプルプログラムを共有する。
なお、入力データを\(x_1\), \(x_2\), …, \(x_n\)とした場合の平均・分散・標準偏差は、以下の公式で求められる。
●平均
●分散
出所:統計WEB_分散
●標準偏差
出所:統計WEB_標準偏差
入力データの合計・平均は、NumPyのsum関数・mean関数を利用して算出できる。その実行結果は、以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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関数を利用して算出できる。その実行結果は、以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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という関数となる。