記述統計 describe
サンプルサイズ,最小値,最大値,平均値,分散,歪度,尖度を求める。
describe(a, axis=0, ddof=1, bias=True, nan_policy='propagate')
from scipy.stats import describe
x = [1.2, 3.1, 4.6, 2.2, 5.7]
describe(x)
DescribeResult(nobs=5, minmax=(1.2, 5.7), mean=3.3599999999999994, variance=3.2729999999999997, skewness=0.14460191499270095, kurtosis=-1.3684571122281206)
表示される variance は,デフォルトで ddof=1
, numpy.var(x, ddof=1)
すなわち,不偏分散である。
np.var(x, ddof=1)
3.2729999999999997
ddof=0
を指定すれば,不偏でない分散を表示する。
describe(x, ddof=0)
DescribeResult(nobs=5, minmax=(1.2, 5.7), mean=3.3599999999999994, variance=2.6184, skewness=0.14460191499270095, kurtosis=-1.3684571122281206)
np.var(x)
2.6184
表示される skewness,kurtosis は,デフォルトで bias=True
であり,, scipy.stats
の skew(x)
, kurtosis(x)
で計算されるものである。
from scipy.stats import skew, kurtosis
skew(x), kurtosis(x)
(0.14460191499270095, -1.3684571122281206)
biase=False
を指定すれば,不偏推定量を表示する。
describe(x, bias=False)
DescribeResult(nobs=5, minmax=(1.2, 5.7), mean=3.3599999999999994, variance=3.2729999999999997, skewness=0.2155598077335502, kurtosis=-1.4738284489124838)
skew(x, bias=False), kurtosis(x, bias=False)
(0.2155598077335502, -1.4738284489124838)
多重代入して,必要なものだけを取り出すこともできる。
n, minmax, mean, variance, skewness, kurtosis = describe(x)
minmax[1]
5.7
2 次元以上の配列の場合には,axis
で計算軸を指定できる。1
A = [[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0]]
axis=0
で各列に対して集計される。
describe(A, axis=0)
DescribeResult(nobs=2, minmax=(array([1., 2., 3.]), array([4., 5., 6.])), mean=array([2.5, 3.5, 4.5]), variance=array([4.5, 4.5, 4.5]), skewness=array([0., 0., 0.]), kurtosis=array([-2., -2., -2.]))
axis=1
で各行に対して集計される。
describe(A, axis=1)
DescribeResult(nobs=3, minmax=(array([1., 4.]), array([3., 6.])), mean=array([2., 5.]), variance=array([1., 1.]), skewness=array([0., 0.]), kurtosis=array([-1.5, -1.5]))
NaN 具体的には np.nan
を含む場合には統計量はすべて nan
になる。
x = [1.2, 3.1, 4.6, 2.2, 5.7, np.nan]
describe(x)
DescribeResult(nobs=6, minmax=(nan, nan), mean=nan, variance=nan, skewness=nan, kurtosis=nan)
NaN を除いて統計量を求めるためには,事前に NaN を除くか,nan_policy='omit'
を指定する。
y = np.array(x)[~np.isnan(x)]
describe(y)
DescribeResult(nobs=5, minmax=(1.2, 5.7), mean=3.3599999999999994, variance=3.2729999999999997, skewness=0.14460191499270095, kurtosis=-1.3684571122281206)
describe(x, nan_policy='omit')
DescribeResult(nobs=5, minmax=(masked_array(data=1.2,
mask=False,
fill_value=1e+20), masked_array(data=5.7,
mask=False,
fill_value=1e+20)), mean=3.3599999999999994, variance=3.2729999999999997, skewness=masked_array(data=0.14460191,
mask=False,
fill_value=1e+20), kurtosis=-1.3684571122281206)
-
scipy.stats の統計関数に共通 ↩