聚合

已完成

对于大多数数据集,首先要执行的操作之一是计算数据的汇总统计信息,以便在进一步探索数据之前大致了解数据。 除了数据的和、积、中值、最小值和最大值以及分位数等其他聚合,这些汇总统计信息还包括平均值和标准偏差。

NumPy 具有用于处理数组的快速内置聚合函数。 它们是本子节的主题。

对数组的值进行求和

可使用内置的 Python sum 函数对数组中的值进行求和。

import numpy as np
myList = np.random.random(100)
sum(myList)

输出为:

50.461758453195614

如果你猜也有用于此操作的 NumPy 内置函数,那你猜对了:

np.sum(myList)

输出为:

50.46175845319564

如果你猜 NumPy 版本的速度更快,那你又猜对了:

large_array = np.random.rand(1000000)
%timeit sum(large_array)
%timeit np.sum(large_array)

输出为:

124 ms ± 5.38 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
814 µs ± 74.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

尽管它们很相似,请记住 sumnp.sum 并不相同。 它们的可选参数具有不同的含义,并且 np.sum 可感知多个数组维度。

最小值和最大值

正如 Python 有内置的 minmax 函数,NumPy 也有类似的向量化版本:

np.min(large_array), np.max(large_array)

输出为:

(7.071203171893359e-07, 0.9999997207656334)

还可使用 minmaxsum(以及其他多个 NumPy 聚合)作为数组对象本身的方法:

print(large_array.min(), large_array.max(), large_array.sum())

输出为:

7.071203171893359e-07 0.9999997207656334 500216.8034810001

多维聚合

通常会将二维数组的行和列区别看待(例如,将列视为变量,将行视为这些变量的观察值)。 因此,通常需要沿行或列来聚合数组数据。 请考虑一个二维数组:

md = np.random.random((3, 4))
print(md)

输出为:

[[0.79832448 0.44923861 0.95274259 0.03193135]
 [0.18441813 0.71417358 0.76371195 0.11957117]
 [0.37578601 0.11936151 0.37497044 0.22944653]]

除非另外指定,否则每个 NumPy 聚合函数都将计算整个数组的聚合。 因此,对于:

md.sum()

输出为:

5.1136763453287335

聚合函数采用一个额外的参数,以指定要沿其计算聚合的轴。 例如,可通过指定 axis=0 来查找每个列中的最小值:

md.min(axis=0)

输出为:

array([0.18441813, 0.11936151, 0.37497044, 0.03193135])

亲自试一试

尝试 md.max(axis=1) 时,会出现什么情况?


提示(展开以显示)
md.max(axis=1)

输出为:

array([0.95274259, 0.76371195, 0.37578601])




请记住,axis 关键字指定要折叠的数组维度,而不是将返回的维度。 因此,如果指定 axis=0,则将折叠第一个轴。 对于二维数组,这意味着将聚合每个列中的值。

其他聚合函数

下表列出了其他 NumPy 聚合函数。 大多数 NumPy 聚合具有“NaN-safe”版本,它会计算结果,同时忽略由 NaN 值标记的缺失值。

函数名称 NaN-safe 版本 说明
np.sum np.nansum 计算元素的总和
np.prod np.nanprod 计算元素的乘积
np.mean np.nanmean 计算元素的平均值
np.std np.nanstd 计算标准偏差
np.var np.nanvar 计算方差
np.min np.nanmin 查找最小值
np.max np.nanmax 查找最大值
np.argmin np.nanargmin 查找最小值的索引
np.argmax np.nanargmax 查找最大值的索引
np.median np.nanmedian 计算元素的中值
np.percentile np.nanpercentile 计算元素的基于排名的统计信息
np.any 不适用 计算是否有任何元素为 true
np.all 不适用 计算是否所有元素都为 true

在本课程的其余部分,我们将经常看到这些聚合。

要点

聚合是用于浏览数据的主要方法,不仅仅是在使用 NumPy 时,尤其是在与 pandas(下一节将介绍的 Python 库)结合使用时。 本部分的内容基于 NumPy,因此也以你目前为止所学到的所有内容为基础。