一、项目背景与目的
1.1项目背景
UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究。数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。
1.2项目目标本次分析的目的是想通过对淘宝用户行为数据分析,为以下问题提供解释和改进建议:
分析用户使用淘宝过程中的常见电商分析指标,建立用户行为转化漏斗模型,确定各个环节的流失率,找到需要改进的环节;研究用户在不同时间尺度下的行为规律,找到用户在不同时间周期下的活跃规律,据此提出相应的营销策略;
分析用户对不同种类商品的偏好,提出针对不同商品的营销策略;通过RFM模型对用户进行分层,对不同类型用户的行为进行分析,并提出相应的运营策略。
1.3数据集来源与介绍
数据源:淘宝用户购物行为数据集_数据集-万邦科技(http://o0b.cn/iimiya)
UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究。
文件名称说明包含特征UserBehavior.csv包含所有的用户行为数据用户ID,商品ID,商品类目ID,行为类型,时间戳UserBehavior.csv本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
列名称说明
用户ID整数类型,序列化后的用户ID商品ID整数类型,序列化后的商品ID
商品类目ID整数类型,序列化后的商品所属类目ID
行为类型字符串,枚举类型,包括('pv','buy','cart','fav')
时间戳行为发生的时间戳注意到,用户行为类型共有四种,它们分别是
行为类型说明
pv商品详情页pv,等价于点击buy商品购买
cart将商品加入购物车
fav收藏商品
关于数据集大小的一些说明如下
维度数量
用户数量987,994商品数量4,162,024
用户数量987,994
商品类目数量9,439
所有行为数量100,150,807
二、分析框架
三、数据清洗
3.1数据导入
使用MySQL新建一个数据库
CREATEDATABASEIFnotEXISTS淘宝用户行为
CHARACTERSET'utf8mb4';
导入外部数据源
因为数据量过大,所以选择导入前1000000行数据
源数据集中不包含字段名称行,导入时字段名行设置为0,第一个数据行设置为1。
导入完成,耗时1分17秒
3.2重命名列名
ALTERTABLEuserbehaviorCHANGEf1user_idVARCHAR(255),
CHANGEf2item_idVARCHAR(255),
CHANGEf3categoryVARCHAR(255),
CHANGEf4behaviorVARCHAR(255),
CHANGEf5time_stampVARCHAR(255);
也可以直接在导入数据时重命名
3.3去除重复值去除重复值这里,可以将user_id,item_id,time_stamp三者进行联合,形成联合主键,对数据集进行分组。如果数据集中没有重复值,则理论上用三者进行联合分组之后,count(*)应该是不大于1的;如果数据集中有重复值,则理论上用三者进行联合分组之后,count(*)应该是大于1的。因此在这里判断count(*)是否大于1可以用having函数。
SELECTuser_id,item_id,time_stamp
FROMuserbehavior
GROUPBYuser_id,item_id,time_stamp
HAVINGCOUNT(*)>1;
结果显示没有重复值。
3.4查看缺失值查看缺失值,可以统计每一个字段下有多少行,如果行数是相等的说明没有缺失值。
SELECTcount(user_id),count(item_id),count(category),count(behavior),count(time_stamp)
FROMuserbehavior;
结果显示各字段行数相等,不存在缺失值。
3.5时间格式转换
--新增date、hour时间列ALTERTABLEuserbehaviorADDtimeTIMESTAMP,ADDdateVARCHAR(10),
ADDhourVARCHAR(10);
--时间格式转换
UPDATEuserbehavior
SETtime=FROM_UNIXTIME(time_stamp,'%Y-%m-%d%H:%i:%s'),
date=FROM_UNIXTIME(time_stamp,'%Y-%m-%d'),
hour=FROM_UNIXTIME(time_stamp,'%H');
3.6剔除异常值
需要检查日期是否都在需要分析的时间范围内,即2017年11月25日至2017年12月3日之间。
--检查日期是否都在2017年11月25日至2017年12月3日之间
SELECTMIN(date),MAX(date)
FROMuserbehavior;
剔除异常值
--排除日期不在2017年11月25日至2017年12月3日之间的数据
DELETEFROMuserbehavior
WHEREdate<'2017-11-25'ORd