天天看點

[Python聚類] K-Means聚類算法分類資料示例方法代碼實作結果分析

根據資料将客戶分類成不同客戶群,并評價這些客戶群的價值。

資料示例

部分餐飲客戶的消費行為特征資料如下:

R最近一次消費時間間隔

F消費頻率

M消費總金額

[Python聚類] K-Means聚類算法分類資料示例方法代碼實作結果分析

方法

采用K-Means聚類算法,設定聚類個數為3,最大疊代次數為500次,距離函數取歐式距離。

代碼實作

#-*- coding: utf-8 -*-
#使用K-Means算法聚類消費行為特征資料

import pandas as pd

#參數初始化
inputfile = '../data/consumption_data.xls' #銷量及其他屬性資料
outputfile = '../tmp/data_type.xls' #儲存結果的檔案名
k =  #聚類的類别
iteration =  #聚類最大循環次數
data = pd.read_excel(inputfile, index_col = 'Id') #讀取資料
data_zs = *(data - data.mean())/data.std() #資料标準化

from sklearn.cluster import KMeans
model = KMeans(n_clusters = k, n_jobs = , max_iter = iteration) #分為k類,并發數4
model.fit(data_zs) #開始聚類

#簡單列印結果
r1 = pd.Series(model.labels_).value_counts() #統計各個類别的數目
r2 = pd.DataFrame(model.cluster_centers_) #找出聚類中心
r = pd.concat([r2, r1], axis = ) #橫向連接配接(axis=0是縱向),得到聚類中心對應的類别下的數目
r.columns = list(data.columns) + [u'類别數目'] #重命名表頭
print(r)

#詳細輸出原始資料及其類别
r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = )  #詳細輸出每個樣本對應的類别
r.columns = list(data.columns) + [u'聚類類别'] #重命名表頭
r.to_excel(outputfile) #儲存結果


def density_plot(data): #自定義作圖函數
  import matplotlib.pyplot as plt
  plt.rcParams['font.sans-serif'] = ['SimHei'] #用來正常顯示中文标簽
  plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負号
  p = data.plot(kind='kde', linewidth = , subplots = True, sharex = False) 
  #data有3列,是以有3個子圖,p[0],p[1],p[2]
  [p[i].set_ylabel(u'密度') for i in range(k)] #設定子y軸标簽(預設為density)
  plt.legend()
  return plt

#作出類别1、類别2和類别3的機率密度圖,并儲存
pic_output = '../tmp/pd_' #機率密度圖檔案名字首
for i in range(k):
  density_plot(data[r[u'聚類類别']==i]).savefig(u'%s%s.png' %(pic_output, i))   #r[u'聚類類别']==i結果為布爾值
           

結果分析

[Python聚類] K-Means聚類算法分類資料示例方法代碼實作結果分析

分群1的機率密度函數圖

分群1特點:R間隔相對較小,主要集中在0-30天;消費次數集中在10-25次;消費金額在500-2000。

[Python聚類] K-Means聚類算法分類資料示例方法代碼實作結果分析

分群2的機率密度函數圖

分群2特點:R間隔主要分布在0-30天;消費次數集中在0-12次;消費金額在0-1800。

[Python聚類] K-Means聚類算法分類資料示例方法代碼實作結果分析

分群3的機率密度函數圖

分群3特點:R間隔主要分布在30-80天;消費次數集中在0-15次;消費金額在0-2000。

對比分析

分群1時間間隔較短,消費次數多,而且消費金額較大,是高消費、高價值人群。

分群2的時間間隔、消費次數和消費金額處于中等水準,代表着一般客戶。

分群3的時間間隔較長,消費次數較少,消費金額也不是特别高,是價值較低的客戶群體。