用户消费行为的分析报告
数据来源 CDNow 网站的用户购买明细,通过各个指标对用户行为进行分析,可以更清楚了解用户行为习惯,为进一步制定营销策略提供依据。
具体指标包括:
- 户消费趋势分析
- 用户个体消费分析
- 用户消费行为分析
- 复购率和回购率分析
- 留存率分析
一、理解数据
本数据集共有 6 万条左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为数据,共计 4 列字段,分别是:
- user_id: 用户ID
- order_dt: 购买日期
- order_products: 购买产品数
- order_amount: 购买金额
二、清洗数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.style.use('ggplot')
1. 数据加载
columns = ['user_id', 'order_dt', 'order_products', 'order_amount']
# 将 order_dt 转化为日期数据类型格式
dateparse = lambda dates: pd.datetime.strptime(dates,'%Y%m%d')
df = pd.read_table(r'C:\Users\86134\Desktop\CDNOW_master.txt',
names = columns,parse_dates=['order_dt'],
sep = '\s+',date_parser=dateparse
)
3.数据探索
print(df.info())
print('-'*30)
print(df.isnull().sum())
print('-'*30)
print(df.describe())
print('-'*30)
print(df.head())
print('-'*30)
print(df.tail())
print('-'*30)
输出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 69659 entries, 0 to 69658
Data columns (total 4 columns):
user_id 69659 non-null int64
order_dt 69659 non-null datetime64[ns]
order_products 69659 non-null int64
order_amount 69659 non-null float64
dtypes: datetime64[ns](1), float64(1), int64(2)
memory usage: 2.1 MB
None
------------------------------
user_id 0
order_dt 0
order_products 0
order_amount 0
dtype: int64
------------------------------
user_id order_products order_amount
count 69659.000000 69659.000000 69659.000000
mean 11470.854592 2.410040 35.893648
std 6819.904848 2.333924 36.281942
min 1.000000 1.000000 0.000000
25% 5506.000000 1.000000 14.490000
50% 11410.000000 2.000000 25.980000
75% 17273.000000 3.000000 43.700000
max 23570.000000 99.000000 1286.010000
------------------------------
user_id order_dt order_products order_amount
0 1 1997-01-01 1 11.77
1 2 1997-01-12 1 12.00
2 2 1997-01-12 5 77.00
3 3 1997-01-02 2 20.76
4 3 1997-03-30 2 20.76
------------------------------
user_id order_dt order_products order_amount
69654 23568 1997-04-05 4 83.74
69655 23568 1997-04-22 1 14.99
69656 23569 1997-03-25 2 25.74
69657 23570 1997-03-25 3 51.12
69658 23570 1997-03-26 2 42.96
------------------------------
通过数据探索我们发现
- 大部分订单只购买了少量商品 (平均 2.4), 有一定极值干扰;
- 用户消费的金额比较稳定, 平均消费 35 元, 中位数在 35 元, 有一定极值干扰;
- 数据呈右偏分布;
- 没有空缺数据,可以直接分析,但考虑到是按月分析,所以将日期进行解析(实际业务是否按月分析,取决于消费频率) 。
# 解析日期
df['oreder_dt'] = pd.to_datetime(df.order_dt, format='%Y%m%d')
df['month'] = df.order_dt.values.astype('datetime64[M]')
三、用户消费趋势分析(按月)
- 每月的产品购买数量
- 每月的消费总金额
- 每月的消费次数
- 每月的消费人数
1.每月的产品购买数量
grouped_momnth = df.groupby('month')
plt.figure(1, figsize=(10, 4))
plt.title('每月用户购买张数')
plt.ylabel('CD碟数(张)')
grouped_momnth.order_products.sum().plot()
plt.show()
从图中可以看到,销量在前几个月异常高涨,并在3月达到最高峰,后续销量较为稳定,且有轻微下降趋势。
2.每月的消费金额
plt.figure(1, figsize=(10, 4))
plt.title('每月销售额')
plt.ylabel('销售额')
grouped_momnth.order_amount.sum().plot()
plt.show()
由图可以看到,消费金额也一样呈现早期销售多,后期平稳下降趋势,而且前三月数据都呈现出异常状态,为什么呈现这样的原因呢?我们可以假设前三个月有促销活动,或者用户本身出了问题,早期用户有异常值。但这里只有消费数据,因此不能做出判断。