NumPyで用意されている数学関数、統計関数は、ndarrayの配列全体および一部に対して統計処理をおこなうことができる。
今回はNumPyのあらゆる統計関数について紹介しよう。
コンテンツ
randn関数を使ってサンプルデータを生成
まずはサンプルデータとして、randn関数を使って標準正規分布(ガウス分布)データを生成する。
rand関数と混同されがちなrandn関数だが、同じ乱数生成関数でも以下のように出力される結果は全く違う。
import numpy as np
sample1 = np.random.randn(4, 5)
# 平均値0、標準偏差1の正規分布した乱数を生成
# array([[-0.02776289, 0.3304908 , 0.66238155, 1.51053973, 0.96823941],
# [ 0.29526553, 0.82655862, 0.42368541, 0.24814073, 0.68781292],
# [ 0.29518087, -0.51560602, 0.37310941, 0.57533529, 0.10978753],
# [ 2.06806716, 0.71465671, -0.46698317, -0.18243506, 0.60399627]])
sample2 = np.random.rand(4, 5)
# 0〜1の範囲内で乱数を生成
# array([[0.27892618, 0.41062025, 0.26002768, 0.1375287 , 0.2407081 ],
# [0.84165516, 0.63152174, 0.17065274, 0.4356197 , 0.81404647],
# [0.45682 , 0.91877611, 0.71523087, 0.71300009, 0.49448955],
# [0.56491664, 0.62646928, 0.64547697, 0.03154633, 0.54968903]])
今回はrandn関数を使ったサンプルデータを使っていく。
算術平均を計算するmean関数
先ほど生成したsample1配列に対してmean関数を適用すると、配列の要素全体の算術平均を求めることができる。
sample1.mean()
# 0.4750230405412764
なおmean関数は、どの軸を中心に処理を適用するかを引数axisに指定することができる。
sample1.mean(axis=1)
# array([0.68877772, 0.49629264, 0.16756142, 0.54746038])
sample1.mean(axis=0)
# array([0.65768767, 0.33902503, 0.2480483 , 0.53789517, 0.59245903])
二次元配列の場合、axisに1を指定すると列ごと、0を指定すると行ごとの平均値を求めることができる。
合計を計算するsum関数
sum関数はndarrayの値の合計を求めることができる。
sample1.sum()
# 9.500460810825528
sample1.sum(axis=0)
# array([2.63075068, 1.35610011, 0.99219321, 2.15158069, 2.36983612])
sample1.sum(1) # axisは省略可
# array([3.4438886 , 2.48146322, 0.83780708, 2.73730191])
mean関数同様、axis引数により処理対象の軸を指定することができる。
分散、標準偏差を求めるvar関数、std関数
var関数はndarrayの分散を、std関数は標準偏差を求めることができる。
これらの関数についても引数axisで対象となる軸を指定することが可能だ。
sample1.var()
# 0.34893171157228753
sample1.var(axis=0)
# array([0.68044344, 0.27731381, 0.18235768, 0.38756812, 0.09585204])
sample1.std()
# 0.5907044198008743
sample1.std(axis=0)
# array([0.82488996, 0.52660593, 0.42703358, 0.62254969, 0.3095998 ])
最小値、最大値を求めるmin関数、max関数
min関数、max関数は、それぞれndarrayのうち、最小値、最大値を求めることができる。
こちらも引数axisの指定が可能だ。
sample1.min()
# -0.5156060209743792
sample1.min(0)
# array([-0.02776289, -0.51560602, -0.46698317, -0.18243506, 0.10978753])
sample1.max()
# 2.068067160790721
sample1.max(1)
# array([1.51053973, 0.82655862, 0.57533529, 2.06806716])
最小・最大値を持つインデックスを返すargmin関数、argmax関数
min関数、max関数では値そのものを返したが、argmin関数、argmax関数ではそれぞれ最小・最大値を持つ要素のインデックスを求めることができる。
sample1.argmin()
# 11
sample1.argmax()
# 15
累積和、累積積を求めるcumsum関数、cumprod関数
ndarrayの累積和、累積積を求める場合、cumsum関数、cumprod関数を使用する。
これらの関数は単純に集計結果を返すものではなく、途中経過を含めた計算結果を配列として返す。
sample1.cumsum()
# array([-0.02776289, 0.30272791, 0.96510946, 2.47564919, 3.4438886 ,
# 3.73915414, 4.56571275, 4.98939817, 5.2375389 , 5.92535182,
# 6.2205327 , 5.70492668, 6.07803609, 6.65337138, 6.7631589 ,
# 8.83122606, 9.54588278, 9.07889961, 8.89646455, 9.50046081])
sample1.cumprod()
# array([-2.77628859e-02, -9.17537837e-03, -6.07760133e-03, -9.18045829e-03,
# -8.88888148e-03, -2.62458034e-03, -2.16936950e-03, -9.19130214e-04,
# -2.28073646e-04, -1.56872001e-04, -4.63056145e-05, 2.38754536e-05,
# 8.90815649e-06, 5.12517677e-06, 5.62680483e-07, 1.16366103e-06,
# 8.31618168e-07, -3.88351688e-07, 7.08489648e-08, 4.27925102e-08])