目前在搞一个基于GIS地图的POI聚类分析,所得数据特征并不丰富,而且多数特征无用,要在地图上做出花样来有点难啊,反复思索了很多种解法
1.数据预处理 :
CLASS十六进制转十进制,DISTRICT 归一化/标准化
(后来在程序里用了数据标准化)
import pandas as pd
from sklearn.cluster import KMeans
#参数初始化
inputfile = 'C:/Users/mfm/Desktop/new123.xls' #销量及其他属性数据
outputfile = 'C:/Users/mfm/Desktop/new123pro.xls' #保存结果的文件名
k = 11 #聚类的类别
iteration = 500 #聚类最大循环次数
data = pd.read_excel(inputfile, index_col = 'FID') #读取数据
data_zs = 1.0*(data - data.mean())/data.std() #数据标准化
model = KMeans(n_clusters = k, n_jobs = 1, max_iter = iteration) #分为k类,并发数1
model.fit(data_zs) #开始聚类
print("开始聚类")
#简单打印结果
r1 = pd.Series(model.labels_).value_counts() #统计各个类别的数目
r2 = pd.DataFrame(model.cluster_centers_) #找出聚类中心
r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目
r.columns = list(data.columns) + [u'类别数目'] #重命名表头
print(r)
#详细输出原始数据及其类别
r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) #详细输出每个样本对应的类别
r.columns = list(data.columns) + [u'聚类类别'] #重命名表头
r.to_excel(outputfile) #保存结果
之后尝试以class 和 district作为聚类特征做了尝试,效果还是不理想,尚未进行可视化的结果展示。对整体的分类效果不满意
2.之后尝试以DBSCAN做尝试,试图分出一个连续区域的效果,类似位和科技的分区效果,如下图: