数据获取:

表格数据
数据清洗后数据:链接:https://pan.baidu.com/s/1D7qOZqKmF3YR3meQPsp3sQ 
提取码:1234

数据下载下来后,先进行数据清洗。数据清洗在进行用户价值分析,也可以直接下载我清洗后的数据。

RFM模型:

RFM的含义:

R (Recency)︰客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。

F (Frequency)︰客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。

M(Monetary)︰客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。

数据透视表:

如果我们对上面的数据做一个这样的数据透视表,在excel表个是这样的,因为这个表格中用户ID是很多重复的,所以我们要分析用户的话需要将用户提取出来,根据RFM模型,我们需要获得每个用户的 最后一次交易时间,交易次数,和最近一段时间内交易的金额。以上数据透视表已经将其体现出来了,那我们就将使用代码将以上功能体现出来。

# 透视表
df = data.pivot_table(index=['CustomerID'],values=['InvoiceDate', 'InvoiceNo', 'total'],aggfunc={'InvoiceDate': 'max', 'InvoiceNo': 'count', 'total': 'sum'})
print(df)
CustomerID在excel 中放在行的位置,其实是列名;
values:需要处理的数据
aggfunc:是需要处理的列计算方法

计算最后一次下单的时间就是InvoiceDate的最大值,InvoiceNo 计算交易了几次,total 交易了多少钱。

客户最近一次交易时间的间隔 = 分析的数据时间段内最晚的时间 - 最后一次交易时间,这里我们用InvoiceDate列所有数据最后一次交易时间为基准。减去每个用户最后一次交易时间,得到一个时间差,然后转换为天数。
df['R'] = (df['InvoiceDate'].max() - df['InvoiceDate']).dt.days   # 求得天数
print(df)

这样就添加了一列R

InvoiceNo对应的是F, total对应的是M。所以我们直接改列名就好

df.rename(columns = {'InvoiceNo':'F','total':'M'},inplace= True)rfmdf = df[['R','F','M']]
print(rfmdf)

这样我们就将RFM数据提取处理了,具体要这么分析呢?

模型分类:

我们将数据转换为0和1。进行二分法 ,大于平均值的为1, 小于平均值的为 0

rfmdf = rfmdf.apply(lambda x : x- x.mean())
# 如果>平均值,则为'1',否则为'0'
rfmdf = rfmdf.applymap(lambda x : '1' if x>0 else '0')

再去定义一个函数将进行定义什么类型的客户。

def func(x):label = {'111': '重要价值客户','101': '重要发展客户','011': '重要保持客户','001': '重要挽留客户','110': '一般价值客户','100': '一般发展客户','010': '一般保持客户','000': '一般挽留客户'}return label[x['R']+x['F']+x['M']]
rfmdf['label'] = rfmdf.apply(func,axis=1)
rfmdf['label'].value_counts()
print(rfmdf)

这里我们已经对客户进行了定义。但是表格不适合我们一眼看得到数据  ,接下来我们需要进行绘图。这里用到的函数是matplotlib。

对数据进行绘图:

首先我们得先下载matplotlib 函数包,命令行:pip install matplotlib

import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.size'] = 20rfmdf['label'].value_counts().plot.bar(figsize=(20,9),color='red',alpha=0.6)
plt.xticks(rotation =0)
for i ,j in enumerate(rfmdf['label'].value_counts()):plt.text(i-0.1,j+50,j,va='center')plt.show()

我这边用的是柱状图,你们可以用饼图或者其他图都可以。

以下是完整的代码

import pandas as pd
# import numpy as np
import matplotlib.pyplot as pltdata = pd.read_csv(r'E:\数据分析\用户价值分析 RFM模型\data.csv')
pd.set_option('display.max_columns', 888)  # 大于总列数
pd.set_option('display.width', 1000)
# print(data.head())
# print(data.info())# .空值处理
# print(data.isnull().sum())  # 空值中和,查看每一列的空值# 空值删除
data.drop(columns=['Description'], inplace=True)# CustomerID有空值
# 删除所有列的空值
data.dropna(inplace=True)
# print(data.isnull().sum())  # 由于CustomerID为必须字段,所以强制删除其他列,以CustomerID为准
## 转换为日期类型
data['InvoiceDate'] = pd.to_datetime(data['InvoiceDate'])# CustomerID 转换为整型
data['CustomerID'] = data['CustomerID'].astype('int')# print(data.describe())data = data[data['Quantity'] > 0]
# print(data)#
# 查看重复值
# data[data.duplicated()]
# print(data[data.duplicated()])
# 删除重复值
data.drop_duplicates(inplace=True)
# 每张发票的总价
data['total'] = data['Quantity'] * data['UnitPrice']# # 透视表
df = data.pivot_table(index=['CustomerID'],values=['InvoiceDate', 'InvoiceNo', 'total'],aggfunc={'InvoiceDate': 'max', 'InvoiceNo': 'count', 'total': 'sum'})# 1) 对用户进行分组,求得每个用户最后一次交易时间
# 2) 分析的数据时间段内最晚的时间 - 最后一次交易时间df['R'] = (df['InvoiceDate'].max() - df['InvoiceDate']).dt.days   # 求得天数
# print(df)
df.rename(columns = {'InvoiceNo':'F','total':'M'},inplace= True)rfmdf = df[['R','F','M']]
print(rfmdf)# 先二分
rfmdf = rfmdf.apply(lambda x : x- x.mean())
# 如果>平均值,则为'1',否则为'0'
rfmdf = rfmdf.applymap(lambda x : '1' if x>0 else '0')def func(x):label = {'111': '重要价值客户','101': '重要发展客户','011': '重要保持客户','001': '重要挽留客户','110': '一般价值客户','100': '一般发展客户','010': '一般保持客户','000': '一般挽留客户'}return label[x['R']+x['F']+x['M']]
rfmdf['label'] = rfmdf.apply(func,axis=1)# value_counts()
rfmdf['label'].value_counts()
print(rfmdf)plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.size'] = 20rfmdf['label'].value_counts().plot.bar(figsize=(20,9),color='red',alpha=0.6)
plt.xticks(rotation =0)
for i ,j in enumerate(rfmdf['label'].value_counts()):plt.text(i-0.1,j+50,j,va='center')plt.show()

python用户价值分析相关推荐

  1. 【用户价值分析 RFM模型】用户价值分析

    RFM模型是衡量客户价值和客户创利能力的重要工具和手段.RFM分析模型主要由三个指标组成,下面对这三个指标的定义和作用做下简单解释: 1.最近一次消费(Recency) 最近一次消费意指用户上一次购买 ...

  2. 考拉电子公司—GMV异常分析及RFM用户价值分析

    一.背景介绍 考拉电子公司(虚拟公司)是一家电子类产品经销商,成立于2020年1月,旗下产品有手机.电脑.影音设备等.公司从2020年1月至8月期间,整体发展良好,尤其是5至8月期间,公司GMV直线上 ...

  3. python用户登录_python用户登录系统

    本文实例为大家分享了用户登录系统python实现代码,供大家参考,具体内容如下 注意事项: 1.使用python3执行程序.按提示输入1或2,登录或退出程序 2.输入用户名后,如果用户名被锁定及无效用 ...

  4. python while循环if_初入python 用户输入,if,(while 循环)

    python 基础 编译型: 一次性将所有程序编译成二进制文件. 缺点:开发效率低,不能跨平台 优点:运行速度快. :c ,c++语言 等等.... 解释行:当程序执行时,一行一行的解释. 优点:开发 ...

  5. python如何实现接口安全_利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法与流程...

    本发明涉及人机交互技术领域,具体为一种利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法. 背景技术: 编程是人与计算机交互最直接与高效的方式,由于其专业性与敏感性,一般产品不会提供该 ...

  6. python 系统管理_实例讲解python用户管理系统

    本文主要为大家分享一篇python用户管理系统的实例讲解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,希望能帮助到大家. 自定义函数+装饰器,每一个模块写的一个函数 很多地方能用装 ...

  7. 【PySimpleGUI】Python用户交互图形界面开发(3)

    目录 前言 一.通过列表索引获取窗口返回值 二.通过字典的键获取返回值 前言 上一篇文章介绍了窗口关闭,按钮点击以及其他元素事件.[PySimpleGUI]Python用户交互图形界面开发(2) 这篇 ...

  8. python 推荐系统算法,Python用户推荐系统minkowski算法的实现

    Python用户推荐系统minkowski算法的实现 #-*- coding: utf-8 -*- ''' python: www.iplaypy.com @author: Jekey 欧几里得距离 ...

  9. python客户价值分析_[Python数据挖掘]第7章、航空公司客户价值分析

    一.背景和挖掘目标 二.分析方法与过程 客户价值识别最常用的是RFM模型(最近消费时间间隔Recency,消费频率Frequency,消费金额Monetary) 1.EDA(探索性数据分析) #对数据 ...

最新文章

  1. mysql 主从复制 和基于gtid的mysql主从复制
  2. CentOS安装Oracle全过程
  3. python--numpy pad函数使用
  4. TCP/IP协议与UDP协议的区别
  5. 代码收藏——js+asp 的屏幕滚动脚本
  6. tensorrt轻松部署高性能dnn推理_实战教程:TensorRT中递归神经网络的介绍(中文字幕)...
  7. JavaScript实现常见的数据结构
  8. 2012递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)
  9. 12、常见Conditional注解源码解析(ok)
  10. Oracle忽略hint的几种情形
  11. 贪心算法——数列极差
  12. dell服务器分区表修复,完美恢复原产Dell Recovery软件、修复环境(添加教程)
  13. vasp计算-INCAR文件
  14. 保洁阿姨看完都会了!15个经典面试问题及回答思路,手慢无
  15. dwcss样式中英对照_DW中常用css样式四种类型详细解析说明
  16. 小黄的日记,爱情本该如此
  17. html 整体边距,html内容左右边距怎么设置
  18. linux ps 简书,史上最全ps 命令解析
  19. java set list 区别是什么_Java中的list和set有什么区别
  20. 【luogu P4036】【ybt金牌导航4-5-3】火星人

热门文章

  1. 360音乐搜索使用讲解说明
  2. 推荐100首值得听的英文歌【ZT】
  3. Leetcode 碎碎念
  4. 心理学|颜色是如何影响我们的情绪的?
  5. delegate 用法
  6. 北京大学邮箱客户端设置方法
  7. stm32f103与407的不同点总结
  8. 什么才是DOCSIS 3.1技术?
  9. 什么叫多头,什么叫空头?
  10. csharp高级练习题:巴路士惠勒改造【难度:4级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练