单车网站用户消费行为分析

单车网站用户消费行为分析

① 背景介绍
数据来源于互联网,是用户在一家单车网站上的消费记录

② 分析目标
主要根据用户的消费记录,通过建立RFM模型,分析复购率、回购率等关键指标,来对用户的消费行为进行分析,以给网站运营和决策提供数据支撑。

③ 分析过程

  • 准备工作(数据集观察与数据清洗)
  • 用户消费趋势分析(按月)——每月消费总金额、消费次数、产品购买量、消费人数、用户平均消费金额、用户平均消费次数
  • 用户个体消费分析——用户消费金额、产品购买量的描述性统计、用户消费金额和产品购买量分布、用户累计消费金额占比
  • 用户消费行为分析——用户第一次消费(首购)时间分布、用户最后一次消费时间分布、新老用户占比、用户分层RFM模型、各类用户(新用户、活跃用户、流失用户、回流用户)数量和占比、用户购买周期、用户生命周期
  • 用户复购率和回购率分析——复购率、回购率

1、准备工作(数据集观察与数据清洗)

import pandas as pd
import numpy as np
columns = ['user_id','order_dt','order_products','order_amount']
df = pd.read_table('F:\\Jupyter\\单车案例_AndyWu\\bicycle_master.txt',names=columns,sep='\s+')
  • user_id: 用户ID
  • order_dt: 购买日期
  • order_products: 购买产品数
  • order_amount: 购买金额

对时间进行解析,一开始默认的格式是 int64的,可以用 df.info() 来查看,默认会是 datetime64[ns] 类型,后面中括号表示 时间间隔是 ns

df.info()
df.head()
df.describe()
  • 大部分订单只消费了少量商品(平均购买产品数 = 2.41),有一定极值的干扰
  • 用户的消费金额比较稳定,平均消费35.9元,中位数在26元,有一定极值的干扰

下面是对 order_dt 列(取values),转换类型为datetime64[M],默认就会是每月的第一天了,同理设置为[Y]就是每年的1月1日,然后生成新的一列 month

df['order_dt'] = pd.to_datetime(df.order_dt,format='%Y%m%d')
df.head()
df['month'] = df.order_dt.values.astype('datetime64[M]')
df.head()

2、进行用户消费趋势的分析

  • 每月的消费总金额
  • 每月的消费次数
  • 每月的产品购买量
  • 每月的消费人数
  • 每月用户平均消费金额
  • 每月用户平均消费次数
# 计算每月的消费总金额
grouped_month = df.groupby('month')
order_month_amount = grouped_month.order_amount.sum()
order_month_amount.head()
# 计算用户每月的消费总金额、消费次数、产品购买量
grouped_month_info = grouped_month[['order_amount','user_id','order_products']].agg({'order_amount':sum, 'user_id':'count', 'order_products':sum})
grouped_month_info
grouped_month_info.rename(columns = {'order_amount':'消费金额', 'user_id': '消费次数', 'order_products': '产品购买量'}, inplace=True)
grouped_month_info
# 计算每月的消费人次
# 这里的map(len)也可以写成agg(len)
grouped_month_info['消费人次'] = grouped_month['user_id'].unique().map(len)
grouped_month_info
grouped_month_info = grouped_month_info.reset_index()
grouped_month_info.info()
# 把month字段的类型转换为str类型,只有这样,PoweiBI才能调用
grouped_month_info['month'] = grouped_month_info['month'].astype(str)
grouped_month_info.info()
grouped_month_info.to_excel(r'.\临时表\月销售额、销售次数、产品购买量、消费人数.xlsx')

这里导出为excel表,然后使用PowerBI导入excel表数据,并在PBI中作图,然后截图过来,下同。(个人认为PBI中作图比matplotlib作图效果更好)

由上图可知,消费金额在前三个月达到最高峰,后续消费趋于稳定,但是有轻微下降趋势

由上图可知,月产品购买量在前三个月达到最高峰,后续较为稳定,但有轻微下降趋势

  • 前三个月消费订单人数在10000笔左右,后续月份的平均消费人数则在2500人
  • 每月消费人数低于每月消费次数,但差异不大
  • 前三个月每月的消费人数在8000-10000之间,后续月份,平均消费人数在2000不到

去重的方法有多种,这里也可以使用数据库思想,df.groupby([‘month’,‘user_id’]).count().reset_index()

# 上面进行的汇总分析,其实也可以用数据透视的方法更快实现,一次性求出结果,但是个人认为.agg方法写起来稍微简单一些
df.pivot_table(index='month',
              values=['order_products','order_amount','user_id'],
              aggfunc={'order_products':'sum',
                      'order_amount':'sum',
                      'user_id':'count'}).head()
# 计算用户每月平均消费金额
amount=grouped_month.order_amount.sum()
num=df.groupby('month').user_id.apply(lambda x:len(x.drop_duplicates()))
avg_amount=amount/num
avg_amount.plot()

可知,用户每月用户平均消费金额都在37.5元以上࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值