一、项目背景和目的
项目集中于对淘宝用户行为的分析,如购买时段的分析、热销商品的分析、用户行为转化漏斗分析以及通过RFM模型对用户进行分类等,希望从中探索用户购买的规律,并将这些规律与店铺营销策略相结合,以实现更精细和精准的运营,让业务获得更好的增长。
项目数据来源于数据集-阿里云天池,通过此项目学习电商数据分析的指标与数据分析的基本方法。
本数据集(UserBehavior.csv)包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢),数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。
二、分析维度
根据现有数据及分析目的,从四个维度进行分析:
第一个维度:用户购物情况整体分析
以PV、UV、平均访问量、跳失率等指标,分析用户最活跃的日期及活跃时段,了解用户行为习惯
第二个维度:商品购买情况分析
从成交量、人均购买次数、复购率等指标,探索用户对商品的购买偏好,了解商品的销售规律
第三个维度:用户行为转化漏斗分析
从收藏转化率、购物车转化率、成交转化率,对用户行为从浏览到购买进行漏斗分析
第四个维度:参照RFM模型,对用户进行分类,找出有价值的用户
三、分析正文
分析步骤如下:
提出问题------理解数据------数据清洗------构建模型------数据可视化
(一)提出问题
- 用户最活跃的日期及时段
- 用户对商品有哪些购买偏好
- 用户行为间的转化情况
- 用户分类,哪些是有价值的用户
(二)理解数据
用户行为类型又分为四种:
pv:商品详情页pv,等价于点击
buy:商品购买
cart:商品加入购物车
fav:收藏
(三)数据清洗
1.分批导入数据:原始数据有1亿多行,数据体量太大,这里我只导入200万行,通过navicate,分批导入。
(特别说明:第一次尝试时导入了700万行的数据,mysql直接崩溃,所以后来就只导入200万行的数据。不知道对于数据量特别大的,一般大家是怎么处理的呢?希望大神们可以在留言指点一二)
新建数据库userbehavior,建立新表:users,字段分别为:user_id(用户ID),item_id(商品ID),item_category(商品类目ID),behavior_type(用户行为),time_stamp(时间戳)
2.缺失值处理:通过查询,所有字段的计数都是200万行,没有缺失值;
3.一致化处理:因为分析涉及到时间、天、小时,所以,要把数据集里的时间戳列,即time_stamp列转化为日期。
增加3列,分别是:date_time, dates,times:
alter table users add column date_time varchar(45) not null;
alter table users add column dates date not null;
alter table users add column times varchar(10) not null;
分别给这3列赋值:
set sql_safe_updates=0;
update users set date_time=from_unixtime(time_stamp);
update users set dates=left(date_time,10);
update users set times=substring(date_time,12,5);
4.对异常值处理:
对dates列的日期值进行检查,看是否有错误值;因为数据集要分析的是从2017.11.25到2017.12.3日的数据,所以把不在这个日期范围内的数据筛选出来:
SELECT
dates
FROM
users
WHERE
dates NOT BETWEEN '2017-11-25' AND '2017-12-03';
返回991行,也就是说,有991行的日期并不是在这个范围内的,只占到数据集中很少的比例,为了不影响接下来的分析,把这些不符合的行,删除。
-- 删除不在分析范围内的日期值
DELETE FROM users
WHERE dates NOT BETWEEN '2017-11-25' AND '2017-12-03';
对behavior_type列的值进行检查,看是否有异常值:
select behavior_type
from users
where behavior_type not in('pv','buy','cart','fav');
查询结果:没有异常值
清洗后数据如下图所示: