项目来自网络
附数据集
1.数据载入和探索
1.1 数据加载
import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
df = pd.read_csv('./CDNOW_master.csv', names = ['user_id', 'order_dt', 'order_products', 'order_amount'], sep='\s+')
df.head()
- user_id:用户id
- order_dt:每笔订单成交的时间日期
- order_products:每笔订单用户的购买数量
- order_amount:每笔订单的消费金额
1.2 数据探索
df.info()
order_dt的格式要时间类型
df.describe()
从上述描述性统计可以得知,order_products的平均数在中位数和Q3之间,说明大部分人购买的产品数量都不多,order_products受最大值影响;order_amount和order_products相同,大部分人购买的金额都不高,受最大值影响,order_amount有最小值0,考虑到在促销等活动期间存在0消费的白嫖可能性,当作正常数据处理
2. 每月用户总体消费趋势分析
df.order_dt = pd.to_datetime(df.order_dt, format = '%Y%m%d')
df['month'] = df.order_dt.astype('datetime64[M]')
fig, ax = plt.subplots(2, 2, figsize=(15,10))
df.order_amount.groupby(df.month).sum().plot(ax = ax[0][0], title = '总销售额')
df.user_id.groupby(df.month).count().plot(ax = ax[0][1], title = '每月订单数量')
df.order_products.groupby(df.month).sum().plot(ax = ax[1][0], title = '每月消费商品数量')
df.groupby('month').user_id.apply(lambda x:len(x.unique())).plot(ax = ax[1][1], title = '每月用户数量')
plt.tight_layout() # 设置子图的间距
plt.show()
四个折线图的趋势基本一致,可以看出来,1997年前3个月的总销售额特别高,在3月份之后骤然下降,接近平稳。推测也许是前三个月网站正在进行周年庆促销活动,促进了新用户的增长和消费,在活动之后恢复正常,随后的7月和11月有个小高峰,是618(京东笑)和双11的原因吗?
另一方面,在2月到3月这段期间,可以发现消费人数稍有下降,但总销量与总销售额却依然有所上升,是极值影响还是有高价值用户?
pd.pivot_table(df, index = ['month'],
values = ['user_id', 'order_amount', 'order_products'],
aggfunc = {
'user_id': 'count', 'order_amount': 'sum', 'order_products': 'sum'}).head()
3. 用户个体消费情况分析
3.1 用户消费金额,消费次数的描述统计
grouped_user = df.groupby('user_id')
grouped_user.sum().describe()
- 用户平均购买了7张cd,大于Q3,说明小部分用户购买了大量的CD
- 用户平均消费106元,接近Q3,同样说明有小部分用户巨额消费
3.2 用户消费金额和销量的关系
grouped_user.sum().plot.scatter(x = 'order_amount'