# count计数 df_tr_te['user_id_webpage_id_product'] = df_tr_te.groupby(['user_id','product','webpage_id'])['id'].transform('count') # 产品按用户, 天权重 df_tr_te['user_id_day_range'] = df_tr_te.groupby(['user_id','day'])['product'].transform(lambda x : len(x) / np.array(range(1,len(x)+1))) # 产品按用户权重 df_tr_te['user_id_range'] = df_tr_te.groupby(['user_id'])['product'].transform(lambda x : len(x) / np.array(range(1,len(x)+1))) # 网页按用户, 产品权重 df_tr_te['user_id_product_webpage_range'] = df_tr_te.groupby(['user_id','product'])['webpage_id'].transform(lambda x : len(x) / np.array(range(1,len(x)+1))) # 网页按用户, 活动权重 df_tr_te['user_id_campaign_id_webpage_range'] = df_tr_te.groupby(['user_id','campaign_id'])['webpage_id'].transform(lambda x : len(x) / np.array(range(1,len(x)+1)))
时间: 2023-07-16 13:11:56 浏览: 20
这是一段用于特征工程的代码,主要是对数据进行分组并计算一些统计量,以生成新的特征。具体来说,这段代码使用了 Pandas 库中的 groupby 函数,将数据按照指定的列分组,并对每个分组执行相应的聚合函数来生成新的特征。例如,'user_id_webpage_id_product' 特征是对 'user_id', 'product', 'webpage_id' 三个列进行分组,然后对每个分组计算 'id' 列的数量,从而得到一个新的特征。其他特征的生成方式类似,只是使用的聚合函数不同。这些新特征可以用于机器学习模型的训练和预测,以提高模型的性能。
相关问题
# 不同组合的时间均值 lis_i_1 = ['user_id','product','campaign_id','webpage_id','product_category_id', 'user_group_id','age_level','gender','user_depth','var_1'] for c in lis_i_1: df_tr_te[str(c) + '_user_time_hour_mean'] = df_tr_te.groupby(c)['user_time_hour'].transform('mean') df_tr_te[str(c) + '_user_time_day_mean'] = df_tr_te.groupby(c)['user_time_hour'].transform('mean') df_tr_te[str(c) + '_user_time_hour_sum'] = df_tr_te.groupby(c)['user_time_hour'].transform('sum') df_tr_te[str(c) + '_user_time_day_sum'] = df_tr_te.groupby(c)['user_time_hour'].transform('sum')
这段代码的作用是对数据集进行特征工程处理,根据不同的组合将用户在不同时间段内的行为进行统计。具体来说,对于列表 `lis_i_1` 中的每个特征,都构造了四个新特征:
- `str(c) + '_user_time_hour_mean'`:表示在当前特征值相同的情况下,用户行为在每小时的平均次数。
- `str(c) + '_user_time_day_mean'`:表示在当前特征值相同的情况下,用户行为在每天的平均次数。
- `str(c) + '_user_time_hour_sum'`:表示在当前特征值相同的情况下,用户行为在每小时的总次数。
- `str(c) + '_user_time_day_sum'`:表示在当前特征值相同的情况下,用户行为在每天的总次数。
通过对不同特征的不同组合,可以得到更加丰富的用户行为特征,对于模型的训练和预测都会有一定的帮助。
# nunique特征 for i in ['product','campaign_id','webpage_id','product_category_id']: df_tr_te['day_'+str(i)+'_nunique'] = df_tr_te.groupby(['user_id','day'])[i].transform('nunique') df_tr_te['day_'+str(i)+'_nunique_p%'] = df_tr_te['user_idday_cnt'] / df_tr_te['day_'+str(i)+'_nunique'] df_tr_te['day_web_nunique'] = df_tr_te.groupby(['user_id','day','hour'])['webpage_id'].transform('nunique')
这段代码中,首先针对四个特征('product','campaign_id','webpage_id','product_category_id'),使用 pandas 中的 groupby 函数,按照用户和日期进行分组,并统计每个用户在每个日期内该特征的不同取值个数(nunique)。然后,将统计结果除以每个用户在该日期内的总操作次数('user_idday_cnt')得到一个比例特征('day_'+str(i)+'_nunique_p%')。最后,又针对 'webpage_id' 特征,进一步在每个用户、日期和小时级别上统计该特征的不同取值个数。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)