文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.构建商圈聚类模型
数据经过预处理过后,形成建模数据。采用层次聚类算法对建模数据进行基于基站数据的商圈聚类,画出谱系聚类图,Python代码如代码清单14-2所示,输入数据集为离差标准化后的数据。
代码清单14-2 谱系聚类图
#-*- coding: utf-8 -*- #谱系聚类图 import pandas as pd #参数初始化 standardizedfile = '../data/standardized.xls' #标准化后的数据文件 data = pd.read_excel(standardizedfile, index_col = u'基站编号') #读取数据 import matplotlib.pyplot as plt from scipy.cluster.hierarchy import linkage,dendrogram #这里使用scipy的层次聚类函数 Z = linkage(data, method = 'ward', metric = 'euclidean') #谱系聚类图 P = dendrogram(Z, 0) #画谱系聚类图 plt.show()
代码详见:示例程序/code/hierarchical_clustering_pic.m
根据代码清单14-2,可以得到的谱系聚类图,如图14-4所示。
图14-4 谱系聚类图
从图14-5可以看出,可把聚类类别数取3类,Python代码中取聚类类别数为k=3,输出结果typeindex为每个样本对应的类别号。层次聚类算法详见代码清单14-3。
代码清单14-3 层次聚类算法
#-*- coding: utf-8 -*- #层次聚类算法 import pandas as pd #参数初始化 standardizedfile = '../data/standardized.xls' #标准化后的数据文件 k = 3 #聚类数 data = pd.read_excel(standardizedfile, index_col = u'基站编号') #读取数据 from sklearn.cluster import AgglomerativeClustering #导入sklearn的层次聚类函数 model = AgglomerativeClustering(n_clusters = k, linkage = 'ward') model.fit(data) #训练模型 #详细输出原始数据及其类别 r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) #详细输出每个样本对应的类别 r.columns = list(data.columns) + [u'聚类类别'] #重命名表头 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 style = ['ro-', 'go-', 'bo-'] xlabels = [u'工作日人均停留时间', u'凌晨人均停留时间', u'周末人均停留时间', u'日均人流量'] pic_output = '../tmp/type_' #聚类图文件名前缀 for i in range(k): #逐一作图,作出不同样式 plt.figure() tmp = r[r[u'聚类类别'] == i].iloc[:,:4] #提取每一类 for j in range(len(tmp)): plt.plot(range(1, 5), tmp.iloc[j], style[i]) plt.xticks(range(1, 5), xlabels, rotation = 20) #坐标标签 plt.subplots_adjust(bottom=0.15) #调整底部 plt.savefig(u'%s%s.png' %(pic_output, i)) #保存图片
代码详见:示例程序/code/hierarchical_clustering.py
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论