数据分析实战项目:Python分析CDNow的用户消费行为

本文通过Python对CDNow用户消费行为进行详细分析,包括数据加载与初探,用户消费情况(用户维度、时间维度)的统计描述、相关性分析,复购率与回购率计算,用户分层(RFM模型、消费情况),用户生命周期和留存率研究,最终提出针对性的运营策略。分析发现,用户消费呈现长尾分布,新用户留存率低,头部用户贡献大,建议关注用户生命周期并制定个性化运营策略。
摘要由CSDN通过智能技术生成


数据:CDNow网站的用户购买明细
目的:根据CDNow网站的用户购买明细,分析用户的消费行为
分析思路:
原始数据并未提供分析目的要求的行为数据,需通过已知的数据构建指标。目的是为了分析用户的消费行为,故采用维度分析法,从特定的角度和层面分析数据
分析内容框架:见目录

一、数据加载与初探

# 导入相关库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
%matplotlib inline

user_id:用户ID
order_dt:购买日期
order_products:购买产品数
order_amount:购买金额
源数据为txt文件,通过read_csv读取数据,‘\s+'表示匹配任意空格符

# 导入数据
columns = ['user_id','order_dt','order_products','order_amount']
df = pd.read_table("CDNOW_master.txt",names=columns,sep='\s+')
# 数据初探
df.info()

在这里插入图片描述
数据质量描述:数据中无缺失值,无需对缺失值处理,但购买日期的数据类型是int,后续需使用to_datetime函数将其转化成datetime格式。

df.head(5)

在这里插入图片描述
从前五行数据,可以发现同一用户在一天内可能购买多次、同一用户在不同时间多次购买等现象。

# 数据描述性统计
df.describe()

在这里插入图片描述
从数据的描述性统计中,可以发现:1、用户平均每笔订单购买2.4件商品,中位数为2.0,数据呈现正偏态(右偏)特征;2、用户单笔订单最高购买99件商品,订单商品量较高,需要关注极值点;3、用户平均订单金额为35.89,中位数为25.98,数据同样呈现正偏态(右偏)特征,反映大部分订单的金额都集中小额范围内;4、用户单笔订单最高金额为1286,需要关注极值点。

二、消费情况分析

# 利用to_dateframe()函数将order_dt转化为datetime对象
df["order_dt"] = pd.to_datetime(df["order_dt"],format="%Y%m%d")

2.1 从用户维度分析消费情况

2.1.1 用户消费金额、订单商品量、消费次数的描述性统计分析

#tips:注意df['order_amount']与df[['order_amount']]的区别,一个返回series,另一个返回Dataframe
# 对数据按照user_id进行分类聚合
user_grouped = df.groupby('user_id').agg({
   'user_id':'count',
                                          'order_products':'sum',
                                          'order_amount':'sum'})
user_grouped.describe()

在这里插入图片描述
通过对数据进行描述性统计分析发现:1、用户平均消费2.95次,中位数为1次,用户消费次数数据呈现右偏的特征,反映多数用户在该网站上只消费1次;2、订单商品量与订单金额数据均呈现右偏特征,且均值都与3/4分位数值接近,反映网站的订单商品量与订单金额主要由少部分头部用户贡献;3、需要关注极值点的影响。

# 用户消费次数、订单商品量、订单金额分布直方图
plt.figure(figsize=(20,4),dpi=80)
plt.subplot(1,3,1)
user_grouped['user_id'].plot.hist(bins=30)
plt.subplot(1,3,2)
user_grouped['order_products'].plot.hist(bins=30)
plt.subplot(1,3,3)
user_grouped['order_amount'].plot.hist(bins=30)

在这里插入图片描述
由于前文中提到的极值影响,数据的分布受到一定的干扰,需要对极值进行过滤处理再观察数据的分布特征。 根据切比雪夫定理,距离平均值有三个标准差的值均为异常值。根据描述性统计数据与实际业务情况,计算得到用户消费次数、订单商品量、订单金额分布的范围分别为0-17,0-58,0-829。分别使用query函数过滤极值再绘制分布直方图。

# 使用query函数过滤极值后,用户消费次数、订单商品量、订单金额分布直方图
plt.figure(figsize=(20,4),dpi=80)
plt.subplot(1,3,1)
user_grouped.query('user_id<17')['user_id'].plot.hist(bins=15)
plt.subplot(1,3,2)
user_grouped.query('order_products<58')['order_products'].plot.hist(bins=30)
plt.subplot(1,3,3)
user_grouped.query('order_amount<829')['order_amount'].plot.hist(bins=30)

在这里插入图片描述
从用户消费次数、订单商品量、订单金额分布直方图可以发现:数据大多集中在低值区,反映绝大部分用户的消费水平一般,贡献价值不高。这种分布也符合消费类数据的分布特征——长尾型分布。

2.1.2 用户消费金额和订单商品量之间相关性分析

# 绘制用户消费金额和订单商品量散点图
user_grouped.plot.scatter(x='order_products',y='order_amount')

在这里插入图片描述

# 使用query函数过滤极值点,绘制用户消费金额和订单商品量散点图
user_grouped.query('order_products<600' and 'order_amount<8000').plot.scatter(x='order_products',y='order_amount')

用户消费金额和订单商品量散点图呈现明显的线性相关关系,说明商品较为单一,价格稳定。

2.2 从时间维度分析消费情况

以月份为统计窗口

# 对数据按月进行降采样
df_dtindex = df.set_index(['order_dt'])   # 设置order_dt作为索引TimeStamp
month_grouped = df_dtindex.resample('m').sum()[['order_products','order_amount']]
month_grouped['user_sum'] = df_dtindex.resample('m')['user_id'].nunique()
month_grouped.head(5)

在这里插入图片描述

2.2.1-3 每月消费人数情况、每月订单商品量、每月订单金额

month_grouped.plot(kind='line',subplots=True,figsize=(9,7))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值