裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

R の fivenum() は Python のチョメチョメ

2020年02月13日 | ブログラミング

> fivenum(1:7587)
[1]    1.0 1897.5 3794.0 5690.5 7587.0

である(わざと変な個数の数列にしておく)

Python では,scipy.stats.scoreatpercentile() とか,numpy.percentile() がある。

>>> import numpy as np
>>> from scipy.stats import scoreatpercentile

>>> x = np.arange(7587)+1

>>> scoreatpercentile(x, [25, 75], interpolation_method='fraction')
array([1897.5, 5690.5])

>>> scoreatpercentile(x, [25, 75], interpolation_method='lower')
array([1897., 5690.])

>>> scoreatpercentile(x, [25, 75], interpolation_method='higher')
array([1898., 5691.])

>>> np.percentile(x, [25, 75], interpolation = 'linear')
array([1897.5, 5690.5])

>>> np.percentile(x, [25, 75], interpolation = 'lower')
array([1897, 5690])

>>> np.percentile(x, [25, 75], interpolation = 'higher')
array([1898, 5691])

>>> np.percentile(x, [25, 75], interpolation = 'midpoint')
array([1897.5, 5690.5])

>>> np.percentile(x, [25, 75], interpolation = 'nearest')
array([1897, 5691])

ということで,np.percentile() の interpolation = ' midpoint' のようだ

と,書いたけどちょっと違うみたいなので,R の fivenum() を Python に移植した

import math
def fivenum(x):
    n = len(x)
    x = sorted(x)
    n4 = ((n + 3)//2)/2
    return 0.5 * (x[math.floor(n4 - 1)] + x[math.ceil(n4 - 1)]), 0.5 * (x[math.floor(n - n4)] + x[math.ceil(n - n4)])

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村