首页 > 编程语言 > 详细

python pyecharts 用Python制作疫情的实时数据地图(PS:全国以及每个省(转)

时间:2020-02-10 23:42:49      阅读:851      评论:0      收藏:0      [点我收藏+]
from pyquery import PyQuery as pq
from bs4 import BeautifulSoup
import datetime
import numpy as np
import re
import requests
import time, json, requests
import jsonpath
from pyecharts.charts import Map
import pyecharts.options as opts

#%%
shenname="浙江"

# 全国疫情地区分布(各省确诊病例)
def catch_cn_disease_dis():
    timestamp = %d%int(time.time()*1000)
    url_area = (https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
               &callback=&_=) + timestamp
    world_data = json.loads(requests.get(url=url_area).json()[data])
    china_data = jsonpath.jsonpath(world_data,
                                   expr=$.areaTree[0].children[*])
    ls_province_names = jsonpath.jsonpath(china_data, expr=$[*].name)
    ls_confirm_vals = jsonpath.jsonpath(china_data, expr=$[*].total.confirm)
    ls_province_confirm = list(zip(ls_province_names, ls_confirm_vals,))
    return ls_province_confirm, world_data

#%%

ls_province_cfm, dic_world_data = catch_cn_disease_dis()
print(ls_province_cfm)

#%%

# 绘制全国疫情地图
def map_cn_disease_dis() -> Map:
    c = (
        Map()
        .add(中国, ls_province_cfm, china)
        .set_global_opts(
            title_opts=opts.TitleOpts(title=全国新型冠状病毒疫情地图(确诊数)),
            visualmap_opts=opts.VisualMapOpts(is_show=True,
                                              split_number=7,
                                              is_piecewise=True,  # 是否为分段型
                                              pos_top=center,
                                              pieces=[
                                                   {min: 50000, color: #7f1818},  #不指定 max
                                                   {min: 2000, max: 4999},
                                                   {min: 1000, max: 1999},
                                                   {min: 500, max: 999},
                                                   {min: 100, max: 499},
                                                   {min: 10, max: 99},
                                                   {min: 0, max: 9} ],
                                              ),
        )
    )
    return c

# 获取河南省确诊分布数据
def catch_fj_disease_dis():
    dic_world_data = catch_cn_disease_dis()[1]
    dic_fj_cfm = dict()
    # 解析河南各个城市的数据
    dic_fj = jsonpath.jsonpath(dic_world_data,
                               expr=$.areaTree[0].children[?(@.name=="+shenname+")].children[*])

    for item in dic_fj:
        if item[name] not in dic_fj_cfm:
            dic_fj_cfm.update({item[name]: 0})
        dic_fj_cfm[item[name]] += int(item[total][confirm])
    return dic_fj_cfm


dic_fj_cfm = catch_fj_disease_dis()


# %%

# 绘制河南省疫情地图
def map_fj_disease_dis() -> Map:
    # dic_fj_cfm = catch_fj_disease_dis
    ls_fj_cities = [name +  for name in dic_fj_cfm.keys()]
    c = (
        Map()
            .add(shenname, [list(z) for z in zip(ls_fj_cities, dic_fj_cfm.values())], shenname)
            .set_series_opts(label_opts=opts.LabelOpts(is_show=True, formatter={b}\n{c}例))
            .set_global_opts(
            title_opts=opts.TitleOpts(title=shenname+新型冠状病毒疫情地图(确诊数)),
            visualmap_opts=opts.VisualMapOpts(is_show=True,
                                              split_number=5,
                                              is_piecewise=True,  # 是否为分段型
                                              pos_top=center,
                                              pieces=[
                                                  {min: 100},
                                                  {min: 50, max: 100},
                                                  {min: 20, max: 49},
                                                  {min: 10, max: 19},
                                                  {min: 1, max: 9},
                                                  {value: 0, "label": 无确诊病例, "color": green}],
                                              ),
        )
    )
    return c


map_fj_disease_dis().render(shenname+疫情地图.html)
map_cn_disease_dis().render("全国疫情地图.html")

 =========================修改=============

from pyquery import PyQuery as pq
from bs4 import BeautifulSoup
import datetime
import numpy as np
import re
import requests
import time, json, requests
import jsonpath
from pyecharts.charts import Map
import pyecharts.options as opts

#%%
shenname="湖北"

# 全国疫情地区分布(各省确诊病例)
def catch_cn_disease_dis():
    timestamp = %d%int(time.time()*1000)
    url_area = (https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
               &callback=&_=) + timestamp
    world_data = json.loads(requests.get(url=url_area).json()[data])
    china_data = jsonpath.jsonpath(world_data,
                                   expr=$.areaTree[0].children[*])
    ls_province_names = jsonpath.jsonpath(china_data, expr=$[*].name)
    ls_confirm_vals = jsonpath.jsonpath(china_data, expr=$[*].total.confirm)
    ls_province_confirm = list(zip(ls_province_names, ls_confirm_vals,))
    return ls_province_confirm, world_data

#%%

ls_province_cfm, dic_world_data = catch_cn_disease_dis()
print(ls_province_cfm)

#%%

# 绘制全国疫情地图
def map_cn_disease_dis() -> Map:
    c = (
        Map()
        .add(中国, ls_province_cfm, china)
        .set_global_opts(
            title_opts=opts.TitleOpts(title=全国新型冠状病毒疫情地图(确诊数)),
            visualmap_opts=opts.VisualMapOpts(is_show=True,
                                              split_number=7,
                                              is_piecewise=True,  # 是否为分段型
                                              pos_top=center,
                                              pieces=[
                                                   {min: 50000, color: #7f1818},  #不指定 max
                                                   {min: 2000, max: 4999},
                                                   {min: 1000, max: 1999},
                                                   {min: 500, max: 999},
                                                   {min: 100, max: 499},
                                                   {min: 10, max: 99},
                                                   {min: 0, max: 9} ],
                                              ),
        )
    )
    return c

# 获取河南省确诊分布数据
def catch_fj_disease_dis():
    dic_world_data = catch_cn_disease_dis()[1]
    dic_fj_cfm = dict()
    # 解析河南各个城市的数据
    dic_fj = jsonpath.jsonpath(dic_world_data,
                               expr=$.areaTree[0].children[?(@.name=="+shenname+")].children[*])

    for item in dic_fj:
        if item[name] not in dic_fj_cfm:
            dic_fj_cfm.update({item[name]: 0})
        dic_fj_cfm[item[name]] += int(item[total][confirm])
    return dic_fj_cfm


dic_fj_cfm = catch_fj_disease_dis()


# %%

# 绘制河南省疫情地图
def map_fj_disease_dis() -> Map:
    # dic_fj_cfm = catch_fj_disease_dis
    ls_fj_cities = [name +  for name in dic_fj_cfm.keys()]
    c = (
        Map()
            .add(shenname, [list(z) for z in zip(ls_fj_cities, dic_fj_cfm.values())], shenname)
            .set_series_opts(label_opts=opts.LabelOpts(is_show=True, formatter={b}\n{c}例))
            .set_global_opts(
            title_opts=opts.TitleOpts(title=shenname+新型冠状病毒疫情地图(确诊数)),
            visualmap_opts=opts.VisualMapOpts(is_show=True,
                                              split_number=7,
                                              is_piecewise=True,  # 是否为分段型
                                              pos_top=center,
                                              pieces=[
                                                  {min: 5000},
                                                  {min: 1000, max: 4999},
                                                  {min: 100, max: 999},
                                                  {min: 50, max: 99},
                                                  {min: 20, max: 49},
                                                  {min: 10, max: 19},
                                                  {min: 1, max: 9},
                                                  {value: 0, "label": 无确诊病例, "color": green}],
                                              ),
        )
    )
    return c


map_fj_disease_dis().render(shenname+疫情地图.html)
map_cn_disease_dis().render("全国疫情地图.html")

 

python pyecharts 用Python制作疫情的实时数据地图(PS:全国以及每个省(转)

原文:https://www.cnblogs.com/gisoracle/p/12293122.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!