头歌 客户价值分析

客户价值分析

制作不易!点个关注!给大家带来更多的价值!

一、实验目的与要求

1、掌握使用numpy和pandas库处理数据的基本方法。 2、掌握使用RFM分析模型对客户信息进行特征提取的基本方法。 3、掌握对特征数据进行标准化处理的基本方法。 4、掌握使用Sklearn库对K-Means聚类算法的实现及其评价方法。 5、掌握使用matplotlib结合pandas库对数据分析可视化处理的基本方法。

二、实验内容

1、利用python中pandas等库完成对数据的预处理,并计算R、F、M等3个特征指标,最后将处理好的文件进行保存。 2、利用python中pandas等库完成对数据的标准化处理。 3、利用Sklearn库和RFM分析方法建立聚类模型,完成对客户价值的聚类分析,并对巨累结果进行评价。 4、结合pandas、matplotlib库对聚类完成的结果进行可视化处理。

三、实验步骤

1、数据预处理。

(1)导入所需要使用的包
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
from math import ceil
from datetime import datetime
import seaborn as sns
from sklearn.cluster import KMeans
(2)读取文件
data=pd.read_csv("/data/bigfiles/data2.csv")
data.head()
(3)查看数据的基本统计信息
data.isnull().sum()
data.info()
(4)提取属性列
data.订单状态.value_counts()
data=data.loc[data['订单状态']=='交易成功',:]
data.shape
data.duplicated().sum()
data=data.drop_duplicates()
data=data.reset_index()
data.shape
data1=data[['买家会员名','买家实际支付金额','订单付款时间']]
data1.columns=['买家名','消费金额','付款时间']
data1=data1.reset_index()
data1=data1.drop('index',axis=1)
data1.head()
(5)处理异常数据
data1.isnull().sum()
data1['付款时间']=pd.to_datetime(data1['付款时间'])
data1.head()
(6)计算R并进行标准化,更改列名
exdata=datetime(2018,12,31)
data2=data1.groupby('买家名')['付款时间'].max().reset_index()
data2.columns=['买家名','最后一次消费时间']
data2['R']=(exdata-data2['最后一次消费时间']).dt.days
data2.head()
(7)计算F并进行标准化,更改列名
data1.付款时间.min()
start=datetime(2017,1,2)
period_day=data2['最后一次消费时间']-start
period_month=[]
for i in period_day:
    period_month.append(ceil(i.days/30))
print(period_month)
for i in range(0,len(period_month)):
    if period_month[i]==0:
        period_month[i]=1
print(period_month)
tmp=data1.groupby('买家名')['付款时间'].count().reset_index()
tmp.columns=['买家名','消费次数']
data2=pd.merge(data2,tmp,how='inner')
data2.head()
data2['F(月均消费次数)']=data2['消费次数']/period_month
data2
(8)更改M为列名,对数据进行标准化
m=data1.groupby('买家名')['消费金额'].sum().reset_index()
m.columns=['买家名','消费总金额']
data2=pd.merge(data2,m,how='inner')
data2.head()
data2['M(月均消费金额)']=data2['消费总金额']/data2['F(月均消费次数)']
data2.head()
data2=data2[['买家名','R','F(月均消费次数)','M(月均消费金额)']]
data2.columns=['买家名','R(最后一次消费时间)','F(月均消费次数)','M(月均消费金额)']
data2
rfm=data2[['R(最后一次消费时间)','F(月均消费次数)','M(月均消费金额)']]
rfm=(rfm-rfm.mean())/rfm.std()
rfm.columns=['R(标准化)','F(标准化)','M(标准化)']
rfm
rfm.shape
(9)存储预处理后的文件
#output_file_path = '/data/bigfiles/客户信息_预处理.csv'
#data.to_excel(output_file_path,index=False)

2、数据分析

(1)读取预处理后的文件
#input_dir='/data/bigfiles/客户信息_预处.csv'
#data=pd.read_csv(input_dir)
(2)利用肘部法确定k的值(图像展示)
SSE = [] #误差平方和
for k in range(1,9):
    estimator=KMeans(n_clusters=k)
    estimator.fit(rfm)
    SSE.append(estimator.inertia_)
    
X=range(1,9)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.plot(X,SSE,'o-')
plt.xlabel('k')
plt.ylabel('SSE')
plt.title('肘部图')
plt.show
(3)建立KMeans模型
kmodel=KMeans(n_clusters=4,max_iter=100,random_state=0)
kmodel.fit(rfm)
kmodel.labels_
kmodel.cluster_centers_
(4)输出各个簇的质心
r1=pd.Series(kmodel.labels_).value_counts()
r2=pd.DataFrame(kmodel.cluster_centers_)
result=pd.concat([r2,r1],axis=1)
result.columns=['R','F','M']+['各类别人数']
result
KM_data=pd.concat([rfm,pd.Series(kmodel.labels_,index=rfm.index)],axis=1)
#data1=pd.concat([data,pd.Series(kmodel.labels_,index=data.index)],axis=1)
#data1.columns=list(data.columns)+['类别']
KM_data.columns=['R','F','M']+['类别']
KM_data.head()
(5)存储客户类型文件

3、数据可视化(对每个类型客户标准化后的R、F、M数据分别进行图像展示)

for i in range(3):
    plt.bar(np.arange(0,4)+0.2*i,kmodel.cluster_centers_[:,i],width=0.2)
plt.title('聚类结果统计柱状图')
plt.xlabel('类别')
plt.ylabel('RFM三个指标均值')
plt.legend(('R','F','M'))
plt.xticks([0.2,1.2,2.2,3.2],['第0类','第1类','第2类','第3类'])

4、分析评价

制作不易!点个关注!给大家带来更多的价值!

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值