最近学习python数据分析,遇到了四分位数计算问题,因四分位数计算公式不一致,导致结果不一样,坑爹的百度只给了一种计算方法,容易迷惑初学者,故总结如下:
计算方法
三个四分位数的确定:
先按从小到大方法排序,然后使用下列方法。
方法1:n+1法
Q1的位置= (n+1) × 0.25
Q2的位置= (n+1) × 0.5
Q3的位置= (n+1) × 0.75
n表示数据的数据个数。
上面的是大家常用的n+1法。还有一种是n-1法
方法2:n-1法
Q1的位置=1+(n-1)x 0.25
Q2的位置=1+(n-1)x 0.5
Q3的位置=1+(n-1)x 0.75
当位置结果为小数时,则用两个位置上的数分别乘以小数和(1-小数)后相加。例如,当结果为6.25时,就用第六个位置的数*0.25+第七个位置的数*0.75后得到结果。
下面举例说明。
举例1(奇数个)假设有一组数据6,7,15,36,39,40,41,42,43,47,49。此数据已按从小到大顺序拍寻,因此不需要再排序,如未拍寻,需先进行排序。
1、下面根据公式(n+1)法计算
第一四分位数(下四分位数):(11+1)/4 =3,说明它在第三个位置,所以是15,即Q1=15。
中位数:(11+1)/4*2=6,所以是40。
第三四分位数(上四分位数):(11+1)/4*3=9, 所以是43。
至此,Q1=15,Q2=40,Q3=43。
2、下面根据公式(n-1)法计算
第一四分位数(下四分位数):1+(11-1)x 0.25 =3.5,则Q1=15x0.5+36x0.5=25.5
中位数:1+(11-1)x 0.5 =6,则Q2=15x0.5+36x0.5=40
第三四分位数(上四分位数):1+(11-1)x 0.75 =8.5,则Q3=42x0.5+43x0.5=42.5
下面用python实现计算。
1 import pandas as pd 2 s1 = pd.Series([6,7,15,36,39,40,41,42,43,47,49]) 3 s1.describe()
结果如下:
count 11.000000 mean 33.181818 std 15.873362 min 6.000000 25% 25.500000 50% 40.000000 75% 42.500000 max 49.000000 dtype: float64
可见,python运行出来的结果是Q1=25.5 Q2=40 Q3=42.5。
运行结果与n-1法一样,说明python用的是这种方法。
举例2(偶数个)
1 import numpy as np 2 import pandas as pd 3 ser_obj=pd.Series([1,2,3,4,5,6]) 4 ser_obj.describe()
1、下面根据公式(n+1)法计算
第一四分位数(下四分位数):(6+1)/4 =1.75,说明它在第1.75位置,所以是1*0.25+2*0.75,即Q1=1.75。
中位数:(6+1)/4*2=3.5,所以是3*0.5+4*0.5=3.5。
第三四分位数(上四分位数):(6+1)/4*3=5.25, 所以是5*0.75+6*0.25=5.25。
至此,Q1=1.75,Q2=3.5,Q3=5.25。
2、下面根据公式(n-1)法计算
第一四分位数(下四分位数):1+(6-1)x 0.25 =2.25,则Q1=2x0.75+3x0.25=2.25
中位数:1+(6-1)x 0.5 =3.5,则Q2=3x0.5+4x0.5=3.5
第三四分位数(上四分位数):1+(6-1)x 0.75 =4.75,则Q3=4*0.25+5*0.75=4.75
下面用python实现计算。
count 6.000000 mean 3.500000 std 1.870829 min 1.000000 25% 2.250000 50% 3.500000 75% 4.750000 max 6.000000
因此,pandas使用的是n-1法,人们通常使用n+1法。
原文地址:https://www.cnblogs.com/yangzhen-ahujhc/p/12353251.html