数据来自CDNow网站的一份用户购买CD明细,现在尝试从不同维度分析用户的消费行为
- 分析内容:
- 按月对数据进行分析:每月用户消费次数,每月用户的购买量,每月用户的购买总金额
- 用户个体消费数据分析:用户个体消费金额与消费次数的统计描述,用户消费金额和消费次数的散点图,用户消费金额的分布图(符合二八法则),用户消费次数的分布图,用户累计消费金额的占比
- 用户消费行为分析:用户第一次消费时间,用户最后一次消费时间,用户分层,新老客消费比,用户购买周期,用户生命周期
一、理解数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
import os
os.chdir(r'D:\anaconda\workplace\Data_Analysis\Data')
# user_id:用户ID order_dt:购买日期 order_products:购买产品数 order_amount:购买金额
columns = ['user_id','order_dt','order_products','order_amount']
# 用户id 购买日期 购买产品数 购买金额
df = pd.read_table("master.txt",names = columns,sep = '\s+')
df.head()
可以看到
- 数据集有近7W条数据,没有空值,数据集比较干净
- 大部分订单只消费了少量商品(平均2.4),中位数是2,其分位数是3,说明用户购买量大部分都不多,少部分购买量大的,有一定极值干扰
- 用户的订单金额比较稳定,人均购买CD金额在35,中位数在25元,存在极致干扰,小额比较多,大额较少,收入来源很大一部分是来自大额。符合二八原则
二、按月分析用户消费趋势
- 每月的消费总金额
- 每月的消费次数
- 每月的产品购买量
- 每月的消费人数
1、每月的消费总金额
# 解析日期
df['oreder_dt'] = pd.to_datetime(df.order_dt, format='%Y%m%d')
df['month'] = df.order_dt.values.astype('datetime64[M]')
grouped_month = df.groupby('month')
plt.figure(1, figsize=(10, 4))
plt.title('每月销售额')
plt.ylabel('销售额')
grouped_month.order_amount.sum().plot()
plt.show()
可以看到,消费金额呈现早期销售多,后期剧降后趋向平稳
2、每月的消费次数
plt.figure(1, figsize=(10, 4))
plt.title('每月订单数')
plt.ylabel('订单数')
grouped_momnth.user_id.count().plot()
plt.show()
前三个月订单数在 10000 笔左右,后续月份的平均消费订单数则在 2500 笔左右。
3、每月的产品购买量
plt.figure(1, figsize=(10, 4))
plt.title('每月用户购买张数')
plt.ylabel('CD碟数(张)')
grouped_month.order_products.sum().plot()
plt.show()
从图中可以看到,销量在前几个月异常高涨,并在3月达到最高峰,4月开始骤降,后续销量较为稳定,且有轻微下降趋势。
4、每月的消费人数
plt.figure(1, figsize=(10, 4))
plt.title('每月消费人数')
plt.ylabel('人数')
grouped_month.user_id.apply(lambda x: len(x.drop_duplicates())).plot()
plt.show()
每月的消费人数小于每月的消费次数,但是区别不大。前三个月每月的消费人数在8000—10000之间,后续月份,平均消费人数在2000不到。一样是前期消费人数多,后期平稳下降的趋势。推测前三个月可能由于商家有促销活动,吸引大量的用户来消费购买
三、用户个体消费分析
- 用户消费金额、消费次数的描述统计
- 用户消费金额和消费次数的散点图
- 用户消费金额的分布图
- 用户消费次数的分布图
- 用户累计消费金额占比(百分之多少的用户占了百分之多少的消费额)
1、用户消费金额,消费次数的描述统计
grouped_user = df.groupby('user_id')
grouped_user.sum().describe()
- 用户平均购买了7张CD,但是中位数为3,说明小部分用户购买了大量CD,平均值大于中位数,是右偏分布,说明小部分用户购买了大量的 CD。
- 用户平均消费106元,中位数为43,结合分位数和最大值看,平均数仅和 75 分位接近,肯定存在小部分的高频消费用户。
2、用户消费金额和购买数量的散点图
plt.figure(figsize=(12,4))
plt.subplot(121)
plt.scatter(x = 'order_amount', y = 'order_products',data=df)
plt.xlabel(