Python程序设计与实践 大作业实验报告 陆阳 孙勇 裘升明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江工商大学计算机与信息工程学院
《Python程序设计与实践》大作业报告
专业:计科
班级: 1404
学号:、、
姓名:陆阳,孙勇,裘昇明
指导教师:蒲飞
2015 年 6 月 28 日
题目介绍:
在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。在完成这件任务的过程中,我们不仅需要利用用户在这个商品子集上的行为数据,往往还需要利用更丰富的用户行为数据。定义如下的符号:
U——用户集合
I——商品全集
P——商品子集,P ⊆ I
D——用户对商品全集的行为数据集合
那么我们的目标是利用D来构造U中用户对P中商品的推荐模型。
数据说明:
竞赛数据包含两个部分。第一部分是用户在商品全集上的移动端行为数据(D),表名为tianchi_mobile_recommend_train_user,包含如下字段:
第二个部分是商品子集(P),表名为tianchi_mobile_recommend_train_item,包含如下字段:
训练数据包含了抽样出来的一定量用户在一个月时间(11.18~12.18)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天(12.19)对商品子集(P)的购买数据。参赛者要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为的预测结果。
大作业报告内容包括以下几个部分
1、数据分组统计:
可统计有多少用户、商品、商品类别等信息,甚至每天各种行为的统计数。如图:还有,在给出的用户行为数据中,有些用户在整个11-18日至12-18日对商品有浏览行为记录,但是从未产生过购买行为,这些用户会否在12月19号购买商品实难预测,
因此,我们去除这些无购买行为的用户信息,认为这些用户在12月19号还是不会购买任何商品。
贴关键代码
import time
import pandas as pd
start=time.time()
df_items=pd.read_csv("tianchi_mobile_recommend_train_item.csv")
df_items2=pd.read_csv("tianchi_mobile_recommend_train_user.csv")
df_items3=pd.DataFrame()
df_items4=pd.DataFrame()
df_items5=pd.DataFrame()
df_items3=df_items["item_id"].drop_duplicates()
df_items4=df_items["item_category"].drop_duplicates()
df_items5=df_items[df_items.item_geohash.notnull()]
df_items5=df_items5["item_id"].drop_duplicates()
df_items6=df_items2["user_id"].drop_duplicates()
df_items7=df_items2["item_id"].drop_duplicates()
df_items8=df_items2["item_category"].drop_duplicates()
total_behavior_num=len(df_items2)
df_items9=df_items2[df_items2.behavior_type==4]
df_items10=df_items2[df_items2.behavior_type!=4]
positive_num=len(df_items9)
negative_num=len(df_items10)
item_num=len(df_items3)
item_categories_num=len(df_items4)
item_geohash_num=len(df_items5)
user_num=len(df_items6)
item_full_num=len(df_items7)
item_categories_full_num=len(df_items8)
end=time.time()
print '商品子集中商品个数为:',item_num
print '商品子集中商品类型数为:',item_categories_num
print '商品子集中带geohash信息的商品个数为:',item_geohash_num
print '用户数一共有:',user_num
print '商品全集中商品个数为:',item_full_num
print '商品全集中商品种类数数为:',item_categories_full_num
print '商品全集中共有%d条行为记录' %(total_behavior_num)
print '消费行为记录中负正样本比为%d:1' %(negative_num/positive_num)
print '一共耗时%f秒' %(end-start)
2、数据预处理
⑴重新整理时间
重新整理数据的时间,也就是Time字段,在数据统计分组中也提到过,因为原始数据的用户行为时间记录是从11月18日0时到12月18日23时,精确到小时级,为了方便数据集的划分,需要将用户行为时间数据整理为0-30天,以天为单位,即11月18日的time为0、11月19日的time为1,以此类推。
贴关键代码
import pandas as pd
from datetime import *
import time
t0=time.time()
begin_time=datetime(2014,11,18,0,0)
def trans_time(str_time):
entry_time=datetime.strptime(str_time,"%Y-%m-%d %H")
datatime_delta=(entry_time-begin_time).days
return int(datatime_delta)
df_train_user=pd.read_csv("tianchi_mobile_recommend_train_user.csv")
print "========================================\n"
print "时间转换进行中 ...\n"
df_train_user.to_csv("train_trans_time.csv",index=False)