客户价值分析
制作不易!点个关注!给大家带来更多的价值!
一、实验目的与要求
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类'])