用户消费行为分析

本文通过分析23.3M的用户消费数据,从周期、个体消费和行为三个角度深入探讨。周期分析显示消费高峰在周三,用户在10-11点消费最多。用户平均消费682.73元,大部分消费集中在低端。用户消费次数以低频为主,消费金额主要在500-800元。RFM模型揭示了用户价值和创新能力,大部分用户属于一般发展和挽留客户。
摘要由CSDN通过智能技术生成

前言

周末在整理云盘时发现了一份“用户消费”的练习数据,忘记从哪里讨来的了。全部数据大概有23M,这样一份数据不练了它实在可惜,因此做了这个项目。
项目使用python3.7在Jupyter notebook上开发。开发过程中使用pandas、numpy对数据进行清洗,可视化使用的是pyecharts和matplotlib。

一、分析角度

数据共23.3M,记录了从2016年3月1日至5月2日的用户ID,支付状态,支付金额,支付时间。虽然只有4个字段,但是也可以做很丰富的分析。

1. 周期分析

  1. 总体消费趋势
  2. 3,4月消费对比
  3. 每周用户消费金额
  4. 3,4月工作日及周末消费金额、消费次数、消费人数、消费时段对比

2. 用户个体消费分析

  1. 用户消费金额和消费次数描述统计
  2. 用户消费金额分布
  3. 用户消费次数分布

3. 用户消费行为分析

  1. 用户首购时间
  2. 用户最后一次消费时间
  3. RFM
  4. 新老客消费比
  5. 用户生命周期
  6. 用户购买周期

二、分析流程

import pandas as pd
import numpy as np

from pyecharts.charts import Pie, Bar, Map, WordCloud,Line,Grid,Scatter,Radar,Page  #可视化
from pyecharts import options as opts
from pyecharts.globals import SymbolType
from pyecharts.globals import ThemeType
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import string
import seaborn as sns
%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.style.use('ggplot')
df = pd.read_csv("order_info_utf.csv",
                       header=None,
                       names=['index','ID','type','mony','time'])
df.head()

源数据是csv格式,且不含表头,因此自定义columns。
其中
ID:用户编号
type:支付结果
mony:消费金额
time:消费时间
在这里插入图片描述

1. 数据概览

print("*"*15,"基础信息","*"*15)
print(df.info())
print("*"*15,"空值量","*"*15)
print(df.isnull().sum())
print("*"*15,"购买状态对比","*"*15)
print(df.type.value_counts())
print("*"*15,"描述统计","*"*15)
print(df.describe())
print("*"*15,"数据类型","*"*15)
print(df.dtypes)
*************** 基础信息 ***************
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 539414 entries, 0 to 539413
Data columns (total 5 columns):
index    539414 non-null int64
ID       539414 non-null int64
type     539414 non-null object
mony     539414 non-null float64
time     461805 non-null object
dtypes: float64(1), int64(2), object(2)
memory usage: 20.6+ MB
None
*************** 空值量 ***************
index        0
ID           0
type         0
mony         0
time     77609
dtype: int64
*************** 购买状态对比 ***************
已支付    461805
未支付     77609
Name: type, dtype: int64
*************** 描述统计 ***************
               index             ID           mony
count  539414.000000  539414.000000  539414.000000
mean   269711.828099   24455.136400     682.737632
std    155718.619380   24595.314273     286.883866
min         1.000000       1.000000     19.000000
25%    134855.250000   11211.000000     493.000000
50%    269710.500000   11211.000000     645.000000
75%    404567.750000   28677.750000     836.000000
max    539425.000000  101535.000000   12367.000000
*************** 数据类型 ***************
index      int64
ID         int64
type      object
mony     float64
time      object
dtype: object
  1. 可以看到源数据共计539414条,其中time有461805条,而已支付刚好有461805,可以判断出,缺失的数据都是未支付的time列。
  2. 用户平均消费 682.73元,标准差在286.88元,具有波动性。最高一次消费12367元,最低消费19元。50分位消费645元,略低于平均水平,75分位在836元,中低端消费较多。
  3. 一般而言,消费类的数据分布,都是长尾形态。大部分用户都是小额,然而小部分用户贡献了收入的大头,俗称二八。

1. 数据清洗

#删除index列
df.drop(['index'],axis=1,inplace=True)
#替换type列
df.loc[df["type"] == "已支付", "type"] = 1
df.loc[df["type"] == "未支付", 
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值