np.percentile似乎没有给出正确的输出

时间:2019-01-21 11:03:06

标签: python-3.x numpy statistics data-science

我有一个下面的列表。

33、26、24、21、19、20、18、18、52、56、27、22、18、49、22、20、23、32、20、18

我要尝试的是找到第25个百分位数。

我用简单的numpy程序找到了它。

        function dayRect(day) {
            const days = ["I","II","III","IV","V","VI","VII"];
            context.beginPath();

            //maybe align the text inside this rect somehow
            context.rect(0, day*h/7, 3*w/27, h/7);

            context.stroke();
            context.font = "0.5rem Arial";
            context.fillStyle = "#fff";
            context.fillText(days[day], 0, (day+1)*h/7);
        }

输出为:19.75

但是,如果我们手动计数或使用Excel,则第25个百分位数为19.25。

enter image description here

我期望输出为19.25,但numpy的实际输出为19.75。有人可以帮忙这里有什么问题吗?

2 个答案:

答案 0 :(得分:1)

检查您的输入值,并查找excel使用的内容,因为这些是numpy中的选项

t = ['linear', 'lower', 'higher', 'nearest', 'midpoint']    
arr = np.array([33, 26, 24, 21, 19, 20, 18, 18, 52, 56, 27, 22, 18, 49, 22, 20, 23, 32, 20, 18])
    for cnt, i in enumerate(t):
        v = np.percentile(arr, 25., interpolation=i)
        print("type: {} value: {}".format(i, v))

    type: linear value: 19.75
    type: lower value: 19
    type: higher value: 20
    type: nearest value: 20
    type: midpoint value: 19.5

答案 1 :(得分:1)

您会看到,在excel中有两个百分位数函数:PERCENTILE.EXCPERCENTILE.INC,不同之处在于“ Percentile.Inc函数,k的值在0范围内到1(含1),并且在Percentile.Exc函数中,k的值在0到1(排除)范围内。“(source

Numpy的percentile函数计算第k个百分位数,其中k必须在0和100之间(包括docs

让我们检查一下。

Difference beetwen INC and EXC excel's PERCENTILE functions

arr = [18, 18, 18, 18, 19, 20, 20, 20, 21, 22, 22, 23, 24, 26, 27, 32, 33, 49, 52, 56]
np.percentile(arr,25)
  

19.75

希望有帮助