31省市统计

该博客展示了如何使用KMeans算法对31个省市的消费数据进行聚类分析,通过封装kmeansDemo()函数读取并处理数据,确定了5个消费层次,并输出了各层次的消费金额及包含的城市。最后,使用Flask框架和Echarts库创建了一个HTML页面,以条形图的形式展示结果。
摘要由CSDN通过智能技术生成

封装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)'
        }
    }]
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值