如何利用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

返回的数据类型:

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是确诊数

二. 数据处理:
用到以下几个模块
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
import time
from pyecharts.charts import Map,Geo
from pyecharts import options as opts

 


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

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


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

 

 

 

 

 

 

生成地图代码:

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

data=[]
rdate=time.strftime('%Y-%m-%d',time.localtime(time.time()))
rtime=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
for province in json_data['data']['list']:
    #print (province)
    data.append((province['name'], province['value']))
    #for city in province['city']:
      #print (city)
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"},
                        {"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" }]))

#这里不指定 max,表示max为无限大

map_p.add("中国确诊", data, maptype="china")
map_p.render("2019_ncov%s.html"%rtime) # 生成html文件

 

 

 

 

 

 

 

 

 

 

 

 

生成图表如下:

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
本文将介绍如何使用Python爬虫对新型冠状病毒相关数据进行整理和可视化分析。主要包括以下步骤: 1. 获取疫情数据 2. 整理数据 3. 可视化数据 ## 1. 获取疫情数据 我们可以从丁香园、百度、腾讯等网站获取新型冠状病毒疫情数据。这里以丁香园为例,使用requests库进行网页爬取,代码如下: ```python import requests url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia' r = requests.get(url) r.encoding = 'utf-8' print(r.text) ``` 这里获取到的是网页的HTML代码,需要使用BeautifulSoup库进行解析。代码如下: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(r.text, 'html.parser') script = soup.find('script', attrs={'id': 'getListByCountryTypeService2true'}) text = script.string print(text) ``` 这里我们找到了HTML中id为`getListByCountryTypeService2true`的script标签,通过`script.string`获取到其中的字符串。这个字符串就是包含疫情数据的JSON格式数据。我们可以使用json库将其转换为Python字典格式。代码如下: ```python import json data_str = text.replace('try{window.getListByCountryTypeService2true = ','')[:-1] data_dict = json.loads(data_str) print(data_dict) ``` 这里先将字符串中的`try{window.getListByCountryTypeService2true = `和最后的分号去掉,然后使用json.loads()将其转换为Python字典格式。这个字典中包含了全国和各省市的疫情数据。 ## 2. 整理数据 我们可以将获取到的字典数据整理成DataFrame格式,方便后续的分析和可视化。代码如下: ```python import pandas as pd df = pd.DataFrame(data_dict['getAreaStat']) df = df[['provinceName', 'confirmed', 'suspected', 'cured', 'dead']] df['confirmed'] = df['confirmed'].astype(int) df['suspected'] = df['suspected'].astype(int) df['cured'] = df['cured'].astype(int) df['dead'] = df['dead'].astype(int) print(df.head()) ``` 这里我们只保留了省份、确诊人数、疑似病例、治愈人数和死亡人数,然后将这些数据转换为整数类型。 ## 3. 可视化数据 接下来我们可以使用matplotlib和seaborn库对数据进行可视化分析。这里我们分别绘制各省份的确诊人数和治愈人数的柱状。代码如下: ```python import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(16, 8)) sns.barplot(x='provinceName', y='confirmed', data=df) plt.xticks(rotation=90) plt.title('Confirmed Cases in China') plt.show() plt.figure(figsize=(16, 8)) sns.barplot(x='provinceName', y='cured', data=df) plt.xticks(rotation=90) plt.title('Cured Cases in China') plt.show() ``` 这里使用了sns.barplot()函数绘制柱状,并使用plt.xticks(rotation=90)将x轴标签旋转90度,避免重叠。结果如下所示。 ![Confirmed Cases in China](https://i.loli.net/2021/07/14/og7VnJS32i5xHwz.png) ![Cured Cases in China](https://i.loli.net/2021/07/14/U8Kx4Hj7GwVIvag.png) 可以看到,湖北省的确诊人数和治愈人数都远高于其他省份,这是因为新型冠状病毒最初在湖北省爆发。此外,各省份的确诊人数和治愈人数都有所上升,但是随着时间的推移,治愈人数逐渐增加,确诊人数逐渐减少,这是一个积极的信号。 至此,我们使用Python爬虫对新型冠状病毒疫情数据进行了整理和可视化分析。通过这些分析,我们可以更好地了解疫情的发展趋势和各省份的疫情状况,这对疫情的防控和治疗具有重要意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁宁可可

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值