如何获得经验数据分布的百分位数并得到它的x坐标?

时间:2013-12-24 20:02:09

标签: python numpy statistics scipy percentile

我有一些离散的数据值,这些值一起形成某种分布。 这是其中之一,但它们不同,峰值位于所有可能的位置,从0到结束。 enter image description here

所以,我想在Python中使用它的分位数(百分位数)。我想我可以编写某种函数,从零开始,直到达到所需的百分比为止。但可能有更好的解决方案?例如,要在SciPy中创建某种经验分布,然后使用SciPy计算百分位数的方法?

最后我需要左百分位数和右百分位数的x坐标。一个人可以使用20%和80%的百分位作为例子,我将不得不为我的案例找到最好的数字。

提前谢谢!

修改 一些示例代码几乎是我想要的。

import numpy as np
np.random.seed(0)
distribution = np.random.normal(0, 1, 1000)
left, right = np.percentile(distribution, [20, 80])
print left, right

这会返回百分位数,我需要以某种方式得到它们的x坐标。对于正态分布,这显然是可能的,但我有一个未知形状的分布,所以如果百分位数不等于其中一个值(显然是最常见的),它就会变得复杂得多。

2 个答案:

答案 0 :(得分:2)

如果您正在寻找经验CDF,那么您可以使用statsmodels ECDF。对于百分位数/分位数,您可以使用numpy percentile

答案 1 :(得分:0)

好的,现在我已经编写了以下函数,现在使用它:

def percentile(distribution, percent):
    percent = 1.0*percent/100
    cum_percent = 0
    i=0
    while cum_percent <= percent:        
        cum_percent = cum_percent + distribution[i]
        i = i+1
    return i

这有点粗糙,因为返回所需值左侧最接近值的索引。为了我的目的,它可以作为临时解决方案,但我希望看到一个有效的百分位x坐标确定的工作解决方案。