p分位数的原理及计算

p分位数的原理及计算

目录

1.统计上的分位数概念

2.分位数的计算方法及举例

2.1确定p分位数的位置

2.2 确定的p分位数位置处的具体值

2.3 举例分析

3.python、R、excel中分位数的计算及结果

3.1 python

3.2 R

3.3 excel

4.p分位数在python中的应用——等频分箱

1.统计上的分位数概念

统计上,分位数亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。分位数指的就是连续分布函数中的一个点,这个点对应概率p。若概率0

四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

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

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

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

第三四分位数与第一四分位数的差距又称四分位距。

2.分位数的计算方法及举例

为了更一般化,这里考虑四分位。即当p=0.25 0.5 0.75 时,所求得的分位数值。过程分为三步:

将数据从小到大排列确定p分位数的位置确定p分位数具体的数值

为了更好得说明,这里我们设n表示数据的长度,Q1、Q2、Q3分别表示所求的第1分位数、第2分位数、第3分位数。position()表示分位数的位置,figure()表示分位数处的值。将n个数据从小到大排列,记排序前的数据为before_data;排序后的数据为data,简记为a[1]~a[n]

2.1确定p分位数的位置

p分位数的位置公式如下:

position = 1+(n-1)*p

由公式,第1分位数、第2分位数、第3分位数的位置分别为:

2.2 确定的p分位数位置处的具体值

p分位数的值的计算公式如下:

figure(Q1) = data[ ⌊position(Q1)⌋ ] +(data[ ⌊position(Q1)⌋+1] - data[ ⌊position(Q1)⌋])*(position(Q1)-⌊position(Q1)⌋)

= a[ ⌊1 +(n-1)* 0.25⌋ ] +( a[ ⌊1 +(n-1)* 0.25⌋+1 ]-a[ ⌊1 +(n-1)* 0.25⌋ ])*(1 +(n-1)* 0.25 - ⌊1 +(n-1)* 0.25⌋)

figure(Q2) = data[ ⌊position(Q2)⌋ ] +(data[ ⌊position(Q2)⌋+1] - data [ ⌊position(Q2)⌋])*(position(Q2)-⌊position(Q2)⌋)

= a[ ⌊1 +(n-1)* 0.5⌋ ] +( a[ ⌊1 +(n-1)* 0.5⌋+1 ]-a[ ⌊1 +(n-1)* 0.5⌋ ]) * (1 +(n-1)* 0.5 - ⌊1 +(n-1)* 0.5 ⌋)

figure(Q3) = data[ ⌊position(Q3)⌋ ]+(data[ ⌊position(Q3)⌋+1] - data[ ⌊position(Q3)⌋])*(position(Q3)-⌊position(Q3)⌋)

= a[ ⌊1 +(n-1)* 0.75⌋ ] +( a[ ⌊ 1 +(n-1)* 0.75⌋+1 ]-a[ ⌊1 +(n-1)* 0.75⌋ ])*(1 +(n-1)* 0.75 - ⌊1 +(n-1)* 0.75⌋)

也就是说,将数据从小到大排列,p分位数位置的值 = 位于p分位数取整后位置的值 + (位于p分位数取整下一位位置的值 - 位于p分位数取整后位置的值)*(p分位数位置 - p分位数位置取整)

注:其中 ⌊Q⌋ 表示对 Q 值向下取整

2.3 举例分析

实例1:

给出一组数据before_data:6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36,一共11项

从小到大排序后结果data:6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49

figure(Q1) = data[ ⌊position(Q1)⌋ ] +(data[ ⌊position(Q1)⌋+1] -data[ ⌊position(Q1)⌋])*(position(Q1) - ⌊position(Q1)⌋)

= a[ ⌊ 3.5⌋ ] +( a[ ⌊ 3.5⌋+1 ]-a[ ⌊ 3.5⌋ ])*(3.5 - ⌊ 3.5 ⌋)

= a[3] + (a[4] - a[3]) * (3.5-3)

= 15+(36-15)*(3.5-3)

= 25.5

figure(Q2) = data[6] = 40

figure(Q3) = data[ ⌊position(Q3)⌋ ]+(data[ ⌊position(Q3)⌋+1] - data[ ⌊position(Q3)⌋])*(position(Q3) - ⌊position(Q3)⌋)

= a[ ⌊8.5⌋ ] +( a[ ⌊ 8.5⌋+1 ]-a[ ⌊ 8.5⌋ ])*(8.5 - ⌊8.5⌋)

= a[8] + (a[9] - a[8]) * (8.5-8)

= 42+(43-42)*(8.5-8)

= 42.5

实例2:

给出一组数据before_data:7, 15, 36, 39, 40, 41,20,18,一共8项

从小到大排序后结果data:7,15,18,20,36,39,40,41

figure(Q1) = data[ ⌊position(Q1)⌋] + (data[ ⌊position(Q1)⌋+1] - data[ ⌊position(Q1)⌋]) * (position(Q1) - ⌊position(Q1)⌋)

= a[2] + (a[3] - a[2] ) * (2.75-2)

= 15 + (18-15)*(2.75-2)

= 17.25

figure(Q2) = data[ ⌊position(Q2)⌋] + (data[ ⌊position(Q2)⌋+1] - data[⌊position(Q2)⌋]) * (position(Q2) - ⌊position(Q2)⌋)

= 20 + (36-20)*(4.5-4)

= 28

figure(Q3) = data[ ⌊position(Q3)⌋] + (data[ ⌊position(Q3)⌋+1] - data[ ⌊position(Q3)⌋]) * (position(Q3) - ⌊position(Q3)⌋)

= 39 + (40-39)*(6.25-6)

= 39.25

备注:p分位数位置的计算还有很多形式,因为我并没有遇到,所以这里不多做介绍。感兴趣的可参阅

https://en.wikipedia.org/wiki/Quantile 或 https://en.wanweibaike.com/wiki-quantilehttps://www-users.york.ac.uk/~mb55/intro/quantile.htm分位数Excel四分位数函数:QUARTILE.EXC与QUARTILE.INC的区别

p分位数​​​​​的估算类型——截取自

上面链接

3.python、R、excel中分位数的计算及结果

3.1 python

numpy和pandas中都有计算p分位数的方法,numpy中用 percentile,pandas中用 quantile,两种方法计算结算结果一样。

import numpy as np

import pandas as pd

# array数据处理

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

test2 = np.array([7, 15, 36, 39, 40, 41, 20, 18]) # 不需要从小到大排序

# 法一:用numpy中的percentile

print("实例1,numpy中第一分位数为:",np.percentile(test1, 25))

print("实例1,numpy中第二分位数为:",np.median(test1))

print("实例1,numpy中第三分位数为:",np.percentile(test1, 75))

# 法二:用pandas中的quantile

b1 = pd.DataFrame(test1) # 数据转化

print("实例1,pandas中第一分位数为:",b1.quantile(0.25))

print("实例1,pandas中第二分位数为:",b1.median())

print("实例1,pandas中第三分位数为:",b1.quantile(0.75))

# 法一:用numpy中的percentile

print("实例2,numpy中第一分位数为:",np.percentile(test2, 25))

print("实例2,numpy中第二分位数为:",np.median(test2))

print("实例2,numpy中第三分位数为:",np.percentile(test2, 75))

# 法二:用pandas中的quantile

b2 = pd.DataFrame(test2) # 数据转化

print("实例2,pandas中第一分位数为:",b2.quantile(0.25))

print("实例2,pandas中第二分位数为:",b2.median())

print("实例2,pandas中第三分位数为:",b2.quantile(0.75))

python运行结果如下:

3.2 R

3.3 excel

可见,在python、R、excel下计算结果与2中计算结果相同。

4.p分位数在python中的应用——等频分箱

import numpy as np

import pandas as pd

#百分位数实现数据分箱

data = pd.DataFrame(columns=['l','s'])

data['l'] = np.random.randint(0,999,size = 1000) #生成给定上下限范围的随机数

data['s'] = 1 #便于下一步的统计总数

#print(data)

#通过np.percentile找到分位点

l_bin=[]

for i in range(0,101,10):

l_bin.append(np.percentile(data['l'],i))

#对随机数进行切分,right=False时左闭右开

data['box']=pd.cut(data['l'],l_bin,right=False)

tj=data.groupby('box')['s'].agg('sum')

print('分箱统计')

print(tj)

结果如下:

可见在每个分箱内,其总数值在100左右。说明实现了等频分箱,且可知分箱的上下限。进而可以实现自定义标签的应用。

参考链接:

https://www.cnblogs.com/gispathfinder/p/5770091.html

https://blog.csdn.net/u011327333/article/details/71263081?locationNum=14&fps=1

利用python 计算百分位数实现数据分箱

数理统计

茆诗松《概率论与数理统计》

相关推荐