制作全国疫情地图开篇说明:本文内容仅供个人学习。疫情期间,希望大家注意个人防护。加油中国!使用工具获取数据爬取工具:requests浏览器:谷歌Chromerequests是Python的第三方库,可以用来爬取数据。详细内容请参考官方文档(本节先不介绍):https://requests.readthedocs.io/en/master/使用前需要安装requests:pipinstallrequests如果安装了Anaconda直接,这一步可以省略。这里使用的数据源是腾讯的数据源。腾讯提供的疫情数据直接在控制台输出,非常友好。具体地址:https://news.qq.com/zt2020/page/feiyan.htm打开以上链接,按F12或右键选择“Inspect”,在调用的开发者工具上方选项卡中选择Console。这里可以看到这里所有的数据,其中lastUpdateTime是最后一次更新时间,ChinaTotal是当前疫情的总体情况(包括确诊数、疑似数、死亡数、治愈数),areaTree包含详细信息。这里只要我们有中国的详细数据,这些数据都包含在areaTree索引0下的children中。通过上面的观察,我们已经知道我们需要获取什么样的数据结构了。现在跳转到输出这些数据的intro_vp.js脚本,看看数据是如何获得的。图中标出的部分是获取数据的接口。现在我们使用requests库获取接口返回的数据。获取数据直接看代码:importrequestsimportjson#Datainterfaceurl='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'#读取数据并转成JSON格式data=json.loads(requests.get(url).json()['data'])#更新时间update_time=data['lastUpdateTime']#全国数据china_total=data['chinaTotal']#全国具体数据china=data['areaTree'][0]['children']#生成数据作为副标题ncp_info='确诊:{}疑似:{}死亡:{}治愈:{}更新日期:{}'.format(china_total['confirm'],china_total['suspect'],china_total['dead'],china_total['heal'],update_time)绘制地图。Basemap虽然可以绘制地图,但是使用起来比较麻烦。这里推荐使用pyecharts库。pyecharts是制作Echarts图表的类库,Echarts是百度开源的数据可视化JS库。使用之前先安装库:这里pipinstallpyecharts安装时可能会超时。遇到这种情况,可以考虑使用清华镜像:pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplepyecharts安装地图文件全球国家地图:echarts-countries-pypkg中国省份地图:echarts-china-provinces-pypkg中国城市级地图:echarts-china-cities-pypkgpipinstallecharts-countries-pypkgpipinstallecharts-china-provinces-pypkgpipinstallecharts-china-cities-pypkgpyecharts的内容也可以参考以下文档:https://pyecharts.org/#/zh-cn/intro之前已经拿到了数据,现在使用pyecharts绘制地图。首先导入需要的库frompyecharts.chartsimportMap,Geofrompyechartsimportoptionsasoptsfrompyecharts.globalsimportGeoTypeconfigureGeo,并保存:c=(Geo().add_schema(maptype='china',#设置地图区域颜色itemstyle_opts=opts.ItemStyleOpts(color="#323c48",border_color="#111"),).add('geo',#序列数据,添加省会名称和确诊病例数[list([China[i]['name'],China[i]['total']['confirm']])foriinrange(len(China))],#设置波纹效果type_=GeoType.EFFECT_SCATTER,).set_series_opts(#不显示标签label_opts=opts.LabelOpts(is_show=False),).set_global_opts(#设置标题,副标题,放在中间title_opts=opts.TitleOpts(title="全国疫情地图",subtitle=ncp_info,pos_left='center'),#设置梯度,最大值设置为平均值visualmap_opts=opts.VisualMapOpts(min_=0,max_=china_total['confirm']/len(data)),#不显示图例legend_opts=opts.LegendOpts(是_show=False)))#saveMapc.render()效果展示:以上就是本文的主要内容。欢迎关注微信公众号《书所集录》
