封装kmeansDemo()函数
file=open("city.txt",encoding="utf-8")
cityName=[]
cityData=[]
for line in file:
print(line)
#对line进行分割
items=line.split(",")
#将城市或省份名称保存至一个列表
cityName.append(items[0])
#将数据保存至另一个列表,将每个元素转换成float类型
cityData.append([float(items[i]) for i in range(1,len(items))])
# print(cityName)
# print(cityData)
#实例化kmeans对象
km=KMeans(n_clusters=5) #n_clusters为簇的数量
#调用方法,对每条数据进行分簇,并标记
label=km.fit_predict(cityData)
print(label)
print(cityName) #这时label的31个标记,表明每条数据的簇,与城市名称一一对应
#对每个簇的中心点(平均值)进行加和,做为每个消费层次的消费值
expense=np.sum(km.cluster_centers_,axis=1)
cityCluster=[[],[],[],[],[]] #用于保存每个簇的城市
for i in range(len(cityName)):
#将label[i]元素的值,做为cityCluster的下标访问子列表,保存31个城市
cityCluster[label[i]].append(cityName[i])
return expense,cityCluster
# #输出消费金额及各层次的城市名称,这里代码仅用于控制台输出
# for i in range(len(cityCluster)):
# print("消费金额:%.2f"%expense[i])
# print("城市名称:",cityCluster[i])
运行代码示例
导入架包:
from flask import Flask,render_template
from demo import kmeansDemo
app=Flask(__name__)
@app.route("/")
def index():
expense,cityCluster=kmeansDemo()#获取函数返回的消费金额,及各城市名称
# print(expense,cityCluster)
x=list(map(lambda a:"%.2f元"%a,expense))
y=[len(i) for i in cityCluster] #这里i 是指每个层次城市名称的子列表
return render_template("index.html",x=x,y=y)
if __name__ == '__main__':
app.run(debug=True,port=8888)
html代码
<script>
var myCharts=echarts.init(document.getElementById("box"),"dark")
var option = {
#echarts官网
};
myCharts.setOption(option)
</script>
实例
option = {
title:{
text:"31个省消费水平统计",
left:30
},
legend:{
right:50,
top:5
},
toolTip:{
show:true,
trigger:"axis",
},
xAxis: {
type: 'category',
data: {{ x|safe }}
},
yAxis: {
type: 'value'
},
series: [{
name:"各省城市数量",
data: {{ y|safe }},
barWidth:"60%",
itemStyle:{
color:"orange",
barBorderRadius:[8,8,0,0]
},
type: 'bar',
showBackground: true,
backgroundStyle: {
color: 'rgba(180, 180, 180, 0.2)'
}
}]
};