Pythonで分散、分散、標準偏差、不偏分散、不偏分散の平方根を算出するには、Numpyのnumpy.var、numpy.stdを用いる。また、SciPyのscipy.stats.tvar、scipy.stats.tstdを用いることでも不偏分散、不偏分散の平方根を算出できる。
- numpy.var — NumPy v1.23 Manual
- numpy.std — NumPy v1.23 Manual
- scipy.stats.tvar — SciPy v1.9.3 Manual
- scipy.stats.tstd — SciPy v1.9.3 Manual
numpy.var、numpy.std、scipy.stats.tvar、scipy.stats.tstdの使い方
2次元のndarray配列を生成し確認する。
import numpy as np
a = np.array([[6, 8, 3, 0],
[3, 2, 1, 7],
[8, 1, 8, 4],
[5, 3, 0, 5],
[4, 7, 5, 9]])
print(a.shape)
# (5, 4)
分散の算出方法
numpy.varの引数に配列を指定すると、すべての要素を使い分散が算出される。引数axisを指定すると、指定した軸に沿って分散が算出される。
print(np.var(a))
# 7.547500000000001
print(np.var(a, axis=0))
# [2.96 7.76 8.24 9.2 ]
print(np.var(a, axis=1))
# [9.1875 5.1875 8.6875 4.1875 3.6875]
不偏分散の算出方法
numpy.varに配列を指定し、引数ddofに1を指定することで、不偏分散が算出される。またscipy.stats.tvarの引数に配列を指定するとことでも算出できる。軸に沿って算出したい場合は、引数axisを指定する。
print(np.var(a, ddof=1))
# 7.944736842105264
from scipy import stats
print(stats.tvar(a, axis=None))
# 7.944736842105264
print(np.var(a, ddof=1, axis=1))
# [12.25 6.91666667 11.58333333 5.58333333 4.91666667]
print(stats.tvar(a, axis=1))
# [12.25 6.91666667 11.58333333 5.58333333 4.91666667]
標準偏差の算出方法
分散と同様の使い方で、numpy.stdの引数に配列を指定し、軸に沿って計算したい場合は、引数axisを指定する。
print(np.std(a))
# 2.747271373563231
print(np.std(a, axis=0))
# [1.72046505 2.78567766 2.87054002 3.03315018]
print(np.std(a, axis=1))
# [3.03108891 2.27760839 2.94745653 2.04633819 1.92028644]
不偏分散の平方根の算出方法
np.stdの引数ddofに1を指定することで、不偏分散の平方根の算出できる。またstats.tstdの引数に配列を指定することで同様に算出できる。
print(np.std(a, ddof=1))
# 2.8186409565791215
print(stats.tstd(a, axis=None))
# 2.8186409565791215
print(np.std(a, ddof=1, axis=1))
# [3.5 2.62995564 3.40342964 2.36290781 2.21735578]
print(stats.tstd(a, axis=1))
# [3.5 2.62995564 3.40342964 2.36290781 2.21735578]
コメント