こんにちは、インストラクターのフクロウです!
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を始めとした統計的代表値を算出する関数を紹介しました。
データ解析をするときにはこういう値の計算は必須ですよ!
是非この記事で覚えて使いこなしてくださいね!






