【NumPy入門 np.std】標準偏差などの代表値を計算する方法を学ぼう!

こんにちは、インストラクターのフクロウです!

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を始めとした統計的代表値を算出する関数を紹介しました。

データ解析をするときにはこういう値の計算は必須ですよ!

是非この記事で覚えて使いこなしてくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次