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
    评论
以下是一个简单的世界疫情地图可视化的 Python 代码,使用了 Plotly 库和数据集来自于 John Hopkins University。 代码: ```python import pandas as pd import plotly.express as px # 加载数据集 data = pd.read_csv('https://raw.githubusercontent.com/datasets/covid-19/main/data/worldwide-aggregated.csv') # 可视化地图 fig = px.choropleth(data, locations='Country', locationmode='country names', color='Confirmed', hover_name='Country', animation_frame='Date') fig.update_layout(title_text='Worldwide COVID-19 Cases') fig.show() ``` 如果你想要查看中国的地级市疫情地图可视化,可以使用百度地图API和数据集来自于丁香园。 代码: ```python import requests import json import pandas as pd import plotly.express as px # 加载数据集 url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia' response = requests.get(url) response.encoding = 'utf-8' html = response.text json_str = html.split('try { window.getAreaStat = ')[1].split('}catch(e){};')[0] data = json.loads(json_str) # 处理数据 province_data = [] for province in data: for city in province['cities']: province_data.append({ 'Province': province['provinceShortName'], 'City': city['cityName'], 'Confirmed': city['confirmed'], 'Lat': city['location']['lat'], 'Lon': city['location']['lng'] }) city_data = pd.DataFrame(province_data) # 可视化地图 fig = px.scatter_mapbox(city_data, lat='Lat', lon='Lon', hover_name='City', size='Confirmed', color='Province', zoom=3, mapbox_style='open-street-map') fig.update_layout(title_text='China COVID-19 Cases') fig.show() ``` 需要注意的是,以上代码可能无法直接运行,需要根据具体情况进行修改和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值