如果我定义
>>> y=np.linspace(1., 10, 10)
我做了
>>> np.percentile(y, [25, 50, 75])
我获得[3.25,5.5,7.75]
对于1,2,3,4,5,6,7,8,9,10系列,Q3 = 5.5(OK)和Q1 = 3(而不是3.25)和Q3 = 8(而不是7.75)!
对不起,我对这些基本的东西感到有些失落..希望能提前获得一些帮助。
答案 0 :(得分:1)
默认情况下,numpy对百分位数使用线性插值,这意味着如果百分位数的“真实”值位于两个数据点之间,则返回它们之间的值,按比例更接近于更靠近数据点的数据点。请求百分位数。
从numpy 1.9.0开始,您可以通过将interpolation
参数传递给percentile
来覆盖它。您有几个选项,如记录here。 “降低”或“最近”可能是您正在寻找的。 p>
在早期版本的numpy中,无法获得所需的行为。 scipy中有一个函数scipy.stats.scoreatpercentile
,它提供“较低”和“较高”的插值方法(但不是np.percentile
提供的额外“最近”和“中点”方法。)
答案 1 :(得分:1)
因为我想知道事情是如何运作的......而且因为别人可能会像我一样......
首先,我非常感谢BrenBarn的帮助以及他所花费的时间 应答。那么plt如何给出plt.boxplot()中的第一个四分位数(Q1,第25个百分位数),中位数(Q2,第50个百分位数)和第3个四分位数(Q3,75个百分位数)以及更一般地使用np.percentile()的结果? / p>
BrenBarn说阅读手册http://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html,其中写着“线性:i +(j - i)*分数,其中分数是由i和j包围的索引的小数部分。”,但是我不是很清楚,因为我,j和分数对我来说并不明显。 我们这样做:
>>> x=np.linspace(1,10,10)
>>> x
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
>>> np.percentile(x,[0,1,20,25,50,75,80,99,100])
[1.0, 1.0900000000000001, 2.8000000000000003, 3.25, 5.5, 7.75, 8.1999999999999993, 9.9100000000000001, 10.0]
如果我们采用numpy手册的定义,推导i,j和分数的方法是:
P:计算的百分位数。
N:数据总数。
N =((P / 100)*(N-1))+ 1。
N = K + d
k是一个整数,数组x的第i个排序数据(比如说v_i),d是百分位数()的numpy手册中描述的分数。 v_i + 1称为vj(第(i + 1)个排序数据)。 所以使用numpy手册的定义: N = +馏分。
然后使用以下方法轻松找到结果:
value =第一个排序数据(此示例中为x [0])如果P = 0 。
value =最后数据(此示例中为x [9])如果P = 100 。
value = v_i + d *(v_j-v_i)如果0<我< Ñ强>
以上例子:
N =((1/100)*(10-1))+ 1 = 1.09
和
>>> x[0]+0.09*(x[1]-x[0])
1.0900000000000001
好的,正如上面的np.percentile(x,[0,1,20,25,50,75,80,99,100])所返回的那样。
N =((20÷100)*(10-1))+ 1 = 2.8
和
>>> x[1]+0.8*(x[2]-x[1])
2.7999999999999998
好的,非常接近上面的np.percentile(x,[0,1,20,25,50,75,80,99,100])的返回。
N =((25/100)*(10-1))+ 1 = 3.25
和
>>> x[2]+0.25*(x[3]-x[2])
3.25
好的,正如上面的np.percentile(x,[0,1,20,25,50,75,80,99,100])所返回的那样。
N =((50/100)*(10-1))+ 1 = 5.5
和
>>> x[4]+0.5*(x[5]-x[4])
5.5
好的,正如上面的np.percentile(x,[0,1,20,25,50,75,80,99,100])所返回的那样。
我使用此链接https://en.m.wikipedia.org/wiki/Percentile#Microsoft_Excel_method来执行此操作,此方法称为“Microsoft Excel方法”。因为我来自自由世界,我不喜欢它,但这是这个链接中给出的名字......
希望这会对某人有所帮助,尽管我的英文写得不好。
Je suis Charlie。