Python中的numpy.quantile()

2025年1月5日 | 阅读6分钟

Python 是一种功能强大且用途广泛的编程语言,因其丰富的库生态系统而成为数据科学家、统计学家和研究人员的首选。NumPy 是其中一个在数值运算和数据处理方面发挥关键作用的库。在 NumPy 提供的众多函数中,`numpy.quantile()` 函数作为分析和理解数据分布的宝贵工具脱颖而出。在本文中,我们将深入探讨 `numpy.quantile()` 的细节,并探讨其在各种场景中的应用。

NumPy 简介

NumPy,即 Numerical Python 的缩写,是 Python 中科学计算的基础包。它支持大型多维数组和矩阵,以及一套用于对这些数组进行操作的高级数学函数。NumPy 是一个开源库,广泛应用于数据科学、机器学习和科学研究等领域。

理解分位数

在深入研究 `numpy.quantile()` 函数之前,了解分位数的概念至关重要。在统计学中,分位数是数据点或一组数据点,它将数据分成等概率的区间。最著名的分位数是中位数(将数据分成两半)和四分位数(将数据分成四等份)。

分位数用分数或百分比表示,指示分位数以下的数据比例。例如,中位数是第 50 个百分位数,表示它将数据分成两个相等的部分。

numpy.quantile() 简介

numpy.quantile() 函数是 NumPy 中的一个强大工具,它允许用户沿指定轴计算数据集的分位数。该函数语法如下:

  • a:输入数组或可以转换为数组的对象。
  • q:要计算的分位数或分位数序列,其中每个分位数必须是 0 到 1 之间的值。
  • axis:计算分量的轴。默认值为 None,表示沿数组的展平版本计算分位数。
  • out:用于存储结果的数组。如果提供,它必须与预期输出具有相同的形状和缓冲区长度。
  • overwrite_input:如果为 True,则输入数组 a 可用作输出的临时存储。默认为 False。
  • interpolation:指定当所需分位数介于两个数据点之间时要使用的插值方法。
  • keepdims:如果为 True,则输出数组的维度数与输入数组相同,在被缩减的维度上大小为 1。

通过示例计算分位数

让我们通过一系列示例来探索 `numpy.quantile()` 的功能:

示例1:基本用法

输出

The median of the data is: 3.0

在此示例中,我们有一个简单的数组 [1, 2, 3, 4, 5],我们计算第 50 个百分位数,即中位数。输出将是 3.0,正如预期的那样。

示例 2:计算多个分位数

输出

The 25th percentile is: 1.5
The median is: 3.0
The 75th percentile is: 4.5

在这里,我们计算同一数据数组的第 25、50 和第 75 个百分位数。输出将是相应的分位数 1.5、3.0 和 4.5。

示例 3:沿轴计算

输出

Quantiles along columns: [[4. 5. 6.]
 [4. 5. 6.]
 [7. 8. 9.]]

在此示例中,我们有一个二维数组(矩阵),我们沿列(axis=0)计算分位数。输出将是一个包含每列相应分位数的数组。

示例 4:指定插值方法

输出

Quantile with 'lower' interpolation: 2

在这里,我们有一个包含重复值的数据集。通过将插值方法指定为“lower”(向下取整),我们确保当所需分位数介于两个数据点之间时,插值使用较低的边界。

实际应用

现在我们已经很好地掌握了如何使用 `numpy.quantile()`,让我们探讨一些实际场景中的应用。

场景 1:分析收入分布

假设您有一个代表人口收入的数据集。通过使用 `numpy.quantile()`,您可以轻松计算各种百分位数以深入了解收入分布。这些信息对于制定政策、经济学家和社会科学家研究收入不平等至关重要。

输出

The median income is: 75000.0
The upper quartile income is: 87500.0

场景 2:评估考试成绩

考虑一个代表班级学生分数的数据集。通过使用分位数,您可以分析成绩分布,确定表现最佳的学生,并了解成绩的分布情况。

输出

The median exam score is: 90.0
The top 10% score is: 98.0

场景 3:金融风险管理

在金融领域,了解金融回报的分布对于风险管理至关重要。通过计算分位数,分析师可以识别极端事件,计算风险价值 (VaR),并做出明智的决策以减轻潜在损失。

输出

The 5% Value at Risk is: -1
The expected loss is: 2.0

虽然提供的示例为在常见场景中使用 `numpy.quantile()` 奠定了坚实的基础,但还有更多内容需要探索,并且还有其他功能可以用于高级用例。让我们深入研究使用 Python 中的分位数时的一些高级功能和注意事项。

自定义插值

numpy.quantile() 中的 interpolation 参数允许您在所需分位数落在两个数据点之间时自定义值的插值方式。默认值为“linear”(线性),但其他选项包括“lower”(向下取整)、“higher”(向上取整)、“nearest”(最近)、“midpoint”(中点)等。理解不同插值方法的影响至关重要,尤其是在处理离散数据集或异常值时。

输出

Quantile with 'nearest' interpolation: 3

处理缺失值

处理包含缺失值的数据集是一个常见的挑战。numpy.quantile() 函数提供了一种使用 nan_policy 参数方便地处理这些情况的方法。将 nan_policy 设置为“omit”(忽略)可将任何 NaN 值排除在计算之外。

输出

Quantile without NaN values: 3.0

实际应用:A/B 测试分析

A/B 测试是实验和分析领域中的一项常见实践,用于比较产品或系统的两个版本(A 和 B)。分位数在 A/B 测试分析中起着至关重要的作用,有助于评估更改对用户行为不同百分位的影响。

输出

Median of version A: 20.0
Median of version B: 22.0
75th percentile of version A: 27.5
75th percentile of version B: 30.5

在此示例中,分位数有助于比较版本 A 和 B 之间用户参与度指标的中心趋势和分布。分析不同百分位数可以比仅比较平均值更深入地了解更改的影响。

结论

总之,Python NumPy 库中的 `numpy.quantile()` 函数是分析数据分布的通用且强大的工具。它能够沿指定轴计算分位数、处理插值方法以及提供广泛的统计数据,使其成为数据科学家和分析师的宝贵资产。无论您是处理收入数据、考试成绩还是金融回报,通过分位数了解数据分布都可以为决策和分析提供有价值的见解。本文中介绍的示例和场景展示了 `numpy.quantile()` 在各种现实世界情况下的灵活性和适用性,突显了其在统计分析和数据探索中的重要性。