Python學習筆記:利用pd.quantile實現分位數統計


一、p分位數概念

原則上p是可以取0-1之間的任意值,四分位數是p分位數中較為有名的。

所謂四分位數:即把數值由小到大排列並分成四等份,處於三個分割點位置的數值就是四分位數。

  • 第1四分位數 (Q1):又稱“較小四分位數”,等於該樣本中所有數值由小到大排列后第25%的數字
  • 第2四分位數 (Q2):又稱“中位數”,等於該樣本中所有數值由小到大排列后第50%的數字
  • 第3四分位數 (Q3):又稱“較大四分位數”,等於該樣本中所有數值由小到大排列后第75%的數字

第3四分位數與第1四分位數的差距又稱四分位距(InterQuartile Range, IQR)

二、pandas中quantile函數

quantile() 函數語法為:

DataFrame.quantile(q=0.5, axis=0, numeric_only=True, interpolation='linear')

參數解釋:

q -- 浮點數或者數組,默認值0.5,取中位數(0 ≤ q ≤ 1)
axis -- 行或列,默認為0,取值為:{0, 1, ‘index’, ‘columns’}
        0 or ‘index’ -- 行
        1 or ‘columns’ -- 列
interpolation -- 插值方法,取值為:{‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’}

當選中的分位點位於兩個數數據點 i and j 之間時:
    linear: i + (j - i) * fraction, fraction由計算得到的pos的小數部分
    lower: i.
    higher: j.
    nearest: i or j whichever is nearest.
    midpoint: (i + j) / 2.

三、實例

# 測試數據
df = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]),columns=['a', 'b'])
'''
   a    b
0  1    1
1  2   10
2  3  100
3  4  100
'''
# 0.1分位數
df.quantile(0.1)
a    1.3
b    3.7
Name: 0.1, dtype: float64

# 0.5分位數(中位數)
df.quantile(0.5)
a     2.5
b    55.0
Name: 0.5, dtype: float64
# 測試數據
    age  sex
0  54.0  男  
1  39.0  男  
2  59.0  男  
3  59.0  男  
4  52.0  男  

# 求分位數
data.age.quantile([0.25, 0.5, 0.75])
0.25    35.0
0.50    45.0
0.75    54.0
Name: age, dtype: float64

四、應用

在數據清洗過程中,可以利用分位數實現對異常數據的剔除。

  • 蓋帽法
# 蓋帽法
def blk(floor, root): 
    def f(x):       
        if x < floor:
            x = floor
        elif x > root:
            x = root
        return x
    return f
  • 清洗
data["col"] = data["col"].map(blk(0, root=data["col"].quantile(0.99))) 
  • 缺失值填充
data["col"] = data["col"].fillna(0)

注意,需先通過蓋帽法完成異常數據清洗后,再進行缺失值填充。

參考鏈接1:pandas中的quantile函數

參考鏈接2:p分位函數(四分位數)概念與pandas中的quantile函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM