上一回说过直接上代码,请看这回分解:
# -*- 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("对不起,我还不能到达火星!!!")
我想静静,静静是谁......