前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 python 做一个疫情地图

用 python 做一个疫情地图

作者头像
叶子陪你玩
发布2021-01-21 10:45:19
1.1K0
发布2021-01-21 10:45:19
举报
文章被收录于专栏:叶子陪你玩编程

今天分享课程中的一节内容,用 python 绘制一个疫情地图。

图表的数据来自于百度的疫情实时大数据报告,通过用爬虫的方法爬取到从疫情开始到最新一天的数据,数据爬取回来保存到一个 json 文件中,作为上课的素材。

最终实现的效果如下:

现有确诊效果图

累计确诊效果图

主要代码:

爬取数据保存到 疫情数据.json 文件中(1.10之前爬取的,url 可能会变化,错误可以自己去网上查找其它网站提供的API)

代码语言:javascript
复制
import requests
import json
import re
url = "https://voice.baidu.com/newpneumonia/get?target=trend&isCaseIn=0&stage=publish&callback=jsonp_1606089952492_47078"
response = requests.get(url)
data = json.loads(re.match(".*?({.*}).*",response.text)[1])
with open("疫情数据.json","w",encoding="utf-8") as f:
    json.dump(data["data"], f)

利用爬取的数据绘制疫情地图代码

代码语言:javascript
复制
from pyecharts import Map
import webbrowser
import os
import json

with open("疫情数据.json", "r", encoding="utf-8") as f:
    data = json.load(f)
print(len(data))

provice_diagnose_data = []
now_provice_diagnose_data = []
for province in data:
    province_name = province["name"]
    date = province["trend"]["updateDate"]
    # 确诊
    diagnose_name = province["trend"]["list"][0]["name"]
    diagnose_data = province["trend"]["list"][0]["data"]

    # 治愈
    cure_name = province["trend"]["list"][1]["name"]
    cure_data = province["trend"]["list"][1]["data"]

    # 死亡
    died_name = province["trend"]["list"][2]["name"]
    died_data = province["trend"]["list"][2]["data"]

    # 新增
    add_name = province["trend"]["list"][3]["name"]
    add_data = province["trend"]["list"][3]["data"]

    # 累计确诊
    provice_diagnose_data.append((province_name, diagnose_data[-1]))
    # 现有确诊
    now_provice_diagnose_data.append((province_name, (diagnose_data[-1]-cure_data[-1]-died_data[-1])))


attr, value = Map.cast(provice_diagnose_data)
attr2, value2 = Map.cast(now_provice_diagnose_data)

map = Map("疫情地图", width=800, height=600)
map.add(
    "累计确诊",
    attr, value,
    maptype="china",
    is_label_show = True,
    is_visualmap=True,
    is_map_symbol_show=False,
    is_piecewise = True,
    visual_split_number=3,
    pieces =[
        {"min":0, "max": 0,"color":"Gainsboro"},
        {"min": 1, "max": 9,"color":"PeachPuff"},
        {"min": 10, "max": 99,"color":"Salmon"},
        {"min": 100, "max": 999,"color":"IndianRed"},
        {"min": 1000, "max": 9999,"color":"Red"},
        {"min": 10000,"color":"DarkRed"},
        ]
)
map.add(
    "现有确诊",
    attr2, value2,
    maptype="china",
    is_label_show = True,
    is_visualmap=True,
    is_map_symbol_show=False,
    is_piecewise = True,
    visual_split_number=3,
    pieces =[
        {"min":0, "max": 0,"color":"Gainsboro"},
        {"min": 1, "max": 9,"color":"PeachPuff"},
        {"min": 10, "max": 99,"color":"Salmon"},
        {"min": 100, "max": 999,"color":"IndianRed"},
        {"min": 1000, "max": 9999,"color":"Red"},
        {"min": 10000,"color":"DarkRed"},
        ]
)
map.render()
webbrowser.open("file://"+os.path.realpath("render.html"))

(全文完)

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

本文分享自 叶子陪你玩编程 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档