用python做疫情地图_Python 制作全国疫情地图

Python 制作全国疫情地图

制作全国疫情地图

开篇说明: 本篇内容仅做个人学习使用。

疫情期间,希望大家注意个人防护。中国加油!

获取数据

使用工具

爬取工具: requests

浏览器: Google Chrome

requests 是 Python 第三方库,可用作爬取数据。详细的内容可参考官方文档(本篇幅先不展开介绍):

使用之前,需要先安装 requests:

pip install requests

1

如果是直接安装 Anaconda 的话,这一步可以省略。

数据源

这里使用的是腾讯的数据源,腾讯提供的疫情数据直接输出在 console 上,非常的友好。

打开上面的链接,按 F12 或者右键点击选择“检查”,在调出的开发者工具上方选项卡中选择 Console。

这里可以看到全部的数据都在这里,其中 lastUpdateTime 是最后更新时间,chinaTotal 是现在疫情总体的情况(包括确诊数,疑似数,死亡数,治愈数),areaTree 里面包含详细的信息。

这里,只要我们中国的详细数据,这些数据就包含在 areaTree 索引为 0 下面的 children 中。

通过上面的观察,我们已经知道需要获取的数据结构是怎样的。现在跳转到输出这些数据的 intro_vp.js 脚本中,查看数据是如何得到的。

图中标记的部分就是获取数据的接口,现在我们使用 requests 库来获取接口返回的数据。

获取数据

直接看代码:

import requests

import json

# 数据接口

# 读取数据转换为 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 库。

使用之前先安装库:

pip install pyecharts

1

这里安装的时候可能会出现超时。遇到这种情况的时候,可以考虑使用清华镜像:

1

安装地图文件

全球国家地图: echarts-countries-pypkg

中国省级地图: echarts-china-provinces-pypkg

中国市级地图: echarts-china-cities-pypkg

pip install echarts-countries-pypkg

pip install echarts-china-provinces-pypkg

pip install echarts-china-cities-pypkg

1

2

3

关于 pyecharts 的内容也可以参考下面的文档:

前面已经获取到数据,现在使用 pyecharts 绘制地图。

首先导入所需的库

from pyecharts.charts import Map, Geo

from pyecharts import options as opts

from pyecharts.globals import GeoType

配置 Geo,并保存:

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']]) for i in range(len(China))],

# 设置涟漪效果

type_=GeoType.EFFECT_SCATTER,

)

.set_series_opts(

# 不显示 Label

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(is_show=False)

)

)

# 保存地图

c.render()

效果展示:

————————————————

你可能感兴趣的:(用python做疫情地图_Python 制作全国疫情地图)