赞
踩
制作不易!点个关注!给大家带来更多的价值!
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库对聚类完成的结果进行可视化处理。
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
data=pd.read_csv("/data/bigfiles/data2.csv")
data.head()
data.isnull().sum()
data.info()
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()
data1.isnull().sum()
data1['付款时间']=pd.to_datetime(data1['付款时间'])
data1.head()
exdata=datetime(2018,12,31)
data2=data1.groupby('买家名')['付款时间'].max().reset_index()
data2.columns=['买家名','最后一次消费时间']
data2['R']=(exdata-data2['最后一次消费时间']).dt.days
data2.head()
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
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
#output_file_path = '/data/bigfiles/客户信息_预处理.csv'
#data.to_excel(output_file_path,index=False)
#input_dir='/data/bigfiles/客户信息_预处.csv'
#data=pd.read_csv(input_dir)
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
kmodel=KMeans(n_clusters=4,max_iter=100,random_state=0)
kmodel.fit(rfm)
kmodel.labels_
kmodel.cluster_centers_
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()
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类'])
制作不易!点个关注!给大家带来更多的价值!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。