numpy百分位数快速入门:用percentile函数分析数据分布
NumPy 百分位数快速入门:用 percentile 函数分析数据分布
在数据分析和统计学中,百分位数是一个非常重要的概念,它可以帮助我们了解数据分布的特征,例如数据的集中趋势、离散程度以及异常值等。NumPy 库提供了一个强大且高效的函数 percentile
来计算百分位数。本文将带你快速入门 NumPy 的 percentile
函数,并通过实例演示如何用它来分析数据分布。
1. 什么是百分位数?
百分位数(Percentile)是将一组数据从小到大排序后,某个特定百分比位置上的数值。例如,第 50 百分位数(也称为中位数)表示有 50% 的数据小于或等于该值。第 25 百分位数(也称为下四分位数)表示有 25% 的数据小于或等于该值,第 75 百分位数(也称为上四分位数)表示有 75% 的数据小于或等于该值。
2. NumPy 的 percentile 函数
NumPy 的 percentile
函数用于计算一个或多个百分位数。其基本语法如下:
python
numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=False)
参数说明:
a
: 输入数组或可转换为数组的对象。q
: 要计算的百分位数,可以是单个数值或一个数值序列(列表、元组或数组),取值范围为 [0, 100]。axis
: 沿着哪个轴计算百分位数。默认情况下 (axis=None
),会对整个数组进行计算,返回一个标量值。如果指定了轴,则沿着该轴计算,并返回一个数组。out
: 可选参数,用于指定输出结果的数组。如果指定了out
,则结果将存储在该数组中。overwrite_input
: 可选参数,布尔值,默认为False
。如果设置为True
,则允许修改输入数组a
,这可以节省内存,但会破坏原始数据。interpolation
: 可选参数,指定当所请求的百分位数位于两个数据点之间时使用的插值方法。默认为'linear'
(线性插值),其他选项包括'lower'
,'higher'
,'midpoint'
,'nearest'
。keepdims
: 可选参数,布尔值,默认为False
。如果设置为True
,则结果数组的维度与输入数组保持一致,只是被计算的轴的长度变为 1。
3. 示例:使用 percentile 函数分析数据分布
让我们通过一些示例来演示如何使用 percentile
函数。
```python
import numpy as np
示例数据:一组学生的考试成绩
scores = np.array([75, 82, 90, 68, 88, 79, 95, 85, 72, 80])
计算第 50 百分位数(中位数)
median_score = np.percentile(scores, 50)
print(f"中位数 (50th percentile): {median_score}")
计算第 25 和 75 百分位数(下四分位数和上四分位数)
q25, q75 = np.percentile(scores, [25, 75])
print(f"下四分位数 (25th percentile): {q25}")
print(f"上四分位数 (75th percentile): {q75}")
计算四分位距 (IQR)
iqr = q75 - q25
print(f"四分位距 (IQR): {iqr}")
计算多个百分位数
percentiles = np.percentile(scores, [10, 30, 50, 70, 90])
print(f"多个百分位数 (10th, 30th, 50th, 70th, 90th): {percentiles}")
沿着多维数组的轴计算百分位数
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
沿着行 (axis=1) 计算第 50 百分位数
row_percentiles = np.percentile(data, 50, axis=1)
print(f"沿着行计算的第 50 百分位数:\n{row_percentiles}")
沿着列 (axis=0) 计算第 50 百分位数
col_percentiles = np.percentile(data, 50, axis=0)
print(f"沿着列计算的第 50 百分位数:\n{col_percentiles}")
使用不同的插值方法
nearest_percentile = np.percentile(scores, 55, interpolation='nearest')
lower_percentile = np.percentile(scores, 55, interpolation='lower')
higher_percentile = np.percentile(scores, 55, interpolation='higher')
print(f"Nearest interpolation: {nearest_percentile}")
print(f"Lower interpolation: {lower_percentile}")
print(f"Higher interpolation: {higher_percentile}")
```
代码输出:
中位数 (50th percentile): 81.0
下四分位数 (25th percentile): 75.75
上四分位数 (75th percentile): 86.5
四分位距 (IQR): 10.75
多个百分位数 (10th, 30th, 50th, 70th, 90th): [72.3 79.3 81. 85.3 91.5]
沿着行计算的第 50 百分位数:
[2. 5. 8.]
沿着列计算的第 50 百分位数:
[4. 5. 6.]
Nearest interpolation: 82
Lower interpolation: 80
Higher interpolation: 82
4. 数据分布分析的应用
- 集中趋势:中位数(第 50 百分位数)是衡量数据集中趋势的一个重要指标,它对异常值不敏感。
- 离散程度:四分位距(IQR,第 75 百分位数与第 25 百分位数之差)反映了数据的离散程度。IQR 越大,数据越分散。
- 异常值检测:通常,可以将小于 Q1 - 1.5 * IQR 或大于 Q3 + 1.5 * IQR 的数据点视为异常值(Q1 为第 25 百分位数,Q3 为第 75 百分位数)。 虽然NumPy 的
percentile
函数不直接提供异常值检测功能,但计算出的百分位数是这一检测方法的关键。 - 数据比较:可以比较不同数据集的百分位数,以了解它们的分布差异。
- 创建箱线图:箱线图(Box Plot)是一种常用的数据可视化工具,它基于百分位数(特别是中位数、四分位数和极值)来显示数据的分布。 虽然
percentile
本身不绘制图表,但它是创建箱线图所需数据的关键。
5. 总结
NumPy 的 percentile
函数是一个强大而灵活的工具,可以用于计算各种百分位数,帮助我们深入了解数据的分布特征。通过结合其他 NumPy 函数和数据可视化工具,percentile
函数在数据分析、统计推断和机器学习等领域都有广泛的应用。 熟练掌握 percentile
函数,将大大提升你的数据分析能力。





如果本内容对您有帮助,欢迎给我打赏,支持创作















































