下表是同一批客户对经常光顾的五座商厦在购物环境和服务质量两方面的平均评分。现希望根据这批数据将五座商厦分类。
说明:数据源就只有5行,大家练习的时候,可以直接手动输入这些数据到Excel中。
数据源读取以下内容分3部分:
1、数据源读取
2、系统聚类法(层次聚类法)
3、K-Mean聚类法
Python中的scikit-learn库和scipy库都有聚类分析算法的实现,下面将分别演示。
import pandas as pd cdata=pd.read_excel('../data/clusterdata.xlsx',sheet_name='data1',index_col='编号') cdata.head() 系统聚类法(层次聚类法)
1、实现系统聚类法的第一种方式:scipy
说明:使用前需要安装,安装命令:pip install scipy
from scipy.cluster.hierarchy import linkage,dendrogram,cut_tree hcluster=linkage(cdata,method='single',metric='euclidean') hcluster
说明:以上结果反映了聚类分析的过程,SPSS中有类似的结果。
#绘制聚类图谱 hdiagram=dendrogram(hcluster)
clabels=cut_tree(hcluster,n_clusters=3) #假设分3个类别 clabels
cdata_rst=pd.concat([cdata,Series(clabels.T[0],index=cdata.index)],axis=1) cdata_rst
cdata_rst.columns=['购物环境','服务质量','类别'] #cdata_rst.columns=list(cdata.columns)+['类别'] cdata_rst
结论:从上面可以看出,将这5座商厦分成3类,A、B属于一个类别,C属于一个类别,D、E属于一个类别。
2、实现系统聚类法的第二种方式:sklearn
说明:使用前需要安装,安装命令:pip install scikit-learn
from sklearn.cluster import AgglomerativeClustering amodel=AgglomerativeClustering(n_clusters=3,affinity='euclidean',linkage='ward') amodel.fit(cdata)
#获取类别标签 amodel.labels_
接着就是把标签赋回原记录,跟上面一样。
K-Means聚类法1、实现K-Means聚类法第一种方式:scipy
#scipy from scipy.cluster.vq import KMeans2 zcdata=(cdata-cdata.mean())/cdata.std() kmodel=kmeans2(zcdata,k=3,iter=10,minit="points") kmodel[1]
2、实现K-Means聚类法第一种方式:sklearn
from sklearn.cluster import KMeans kmodel=KMeans(n_clusters=3,n_jobs=4,max_iter=10) kmodel.fit(cdata)
#获取样本的类别标签 kmodel.labels_
#将类别标签赋回原记录 cdata_rst1=pd.concat([cdata,Series(kmodel.labels_,index=cdata.index)],axis=1) cdata_rst1.columns=list(cdata.columns)+['类别'] cdata_rst1
总结:
1、从上面可以看出,将这5座商厦分成3类,A、B属于一个类别,C属于一个类别,D、E属于一个类别,两种聚类分析方法的结论大体都是一致的。
2、在Python中,有两个库都可以实现聚类分析:scikit-learn和scipy。
3、对于系统聚类法,scikit-learn库无法直接聚类图谱,所以这里通过scipy来绘制聚类图谱。
感谢观看,喜欢的朋友,关注走一波,后续内容更精彩!
最新评论