数据源样式:
代码(自己写的):
#读入数据
fr=open(r'd:\Users\zhanggl21\Desktop\Python机器学习应用\31省市居民家庭消费水平-city.txt','r+')
lst=[]
for line in fr:
lst.append(line.strip().split(','))
citydata=[]
cityname=[]
for x in lst:
cityname.append(x[0])
citydata.append([float(z) for z in x[1:]])
#导入模块并训练数据
from sklearn.cluster import KMeans
import numpy as np
if __name__=='__main__':
km=KMeans(n_clusters=4) #聚成几类,可自定义。
label=km.fit_predict(citydata)
expenses=np.sum(km.cluster_centers_,axis=1) #expense:聚类中心点的数值加和,也就是平均消费水平。
#将相同类别的城市放进同一个列表,并把所有类别放进一个嵌套列表
cluster_dict=dict([x for x in zip(cityname,label)])
cluster_all=[]
for x in range(4):
cluster_all.insert(0,[])
for x in cluster_dict:
if cluster_dict[x]==0:
cluster_all[0].append(str(x))
elif cluster_dict[x]==1:
cluster_all[1].append(str(x))
elif cluster_dict[x]==2:
cluster_all[2].append(str(x))
else:
cluster_all[3].append(str(x))
#输出结果
for x in range(len(cluster_all)):
print('expense:',expenses[x])
print('该平均消费的城市有:',cluster_all[x],'\n\n')
总结:
将聚类编号与城市一一对应时,很自然地想到运用字典。