​数据分析项目-用户消费行为分析

目录

导入及分析

第一部分:数据清洗

导包

数据加载&分析数据

数据清洗

第二部分:按月数据分析

分析方向:用户、订单、消费趋势 

消费趋势的分析

1. 每月的消费总金额

2. 每月的消费次数

3. 每月的产品购买量

4. 每月的消费人数(去重)

5. 将上述趋势分析用透视表展示(pivot_table)

第三部分:用户个体消费数据分析

1. 用户消费金额和消费次数的描述统计

2.用户消费金额和消费次数的散点图

3. 用户消费金额的分布图(二八法则)

4. 用户消费次数的分布图(二八法则)

5. 用户累计消费金额的占比(百分之多少的用户占了百分之多少的消费额)

第四部分:用户消费行为分析

1.用户第一次消费(首购) 

2. 用户最后一次消费

3. 新老客户的消费比

4. 用户的购买周期

5. 用户分层(使用透视表)

5.1. 用户分层二:RFM 

5.2. 用户分层三:求和

5.3. 用户分层四:计数

5.4. 用户分层五:给不同层次客户用颜色区分设置 

5.5. 用户分层六:用户生命周期 

5.6. 用户分层七:用户购买周期(按订单)

6. 复购率和回购率的分析


 

导入及分析

项目名称: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. 用户累计消费金额的占比(百分之多少的用户占了百分之多少的消费额)

1. 用户消费金额和消费次数的描述统计


                
  • 12
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值