RFM模型了解和数据实践以及dataframe用sql语句查询

RFM模型基础知识

  • R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
  • F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
  • M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。
    在这里插入图片描述

数据处理实践

  • 博客会上传一个csv文件里面是用户的交易信息,包含了订单id,用户id,时间,价格,商品类别等,编码是gbk。
  • 文件比较大所以输出只截取前几个
  • 本文是处理这个文件并得出rfm模型(并且都使用jupyter notebook),如果是pycharm输出时加上print即可

读取文件

import pandas as pd
import numpy as np

data = pd.read_csv('RFM_TRAD_FLOW.csv', encoding='gbk')
data

输出(只截了前五个,也可以使用head()方法截取)

	transID	cumid	time	amount	type_label	type
0	9407	10001	14JUN09:17:58:34	199.0	正常	Normal
1	9625	10001	16JUN09:15:09:13	369.0	正常	Normal
2	11837	10001	01JUL09:14:50:36	369.0	正常	Normal
3	26629	10001	14DEC09:18:05:32	359.0	正常	Normal
4	30850	10001	12APR10:13:02:20	399.0	正常	Normal
...

先求R的值

R也就是最近购买的时间,把时间转成时间戳即可

import time
# 转成时间戳
data['time'] = data['time'].map(lambda x:time.mktime(time.strptime(x, '%d%b%y:%H:%M:%S')))
# 分组求出最近时间,也就是时间戳最大的
group_obj = data.groupby(['cumid', 'type_label'])
R = group_obj[['time']].max()
R

输出(截取前几个):

		time
cumid	type_label	
10001	正常	1.284699e+09
特价	1.255316e+09
赠送	1.284197e+09
退货	1.278766e+09
10002	正常	1.276953e+09
赠送	1.278129e+09
退货	1.252047e+09
...

转透视表

  • 转透视表以用户id为行索引,商品类别为列索引
  • 会发现有很多NaN数据,这时候要进行数据清理
# 转透视表
r_trans = pd.pivot_table(R,index='cumid',columns='type_label',values='time')
# 处理NaN值,只有这两列有空值
r_trans[['特价','退货']] = r_trans[['特价','退货']].apply(lambda x:x.replace(np.nan,min(x)),axis=0)
# 添加一
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值