在本项目中,我们基于用户购买数据(Transaction Data)做用户的分群,使用的方法一次是RFM模型和K-means算法。
原始数据是:http://archive.ics.uci.edu/ml/datasets/online+retail 。本项目中使用的数据是已经经过清洗之后的,原始数据的话需要大量的清洗工作。
import pandas as pd
import numpy as np
import datetime as dt
# 读取transaction数据, 数据有些大,读取会需要点时间,耐心等几秒...
df = pd.read_excel('OnlineClean.xlsx')
df.head()
# 对于时间属性做个转换,只保留年月日
df['InvoiceDate'] = df['InvoiceDate'].dt.date
# 一般情况下,在使用RFM模型的时候,一般需要过去一年的Transaction数据。为了提取过去一年的数据,我们首先对时间做一下处理。
print('Min date = {}, Max date = {}'.format(min(df.InvoiceDate), max(df.InvoiceDate)))
# 只考虑大于2010-12-09
df = df[df['InvoiceDate']>dt.date(2010,12,9)]
# 创建一个新的变量,叫做snapshot_date。 举个例子,我们已经有了过去一年的历史数据,然后基于历史数据要计算出R, F, M。
# 如果历史数据是昨天为止的,那当我们计算R(recency)的时候, 就需要今天 - 历史。 这样一来,今天其实就是昨天日期+1就可以了,这个
# 我们把它叫作snapshot_date
snapshot_date = max(df.InvoiceDate) + dt.timedelta(days=1)
# 我们再创建一个column叫作TotalSum, 来表示购买某一种商品的总额
df['TotalSum'] = df['Quantity'] * df['UnitPrice']
df.loc[df['InvoiceDate']>dt.date(2010,12,9) and df['CustomerID']==15805]
到目前为止