Python广告数据挖掘与分析实战
上QQ阅读APP看书,第一时间看更新

3.2.4 数据聚合

数据聚合通常是要使每一个数组生成一个单一的数值,以便后续查看和分析结果,比如我们会查看每月的支出情况,计算当月或每天的平均支出等。

数据聚合的一般流程如下:

1)按某字段对数据进行分组拆分;

2)对不同组的数据应用不同的聚合函数进行转换;

3)把不同组得到的结果合并起来。

总结来说,即“拆分→应用→合并”这样一个过程。我们可以通过groupby函数来完成此类操作,还是以前面的用户画像数据为例,部分数据样例如图3-6所示。

图3-6 广告用户画像部分数据样例

例如现在要对System列进行分组,计算Num列的平均值:


In [89]: grp = df.groupby('System')['Num']

In [90]: grp
Out[90]: <pandas.core.groupby.SeriesGroupBy object at 0x00000000113B8080>

可以看到grp是Python中的groupby对象,也就是说它是我们数据拆分后的中间结果。如果需要计算平均值,可直接在groupby对象grp上调用mean方法:


In [91]: grp.mean()
Out[91]:
System
android    50.120690
iOS        48.642857
Name: Num, dtype: float64

从输出结果可以看到,System列有两个分组,即android和iOS,以及每个分组下Num的平均值。

另外,如果需要按多个字段分组,我们可以将多个列名放到同一个list中,作为groupby的参数:


In [92]: df.groupby(['System','Sex'])['Num'].mean()
Out[92]:
System   Sex
android  F      48.861111
         M      52.181818
iOS      F      40.777778
         M      60.500000
         未知    24.750000
Name: Num, dtype: float64

Pandas提供了常用的聚合函数来帮助我们进行聚合计算,具体如表3-7所示。

表3-7 常用的聚合函数

同时,我们也可以自定义聚合函数,如下所示:


In [93]: def myfun(obj):
    ...:     return np.mean(obj ** 2 - 10)

In [94]: df.groupby(['System'])['Num'].apply(myfun)
Out[94]:
System
android    3338.500000
iOS        3183.738095
Name: Num, dtype: float64

通过apply函数来使用我们自定义的聚合函数,可以理解为对我们拆分好的结果循环调用自定义聚合函数来进行计算。