精华内容
下载资源
问答
  • [1,2,2,2,2,2,2,2,2,2,2,5,5,6,7,8] S = pd.Series(series) percentage_rank = S.rank(method="max", pct=True) print(percentage_rank) 这基本上给出了Series中每个条目的百分比: ^{pr2}$ 为了检索这三个百分的...

    假设数据总是排序的(谢谢@胡安帕.阿里维拉加),您可以使用Pandas^{}类中的rank方法。rank()接受多个参数。其中之一是pct:pct : boolean, default False

    Computes percentage rank of data

    百分比排名有不同的计算方法。这些方法由参数method控制:method : {‘average’, ‘min’, ‘max’, ‘first’, ‘dense’}

    您需要方法"max":max: highest rank in group

    让我们看看rank()方法的输出,其中包含以下参数:import numpy as np

    import pandas as pd

    series = [1,2,2,2,2,2,2,2,2,2,2,5,5,6,7,8]

    S = pd.Series(series)

    percentage_rank = S.rank(method="max", pct=True)

    print(percentage_rank)

    这基本上给出了Series中每个条目的百分比:

    ^{pr2}$

    为了检索这三个百分位的索引,您可以在Series中查找第一个元素,该元素的百分比排名等于或高于您感兴趣的百分位。该元素的索引就是您需要的索引。在index25 = S.index[percentage_rank >= 0.25][0]

    index50 = S.index[percentage_rank >= 0.50][0]

    index75 = S.index[percentage_rank >= 0.75][0]

    print("25 percentile: index {}, value {}".format(index25, S[index25]))

    print("50 percentile: index {}, value {}".format(index50, S[index50]))

    print("75 percentile: index {}, value {}".format(index75, S[index75]))

    这将为您提供以下输出:25 percentile: index 1, value 2

    50 percentile: index 1, value 2

    75 percentile: index 11, value 5

    展开全文
  • 1. 分位数计算案例与Python代码案例1Ex1: Given a data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36],求Q1, Q2, Q3, IQRSolving:步骤:1. 排序,从小到大排列data,data = [6, 7, 15, 36, 39, 40, 41, 42, 43, ...

    1. 分位数计算案例与Python代码

    案例1

    Ex1: Given a data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36],求Q1, Q2, Q3, IQR

    Solving:

    步骤:

    1. 排序,从小到大排列data,data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]

    2. 计算分位数的位置

    3. 给出分位数

    分位数计算法一

    pos = (n+1)*p,n为数据的总个数,p为0-1之间的值

    Q1的pos = (11 + 1)*0.25 = 3 (p=0.25) Q1=15

    Q2的pos = (11 + 1)*0.5 = 6 (p=0.5) Q2=40

    Q3的pos = (11 + 1)*0.75 = 9 (p=0.75) Q3=43

    IQR = Q3 - Q1 = 28

    import math

    def quantile_p(data, p):

    pos = (len(data) + 1)*p

    #pos = 1 + (len(data)-1)*p

    pos_integer = int(math.modf(pos)[1])

    pos_decimal = pos - pos_integer

    Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal

    return Q

    data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]

    Q1 = quantile_p(data, 0.25)

    print("Q1:", Q1)

    Q2 = quantile_p(data, 0.5)

    print("Q2:", Q2)

    Q3 = quantile_p(data, 0.75)

    print("Q3:", Q3)

    分位数计算法二

    pos = 1+ (n-1)\*p,n为数据的总个数,p为0-1之间的值

    Q1的pos = 1 + (11 - 1)\*0.25 = 3.5 (p=0.25) Q1=25.5

    Q2的pos = 1 + (11 - 1)\*0.5 = 6 (p=0.5) Q2=40

    Q3的pos = 1 + (11 - 1)\*0.75 = 8.5 (p=0.75) Q3=42.5

    ```

    import math

    def quantile_p(data, p):

    pos = 1 + (len(data)-1)*p

    pos_integer = int(math.modf(pos)[1])

    pos_decimal = pos - pos_integer

    Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal

    return Q

    data = [6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49]

    Q1 = quantile_p(data, 0.25)

    print("Q1:", Q1)

    Q2 = quantile_p(data, 0.5)

    print("Q2:", Q2)

    Q3 = quantile_p(data, 0.75)

    print("Q3:", Q3)

    ```

    ## 案例2

    给定数据集 data = [7, 15, 36, 39, 40, 41],求Q1,Q2,Q3

    分位数计算法一

    import math

    def quantile_p(data, p):

    data.sort()

    pos = (len(data) + 1)*p

    pos_integer = int(math.modf(pos)[1])

    pos_decimal = pos - pos_integer

    Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal

    return Q

    data = [7, 15, 36, 39, 40, 41]

    Q1 = quantile_p(data, 0.25)

    print("Q1:", Q1)

    Q2 = quantile_p(data, 0.5)

    print("Q2:", Q2)

    Q3 = quantile_p(data, 0.75)

    print("Q3:", Q3)

    计算结果:

    Q1 = 7 +(15-7)×(1.75 - 1)= 13

    Q2 = 36 +(39-36)×(3.5 - 3)= 37.5

    Q3 = 40 +(41-40)×(5.25 - 5)= 40.25

    分位数计算法二

    结果:

    Q1: 20.25

    Q2: 37.5

    Q3: 39.75

    2. 分位数解释

    **四分位数**

    **概念**:把给定的乱序数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

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

    **第2四分位数 (Q2)**,又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。

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

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

    确定p分位数位置的两种方法

    position = (n+1)*p

    position = 1 + (n-1)*p

    3. 分位数在pandas中的解释

    在python中计算分位数位置的方案采用position=1+(n-1)*p

    案例1

    import pandas as pd

    import numpy as np

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

    print("数据原始格式:")

    print(df)

    print("计算p=0.1时,a列和b列的分位数")

    print(df.quantile(.1))

    程序计算结果:

    序号

    a

    b

    0

    1

    1

    1

    2

    10

    2

    3

    100

    3

    4

    100

    计算p=0.1时,a列和b列的分位数

    a 1.3

    b 3.7

    Name: 0.1, dtype: float64

    手算计算结果:

    计算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

    案例二

    利用pandas库计算data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36]的分位数。

    import pandas as pd

    import numpy as np

    dt = pd.Series(np.array([6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36])

    print("数据格式:")

    print(dt)

    print('Q1:', df.quantile(.25))

    print('Q2:', df.quantile(.5))

    print('Q3:', df.quantile(.75))

    计算结果

    Q1: 25.5

    Q2: 40.0

    Q3: 42.5

    4. 概括总结

    自定义分位数python代码程序

    import math

    def quantile_p(data, p, method=1):

    data.sort()

    if method == 2:

    pos = 1 + (len(data)-1)*p

    else:

    pos = (len(data) + 1)*p

    pos_integer = int(math.modf(pos)[1])

    pos_decimal = pos - pos_integer

    Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimal

    Q1 = quantile_p(data, 0.25)

    Q2 = quantile_p(data, 0.5)

    Q3 = quantile_p(data, 0.75)

    IQR = Q3 - Q1

    return Q1, Q2, Q3, IQR

    pandas中的分位数程序

    直接调用.quantile(p)方法,就可以计算出分位数,采用method=2方法。

    参考文献:

    展开全文
  • python_异常值_EllipticEnvelope法和四分位差法 # 加载库 import numpy as np from sklearn.covariance import EllipticEnvelope from sklearn.datasets import make_blobs ​ # 创建爱模拟数据 ​ # sklearn 中 ...

    python_异常值_EllipticEnvelope法和四分位差法

    # 加载库
    import numpy as np
    from sklearn.covariance import EllipticEnvelope
    from sklearn.datasets import make_blobs
    ​
    # 创建爱模拟数据# sklearn 中 make_blobs模块使用
    # sklearn.datasets.make_blobs(n_samples=100, n_features=2, centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None)# 属性含义:# n_samples: int, optional (default=100) 
    # The total number of points equally divided among clusters. 
    # 待生成的样本的总数。 
    # n_features: int, optional (default=2) 
    # The number of features for each sample. 
    # 每个样本的特征数。 
    # centers: int or array of shape [n_centers, n_features], optional (default=3) 
    # The number of centers to generate, or the fixed center locations. 
    # 要生成的样本中心(类别)数,或者是确定的中心点。 
    # cluster_std: float or sequence of floats, optional (default=1.0) 
    # The standard deviation of the clusters. 
    # 每个类别的方差,例如我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0]。 
    ​
    features, _ = make_blobs(n_samples = 10,
                             n_features = 2,
                             centers = 1,
                             random_state = 1)
    features
    ​
    array([[-1.83198811,  3.52863145],
           [-2.76017908,  5.55121358],
           [-1.61734616,  4.98930508],
           [-0.52579046,  3.3065986 ],
           [ 0.08525186,  3.64528297],
           [-0.79415228,  2.10495117],
           [-1.34052081,  4.15711949],
           [-1.98197711,  4.02243551],
           [-2.18773166,  3.33352125],
           [-0.19745197,  2.34634916]])
    # # 将第一个值替换成异常值
    features[0,0] = 10000
    features[0,1] = 10000
    features
    # # contamination   污染指数  即清洁程度
    outlier_detector = EllipticEnvelope(contamination=.1)# # 拟合识别器
    outlier_detector.fit(features)# # 预测
    outlier_detector.predict(features)
    array([-1,  1,  1,  1,  1,  1,  1,  1,  1,  1])
    # 创建一个函数返回异常值下标
    feature = features[:,0]
    feature
    
    
    #四分位差法
    # # 创建一个函数返回异常值下标
    def indicies_of_outliers(x):
        q1, q3 = np.percentile(x, [25, 75])
        iqr = q3 - q1
        lower_bound = q1 - (iqr * 1.5)
        upper_bound = q3 + (iqr * 1.5)
        return np.where((x > upper_bound) | (x < lower_bound))# 执行函数
    indicies_of_outliers(feature)
    # print(len(feature1))
    (array([0], dtype=int64),)
    
    展开全文
  • 最近学习python数据分析,遇到了四分位数计算问题,因四分位数计算公式不一致,导致结果不一样,坑爹的百度只给了一种计算方法,容易迷惑初学者,故总结如下:计算方法三个四分位数的确定:先按从小到大方法排序,...

    最近学习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 importpandas as pd2 s1 = pd.Series([6,7,15,36,39,40,41,42,43,47,49])3 s1.describe()

    结果如下:

    count 11.000000mean33.181818std15.873362min6.000000

    25% 25.500000

    50% 40.000000

    75% 42.500000max49.000000dtype: float64

    可见,python运行出来的结果是Q1=25.5 Q2=40 Q3=42.5。

    运行结果与n-1法一样,说明python用的是这种方法。

    举例2(偶数个)

    1 importnumpy as np2 importpandas as pd3 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法。

    展开全文
  • My attempt in Python is as follows: >>> a = numpy.array([1, 2, 3, 4, 5, 6, 7]) >>> numpy.percentile(a, 25) 2.5 >>> numpy.percentile(a, 75) 5.5 >>> numpy.percentile(a, 75) - numpy.percentile(a, 25) # ...
  • My attempt in Python is as follows: >>> a = numpy.array([1, 2, 3, 4, 5, 6, 7]) >>> numpy.percentile(a, 25) 2.5 >>> numpy.percentile(a, 75) 5.5 >>> numpy.percentile(a, 75) - numpy.percentile(a, 25) # ...
  • print("\n 四分位差:") print(stats.scoreatpercentile(jd_stock['open_p'],75)-stats.scoreatpercentile(jd_stock['open_p'],25)) 运行:  jd_stock: [('1', '20130902', '600028', 4.41, 4.43, 4.37, ...
  • 包括极差 四分位差 方差 标准差 协方差 变异系数。 其中,协方差需要指定两个字段: 部分运行结果: df_apple_stock.Open 极差: 691.29 df_apple_stock.High 四分位差: 55.0 df_apple_stock.Low 标准差: 140....
  • 函数原型DataFrame.quantile(q=0.5, axis=0, numeric_only=True, interpolation=’linear’)参数- q : float or array-like, default 0.5 (50% quantile 即中数-第2四分位数)0
  • 统计学的Python实现-009:四分位数

    千次阅读 2020-05-20 12:10:25
    四分位数有三个,第一个四分位数称为下四分位数,第二个四分位数就是中数,第三个四分位数称为上四分位数,分别用Q1、Q2、Q3表示。 统计学解释 四分位数位置的确定方法有两种。其一是Excel函数QUARTILE.EXC的方法...
  • np.percentile(nums, (25, 50, 75), interpolation='midpoint') 返回一个依次包含所有四分位数的列表:[25.5 40. 42.5]。 可以很容易看出来,这个方法可以一次性求任意的分位数。附纯python写法:def median(x): ...
  • 统计学的Python实现-010:四分位

    千次阅读 2020-05-20 12:11:21
    四分位距:四分位距(interquartile range),是一种衡量一组数据离散程度的统计量,用IQR表示。其值为第一四分位数和第三四分位数的差距。 四分位距的计算公式如下: IQR=Q3−Q1 IQR=Q_3-Q_1 IQR=Q3​−Q1​ 其中Q1...
  • python numpy求四分位

    千次阅读 2019-05-20 16:21:00
    import numpy as np ages=[3,3,6,7,7,10,10,10,...lower_q=np.quantile(ages,0.25,interpolation='lower')#下四分位数 higher_q=np.quantile(ages,0.75,interpolation='higher')#上四分位数 int_r=higher_q-lower...
  • :极为数据样本中的最大值与最小值的差值,是所有方式中最为简单的一种,它反应了数据样本的数值范围,是最基本的衡量数据离散程度的方式,受极值影响较大。如在数学考试中,一个班学生得分的极为60,放映了...
  • 四分位数和百分位数_20种四分位数

    千次阅读 2020-07-22 10:43:06
    四分位数和百分位数 四分位数 (Quartiles) To calculate a quartile of a sample is in theory easy, and is much like calculating the median. The difficult part is the implementation; contrary to ...
  • Python清除异常值四分位

    千次阅读 2019-06-13 12:55:44
    数我们都知道,就是将一组数字按从小到大的顺序排序后,处于中间位置(也就是50%位置)的数字。 同理,第一四分位数、第三四分位数是按从小到大的顺序排序后,处于25%、75%的数字。 令 IQR=Q3−Q1IQR=Q3−Q1 ...
  • 一、计算四分位 #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author:ZSW @file:quantile_distance.py @time:2021/02/05 """ import pandas as pd import numpy as np # 读取excle文件 excel_data = pd.read...
  • 四分python实现

    2019-10-02 00:02:45
    根据一个新加坡人的c代码改写成python代码 1 ''' 四分历''' 2 3 # 4 zq = 0 5 month = 0 6 7 def main(): 8 global month 9 year = 1 10 rb_year = 0 11 moon = 0 # numb...
  • #计算中数 def count_median(lis): if len(lis) % 2 == 0: mid = float((lis[len(lis) / 2] + lis[len(lis) / 2 - 1])) / 2 else: mid = lis[len(lis) / 2] return mid #计算上下四分位数 def count_...
  • python 3.8】 AttributeError: 'numpy.ndarray' object has no attribute 'quantile' 报错在于nparray无法使用quantile函数,修改为dataframe后可以使用 ValueError: The truth value of a Series is ambiguous...
  • 1. 首先介绍Boxplot(箱形图)的定义,这里参考:Understanding Boxplots,非常精彩的一篇介绍boxplot的博文。 该图片显示的即是一个boxplot的... 中值或中数(median), 或第二个四分位数 (second quartile,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,120
精华内容 3,248
关键字:

四分位差python

python 订阅