前言
CD商品订单数据的分析总结。根据订单数据(用户的消费记录),从时间维度和用户维度,分析该网站用户的消费行为。通过此案例,总结订单数据的一些共性,能通过用户的消费记录挖掘出对业务有用的信息。对其他产品的线上消费数据分析有一定的借鉴价值,能达到举一反三的效果。
一、案例背景
CDNOW是一家美国在线零售商,主营商品为CD唱片,ToC业务。1998年上市,2000年被贝塔斯曼收购。网上有一份用户订单消费数据集:CDNOW订单数据集
二、案例目的
这份数据集只包含了四个基本信息字段:用户ID、购买日期、购买数量、购买金额。本案例的目标:通过这个四个字段,在数据集时间窗口内,分析用户消费的基本概况;通过用户分层、周期分析、复购率和回购率分析等,梳理现阶段用户的价值现状,并尝试根据业务经验提一些运营建议。
三、分析框架


四、分析过程
4.1数据加载和初探
(1)导入相关包、设置风格样式
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
# jupter魔法函数,设置可视化页内显示
%matplotlib inline
# 正常显示中文和负号
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 画图的样式风格设置为:ggplot
plt.style.use('ggplot')
(2)导入数据集
字段信息:
user_id:用户ID
order_dt:购买日期
order_products:购买数量
order_amount:购买金额
源数据为txt文件,通过pd.read_csv()。分割符为空白字符串,用正则表达'\s+',匹配任意空白符。
# 导入数据集
fpath = '../datasets/cdnow.txt'
df = pd.read_csv(
fpath,
sep = '\s+', #正则表达'\s+',匹配任意空白符
header=None,
names=['user_id','order_dt','order_products','order_amount']
)
df.head()

从前5行数据中可以发现:同一个用户在同一天可能购买多次、同一用户在不同时间购买多次等消费现象。
(3)数据清洗
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 69659 entries, 0 to 69658 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 user_id 69659 non-null int64 1 order_dt 69659 non-null int64 2 order_products 69659 non-null int64 3 order_amount 69659 non-null float64 dtypes: float64(1), int64(3) memory usage: 2.1 MB
源数据质量描述:数据不存在缺失值,但购买日期order_dt字段数据类型为int64,需要转换为日期型datetime64[ns]
# 'order_dt'字段类型转换
df['order_dt'] = pd.to_datetime(df['order_dt'],format='%Y%m%d')
按月份分析销售趋势,新增month字段。(tip:datetime64[M]:每月的第一天日期,datetime64[Y]:每年的第一天日期。)
# 新增month字段
df['month'] = df['order_dt'].values.astype('datetime64[M]')
# 查看字段的数据类型
df.dtypes
df.head()

(4)数据初探
# 数据描述性统计分析
df.describe()

描述性统计分析:
用户平均每笔订单购买2.4件商品,中位数为2.0,数据呈现正偏态(右偏)特征,最大值99,需要关注极值点(为何该用户同时买了那么多CD);
用户平均订单金额为35.89,中位数为25.98,数据同样呈现正偏态(右偏)特征,大部分订单金额都集中在中小额范围(14.4~43.7),存在极值点。
4.2消费概况分析
4.2.1时间维度分析消费情况(按月)
按月份降采样,统计信息。
df_dtindex = df.set_index(['order_dt'])
# 统计每月订单商品量、每月订单金额
month_grouped = df_dtindex.resample('m').sum()[['order_products','order_amount']]
# 统计每月消费人数
month_grouped['user_num'] = df_dtindex.resample('m')['user_id'].nunique()
# 统计每月订单数
month_grouped['order_quantity'] = df_dtindex.resample('m')['user_id'].size()
month_grouped.head()

每月订单商品量、每月订单金额、每月消费人数、每月订单数趋势图。
month_grouped.plot(kind='line',subplots=True,figsize=(10,8))

从折线趋势图可以看出:
1-3月份订单商品量和订单金额都较高,4月份急速下降后趋于平缓;
1-3月份月均消费人数在7800~9600之间,4月份开始月均消费人数开始下降,在2000人次附近波动,反应用户粘性不高,留存率低。
出现以上的原因,可能是该网站1-3月份做大推广;或者明星新CD专辑集中发布,大量粉丝涌入网站购买。