拙著「Pythonでデータ分析」の第1章「基本統計量の計算」の補足説明
Numpyのパーセンタイル値はいろいろな計算法が用意されている。それらを比較するスクリプトを以下のように作成してみた。
import numpy
as np
a = [1,2,3,4]
methods = ['inverted_cdf',
'averaged_inverted_cdf',
'closest_observation',
'interpolated_inverted_cdf',
'hazen',
'weibull',
'linear',
# (default)
'median_unbiased',
'normal_unbiased',
'lower',
'higher',
'midpoint',
'nearest']
print('a =', a)
for m in methods:
Qs = np.percentile(a,
[25, 50, 75], method = m)
print(f'{m:>25s}', Qs)
b = [1,2,4,8]
print('b =',b)
for m in methods:
Qs = np.percentile(b,
[25, 50, 75], method = m)
print(f'{m:>25s}', Qs)
実行すると以下の結果を得た。
a = [1, 2, 3, 4]
inverted_cdf [1 2 3]
averaged_inverted_cdf
[1.5 2.5 3.5]
closest_observation [1 2 3]
interpolated_inverted_cdf [1. 2. 3.]
hazen [1.5 2.5 3.5]
weibull [1.25 2.5 3.75]
linear [1.75 2.5 3.25]
median_unbiased [1.41666667 2.5
3.58333333]
normal_unbiased [1.4375 2.5 3.5625]
lower [1 2 3]
higher [2 3 4]
midpoint [1.5 2.5 3.5]
nearest [2 3 3]
b = [1, 2, 4, 8]
inverted_cdf [1 2 4]
averaged_inverted_cdf
[1.5 3. 6. ]
closest_observation [1 2 4]
interpolated_inverted_cdf [1. 2. 4.]
hazen [1.5 3.
6. ]
weibull [1.25 3. 7. ]
linear [1.75 3.
5. ]
median_unbiased [1.41666667 3.
6.33333333]
normal_unbiased [1.4375 3. 6.25 ]
lower [1 2 4]
higher [2 4 8]
midpoint [1.5 3. 6. ]
nearest [2 4 4]
なお、統計計算のPythonスクリプトは、このウェブサイトにも用意している。