我有一些离散的数据值,这些值一起形成某种分布。 这是其中之一,但它们不同,峰值位于所有可能的位置,从0到结束。
所以,我想在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坐标。对于正态分布,这显然是可能的,但我有一个未知形状的分布,所以如果百分位数不等于其中一个值(显然是最常见的),它就会变得复杂得多。
答案 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坐标确定的工作解决方案。