最近學習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法。