前言
空气质量污染物序列中一般会涉及第多少百分位数,如臭氧浓度的第90百分位数浓度。本文介绍百分位数的计算方法。
计算方法
污染物浓度序列第 p \boldsymbol{p} p百分位数的计算步骤:
- 将污染物浓度序列按数值大小从小到大排序,不妨设为 { X \boldsymbol\{{X} {X i _{i} i , i = 1 , 2 , ⋅ ⋅ ⋅ n \boldsymbol{,i=1,2,~·~·~·~n} ,i=1,2, ⋅ ⋅ ⋅ n } \boldsymbol{\}} }。
- 计算第
p
\boldsymbol{p}
p百分位数
m
\boldsymbol{m}
m
p
_{p}
p的位置索引
k
\boldsymbol{k}
k(从1开始),公式为
k = 1 + ( n − 1 ) × p % \boldsymbol{k=1+(n-1)×p\%} k=1+(n−1)×p%
式中:
k — p % 位 置 索 引 \boldsymbol{k—p\%位置索引} k—p%位置索引
n — 污 染 物 浓 度 序 列 中 的 数 值 个 数 \boldsymbol{n—污染物浓度序列中的数值个数} n—污染物浓度序列中的数值个数 - 第
p
\boldsymbol{p}
p百分位数
m
\boldsymbol{m}
m
p
_{p}
p计算公式为
m \boldsymbol{m} m p _{p} p = X \boldsymbol{=X} =X ( s ) _{(s)} (s) + ( X \boldsymbol{+(X} +(X ( s + 1 ) _{(s+1)} (s+1) − X \boldsymbol{-X} −X ( s ) _{(s)} (s) ) × ( k − s ) \boldsymbol{)×(k-s)} )×(k−s)
式中:
s — k 的 整 数 部 分 , 当 k 为 整 数 时 , s 与 k 相 等 。 \boldsymbol{s—k的整数部分,当k为整数时,s与k相等。} s—k的整数部分,当k为整数时,s与k相等。
计算示例
举一个计算的例子:
计
算
序
列
{
3
,
4
,
8
,
2
,
5
,
4
}
的
第
90
百
分
位
数
。
\boldsymbol{计算序列\{3,4,8,2,5,4\}的第90百分位数。}
计算序列{3,4,8,2,5,4}的第90百分位数。
计算过程:
- 从小到大排序
排序后的序列为 { 2 , 3 , 4 , 4 , 5 , 8 } \boldsymbol{\{2,3,4,4,5,8\}} {2,3,4,4,5,8} - 计算索引
k
\boldsymbol{k}
k
k = 1 + ( 6 − 1 ) × 90 % = 5.5 \boldsymbol{k=1+(6-1)×90\%=5.5} k=1+(6−1)×90%=5.5 - 计算
m
\boldsymbol{m}
m
p
_{p}
p
m \boldsymbol{m} m p _{p} p = 5 + ( 8 − 5 ) × ( 5.5 − 5 ) = 6.5 \boldsymbol{=5+(8-5)×(5.5-5)=6.5} =5+(8−5)×(5.5−5)=6.5
即该序列的 90 \boldsymbol{90} 90百分位数位6.5。
Python代码实现
def percent_number_cal(data_list: List[float], p: int) -> float:
"""
计算序列指定百分位数
:param data_list: 序列
:param p: 需计算的百分位数
:return: 第p百分位数
"""
sorted_data = sorted(data_list, reverse=False)
k = 1 + (len(sorted_data) - 1) * p / 100
return sorted_data[int(k) - 1] + (sorted_data[int(k)] - sorted_data[int(k) - 1]) * (k - int(k))
以下是本人独自运营的微信公众号,用于分享个人学习及工作生活趣事,大家可以关注一波。
