在 Python 中计算百分位数

Azaz Farooq 2023年1月30日 2021年2月28日
  1. 在 Python 中使用 scipy 包计算百分位数
  2. 在 Python 中使用 NumPy 包计算百分位数
  3. 在 Python 中使用 math 包计算百分位数
  4. 在 Python 中使用 statistics 包计算百分位数
  5. 在 Python 中使用 NumPy 的线性插值方法计算百分位数
  6. 在 Python 中使用 NumPy 的下插值方法计算百分位数
  7. 在 Python 中使用 NumPy 的高级插值方法计算百分位数
  8. 在 Python 中使用 NumPy 的中点插值方法计算百分位数
在 Python 中计算百分位数

百分位数表示低于某一数值的分数的百分比。例如,一个人的智商为 120,就处于第 91 个百分位数,这意味着他的智商大于 91%的其他人。

本文将讨论一些在 Python 中计算百分位数的方法。

在 Python 中使用 scipy 包计算百分位数

这个包将计算输入序列在给定百分位的得分。scoreatpercentile() 函数的语法如下。

scipy.stats.scoreatpercentile(a, per, limit=(), interpolation_method='fraction', axis=None)

scoreatpercentile() 函数中,参数 a 代表一维数组,per 指定 0 到 100 的百分位数。另外两个参数是可选的。NumPy 库用来获取我们计算百分位数的数字。

完整的示例代码如下。

from scipy import stats
import numpy as np

array = np.arange(100)

percentile=stats.scoreatpercentile(array, 50)

print("The percentile is:",percentile)

输出:

The percentile is: 49.5

在 Python 中使用 NumPy 包计算百分位数

这个包有一个 percentile() 函数,可以计算给定数组的百分位数。percentile() 函数的语法如下。

numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=False)

参数 q 代表百分位数的计算数。a 代表一个数组,其他参数是可选的。

完整的示例代码如下。

import numpy as np

arry = np.array([4,6,8,10,12])

percentile = np.percentile(arry, 50)

print("The percentile is:",percentile)

输出:

The percentile is: 8.0

在 Python 中使用 math 包计算百分位数

math 包及其基本函数-ceil 可用于计算不同的百分比。

完整的示例代码如下。

import math

arry=[1,2,3,4,5,6,7,8,9,10]

def calculate_percentile(arry, percentile):
    size = len(arry)
    return sorted(arry)[int(math.ceil((size * percentile) / 100)) - 1]

percentile_25 = calculate_percentile(arry, 25)
percentile_50 = calculate_percentile(arry, 50)
percentile_75 = calculate_percentile(arry, 75)

print("The 25th percentile is:",percentile_25)
print("The 50th percentile is:",percentile_50)
print("The 75th percentile is:",percentile_75)

math.ceil(x) 将数值四舍五入并返回大于或等于 x 的最小整数,而 sorted 函数则对数组进行排序。

输出:

The 25th percentile is: 3
The 50th percentile is: 5
The 75th percentile is: 8

在 Python 中使用 statistics 包计算百分位数

statistics 包中的 quantiles() 函数用于将数据分解为等概率,并返回 n-1 的分布列表。该函数的语法如下。

statistics.quantiles(data, *, n=4, method='exclusive')

完整的示例代码如下。

from statistics import quantiles

data =[1,2,3,4,5]

percentle=quantiles(data, n=4)

print("The Percentile is:",percentle)

输出:

The Percentile is: [1.5, 3.0, 4.5]

在 Python 中使用 NumPy 的线性插值方法计算百分位数

我们可以使用插值模式计算不同的百分比。插值模式有 linearlowerhighermidpointnearest。当百分位数在两个数据点 ij 之间时,会使用这些插值。当百分位值为 i 时,为低位插值模式,j 代表高位插值模式,i + (j - i) * fraction 代表线性模式,其中 fraction 表示 ij 包围的索引。

下面给出了线性插值模式的完整示例代码。

import numpy as np

arry=np.array([1,2,3,4,5,6,7,8,9,10])

print('percentiles using interpolation = ', "linear")

percentile_10 = np.percentile(arry, 10,interpolation='linear') 
percentile_50 = np.percentile(arry, 50,interpolation='linear') 
percentile_75 = np.percentile(arry, 75,interpolation='linear')

print('percentile_10 = ',percentile_10,', median = ',percentile_50,' and percentile_75 = ',percentile_75)

我们使用 numpy.percentile() 函数,附加参数 interpolation。你可以看到,我们得到的是这种插值的浮动值。

输出:

percentiles using interpolation =  linear
percentile_10 =  1.9 , median =  5.5  and percentile_75 =  7.75

在 Python 中使用 NumPy 的下插值方法计算百分位数

下面给出了较低插值模式的完整示例代码。

import numpy as np

arry=np.array([1,2,3,4,5,6,7,8,9,10])

print('percentiles using interpolation = ', "lower")

percentile_10 = np.percentile(arry, 10,interpolation='lower') 
percentile_50 = np.percentile(arry, 50,interpolation='lower') 
percentile_75 = np.percentile(arry, 75,interpolation='lower')

print('percentile_10 = ',percentile_10,', median = ',percentile_50,' and percentile_75 = ',percentile_75)

输出:

percentiles using interpolation =  lower
percentile_10 =  1 , median =  5  and percentile_75 =  7

你可以看到,最终的百分位数被粗略地调整到了最低值。

在 Python 中使用 NumPy 的高级插值方法计算百分位数

此方法将给出给定数组的百分数,取最高舍入值。

下面给出了高插值模式的完整示例代码。

import numpy as np

arry=np.array([1,2,3,4,5,6,7,8,9,10])

print('percentiles using interpolation = ', "higher")

percentile_10 = np.percentile(arry, 10,interpolation='higher') 
percentile_50 = np.percentile(arry, 50,interpolation='higher') 
percentile_75 = np.percentile(arry, 75,interpolation='higher')

print('percentile_10 = ',percentile_10,', median = ',percentile_50,' and percentile_75 = ',percentile_75)

输出:

percentiles using interpolation =  higher
percentile_10 =  2 , median =  6  and percentile_75 =  8

在 Python 中使用 NumPy 的中点插值方法计算百分位数

此方法将给出百分位数的中点。

下面给出了中点插值模式的完整示例代码。

import numpy as np

arry=np.array([1,2,3,4,5,6,7,8,9,10])

print('percentiles using interpolation = ', "midpoint")

percentile_10 = np.percentile(arry, 10,interpolation='midpoint') 
percentile_50 = np.percentile(arry, 50,interpolation='midpoint') 
percentile_75 = np.percentile(arry, 75,interpolation='midpoint')

print('percentile_10 = ',percentile_10,', median = ',percentile_50,' and percentile_75 = ',percentile_75)

输出:

percentiles using interpolation =  midpoint
percentile_10 =  1.5 , median =  5.5  and percentile_75 =  7.5

相关文章 - Python Math

相关文章 - Python NumPy