聚合
对于大多数数据集,首先要执行的操作之一是计算数据的汇总统计信息,以便在进一步探索数据之前大致了解数据。 除了数据的和、积、中值、最小值和最大值以及分位数等其他聚合,这些汇总统计信息还包括平均值和标准偏差。
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)
尽管它们很相似,请记住 sum 和 np.sum 并不相同。 它们的可选参数具有不同的含义,并且 np.sum 可感知多个数组维度。
最小值和最大值
正如 Python 有内置的 min 和 max 函数,NumPy 也有类似的向量化版本:
np.min(large_array), np.max(large_array)
输出为:
(7.071203171893359e-07, 0.9999997207656334)
还可使用 min、max 和 sum(以及其他多个 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,因此也以你目前为止所学到的所有内容为基础。