数据分析案例(6)淘宝电商数据客户价值分析

数据与代码
https://pan.baidu.com/s/1A9hzC9cPHX7vt5J5rX1rzw
提取码:9rrj

利用RFM衡量客户的价值,再利用K_means方法对RFM值进行聚类
聚为4类,

import pandas as pd
#读取Excel文件
df_2018=pd.read_excel('./data/2018.xlsx')
df_2019=pd.read_excel('./data/2019.xlsx')
print(df_2018.head())
#取出相应列
df_2018=df_2018[['买家会员名','买家实际支付金额','订单付款时间']]
df_2019=df_2019[['买家会员名','买家实际支付金额','订单付款时间']]
#合并
df_all=pd.concat([df_2018,df_2019])
#读取data_all的尾部数据
print(df_all.tail())
df_all.to_excel('./data/all.xlsx')

把两年的数据合在一起

接下来进行数据探索(计算空值,最大,最小,平均等)

'''
#对数据进行基本的探索
#返回缺失值个数以及最大最小值
'''

import pandas as pd
#读取Excel文件
data = pd.read_excel('./data/all.xlsx')
#数据的基本描述
view = data.describe(percentiles = [], include = 'all').T
'''
print(view)
       count unique  ...               first                last
买家会员名     3908   3167  ...                 NaT                 NaT
买家实际支付金额  3908    NaN  ...                 NaT                 NaT
订单付款时间    3271   3153  ... 2018-01-01 09:26:18 2019-12-31 20:33:54
'''
#describe()函数自动计算非空值数,需要手动计算空值数
view['null'] = len(data)-view['count']
view = view[['null', 'max', 'min']]
# 表头重命名
view.columns = [u'空值数', u'最大值', u'最小值']
#输出结果
print(view)
#导出结果
view.to_excel('./data/result.xlsx')

计算RFM值,我们不是要采用RFM模型来衡量客户价值吗

import pandas as pd
import numpy as np
#读取Excel文件
data_all = pd.read_excel('./data/all.xlsx')
#去除空值,订单付款时间非空值才保留
#去除买家实际支付金额为0的记录
data=data_all[data_all['订单付款时间'].notnull() & data_all['买家实际支付金额'] !=0]
# 复制数据
data=data.copy()
#计算RFM值
data['最近消费间隔']=(pd.to_datetime('2019-12-31')-pd.to_datetime(data['订单付款时间'])).values/np.timedelta64(1,"D")
df11=data[['订单付款时间','买家会员名','买家实际支付金额','最近消费间隔']]
'''
print(df11.head())
 订单付款时间   买家会员名  买家实际支付金额      最近消费间隔
0 2018-01-01 09:26:18  mr0932    748.50  728.606736
1 2018-01-01 10:06:07  mr0121     90.00  728.579086
2 2018-01-01 10:06:48  mr0932     10.00  728.578611
3 2018-01-01 10:18:12  mr0863    269.00  728.570694
4 2018-01-01 16:08:22  mr0356     50.86  728.327523
'''
#分组计算agg({'键1':'函数1','键2':'函数2'})
#size属于count_values(计数函数)
df1=df11.groupby('买家会员名').agg({'买家会员名':'size','最近消费间隔':'min',"买家实际支付金额":'sum'})
#列重命名rename({'旧列名1':'新列名1',"旧列名2":"新列名2"})
df2=df1.rename(columns={'买家会员名':'消费频率','买家实际支付金额':'消费金额'})
df2.to_excel('./data./RFM.xlsx')

下面就是数据转换了,因为后面就要利用k-means聚类模型了,数据转换的目的就是为了能送进K-means模型

import pandas as pd
data = pd.read_excel('./data/RFM.xlsx')                  #读取Excel文件
data=data[['最近消费时间间隔','消费频率','消费金额']]    #提取指定列数据
data = (data - data.mean(axis = 0))/(data.std(axis = 0)) #标准化处理
data.columns=['R','F','M'] #表头重命名
print(data.head())         #输出部分数据
data.to_excel('./data/transformdata.xlsx', index = False) #导出数据

K_means聚类

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
#解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
#读取数据并进行聚类分析
data = pd.read_excel('./data/transformdata.xlsx') #读取数据
cdata = pd.read_excel('./data/RFM.xlsx') #读取数据
cdata=cdata[['买家会员名','最近消费间隔','消费频率','消费金额']]    #提取指定列数据
#
k=4
Kmodel=KMeans(n_clusters=k)
Kmodel.fit(data)
clientdata=pd.concat([cdata,pd.Series(Kmodel.labels_,index=cdata.index)],axis=1)
#重命名最后一列为“类别”
clientdata.columns=list(cdata.columns)+[u'类别']
clientdata.to_excel('./data/client.xlsx')
print(clientdata.head())
# 按照类别分组统计R, F, M的指标均值
data_mean=clientdata.groupby('类别').mean()
print(data_mean)
data_mean.to_excel('./data/client_mean.xlsx')

new=data_mean.mean()
#增加一行RFM平均值(忽略索引),判断RFM值的高低
df=data_mean.append(new,ignore_index=True)
print(df)
#统计每个类别都有多少个
r1=pd.Series(Kmodel.labels_).value_counts()
'''
print(r1)
1    1316
0     978
3     120
2       3
'''
#聚类中心点
r2=pd.DataFrame(Kmodel.cluster_centers_)
r=pd.concat([r2,r1],axis=1)
'''
print(r)
          0         1          2     0
0  1.013341 -0.147393  -0.018006   978
1 -0.739537 -0.215375  -0.088156  1316
2  0.046509  2.743489  24.698081     3
3 -0.149629  3.494604   0.496072   120
'''
r.columns=list(data.columns)+[u'聚类数量']
r3 = pd.Series(Kmodel.labels_,index=data.index)  #类别标记
r = pd.concat([data,r3], axis=1)                 #数据合并
r.columns = list(data.columns)+[u'聚类类别']
'''
print(r)
             R         F         M  聚类类别
0    -1.391819 -0.349334 -0.220797         1
1    -1.236457 -0.349334 -0.168030         1
2    -0.117496 -0.349334  0.012967         1
3    -1.244047 -0.349334 -0.148718         1
4     0.510053  0.976162  0.345271         0
...        ...       ...       ...       ...
2412  1.290693 -0.349334  1.567756         0
2413  1.242337 -0.349334 -0.182317         0
2414  0.081242 -0.349334  0.026269         1
2415 -1.356949 -0.349334 -0.173725         1
2416  0.175324 -0.349334 -0.162335         0
'''
r.to_excel('./data/type.xlsx')                   #导出数据
plt.rcParams['font.sans-serif']=['SimHei']       #解决中文乱码
plt.rcParams['axes.unicode_minus']=False         #解决负号不显示
#密度图
for i in range(k):
  cls=data[r[u'聚类类别']==i]
  cls.plot(kind='kde',linewidth=2,subplots=True,sharex=False)
  plt.suptitle('客户群=%d;聚类数量=%d' %(i,r1[i]))
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面就是4种聚类人群可视化展示

客户3 :重要保持客户(F,M高,R略高平均分。高价值客户,,需作为VIP客户一对一营销,尽可能延长他们的高消费)
客户2:一般保持客户(F高,消费次数多,是比较忠实的客户,针对这种客户需要多传递促销活动,品牌消息,新品,活动消息)
客户1:一般发展客户(R,F,M都比较低,短时间内在店铺消费过,但是消费次数与消费金额都比较少,是店铺需要发展的潜在客户,应该该用户人群实施密集的营销信息推送)
客户0:潜在客户(R高,F,M低。说明该客户很长时间都没用在店铺进行交易,并且消费金额与消费次数都很少。这类客户可能只有店铺打折的时候才会出来消费,想办法推动他们的消费心理,否则有流失的风险)

  • 8
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你们卷的我睡不着QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值