Python 之 2019-nCoV 实时疫情地图升华版)

上一回说过直接上代码,请看这回分解:

# -*- coding: utf-8 -*-

import requests

import json

import sys

import re

from pyecharts.charts import Map

from pyecharts import options

from countryname import * # 国家名中英字典

# 获取命令行参数

if len(sys.argv) == 2:

   mapf = sys.argv[1]

else:

   mapf = ''

# 获取数据

result = requests.get('https://interface.sina.cn/news/wap/fymap2020_data.d.json?1580097300739&&callback=sinajp_1580097300873005379567841634181')

#使处理数据

json_str = re.search("\(+([^)]*)\)+", result.text).group(1)

html = f"{json_str}"

table = json.loads(html)

nameMap = dict(zip(nameMap.values(),nameMap.keys())) # 字典KEY、VAL互换

if mapf == '世界' or mapf == 'world' or mapf == '全球':

   # 获取全球国家名称和对应确认数据

   world_data = []

   for country in table['data']['otherlist']:

       country['name'] = nameMap[country['name']]

       world_data.append((country['name'], country['value']))

   # 创建全球地图

   map_world =  Map()

   map_world.set_global_opts(title_opts = options.TitleOpts(title = "全球新冠状病毒实时疫情地图",subtitle = "累计确诊人数(不含中国):" + table['data']['othertotal']['certain'] + " 人(新增 " + str(table['data']['othertotal']["certain_inc"]) + " 人)" + "累计死亡人数:" + str(table['data']['othertotal']["die"]) + " 人"),visualmap_opts = options.VisualMapOpts(is_piecewise=True,#设置是否为分段显示

                pieces = [

                    {"min": 1000, "label": '>1000人', "color": "#6F171F"},

                    {"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},

                    {"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},

                    {"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},

                    {"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))

   map_world.add('累计确诊',world_data, maptype = "world",is_map_symbol_show = False)

   map_world.render("全球新冠状病毒实时疫情地图.html")

   print("全球新冠状病毒实时疫情地图已生成!!!")

elif mapf == '中国' or mapf == 'china' or mapf == '中华人民共和国':

   # 获取我国省份名称和对应的确诊数据

   province_data = []

   for province in table['data']['list']:

       province_data.append((province['name'], province['econNum']))

   # 创建我国地图

   map_country = Map()

   map_country.set_global_opts(title_opts=options.TitleOpts(title = "中国新冠状病毒实时疫情地图 现存确诊:" + str(table['data']["econNum"]) + " 人",subtitle = "累计确诊人数:" + str(table['data']["gntotal"]) +" 人(新增 " + str(table['data']['add_daily']["addcon"]) + " 人)" + "累计死亡人数:" + str(table['data']["deathtotal"]) + " 人"), visualmap_opts=options.VisualMapOpts(is_piecewise=True,

                pieces = [

                    {"min": 1000, "label": '>1000人', "color": "#6F171F"},

                    {"min": 50, "max": 100, "label": '50-100人', "color": "#C92C34"},

                    {"min": 10, "max": 49, "label": '10-49人', "color": "#E35B52"},

                    {"min": 1, "max": 9, "label": '1-9人', "color": "#F39E86"},

                    {"min": 0, "max": 0, "label": '无确诊病人', "color": "#FDEBD0"}]))

   map_country.add("现存确诊", province_data, maptype = "china",is_map_symbol_show = False)

   map_country.render("中国新冠状病毒实时疫情地图.html")

   print("中国新冠状病毒实时疫情地图已生成!!!")

else:

   province_data = []

   for province in table['data']['list']:

       province_data.append((province['name'],province['econNum'],province['value'],province['conadd'],province['deathNum']))

       if province['name'] == mapf:

          # 获取我国城市名称和对应的确诊数据

          city_data = []

          for city in province['city']:

              city_data.append((city['mapName'], city['econNum'])) 

          # 创建指定省份地图

          map_province = Map()

          map_province.set_global_opts(title_opts = options.TitleOpts(title = province['name'] + "新冠状病毒实时疫情地图 现存确诊:" + str(province["econNum"]) + " 人",subtitle = "累计确诊人数:" + str(province["value"]) +" 人(新增 " + str(province["conadd"]) + " 人)" + "累计死亡人数:" + province["deathNum"] + " 人"), visualmap_opts=options.VisualMapOpts(is_piecewise=True,

                pieces = [

                    {"min": 100, "label": '>100人', "color": "#6F171F"},   

                    {"min": 50, "max": 100, "label": '50-100人', "color": "#C92C34"},

                    {"min": 10, "max": 49, "label": '10-49人', "color": "#E35B52"},

                    {"min": 1, "max": 9, "label": '1-9人', "color": "#F39E86"},

                    {"min": 0, "max":0, "label": '无确诊病人', "color": "#FDEBD0"}]))

          map_province.add("现存确诊", city_data, maptype = province['name'],is_map_symbol_show=False)  

          map_province.render(province['name'] + "新冠状病毒实时疫情地图.html")

          break

   if mapf == province['name']:

      print(province['name'] + "新冠状病毒实时疫情地图已生成!!!")

   else:

      print("对不起,我还不能到达火星!!!")

我想静静,静静是谁......

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值