目录
5. 用户累计消费金额的占比(百分之多少的用户占了百分之多少的消费额)
导入及分析
项目名称:CD用户消费行为分析
项目概述:本项目主要利用Numpy,Pandas,matplotlib等三个工具进行数据的处理,来分析用户消费行为。数据来源与CDNow网站的用户购买明细。
分析步骤:
第一部分:数据清洗
1. 数据类型的转换
2. 空值处理
3. 异常值处理
第二部分:按月数据分析
1. 每月的消费总金额
2. 每月的消费次数
3. 每月的产品购买量
4. 每月的消费人数
第三部分:用户个体消费数据分析
1. 用户消费金额和消费次数的描述统计
2. 用户消费金额和消费次数的散点图
3. 用户消费金额的分布图
4. 用户消费次数的分布图
5. 用户累计消费金额的占比
第四部分:用户消费行为分析
1. 用户第一次消费时间
2. 用户最后一次消费时间
3. 新老客户消费比
4. 用户分层
5. 用户购买周期
6. 用户生命周期
第一部分:数据清洗
导包
#导入需要的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
数据加载&分析数据
字段含义:
user_id:用户ID
order_dt:购买日期
order_product:购买产品的数量
order_amount:购买金额
消费行业或者是电商行业一般是通过订单数、订单额、购买日期,用户ID这四个字段来分析的,基本上这四个字段就能缑进行很丰富的分析。
# 因为原始数据中不包含表头,在这里定义好赋值
columns=['user_id','order_dt','order_products','order_amount']
# 参数 sep='\s+',用于匹配任意空白符
df=pd.read_csv('./data/CDNOW_master.txt',names=columns,sep='\s+')
print(df.head())
print(df.info())
输出结果
user_id order_dt order_products order_amount
0 1 19970101 1 11.77
1 2 19970112 1 12.00
2 2 19970112 5 77.00
3 3 19970102 2 20.76
4 3 19970330 2 20.76
<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
None
Process finished with exit code 0
分析:
1.数据完整,没有空数据
2.order_dt是int类型,需要将其转换成时间类型
3.用户可能在同一天内重复购买(如:ID为2的顾客在1月12日这一天内购买了两次)
4.因为后面要按月分析,需要添加一列month
数据清洗
#数据清洗
df=date1.copy()
# format='%Y%m%d' 这里要指明格式,否则可能出错
df['order_dt']=pd.to_datetime(df['order_dt'],format='%Y%m%d')
# 增加一列 month
df['month']=df['order_dt'].values.astype('datetime64[M]')
print(df.head())
输出结果
user_id order_dt order_products order_amount month
0 1 1997-01-01 1 11.77 1997-01-01
1 2 1997-01-12 1 12.00 1997-01-01
2 2 1997-01-12 5 77.00 1997-01-01
3 3 1997-01-02 2 20.76 1997-01-01
4 3 1997-03-30 2 20.76 1997-03-01
Process finished with exit code 0
分析:
describe()是描述统计:
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
Process finished with exit code 0
分析
1. 大部分的订单只消费了少量的商品(平均2.4),有一定的极值干扰
2. 用户的消费金额比较稳定,平均消费在35.8元,中位数在25.9元,有一定的极值干扰。
3. 用户平均每笔订单购买2.4个商品,标准差在2.3,稍具波动性。中位数2个商品,75分位数3个商品, 说明绝大部分订单的购买量都不多。最大值在99个,数字比较高。购买金额的情况差不多,大部分 订单集中在小额
4. 一般而言,消费类的数据分布都是长尾形。大部分用户都是小额,然而小部分用户贡献了收入的大头, 俗称二八。
第二部分:按月数据分析
分析方向:用户、订单、消费趋势
消费趋势的分析
# 查看一下df的列,方便操作
print(df.columns)
输出结果
Index(['user_id', 'order_dt', 'order_products', 'order_amount', 'month'], dtype='object')
1. 每月的消费总金额
#每月消费总金额
# 根据 month分组统计购买金额总和
order_amt_mon=df.groupby('month')['order_amount'].sum()
print(order_amt_mon.head())
输出结果
month
1997-01-01 299060.17
1997-02-01 379590.03
1997-03-01 393155.27
1997-04-01 142824.49
1997-05-01 107933.30
Name: order_amount, dtype: float64
Process finished with exit code 0
绘图
#绘图
order_amt_mon.plot(c='red')
plt.show()
分析:
可以看到,97年1,2,3月销量很高,每月平局约3.6万,后期销量趋于平稳,每月在1万左右波动
2. 每月的消费次数
#2. 每月的消费次数
order_amt_count=df.groupby('month')['user_id'].count()
#绘图
order_amt_count.plot(c='orange')
plt.show()
分析:
前三个月平均消费订单在1万左右,后续月份趋于平稳,约在2500单每月
3. 每月的产品购买量
#3. 每月的产品购买量
order_products_sum=df.groupby('month')['order_products'].sum()
#绘图
order_products_sum.plot(c='b')
plt.show()
分析:
前3个月产品购买数量平均在24000左右,后期下降趋于平稳,约6000每月。原因猜想:
1.用户层面,早期用户中有异常值;
2. 公司层面,在搞促销等。因为只有销售数据,所以暂时无法判断具体原因。
4. 每月的消费人数(去重)
每月的消费人数(去重)去重的原因:一个人可能在一个月内多次消费
nunique表示统计去重后的个数
#4. 每月的消费人数(去重)去重的原因:一个人可能在一个月内多次消费
user_id_count=df.groupby('month')['user_id'].nunique()
user_id_count.plot(c='g')
plt.show()
分析:
每个月的消费人数小于每月的消费次数,但是区别不大。前3个月月均消费人数在9000左右,后续月均2000不到,一样是前期消费人多,后期平稳的趋势。
5. 将上述趋势分析用透视表展示(pivot_table)
#5. 将上述趋势分析用透视表展示(pivot_table)
df_pivot_table=df.pivot_table(index='month',
values=['user_id', 'order_products', 'order_amount'],
aggfunc={'user_id':'count','order_amount':'sum','order_products':'sum'})
print(df_pivot_table.head())
输出结果
order_amount order_products user_id
month
1997-01-01 299060.17 19416 8928
1997-02-01 379590.03 24921 11272
1997-03-01 393155.27 26159 11598
1997-04-01 142824.49 9729 3781
1997-05-01 107933.30 7275 2895
Process finished with exit code 0
分析:(解决一个需求可能会有很多种方法,具体看哪个更方便,更简单)
数据透视表是更简单的方法,有了透视表,用里面的数据绘图也是狠方便的。
第三部分:用户个体消费数据分析
上面是通过维度月,来看总体趋势。下面对个体进行分析,看消费能力如何。 大致分为以下五个方向:
1. 用户消费金额和消费次数的描述统计;
2. 用户消费金额和消费次数的散点图;
3. 用户消费金额的分布图(二八法则);
4. 用户消费次数的分布图;
5. 用户累计消费金额的占比(百分之多少的用户占了百分之多少的消费额)