如何利用Python制作新型冠状病毒省份(直辖市)实时疫情图?

如何利用Python制作新型冠状病毒省份(直辖市)实时疫情图?

一.数据采集
先找到数据,对数据进行数据采集
数据来源:新浪疫情实时监测
URL: https://news.sina.cn/zt_d/yiqing0121
数据采集:
1.访问https://news.sina.cn/zt_d/yiqing0121
2.打开Chrome开发者工具,点开network,刷新页面,点击各个请求,找到获取取json的请求。
例如:附图
https://interface.sina.cn/news/wap/fymap2020_data.d.json?1581410367084&&callback=sinajp_15814103671094932140955446096

如何利用Python制作新型冠状病毒省份(直辖市)实时疫情图?_第1张图片

 

返回的数据类型:

Headers:
Genneral
   Request URL: https://interface.sina.cn/news/wap/fymap2020_data.d.json?1581410367084&&callback=sinajp_15814103671094932140955446096
   Request Method: GET
   Status Code: 200 
   Remote Address: 39.156.6.163:443
   Referrer Policy: unsafe-url
Response Headers
   content-type: text/html

返回的数据显示:

City中,cureNum是治愈数,deathNum是死亡人数。value是确诊数

如何利用Python制作新型冠状病毒省份(直辖市)实时疫情图?_第2张图片

数据处理:
用到以下几个模块
1.requests模块 (用于网页访问)
2.re模块 (用于正则表达式,处理数据时需要)
3.json模块,读取数据
4.图表地图模块:pyecharts
  数据包:echarts-china-provinces-pypkg
  数据包:echarts-china-cities-pypkg
(用pip安装requests,pyecharts以及两个数据包),例如:pip install pyecharts

三.数据处理代码

说明:响应返回数据包含一个js变量需要用正则处理,然后用python自带的json.loads方法转为dict

import requests
import re
import json
from pyecharts.charts import Map,Geo
from pyecharts import options as opts
import time

 


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

 

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

 

html =f"{json_str}"
json_data=json.loads(f"{html}")

 

 

 

 

 

 

 

 

 

生成地图代码:

For循环遍历json数据,把省名和确诊数存在data数据里传给map对象。

data=[]
value_hb=""
rdate=time.strftime('%Y-%m-%d',time.localtime(time.time()))
rtime=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
#for p in table['data']['list']:
for province in json_data['data']['list']:
    #print (province)
    #data.append((province['name'], province['value']))
    if province['name']=="湖北":
      name=province['name']
      value_hb=province['value']
      deathNum=province['deathNum']
      cureNum=province['cureNum']
      print ("当前日期:%s,湖北省实时疫情监测,确诊:%s,死亡:%s,治愈:%s"%(rdate,value_hb,deathNum,cureNum))
      #data.append((province['name'], province['value']))
      for city in province['city']:
         cityname=city['mapName']
         conNum1="确诊:%s"%city['conNum']
         deathNum1="死亡:%s"%city['deathNum']
         cureNum1="治愈:%s"%city['cureNum']
         message=conNum1+deathNum1+cureNum1
         print (cityname,conNum1,deathNum1,cureNum1)
         data.append((cityname,city['conNum']))
      
map_p = Map()
map_p.set_global_opts
(title_opts=opts.TitleOpts(title="2019_nCoV 湖北省疫情图"),visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                pieces = [
                        {"min": 1000 , "label": '>1000',"color": "#893448"}, #这里不指定 max,表示max为无限大
                        {"min": 500, "max": 999, "label": '500-1000',"color": "#ff585e"},
                        {"min": 101, "max": 499, "label": '101-499',"color": "#fb8146"},
                        {"min": 10, "max": 99, "label": '10-100',"color": "#ffb248"},
                        {"min": 0, "max": 9, "label": '0-9',"color" : "#fff2d1" }]))
map_p.add("当前日期:%s,湖北省实时疫情监测,确诊:%s,死亡:%s,治愈:%s"%(rdate,value_hb,deathNum,cureNum), data, maptype="湖北")
map_p.render("2019_ncov_hubei%s.html"%rtime) # 生成html文件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

生成地图如下:

如何利用Python制作新型冠状病毒省份(直辖市)实时疫情图?_第3张图片

 

max=1000,是指渲染指标,达到1000,就颜色越深。

你可能感兴趣的:(python相关)