APP下载

基于Python的疫情数据的爬取与分析

2020-10-21谭康裕赵元成

科学导报·学术 2020年30期
关键词:数据可视化新型冠状病毒趋势

谭康裕 赵元成

摘  要:目的:直观显示新型冠状病毒(2019-nCoV)肺炎疫情的发展趋势,为复工复产的决策提供决策依据。方法:基于Python语言、使用requests库下载网页,使用re读取目标数据,使用csv存储目标数据、使用pyecharts展示疫情地图分布和疫情发展趋势图、使用Javascript脚本显示趋势图,包括疫情的地图分布,全国疫情新增趋势,全国累计/疑似趋势,全国累计治愈/死亡趋势,全国各省疫情概览表等。结果:得到疫情发展趋势的可视化图表,可以直观显示疫情的发展趋势,全国各省疫情概览表等。我们可以看到,疫情已经趋于平稳。结论:2019-nCoV肺炎疫情的防控措施是有效的,各地方政府严格执行公共安全政策,保证了人民的生命安全,全力遏制了2019-nCoV的传播,夺取了战“疫”的最终胜利。

关键词:新型冠状病毒;Python;数据可视化;趋势

新型冠状病毒(2019-nCoV)是一种β属的冠状病毒,自2019年12月在湖北省武汉市发现 2019-nCoV以来,疫情快速蔓延[1]。国家卫生健康委员会疫情通报显示,截至 2020年4月25日早上9点,累计确诊人数 82816人,累计治愈出院病例77346例,累计死亡病例4632例[2]。为快速抑制病情蔓延,国家已出台多种举措,如延长春节假期、企业延迟复工、学校延期开学、限制出行、公共场所要佩戴口罩,居家隔离等。本文基于Python,通过网络爬虫技术收集2019-nCoV疫情数据,通过数据可视化手段,给出疫情的地图分布,全国疫情新增趋势,全国累计/疑似趋势,全国累计治愈/死亡趋势,全国实时疫情概览表等。

1 对象与方法

1.1 数据来源

本文疫情发展数据取自中国疾病预防控制中心周报(以下简称中国疾控中心周报)和丁香园,其地址参看“参考文献”中的[2]和[3]。随着2019-nCoV的快速传播,自1月25日开始,各地纷纷启动“重大突发公共卫生事件Ⅰ级响应”,因此我们认定从1月25 日开始,病毒即进入传播状态。由于数据是从中国疾病预防控制中心周报中读取,比较完整的数据是从1月29日开始,因此,本次采集的数据就是从1月29日开始,直至4月25日零点。

1.2 疫情数据提取的需求

设计疫情数据提取的代码要解决的以下几个问题:

(1)下载网页:根据给定的URL下载其HTML网页。

(2)网页解析:根据网页结构信息,提取网页数据。

(3)数据存储:把从网页中解析出来的数据CSV文件中。

1.3 疫情数据提取的實现方法

(1)HTML下载器

本次设计使用requests库和requests-html库来下载网页,分别使用requests来下载中国疾病预防控制中心周报的数据,使用requests-html来下载丁香园的数据。使用requests-html下载网页的核心代码如下所示:

import requests

url = 'http://weekly.chinacdc.cn/news/TrackingtheEpidemic.htm'

r = requests.get(url) #下载网页

使用requests-html下载网页的核心代码如下所示:

from requests_html import HTMLSession

dxyurl = 'https://3g.dxy.cn/newh5/view/pneumonia'

response = HTMLSession.get(dxyurl)  #下载网页

(2)HTML解析器

Python使用BeautifulSoup来进行HTML的解析,提取目标数据。在中国控制中心周报中,我们使用BeautifulSoup直接读取其注释部分,而不是按行读取目标数据所在的XPath。在中国控制中心周报网页中,目标文本是位于标签

中的注释文本。通过分析中国控制中心周报网页数据结构,我们可以通过分割

标签,同时为了数据的提取,还要把

标签添加回原来的数据项中。提取数据的代码如下:

soup = BeautifulSoup(page,'html.parser')

content = soup.find_all("div",'box-article-content') #数据返回为列表

content_to_string = str(content) #将列表转换成字符串,使用正则表达式提取

pattern = re.compile(r"<!--(.*?)-->") # 抽取<!--(.*?)-->中间的文本

通过构建正则表达式,提取网页中的疫情数据。提取的疫情数据分别为日期、新增确诊/疑似病例、累计确诊/现存疑似病例、新增死亡/治愈人数、累计死亡/治愈人数。其正则表达式的构建如下所示:

date_regex = r"(.*?)<"  #提取日期的正则表达式

conf_suspe_data_regex = r"

Confirmed cases:(.*?)new,(.*?)total. Suspected cases:(.*?)new,(.*?)total.<"  #提取新增确诊/疑似病例、累计确诊/现存疑似病例的正则表达式

猜你喜欢

数据可视化新型冠状病毒趋势
趋势
突发公共卫生事件中的药物使用法规依据
疫情防控下的高校网上财务管理思考
“新型冠状病毒”该如何防治
传染病信息披露制度的法律建构与反思
初秋唇妆趋势
中国传染病十年新趋势
大数据时代背景下本科教学质量动态监控系统的构建
可视化:新媒体语境下的数据、叙事与设计研究
我国数据新闻的发展困境与策略研究