毕设项目分享 大数据分析:健身平台会员用户消费行为分析


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个大数据项目

大数据分析:电商产品评论数据情感分析

大家可用于 毕业设计

🧿 选题指导, 项目分享:见文末

2 数据集

数据集来源于某健身房2019年3月至2020年2月会员消费购买行为,数据集一共包含四个字段:用户ID,购买日期,购买数量和购买金额。属于非常典型的消费行为数据集。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt#导入库及所需的包
from datetime import datetime
plt.rc('font', family='SimHei', size=18)# 显示中文标签
plt.style.use ('ggplot')#设定绘图风格
df=pd.read_excel(r"D:\PycharmProjects\data\cuscapi.xls", order_dt=['date'])# 数据加载
df.head(10)

前10行数据展示

在这里插入图片描述

pd.set_option('display.float_format', lambda x: '%.2f' % x)
df.describe()

在这里插入图片描述

分析:

  • 1.会员用户平均每笔订单购买1.5个商品,标准差为在0.9,波性较小 。中位数在1个商品,75分位数在2个产品,说明绝大订单的购买量都不多。
  • 2.平均每笔订单消费金额为22.9元,标准差约为95,中位数在20,平均数大于中位数。大多数会员消费金额集中在小额,小部分用户贡献大额消费,符合消费类数据的二八分布。
  • 3.一般而言,消费类数据的分布都是长尾分布。

3 数据处理

3.1 数据类型转换

#提取月份
df['order_dt']=df['order_dt'].dt.date
df['month']=df['order_dt'].astype('datetime64[M]')
df.head(10)

在这里插入图片描述

3.2 数据分析-月度总趋势分析

df.groupby('month').order_amount.sum().plot()
plt.xlabel('月份')
plt.ylabel('消费金额(元)')
plt.title('不同月份的用户消费金额',fontsize=20)

在这里插入图片描述

df.groupby('month').order_products.sum().plot()
plt.xlabel('月份')
plt.ylabel('商品个数')
plt.title('不同月份的产品购买量',fontsize=20)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.3 数据分析-用户个体行为分析

user_consume=df.groupby('user_id').sum()
plt.scatter(user_consume['order_products'], user_consume['order_amount'] ) 
plt.xlabel('消费产品个数')
plt.ylabel('消费金额')
plt.title('用户消费金额与产品个数的关系散点图',fontsize=20)

在这里插入图片描述

consume_products = user_consume['order_products']
consume_amount= user_consume['order_amount'] 

fig= plt.figure(figsize=(10.,6))
fig.add_subplot(1,2,1)
consume_products.hist(bins=10 )
plt.title('用户购买数量分布直方图')
plt.xlabel('购买数量')
plt.ylabel('人数')
    
fig.add_subplot(1,2,2)
consume_amount.hist(bins=10) 
plt.title('用户购买金额分布直方图')
plt.xlabel('购买金额')
plt.ylabel('人数')

在这里插入图片描述

df.groupby('user_id').month.min().value_counts().plot()
plt.title('第一次消费会员数和时间拆线图')
plt.xlabel('首购时间')
plt.ylabel('会员数')

在这里插入图片描述

a,b=plt.subplots(figsize=(10,6))
b.plot(pivoted_counts.transf.count())
b.plot(pivoted_counts.transf.sum())
legends=['消费人数','二次消费以上用户人数']
b.legend(legends)
plt.title('每月消费和二次消费以上用户人数')
plt.xlabel('时间(月)')
plt.ylabel('用户数')

在这里插入图片描述

3.4 回购率分析

#回购率是某一个时间窗口内消费的用户,在下一个时间窗口仍旧消费的占比。比如1月消费用户1000,他们中有300个2月依然消费,回购率是30%。
pivoted_amount=df.pivot_table(index='user_id',columns='month',values='order_amount',aggfunc='mean').fillna(0)
columns_month=df.month.dt.date.sort_values().unique()
pivoted_amount.columns=columns_month
pivoted_amount.head()

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.5 数据分析-用户行为中层分析

3.5.1 RFM分层

user_rfm=df.pivot_table(index='user_id',values=['order_dt','order_products','order_amount'],aggfunc={'order_dt':'max','order_products':'count','order_amount':'sum'})
user_rfm.head()
user_rfm['period']=(user_rfm.order_dt.max()-user_rfm.order_dt)/np.timedelta64(1,'D')
user_rfm=user_rfm.rename(columns={'period':'R','order_products':'F','order_amount':'M'})
user_rfm.head()
#定义分层函数
def rfm_func(x):
    level=x.apply(lambda x:'1' if x>=0 else '0')
    label=level.R+level.F+level.M
    d={'111':'高价值客户','011':'重点保持客户',
       '101':'重点发展客户','001':'重点挽留客户',
      '110':'一般价值客户','010':'一般保持客户',
     '100':'一般发展客户','000':'潜在客户'}
    result=d[label]
    return result
user_rfm['label']=user_rfm[['R','F','M']].apply( lambda x:x-x.mean()).apply(rfm_func,axis=1)
user_rfm.head()
from matplotlib import font_manager as fm #字体管理器
from matplotlib import cm#
proptease = fm.FontProperties()
proptease.set_size('medium')

labelindex =user_rfm.groupby('label').count().index
labelvalues =user_rfm.groupby('label')['M'].count().tolist()
s = pd.Series(labelvalues, index=labelindex )
labels = s.index
sizes = s.values

explode = (0,0,0,0,0.1,0.1,0.2)  # only "explode" the 1st slice
fig, axes = plt.subplots(1,2,figsize=(10,6))
ax1,ax2 = axes.ravel()#结合ravel()函数列出所有子图

colors = cm.rainbow(np.arange(len(sizes))/len(sizes))# # 随机生成颜色
# patches:饼片。texts:分类标签的文本列表。autotexts:百分比部分的文本列表
patches, texts, autotexts = ax1.pie(sizes, labels=labels, autopct='%1.0f%%',explode=explode,
shadow=False, startangle=170, colors=colors, labeldistance=1.2,pctdistance=1.05, radius=0.4)
ax1.axis('equal')#将饼图显示为正圆形
plt.setp(texts, fontproperties=proptease)

# 设置百分比文本样式
for i in autotexts:
    i.set_size('large')
ax1.set_title('用户分层结构饼状图', loc='center')
ax2.axis('off')#关闭所有坐标轴线、刻度标记和标签
ax2.legend(patches, labels, loc='center left',fontsize=10)
plt.tight_layout()#tight_layout会自动调整子图参数,使之填充整个图像区域

在这里插入图片描述

5 最后 - 技术解答 - 毕设帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值