zoukankan      html  css  js  c++  java
  • 分位函数(四分位数)概念与pandas中的quantile函数

    p分位函数(四分位数)概念与pandas中的quantile函数

    函数原型

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

    参数

    - q : float or array-like, default 0.5 (50% quantile 即中位数-第2四分位数)
    0 <= q <= 1, the quantile(s) to compute
    
    - axis : {0, 1, ‘index’, ‘columns’} (default  0)
    0 or ‘index’ for row-wise, 1 or ‘columns’ for column-wise
    
    - interpolation(插值方法) : {‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’}
    
    当选中的分为点位于两个数数据点 i and j 之间时:
        linear: i + (j - i) * fraction, fraction由计算得到的pos的小数部分(可以通过下面一个例子来理解这个fraction);
        lower: i.
        higher: j.
        nearest: i or j whichever is nearest.
        midpoint: (i + j) / 2.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    统计学上的四分为函数

    原则上p是可以取0到1之间的任意值的。但是有一个四分位数是p分位数中较为有名的。

    所谓四分位数;即把数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

    • 第1四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。
    • 第2四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。
    • 第3四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。

    第3四分位数与第1四分位数的差距又称四分位距(InterQuartile Range,IQR)

    计算方法与举例

    为了更一般化,在计算的过程中,我们考虑p分位。当p=0.25 0.5 0.75 时,就是在计算四分位数。

    首先确定p分位数的位置(有两种方法):

    方法1 pos = (n+1)*p
    方法2 pos = 1+(n-1)*p

    pandas 中使用的是方法2确定的。

    给定测试数据:

       a    b
    0  1    1
    1  2   10
    2  3  100
    3  4  100
    • 1
    • 2
    • 3
    • 4
    • 5

    计算

    df = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]),columns=['a', 'b'])
    print(df.quantile(.1))
    • 1
    • 2

    结果是:

    a    1.3
    b    3.7
    Name: 0.1, dtype: float64
    • 1
    • 2
    • 3

    默认使用的是linear 插值

    计算a列
    pos = 1 + (4 - 1)*0.1 = 1.3 
    fraction = 0.3

    ret = 1 + (2 - 1) * 0.3 = 1.3

    计算b列
    pos = 1.3 
    ret = 1 + (10 - 1) * 0.3 = 3.7

    在b中,假如pos等于2.5呢,即在2-3之间,那i对应就是10,j对应就是100,ret = 10 + (100-10) * 0.3 = 55

     “分为点p位于两个数数据点 i and j 之间时”,比如 y= [1,10,100,100],x= [0,1,2,3],对应于[0,0.333,0.667,1],当p=0.4时,i、j分别为10、100,因此,pos = 1 + (4-1)*0.4=2.2,pos取小数部分即0.2,也即fraction=0.2(fraction由计算得到的pos的小数部分),,,故值为10+(100-10)* 0.2=28 。 验证: df = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]),columns=[&#39;a&#39;, &#39;b&#39;]) print df.quantile([0.1,0.2,0.4,0.5, 0.75])

  • 相关阅读:
    Object.assign()方法
    JavaScript对象(二)
    JavaScript对象(一)
    vue开发中遇到的问题集锦(2)
    Python:str.ljust()、str.rjust()、str.center()函数
    Python:如何将多个小字符串拼接成一个大的字符串
    Python:.join()函数
    Python:生成器表达式
    VS Code:快捷方式
    Python:如何调整字符串中文本的格式
  • 原文地址:https://www.cnblogs.com/zhaohuanhuan/p/9055944.html
Copyright © 2011-2022 走看看