• 假设数据总是排序的（谢谢@胡安帕.阿里维拉加)，您可以使用Pandas^{}类中的rank方法。rank()接受多个参数。其中之一是pct：pct : boolean, default FalseComputes percentage rank of data百分比排名有不同的计算...
假设数据总是排序的（谢谢@胡安帕.阿里维拉加)，您可以使用Pandas^{}类中的rank方法。rank()接受多个参数。其中之一是pct：pct : boolean, default FalseComputes percentage rank of data百分比排名有不同的计算方法。这些方法由参数method控制：method : {‘average’, ‘min’, ‘max’, ‘first’, ‘dense’}您需要方法"max"：max: highest rank in group让我们看看rank()方法的输出，其中包含以下参数：import numpy as npimport pandas as pdseries = [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 250 percentile: index 1, value 275 percentile: index 11, value 5
展开全文
• 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) # ...
I have a list of numbers [1, 2, 3, 4, 5, 6, 7] and I want to have a function to return the interquartile range of this list of numbers. The interquartile range is the difference between the upper and lower quartiles. I have attempted to calculate the interquartile range using NumPy functions and using Wolfram Alpha. I find all of the answers, from my manual one, to the NumPy one, tothe Wolfram Alpha, to be different. I do not know why this is.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) # IQR3.0My attempt in Wolfram Alpha is as follows:So, I find that the values returned by NumPy and Wolfram Alpha for what I think are the first quartile, the third quartile and the interquartile range are not consistent. Why is this? What should I be doing in Python to calculate the interquartile range correctly?As far as I am aware, the interquartile range of [1, 2, 3, 4, 5, 6, 7] should be the following:median(5, 6, 7) - median(1, 2, 3) = 4.解决方案You have 7 numbers which you are attempting to split into quartiles. Because 7 is not divisible by 4 there are a couple of different ways to do this as mentioned here.Your way is the first given by that link, wolfram alpha seems to be using the third. Numpy is doing basically the same thing as wolfram however its interpolating based on percentiles (as shown here) rather than quartiles so its getting a different answer. You can choose how numpy handles this using the interpolation option (I tried to link to the documentation but apparently I'm only allowed two links per post).You'll have to choose which definition you prefer for your application.
展开全文
• 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代码案例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, 47, 49]2. 计算分位数的位置3. 给出分位数分位数计算法一pos = (n+1)*p，n为数据的总个数，p为0-1之间的值Q1的pos = (11 + 1)*0.25 = 3       (p=0.25)        Q1=15Q2的pos = (11 + 1)*0.5 = 6         (p=0.5)          Q2=40Q3的pos = (11 + 1)*0.75 = 9       (p=0.75)        Q3=43IQR = Q3 - Q1 = 28import mathdef quantile_p(data, p):pos = (len(data) + 1)*p#pos = 1 + (len(data)-1)*ppos_integer = int(math.modf(pos)[1])pos_decimal = pos - pos_integerQ = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimalreturn Qdata = [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.5Q2的pos = 1 + (11 - 1)\*0.5 = 6         (p=0.5)          Q2=40Q3的pos = 1 + (11 - 1)\*0.75 = 8.5       (p=0.75)        Q3=42.5import mathdef quantile_p(data, p):pos = 1 + (len(data)-1)*ppos_integer = int(math.modf(pos)[1])pos_decimal = pos - pos_integerQ = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimalreturn Qdata = [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 mathdef quantile_p(data, p):data.sort()pos = (len(data) + 1)*ppos_integer = int(math.modf(pos)[1])pos_decimal = pos - pos_integerQ = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimalreturn Qdata = [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）= 13Q2 = 36 +（39-36）×（3.5 - 3）= 37.5Q3 = 40 +（41-40）×（5.25 - 5）= 40.25分位数计算法二结果：Q1: 20.25Q2: 37.5Q3: 39.752. 分位数解释**四分位数****概念**：把给定的乱序数值由小到大排列并分成四等份，处于三个分割点位置的数值就是四分位数。**第1四分位数 (Q1)**，又称“较小四分位数”，等于该样本中所有数值由小到大排列后第25%的数字。**第2四分位数 (Q2)**，又称“中位数”，等于该样本中所有数值由小到大排列后第50%的数字。**第3四分位数 (Q3)**，又称“较大四分位数”，等于该样本中所有数值由小到大排列后第75%的数字。**四分位距**（InterQuartile Range, IQR）= 第3四分位数与第1四分位数的差距确定p分位数位置的两种方法position = (n+1)*pposition = 1 + (n-1)*p3. 分位数在pandas中的解释在python中计算分位数位置的方案采用position=1+(n-1)*p案例1import pandas as pdimport numpy as npdf = 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))程序计算结果：序号ab01112102310034100计算p=0.1时，a列和b列的分位数a 1.3b 3.7Name: 0.1, dtype: float64手算计算结果：计算a列pos = 1 + (4 - 1)*0.1 = 1.3fraction = 0.3ret = 1 + (2 - 1) * 0.3 = 1.3计算b列pos = 1.3ret = 1 + (10 - 1)* 0.3 = 3.7案例二利用pandas库计算data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36]的分位数。import pandas as pdimport numpy as npdt = 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.5Q2: 40.0Q3: 42.54. 概括总结自定义分位数python代码程序import mathdef quantile_p(data, p, method=1):data.sort()if method == 2:pos = 1 + (len(data)-1)*pelse:pos = (len(data) + 1)*ppos_integer = int(math.modf(pos)[1])pos_decimal = pos - pos_integerQ = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decimalQ1 = quantile_p(data, 0.25)Q2 = quantile_p(data, 0.5)Q3 = quantile_p(data, 0.75)IQR = Q3 - Q1return Q1, Q2, Q3, IQRpandas中的分位数程序直接调用.quantile(p)方法，就可以计算出分位数，采用method=2方法。参考文献：
展开全文
• np.percentile(nums, (25, 50, 75), interpolation='midpoint') 返回一个依次包含所有四分位数的列表：[25.5 40. 42.5]。 可以很容易看出来，这个方法可以一次性求任意的分位数。附纯python写法:def median(x): ...
数据源：nums=[]使用numpy很简单：import numpy as np

np.percentile(nums, (25, 50, 75), interpolation='midpoint')    返回一个依次包含所有四分位数的列表：[25.5 40.  42.5]。    可以很容易看出来，这个方法可以一次性求任意的分位数。附纯python写法:def median(x):
x = sorted(x)
length = len(x)
mid, rem = divmod(length, 2)    # divmod函数返回商和余数
if rem:
return x[:mid], x[mid+1:], x[mid]
else:
return x[:mid], x[mid:], (x[mid-1]+x[mid])/2

lHalf, rHalf, q2 = median(nums)
print(median(lHalf)[2])
print(q2)
print(median(rHalf)[2])
展开全文
• 四分位数和百分位数 四分位数 (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 ...
• 四分位数有三个，第一个四分位数称为下四分位数，第二个四分位数就是中位数，第三个四分位数称为上四分位数，分别用Q1、Q2、Q3表示。 统计学解释 四分位数位置的确定方法有两种。其一是Excel函数QUARTILE.EXC的方法...
• 四分位数的数学计算以及使用pandas计算前言参考举例1（奇数个）第一四分位数（下四分位数）中位数第三四分位数（上四分位数）举例2（偶数个）第一四分位数（下四分位数）中位数第三四分位数（上四分位数） ...
• 四分位数与pandas中的quantile函数 1.分位数概念 统计学上的有分位数这个概念，一般用p来表示。原则上p是可以取0到1之间的任意值的。但是有一个四分位数是p分位数中较为有名的。 所谓四分位数；即把数值由小到大排列...
• 四分位数的两种计算方法

千次阅读 2020-12-29 20:16:54
关于四分位数的两种求法 在数据导论课上，我们学习了如何求解四分位数的方法，其实操作起来也不难先用 (n+1) / 4 * i 计算出四分位数的位置，再求出该位置上的数的值即可。如一组数据 【1，3，6，8，10】 根据公式先...
• 四分位数与pandas中的quantile函数 1.分位数概念 统计学上的有分位数这个概念，一般用p来表示。原则上p是可以取0到1之间的任意值的。但是有一个四分位数是p分位数中较为有名的。 所谓四分位数；即把数值由小到大排列...
• 话不多说，如图 上代码 #数组都是按从小到大排过序的 #计算中位数 def count_median(lis): if len(lis) % 2 == 0: mid = float((lis[len(lis) / 2] + lis...#计算上下四分位数 def count_quartiles(lis): ..
• 1. 首先介绍Boxplot（箱形图）的定义，这里参考：Understanding Boxplots，非常精彩的一篇介绍boxplot的博文。 该图片显示的即是一个boxplot的... 中值或中位数(median)， 或第二个四分位数 (second quartile,...
• 本博文源于对统计学知识基础的学习，旨在解决如何在分组数据中寻求四分位数
• 四分位数和均值标准差The mean and the median are two of the most common features used when describing numerical data. The two are known as measures of central tendency, meaning they describe a set of ...
• 均值：即平均数，数列中各数总和除以个数。可用numpy.mean函数计算 ...四分位数：将从小到大排列的数列平均分为4段，最小的四分位数称为下四分位数，最大的成为上四分位数，中间的称为中位数 可以用箱线图展
• 本期给大家介绍的是数据分析基础系列，主要给大家介绍的是四分位数的原理与应用，四分位数的计算方式，并基于四分位数，画出箱体图，简要介绍如何通过箱体图来检测数据离群值。结合学习成绩与收入的案例分析，内容...
• import pandas as pd train_df = pd.read_csv("train.csv") q1, q3 = train_df['price'].quantile([0.25, 0.75]) iqr = q3 - q1 outlier = train_df[(train_df['price'] > q3 + iqr * 1.5) | (train_df['price'] ...
• ）就像进行数据处理的时候，有时会遇到求极值（最大值、最小值）、平均值、中位数和四分位数（25%、 75%）的情况。 这一篇博客就是你的福音，让你绝对0基础使用python 进行数据分析。 1、下载py的环境。 这里引用一...

...

python 订阅