速来围观!看小伙是如何用python可视化各城市拥堵情况的
前言就在今天 , 我感受到了来自堵车的深深恶意 。 没有错!我今天被堵在路上近乎3个小时 , 美好的约会就这样化为泡影了 。 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
python免费学习资料以及群交流解答后台私信小编01即可
文章插图
我倒还真想看看这路到底能有多堵 。 于是 , 我爬取了各城市的拥堵数据 , 并将它们可视化:
文章插图
特别说明:由于数据具有实时性 , 画图时已经过了高峰期 , 于是图上一片绿油油也并不奇怪 。
有感兴趣的客官 , 您接着往下看 , 待我给您慢慢分解 。 (ps.涉及到爬虫、pyecharts、flask等)
一、爬取拥堵指数某度智慧交通提供了各个城市的拥堵指数的数据 , 我们只需要通过几行代码便可轻松抓取:
# 获取各城市的拥堵指数url = '' # 接口apires = requests.get(url)data = http://kandian.youth.cn/index/res.json()1234其中 , url为获取数据的接口地址 , 通过简单的抓包分析便能知道 。而data为返回后的数据 , 它包括很多字段 , 但是我们只需要提取其中的城市名和拥堵指数即可:
# 提取数据citys = [i['cityname'] for i in data['data']['list']] # 提取城市indexs = [float(i['index']) for i in data['data']['list']] # 提取对应的指数123有了数据 , 接下来我们就可以将其可视化展示出来 。
二、数据可视化利用可视化神器pyecharts库绘制地图 , 并将城市以及对应的拥堵指数表示出来 。 其安装如下:
pip install pyecharts1部分版本需要再安装额外的地图库 , 方法如下:
pip install echarts-countries-pypkgpip install echarts-cities-pypkgpip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg1234首先定义地图:
geo = Geo()geo.add_schema(maptype = 'china') # 加入中国地图添加数据并进行相关设置:
geo.add('各城市拥堵指数', zip(citys,indexs), type_ = 'effectScatter') # 设置地图类型及数据geo.set_series_opts(label_opts = opts.LabelOpts(is_show = False))#设置是否显示标签根据拥堵指数的大小进行分类 , 分别为畅通、缓行、拥堵、严重拥堵:
geo.set_global_opts(visualmap_opts = opts.VisualMapOpts(#max_ = 2.5, # 用于连续表示is_piecewise = True, # 是否分段pieces = [{'min':1.0,'max':1.5,'label':'畅通','color':'#16CE95'},{'min':1.5,'max':1.8,'label':'缓行','color':'#F79D06'},{'min':1.8,'max':2.0,'label':'拥堵','color':'#D80304'},{'min':2.0,'max':2.5,'label':'严重拥堵','color':'#8F0921'}])) # 设置图例显示最后将地图保存在本地:
geo.render(path='各城市拥堵指数.html')1到这里 , 我们就得到了文章一开始看到的那张图~然而 , 由于拥堵数据是实时变化的 , 如果我每次都要去运行一次代码岂不是很麻烦?很显然 , 机智的社会主义青年是不会这么做的 , 您接着往下看 。
三、搭建展示网站为了更加方便地将各城市拥堵情况展示出来 , 我决定搭建一个用于展示的网站 。 方法可以是各式各样的 , 在这里我选择了利用flask框架 , 简单快捷~我的完整代码如下:
# -*- coding: utf-8 -*-"""Created on Sun Nov 15 01:34:36 2020@author: kimol_love"""import requestsfrom pyecharts.charts import Geofrom pyecharts import options as optsfrom flask import Flask, render_templatedef get_data():'''获取拥堵指数'''# 获取各城市的拥堵指数url = '' # 接口apires = requests.get(url)data = http://kandian.youth.cn/index/res.json()# 提取数据citys = [i['cityname'] for i in data['data']['list']] # 提取城市indexs = [float(i['index']) for i in data['data']['list']] # 提取对应的指数# 返回数据return zip(citys,indexs)def get_geo():'''获取地图'''# 获取各城市的拥堵指数data = http://kandian.youth.cn/index/get_data()# 绘制散点分布图geo = Geo()geo.add_schema(maptype ='china') # 加入中国地图geo.add('各城市拥堵指数 by kimol', data, type_ = 'effectScatter') # 设置地图类型及数据geo.set_series_opts(label_opts = opts.LabelOpts(is_show = False))#设置是否显示标签geo.set_global_opts(visualmap_opts = opts.VisualMapOpts(#max_ = 2.5, # 用于连续表示is_piecewise = True, # 是否分段pieces = [{'min':1.0,'max':1.5,'label':'畅通','color':'#16CE95'},{'min':1.5,'max':1.8,'label':'缓行','color':'#F79D06'},{'min':1.8,'max':2.0,'label':'拥堵','color':'#D80304'},{'min':2.0,'max':2.5,'label':'严重拥堵','color':'#8F0921'}])) # 设置图例显示# 返回地图return geo# 定义appapp = Flask(__name__)# 定义主界面@app.route("/")def hello():geo = get_geo()return render_template('geo.html',mygeo=geo.render_embed())if __name__ == "__main__":#运行项目app.run()
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- GB|备货充足要多少有多少,5000mAh+128GB,红米新机首销快速现货
- 空调|让格力、海尔都担忧,中国取暖“新潮物”强势来袭,空调将成闲置品?
- 手机基带|为了5G降低4G网速?中国移动回应来了:罪魁祸首不是运营商
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 速度|华为P50Pro或采用很吓人的拍照技术:液体镜头让对焦速度更快
- 计费|5G是如何计费的?
- V2X|V2X:确保未来道路交通数据交换的安全性
- 助力|上班族的小妙招:怎么弄pdf签名?编辑器来助力
- iPhone|折叠屏iPhone要来?曝苹果开始测试|OPPO Reno5真机曝光
