[tianchi]移动推荐算法大赛[一]

天池大数据竞赛-移动推荐算法大赛
本博客实现最简单的用户购买行为预测流程:根据前一天的交互行为,预测第二天的购买行为。
1、查看、处理user表格和item表格

import pandas as pd
import numpy as np
user_behavior_file = '../fresh_comp_offline/tianchi_fresh_comp_train_user.csv'    # 用户行为数据
item_file = '../fresh_comp_offline/tianchi_fresh_comp_train_item.csv'
#读取user表格数据
userAll = pd.read_csv(user_behavior_file, usecols=['user_id','item_id','behavior_type','time'], encoding='utf-8')
# print(userAll.head())#显示前5行数据
# print(userAll.info())#查看数据表相关信息
# print(userAll.duplicated().sum())#检查有无重复行

#step2:查看、处理item子集表格
#读取item表格数据
itemSub = pd.read_csv(item_file, usecols=['item_id'], encoding='utf-8')
# print(itemSub.item_id.is_unique) #查看子集中商品item编号是否有重复
# print(itemSub.item_id.value_counts().head())#查看每个item_id有多少重复
# print(itemSub.info())#查看商品表相关信息

itemSet = itemSub[['item_id']].drop_duplicates()#去除重复的行
# print(itemSet.info())

2、读取user和item表上的交集

#由于预测user_item(哪些用户买了哪些商品)是在item子集上进行,因此,
# 可以自考虑user在这些商品子集上的交互行为,来预测user_item。
# 当然还可以用全部的user表格通过分析user在不同种类商品的交互行为,来预测user_item

# 合并两列, 默认方法是how=inner, 只合并相同的部分, how的取值可以为['left', 'right', 'outer', 'inner']
userSub = pd.merge(userAll, itemSet, on='item_id', how='inner')
# print(userSub.info())
# print(userSub.head())
userSub.to_csv('./way2Data/userSub.csv', index=False)#将该数据保存到csv文件里

3、处理时间数据

#读取userSub,(先保存userSub,再读取userSub,是更换index为time的一种间接方法,(参数中输入:index_col = 'time')
#此外,userSub作为我们作预测的主要数据集,是需要保存的。 )
userSub = pd.read_csv('./way2Data/userSub.csv', usecols=['user_id','item_id','behavior_type', 'time'], parse_dates = True)
# print(userSub.info())
# print(userSub.head())
userSub = userSub.sort_index().copy()
# print(userSub.index)
# print(userSub.head())

4、进行特征处理

#特征处理包括两部分:
# ①将user-item(用户商品对)的交互行为进行哑变量编码
# ②设置时间窗口,提取交互行为的一段时间内统计量
# print(pd.get_dummies(userSub['behavior_type'], prefix='type').head())#get_dummies是将拥有不同值的变量转换为0/1数值。
typeDummies = pd.get_dummies(userSub['behavior_type'], prefix='type')#onehot哑变量编码
# print(userSub.info())
userSubOneHot = pd.concat([userSub[['user_id', 'item_id', 'time']], typeDummies], axis= 1)#可以将数据根据不同的轴作简单的融合 axis=0根据行融合,axis=1根据列融合

usertem = pd.concat([userSub[['user_id', 'item_id']], typeDummies, userSub[['time']]], axis=1)#将哑变量特征加入表中
# print(usertem.head())
# print(usertem.groupby(['tim
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值