CD网站用户消费数据分析案例

一. 项目介绍

1.1 背景

本项目是针对某CD网站的用户消费记录进行分析,了解用户的整体消费趋势以及用户的消费行为特征,并针对用户的消费特征制定对应的策略,以改善网站的运营效果,提高网站的销售额。

1.2 数据介绍

本次分析的数据集来源于某CD网站,这份数据集涵盖了该网站在1997年1月1日至1998年6月30日期间内用户的消费记录。数据集的每一行表示一个用户的购买记录,由用户ID(user_id)、用户消费时间(order_dt)、用户购买数量(order_products)、用户消费金额(order_amount)组成,并以空格隔开。
链接:CD数据集 提取码:ydqa

二. 分析内容

2.1 整体分析框架

本次分析主要从以下6个角度进行分析,分析的内容见以下框架:
在这里插入图片描述

三. 数据处理

3.1 导入常用库

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline   # 可以将matplotlib的图表直接嵌入到Notebook之中
plt.rcParams['font.sans-serif']=['SimHei']	#用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False	#用来正常显示负号

3.2 导入数据

col_name = ['user_id','order_dt','order_products','order_amount']   # 设置字段名
data = pd.read_table('./CDNOW_master.txt',names=col_name,sep='\s+')
data.head()		# 显示前5行

在这里插入图片描述
各个字段的含义如下:

  • user_id:用户id
  • order_dt:每笔订单成交的时间日期
  • order_products:每笔订单用户的购买数量
  • order_amount:每笔订单的消费金额

3.3 数据清洗

3.3.1 查看数据整体

data.info()	#查看数据整体情况

  • 该数据集总共有69659条消费记录,每个字段也是69659条记录,说明每个字段没有存在空值,后续不需要做缺失值的处理;
  • 订单成交时间order_dt字段的数据类型有误,需要转换为时间类型

3.3.2 修改字段数据类型

data['order_dt'] = pd.to_datetime(data['order_dt'],format='%Y%m%d')

3.3.3 添加新列(month)

为了后续分析的展开,在这里根据order_dt的值新添加月份的字段

data['month'] = data['order_dt'].values.astype('datetime64[M]')
data.head()

在这里插入图片描述

四. 用户整体消费统计

4.1 数据整体的描述性统计

data.describe()

在这里插入图片描述

  • 从用户购买数量: 用户每个订单平均购买2.4张CD,有75%以上的订单购买数量在3张以内;中位数为2.0,略小于平均水平,说明整体呈右偏分布,存在一些极大值,即一次性购买很多张CD的用户。
  • 从用户消费金额: 用户的每个订单消费金额平均为35.9元,超过75%的订单量消费金额在43.7元左右,比较低;中位数为26.0元左右,低于平均水平,同样也说明了消费金额的总体呈右偏分布,存在一些消费金额很高的用户。

综合以上,该批用户中,大部分用户的消费金额不是很高,小部分用户贡献了销售额的绝大部分,需要再进一步挖掘和维持这部分用户。

4.2 用户总体消费趋势

grouped_month = data.groupby("month")    # 按月分组

# 设置画布的大小,添加子图
plt.figure(figsize=(20,15))

# 每月的消费总金额,按月分组,对order_amount求和
plt.subplot(231)
grouped_month.order_amount.sum().plot(fontsize=20)
plt.title('总销售额',fontsize=24)


# 每月的消费次数,按月分组,统计每月的消费记录数
plt.subplot(232)
grouped_month.user_id.count().plot(fontsize=20)
plt.title('总消费次数',fontsize=24)

# 每月的销量,按月分组,对order_products求和
plt.subplot(233)
grouped_month.order_products.sum().plot(fontsize=20)
plt.title('总销量',fontsize=24)

# 每月的消费用户数量
plt.subplot(234)
grouped_month["user_id"].nunique().plot(fontsize=20)
plt.title('消费的用户数量',fontsize=24)

# 每月用户平均消费金额的趋势
plt.subplot(235)
(order_amount_month/unique_user_id_month).plot(fontsize=20)
plt.title('人均消费金额',fontsize=24)

# 每月用户平均消费次数的趋势(每月总的消费次数/每月的消费人数)
plt.subplot(236)
((grouped_month.user_id.count())/(grouped_month["user_id"].nunique())).plot(fontsize=20)
plt.title('人均消费次数',fontsize=24)

plt.tight_layout()    # 自动调整子图参数,使之填充整个图像区域

在这里插入图片描述

1. 从总销售额/总消费次数/总销量/消费的用户数量趋势图分析:

  • 在前3个月,四项指标都相对较高,用户流量较高,消费的总商品数也较多,总体的消费金额也是相对较高,但在3月份之后出现了大幅度下降,下降了63.7%。
  • 在1997年3月份之后,这四项指标都趋于平稳,没有太大的波动,但随着时间的推移,这四项指标都是在缓慢下降的,用户在逐渐的流失。
    大幅下降原因分析:
    从以上前四幅趋势图可以看出,四个指标的大幅下降归根到底是用户流量的波动,分析用户流量波动可以从以下几个方面入手:
    1.活动影响: 该网站前3个月可能采用了一定的促销手段拉新,后续营销力度或吸引力度做的不到位;
    2.产品变化: 该网站后期是否有变动,造成曝光率下降,客户购买难度增加;
    3.数据异常: 如:底层系统故障,造成数据传输有误;前期数据大涨有刷单作弊行为等;
    4.外部事件: 如:该网站后期是否有负面的社会新闻;或者前3个月可能恰好出现了与CD相关的热点事件(如:某歌星逝世),引发大量用户购买CD;
    5.竞品数据: 可以对应分析竞品的数据,如果竞品数据上涨,则极可能是用户流向竞品;
    6.节假日: 对比1998年的1~3月份数据,可知道该因素不是影响数据巨大波动的原因,可以暂时排除。
    备注: 因为这里只有一段时间的消费记录,因此无法做出准确判断,具体的原因得结合历史数据以及当时的业务场景做出判断。

2. 从人均消费金额/人均消费次数趋势图分析:

  • 由图,人均消费金额和人均消费次数在前4个月是迅速攀升的趋势,从1997年4月之后,人均消费金额在51元上下波动,人均消费次数在1.3~1.4区间内稳定的震荡。
  • 结合每月总销售额以及每月消费总人数的趋势分析可知:在前3个月,虽然总销售额和总消费人数都很高,但是平均下来却很低,说明了前3个月存在大量只消费了一次并且消费金额也不高的用户。

五. 用户个体消费行为分析

前面的分析主要是根据时间维度,按月分析用户整体的消费情况,接下来从用户的个体角度出发,分析用户个体的消费金额、购买数量以及消费次数特征。主要分析以下几个内容:

  • 用户消费金额,购买数量的描述统计
  • 用户消费金额和购买数量的相关分析
  • 用户消费金额的分布
  • 用户购买数量的分布
  • 用户消费金额累计占比(二八法则)
  • 用户消费次数的分布

5.1 用户消费金额,购买数量的描述统计

# 根据用户ID进行分组
grouped_user_id = data.groupby("user_id")    
grouped_user_id.sum().describe()

在这里插入图片描述

  • 由表,一共有23570位用户消费购买了CD,每位用户平均购买7张CD左右,但中位值只有3张,整体呈右偏分布,说明存在小部分客户购买了大量的CD,最大购买数量达到了1033张;
  • 用户的平均消费金额为106元,中位值为43元,远小于平均值,也呈右偏分布,存在小部分高消费用户。

5.2 用户消费金额和购买数量的相关分析

绘制用户消费金额和购买数量的散点图,可以了解用户消费金额和购买数量的分布情况。

grouped_user_id.sum().plot.scatter(x="order_products",y="order_amount",fontsize=16)
plt.xlabel("购买数量",fontsize=20)
plt.ylabel("消费金额",fontsize=20)

在这里插入图片描述

  • 如图,整体的离群点个数比较少,绝大部分的用户消费金额在4000元以下。
  • 过滤掉离群点,绝大部分的用户消费金额和购买数量的散点图如下:
# 过滤消费金额在4000元以上的离群点
grouped_user_id.sum().query("order_amount<4000").plot.scatter(x="order_products",y="order_amount",fontsize=16)
plt.xlabel("购买数量",fontsize=20)
plt.ylabel("消费金额",fontsize=20)

在这里插入图片描述

  • 如图可以看出,用户的消费金额和购买的数量呈现一定的线性关系,两者的比值是CD的单价,说明网站该价位的CD比较受欢迎或者该网站的CD价位比较单一,用户可选择的价格范围较少,可适当的进货不同的价位CD,来应对不同价位需求的用户。

5.3 用户消费金额、购买数量的分布

# 设置画布的大小,添加子图
plt.figure(figsize=(20,5))

# 用户消费金额分布图绘制
plt.subplot(121)
grouped_user_id.sum().order_amount.plot.hist(bins=20,fontsize=16)
plt.title('用户消费金额分布',fontsize=24)

# 用户购买数量分布图绘制
plt.subplot(122)
grouped_user_id.sum().order_products.plot.hist
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值