使用工具和数据:jupyter notebook, CDNOW_master
导入pandas和numpy
可视化需要matplotlib 软件包的 pyplot 子模块的 plot() 函数绘图,所以还要导入Matplotlib绘图库,具体详见https://www.runoob.com/numpy/numpy-matplotlib.html
观察数据,共有4列:用户ID、购买日期、购买产品数、购买金额
更改后的df数据如下:因为后续会按月进行分析,所以新增个month列,当列名是全新的则在最右变自动加上新的一列
一、通过month分组数据,按月分析用户行为
1.每月的订单总金额:
做出折线图如下,发现1~3月份订单金额增长较快3月达到最大值,随后急速下降,可能是前3个月有某些活动吸引了用户下单。
2.每月用户消费的总产品数:
3.每月用户消费的订单数:
4.每月的用户数:
一个用户ID在当月可能消费不止一个订单,也就是说用户ID会有重复,去掉重复的用户ID就得到每月的用户总数。去重用drop_duplicates()
更简单的方法可以使用数据透视表pivot_table,按月计算以月为索引,要计算的值是总金额,产品数和订单数,对这三列分别指定函数,注意 'user_id':'count' 是对用户ID计数
5.每月用户平均消费金额:
每月用户消费的总金额 / 该月的用户数
6.每月用户平均消费次数:
每月的订单数 / 该月的用户数
二、用户个体消费数据分析,通过用户ID分组数据
1.消费金额、消费产品数的描述统计:
可知:用户平均消费了7张CD,中位数却是3,同理订单金额平均是106,中位数是43,说明少量的用户消费了大量的产品,这也遵循二八法则。
2.消费金额、产品数的散点图:
观察散点图,右上角极个别的点拉大了图表,其实就是极值的影响,我们可以加个过滤条件,减少极值的影响。query()过滤出订单金额在4000以内的:
3.消费金额、消费产品数做直方图:
数据较集中,可以使用切比雪夫定理过滤掉异常值,即95%的数据集中在’平均值加5个标准差‘。根据上面的描述统计,产品数的mean+5*std在100附近,所以我们选择产品数在100以内的数据:
4.用户累计消费金额占比:百分之多少的用户占了百分之多少的销售额
按用户消费金额进行升序排列,cumsum累计相加,除以消费总额即得到累计消费金额占比
重置索引,对order_mount切片选取这一列作图:
由图可知:20000个用户消费占比是40%,而剩下的3570个用户即贡献60%的销售额。
三、用户消费行为
1.第一次购买的用户分布(新用户):
我们对用户分组的数据求最小值,选取order_dt这一列,最小的日期就是距离现在最远,即第一次购买的日期。对首购的用户进行计数,绘出折线图显示97年2月初新客最多。
2.最后一次购买的用户分布:
再对用户分组的数据求最大值,选取order_dt这一列,最大的日期就是距离现在最近,即最后一次购买的日期。发现最后一次购买的用户在97年2月份出现的次数最多,结合首购用户也是在2月份最多,我们推测可能是2月份有某些优惠活动,吸引了一部分用户消费。
3.新老用户分布
使用一个聚合函数算出每个用户首购和最后一次购买的时间,判断这两个时间是否相等,相等则返回Ture说明该用户仅消费了一次,不相等返回False。
4.用户分层
4.1 RFM用户分层:
Recently最后一次消费距今的时间,Frequently消费次数,消费金额。
以用户ID为索引,计算消费总金额、消费次数和最后一次消费时间,生成数据透视表:
消费总金额就是M,消费次数是F(频率),下面将最后一次消费时间转化成R:
数据表中的最后时间大约在1998年7月也就是order_dt.max() 和用户最后一次购买时间相减就知道购买了多少天(R),最后再把order_dt更改数据类型为日期格式。
和平均消费相比,比如用户1的R>0说明最后一次购买距今的天数超过平均值,F<0说明购买次数低于平均值,M<0说明购买金额也低于平均值,这类用户就是最不活跃的,可划分为一般挽留用户。类似的,我们可以将RFM与0比较对用户进行分层。
我们按照用户类型分组,对每种类型的客户进行求和统计
可视化:
4.2 新客,活跃,回流,流失用户分层
以user_id为索引,月为列创建数据透视,对每个用户在每月的购买日期计数,空值用0填充,就可以知道每个用户在每个月消费了几次。
简化一下表格,买了记为1,没买记为0:
函数返回以每月为索引的状态,创建函数前先定义好columns_month,他是数据按月分组求和后,重置一下索引,再切取month列:
将创建好的函数应用到df_purchase的每一行,可以看出每个用户在每个月的活跃状态
将其中未注册(unreg)的用户填充空值,计算每种类型的用户在每月的个数如下:
转置一下:
5、用户购买周期:用户的订单之间间隔时间是多少天
用户购买周期分析,按订单算用户购买平均的时间间隔是多少,也就是用户隔多少天下一次单
shift是下移一个位,错位相减得到不同用户自己内部的订单间隔时间。比如用户1 只有一个订单,下移之后该订单日期无法相减所以是空。用户2有两个订单,第二个订单减第一个订单日期为0天说明这两个是同一天下单。
把日期的单位去掉,绘制直方图:
6、用户生命周期分析,最后一次下单和第一次下单
最后一次下单就是最大的日期,第一次下单就是最小的日期,这里用之前新老用户分布的得到的user_life
我们想把购买过1次及以上的用户提取出来
复购率:自然月内,购买多次的用户占比
回购率:当月消费过的在次月仍旧消费
0:当月消费,次月没消费(没回购)
1:当月消费,次月也消费(回购)
NaN:当月都没消费