top
本文目录
NumPy 百分位数快速入门:用 percentile 函数分析数据分布

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 函数,将大大提升你的数据分析能力。

THE END
icon
0
icon
打赏
icon
分享
icon
二维码
icon
海报
share
share
share
qrcode

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

正在生成,请稍后
发表评论
添加表情
发表评论
评论列表