当前位置: 首页 > ds >正文

电子产品销售数据分析及RFM用户价值分析

目录

项目背景

实战案例

1 读取数据

1.1  字段解析

 1.2  数据基础信息查看

 1.3  数据存储最小格式

2  数据清洗

2.1  查看缺失值比例

2.2  查看重复值比例

合成新列:buy_count

合成新列:购买总金额(GMV)

2.3  检测异常值

2.3.1  转化id数据格式

2.3.2  检查price,age是否有异常值

2.3.3  其他字段是否有异常值

3  数据探索性分析(EDA)

3.1  总览

3.1.1  总成交金额GMV

3.1.2  月成交金额GMV

月度GMV可视化 

 3.1.3  客单价

3.2  用户分析

3.2.1  用户区域特征

3.2.2  用户性别特征

3.2.3  用户年龄特征

3.2.4  用户消费特征

4  RFM模型

4.1  M:消费金额

4.2  F:消费频率

4.3  R:最近一次消费

4.4  RFM打分体系

4.5  用户打标

4.6  RFM用户价值模型可视化

案例全代码

参考文章


项目背景

RFM是一种经典的业务分析模型。通过对客户购买行为的3个维度R(最近购买),F(购买频次),M(购买)金额进行打分,进而对客户价值类型进行分类。经典的RFM模型将客户分为8类。不同类型的客户对企业的贡献是截然不同的,针对不同价值的客户企业需要制定不同的营销对策。

  • 近度(Recency,最近一次消费到当前的时间间隔)
  • 频度(Frequency,最近一段时间内的消费次数)
  • 额度(Monetory,最近一段时间内的消费金额总额/均额)

实战案例

电子产品销售数据分析及RFM用户价值分析

内容是分析消费类电子产品(主要指不同品牌手机及配件)在某电商平台的销售数据。

全代码notebook文件及原始数据文件附于文末。

1 读取数据

1.1  字段解析

  • Unnamed: 行号
  • event_time:下单时间
  • order_id:订单编号
  • product_id:产品标号
  • category_id :类别编号
  • category_code :类别
  • brand :品牌
  • price :价格
  • user_id :用户编号
  • age :年龄
  • sex :性别
  • local:省份

 1.2  数据基础信息查看

 

 1.3  数据存储最小格式

看上一步最后,数据大小50+MB,读取还是需要5-10秒的,这里介绍一段缩减数据类存储空间的代码。

# reduce memory
def reduce_mem_usage(df, verbose=True):start_mem = df.memory_usage().sum() / 1024**2numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']for col in df.columns:col_type = df[col].dtypesif col_type in numerics:c_min = df[col].min()c_max = df[col].max()if str(col_type)[:3] == 'int':if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:df[col] = df[col].astype(np.int8)elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:df[col] = df[col].astype(np.int16)elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:df[col] = df[col].astype(np.int32)elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:df[col] = df[col].astype(np.int64)else:if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:df[col] = df[col].astype(np.float16)elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:df[col] = df[col].astype(np.float32)else:df[col] = df[col].astype(np.float64)end_mem = df.memory_usage().sum() / 1024**2print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))return df

本案例执行后代码可缩减12.5%

2  数据清洗

清晰必做的3个工作,处理缺失值、重复值、异常值

2.1  查看缺失值比例

df.isnull().mean()

 缺失率23%的字段:category_code,保留,固定值填充

# category_code本身为字符型,且缺失率在23% ,不宜直接删除,考虑用字符‘N’表示缺失进行填充
df['category_code'] = df['category_code'].fillna('N')

缺失率4%的字段:brand,删除缺失行

# 只保留非缺失行的数据
df = df[df.brand.notnull()]

2.2  查看重复值比例

df.duplicated().mean()
http://www.xdnf.cn/news/11815.html

相关文章:

  • 数字逻辑芯片大全
  • Yahoo javascript 开源界面库YUI 和EXT
  • C/C++中inline/static inline/extern inline的区别及使用
  • Windows下Hook API技术(hook send)
  • 游戏高手必备!《植物大战僵尸杂交版》风灵月影多功能修改器操作手册
  • 让你的 Google Toolbar 兼容 Firefox 5.0
  • CuteFTP Pro 8.3.4 最新破解绿色版
  • 全国快递查询接口,快递,全球快递,配送,物流管理,物流数据,电子商务
  • Oracle VM VirtualBox 创建和使用 Ubuntu
  • 什么是VAE与VQ-VAE
  • nginx实战总结-keepalive\keepalived\keep-alive
  • 一文带你快速上手 Rollup
  • wampserver安装及如何使用
  • 智能汽车虚拟化(Hypervisor)技术详解_汽车操作系统中的虚拟化(1)
  • CentOS 所有下载
  • DevExpress 概述
  • DDS原理及FPGA实现
  • Codeforces(1500题目汇总)
  • 全文发布|SmartX 金融行业跑批类业务场景探索与实践合集
  • 单例模式详解
  • Java图像编程之:Graphics
  • sudo命令及权限管理命令
  • UEDITOR1.4.3.3整合教程
  • ACM竞赛及备战建议
  • 对IOC和DI的通俗理解
  • JAVA环境变量配置详解(全网最新详细教程)
  • 用RStudiod的界面来读取数据
  • Thread、ThreadLocal、ThreadLocalMap
  • 一文带你详细了解JVM运行时内存
  • POM及POM设计原理