Python机器学习小知识:特征统计及整合函数

在机器学习构建特征的过程中经常需要统计不同的数值,并且Merge到一起。通常步骤如下
在pandas中进行统计的步骤如下:
(1) 首先通过 groupby 函数得到 DataFrameGroupBy 对象, 比如data.groupby('race')。
(2) 然后选择需要研究的列,这样我们就得到了一个 SeriesGroupby , 它代表每一个组都有一个 Series 。
(3) 对 SeriesGroupby 进行操作, 比如 .mean(), 相当于对每个组的Series求均值。
(4) 在生成统计特征后,还要使用pandas.merge()函数将统计后的特征整合起来。

从0.20.1开始,pandas引入了agg函数。groupby 函数可以看做是基于行(或者说index)的聚合操作,而 agg 函数提供基于列的聚合操作。从实现上看,groupby 函数返回的是一个 DataFrameGroupBy 结构,这个结构必须调用聚合函数(如sum 函数),才会得到结构为Series的数据。而agg 函数是 DataFrame 的直接方法,返回的也是一个 DataFrame 。当然,很多功能用 sum、mean 等函数也可以实现。但是 agg 函数更加简洁。具体说明如下:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.agg.html

我们可以进一步的,在AGG函数的基础上,编写统计特征生成函数,就是将以上工作整合到可复用的函数中。这样,不仅增加统计特征,而且使用便捷,直接调用即可,提高了开发效率。具体代码如下所示:

# 统计特征处理函数
# df: 添加特征的dataframe
# df_group: 特征生成的数据集
# group_cols: group by 的列
# value_col: 被统计的列
# agg_ops:处理方式 包括:count,mean,sum,std,max,min,nunique
# colname: 新特征的名称
def add_agg_feature_names(df, df_group, group_cols, value_col, agg_ops, col_names):
    df_group[value_col]=df_group[value_col].astype('float')
    df_agg = pd.DataFrame(df_group.groupby(group_cols)[value_col].agg(agg_ops)).reset_index()
    df_agg.columns = group_cols + col_names
    df = df.merge(df_agg, on=group_cols, how="left")
上一篇:认证故事|我和阿里云的这些年


下一篇:Python机器学习小知识:pandas.apply