こんにちは、インストラクターのフクロウです!
np.ndarrayに対して、統計的代表値を計算する関数がNumPyに多数用意されています。
np.stdを始めとしたこれらの関数を使って、配列から標準偏差・分散・平均値・中央値などの値を出してみましょう!
一次元配列の統計的代表値
まずはサンプルの配列を作ってみますよ。
今回は標準正規分布から1000000個のサンプルを作りました。
# コード In [1]: import numpy as np # コード In [2]: a = np.random.normal(0,1,1000000) a
# 出力結果 Out [2]: array([ 0.53367476, -0.33254791, 0.73177291, ..., 0.93002243, 0.49145986, -0.33481957])
標準偏差
まずは標準偏差です!
この値はnp.std(np.ndarrayオブジェクト)で得られます。
# コード In [3]: np.std(a) # a.std()
# 出力結果 Out [3]: 1.0008071631582751
さて、標準偏差の出し方ですが、実はMatlabなどの答えと異なった値になる方法を使っています。
これについては以下の外部記事で紹介されていたので、ぜひ読んでみてください。
中央値
最後に中央値です。
中央値は昇順にソートしたときの真ん中の値のことになります。
これはnp.medianで計算できます。
# コード In [8]: np.median(a) # メソッド版はナシ
# 出力結果 Out [8]: -0.0010671754301548751
多次元配列の統計的代表値
さて、次に多次元配列からの計算をやってみましょう!
また、サンプルの配列を作ってみますよ。
最初に使った配列aをreshapeして使いましょう!
# コード In [9]: b = a.reshape(5, -1) b
# 出力結果 Out [9]: array([[ 0.53367476, -0.33254791, 0.73177291, ..., 1.06407014, -1.54689888, 1.26198995], [ 1.67772181, 0.57177553, 0.9254711 , ..., 0.72147294, 0.77332256, -0.67753616], [ 0.32733615, -0.64839593, 0.84342628, ..., -0.55344429, 0.3877223 , -0.44070582], [ 0.1736956 , 0.05244973, 0.23466918, ..., 1.30554924, -0.32406212, 1.72462502], [ 1.46879707, 1.03538091, -1.61303711, ..., 0.93002243, 0.49145986, -0.33481957]])
標準偏差
np.stdを始めとして、ここで解説する関数はすべてaxisパラメータを持ちます。
# コード In [10]: np.std(b) # b.std() # 出力結果 Out [10]: 1.0008071631582751 # コード In [11]: np.std(b, axis=0) # b.std(axis=0) # 出力結果 Out [11]: array([0.61607045, 0.60672576, 0.94956854, ..., 0.65169347, 0.83405718, 0.98610079]) # コード In [12]: np.std(b, axis=1) # b.std(axis=1) # 出力結果 Out [12]: array([1.000704 , 1.00177558, 1.00199259, 0.99958634, 0.99996636])
分散
# コード In [13]: np.var(b) # b.var() # 出力結果 Out [13]: 1.0016149778289145 # コード In [14]: np.var(b, axis=0) # b.var(axis=0) # 出力結果 Out [14]: array([0.3795428 , 0.36811615, 0.90168041, ..., 0.42470438, 0.69565138, 0.97239478]) # コード In [15]: np.var(b, axis=1) # b.var(axis=1) # 出力結果 Out [15]: array([1.0014085 , 1.00355431, 1.00398915, 0.99917285, 0.99993272])
平均値
# コード In [16]: np.mean(b) # b.mean() # 出力結果 Out [16]: -0.0007908257190269655 # コード In [17]: np.mean(b, axis=0) # b.mean(axis=0) # 出力結果 Out [17]: array([ 0.83624508, 0.13573247, 0.22446047, ..., 0.69353409, -0.04369126, 0.30671069]) # コード In [18]: np.mean(b, axis=1) # b.mean(axis=1) # 出力結果 Out [18]: array([ 0.00260392, -0.00203456, -0.00015623, -0.00213325, -0.00223401])
中央値
# コード In [19]: np.median(b) # 出力結果 Out [19]: -0.0010671754301548751 # コード In [20]: np.median(b, axis=0) # 出力結果 Out [20]: array([ 0.53367476, 0.05244973, 0.73177291, ..., 0.93002243, 0.3877223 , -0.33481957]) # コード In [21]: np.median(b, axis=1) # 出力結果 Out [21]: array([ 0.00229628, -0.00161645, -0.00228283, -0.00365246, 0.00012915])
まとめ
この記事では、np.stdを始めとした統計的代表値を算出する関数を紹介しました。
データ解析をするときにはこういう値の計算は必須ですよ!
是非この記事で覚えて使いこなしてくださいね!