前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 Python 撸一个全国疫情地图,其实一点都不难

用 Python 撸一个全国疫情地图,其实一点都不难

作者头像
IT苦逼一枚
发布2020-02-17 17:15:47
1.6K0
发布2020-02-17 17:15:47
举报
文章被收录于专栏:测试帮日记

响应号召,宅在家里。修修小技术,水水小代码。加油!热干面!

首先我们假设Python的基本环境已经搭建好了,Let's begin。

一、爬取数据

1)安装常用的python爬虫工具:beautifulsoup4、requests

代码语言:javascript
复制
pip install requests
代码语言:javascript
复制
pip install beautifulsoup4

2)找一个数据源

在度娘上搜了搜,觉得腾讯的疫情实时追踪非常好。因为他非常友好的把疫情数据公开输出到了console中

网址:https://news.qq.com/zt2020/page/feiyan.htm

我们在网站页面上单击鼠标右键,选择检查

图1 网站截图

选择Console,我们看到了什么

,这是腾讯大大们抓取处理的所有数据,直接输出到了控制台中。我看可以看到JSON数据格式中:lastUpdateTime是数据的最新更新时间;chinaTotal中是目前的确诊数、疑似数、死亡数、治愈数;chinaDalyList中是1月13日至今的全国总数据;areaTree中是全国详细的数据。

图2 控制台输出截图

图3 areaTree中的全国数据

我们只需要国内的数据,所以只需要第0个children中的数据。

图4 areaTree中的国内数据

现在数据格式知道了,我们来切换到输出这些数据的intro_vp_trim.js脚本中看看这些数据是怎样来的。

图5 数据的获取

我们可以看到数据是从哪个接口获取的,那么我们只需要在Python中抓取这个接口返回的数据即可,事情变得非常简单了。

3)python抓取数据

代码语言:javascript
复制
import requests
import json
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
data = json.loads(requests.get(url=url).json()['data'])
china = data['areaTree'][0]['children']

现在国内的数据就全部在china变量中了,为了方便绘制地图,将各省份的数据提取出来备用。

代码语言:javascript
复制
data = []
for i in range(len(china)):
    data.append([china[i]['name'],china[i]['total']['confirm']])

二、绘制地图

我们用pyecharts中的GEO来绘制地图,首先需要安装各种包。

代码语言:javascript
复制
pip install pyecharts
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg
pip install echarts-united-kingdom-pypkg

如果网速很慢,可以临时用国内的映像,例如:

代码语言:javascript
复制
pip install pyecharts -i http://mirrors.aliyun.com/pypi/simple/

pyecharts目前已经更新到了V1版本,并且与V0.5版本不兼容,也不再维护V0.5版本。我们直接用的是V1版本。

官方网站:https://pyecharts.org/

我们先导入必要的库

代码语言:javascript
复制
import requests
import json
from pyecharts.charts import Map, Geo
from pyecharts import options as opts
from pyecharts.globals import GeoType,RenderType

用全国数据生成个副标题:

代码语言:javascript
复制
china_total = "确诊:"+ data['chinaTotal']['confirm'] + \
              " 疑似:" + data['chinaTotal']['suspect'] + \
              " 死亡:" +  data['chinaTotal']['dead'] +  \
              " 治愈:" +  data['chinaTotal']['heal'] + \
              " 更新日期:" + data['lastUpdateTime']

设置GEO

代码语言:javascript
复制
geo = (
    Geo(init_opts = opts.InitOpts(width="1200px",height="600px",bg_color="#404a59",page_title="全国疫情实时报告",renderer=RenderType.SVG,theme="white"))#设置绘图尺寸,背景色,页面标题,绘制类型
    .add_schema(maptype="china",itemstyle_opts=opts.ItemStyleOpts(color="rgb(49,60,72)",border_color="rgb(0,0,0)"))#中国地图,地图区域颜色,区域边界颜色
    .add(series_name="geo",data_pair=data,type_=GeoType.EFFECT_SCATTER)#设置地图数据,动画方式为涟漪特效effect scatter
    .set_series_opts(#设置系列配置
        label_opts=opts.LabelOpts(is_show=False),#不显示Label
        effect_opts = opts.EffectOpts(scale = 6))#设置涟漪特效缩放比例
    .set_global_opts(#设置全局系列配置
        visualmap_opts=opts.VisualMapOpts(min_=0,max_=sum/len(data)),#设置视觉映像配置,最大值为平均值
        title_opts=opts.TitleOpts(title="全国疫情地图", subtitle=china_total,pos_left="center",pos_top="10px",title_textstyle_opts=opts.TextStyleOpts(color="#fff")),#设置标题,副标题,标题位置,文字颜色
        legend_opts = opts.LegendOpts(is_show=False),#不显示图例
    )
)

绘制到html文件

代码语言:javascript
复制
geo.render(path="./html/render.html")

效果预览

图6 效果截图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试帮日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档