阮灿华,梁炜彬,林晓宇
(福建农林大学 计算机与信息学院,福建福州350002)
目前国内疫情得到基本控制,现如今国内社会情况相对稳定,而世界范围内疫情却始终未能得到有效控制,人们对疫情情况还是非常关注。大数据背景下,网络时刻产生海量疫情方面数据,这些数据只有被合理解读与展示,民众才能更好了解其中奥秘[1-2]。借助网络爬虫技术和echarts 技术,在通过爬虫从网上获取到每日疫情的各项权威数据后,清洗、转化和挖掘后通过echarts 整理成各种可视化统计图[3-4],这些可视化统计图包括至今国内的疫情图,世界疫情图,国内各项疫情数据情况统计图,世界各项疫情数据情况统计图,以及每日热点热搜图等以多种多样的可视化形式呈现在人们面前,通过疫情可视化页面,使人们能快速直观的了解现在的疫情发展情况以及每日疫情感染人数的增长和治愈及死亡情况。全球防疫形势依然非常严峻,对疫情预防和控制仍然是当今全球共同使命。通过可视化系统及时准确评估疫情传播、根据每日疫情情况了解疫情过去的情况,分析疫情发展趋势对于政府制定防控措施有着重要意义。
疫情可视化系统要主动抓取疫情数据[5],包括国内疫情数据和海外疫情数据,每天丁香园、腾讯疫情、UC 疫情、新浪疫情等这些平台都会转载国家和各地卫健委每日发布的疫情数据。借助chrome 浏览器的开发者工具,从腾讯疫情的requests 模块中,获取腾讯提供的疫情实时数据。进入腾讯疫情实时追踪网站之后,利用抓包工具找到以json 格式保存疫情数据的url,再使用python 的request 请求得到需要的国内疫情和全球疫情各项相关数据接口[6]。
在本次疫情数据爬取中,系统调用了以下四个数据接口,并封装入变量,供方法调用,分别是:中国疫情数据、中国城市疫情数据、外国疫情数据、全球疫情数据。通过以上url 数据接口[7],获得所有疫情可视化系统所需要的数据,并存入数据库中,爬取全球疫情累计数据及全球实时疫情数据,并存入global_history_url 中,通过request 请求获得response 数据后进行分组便可得到全球疫情累计数据和全球实时疫情数据,在遍历每组数据并进行处理后,就可以得到一条符合数据库表结构数据,最后一并存入数据库中[8]。
疫情是当前国内乃至全社会的最大热点,而作为热点,自然常常占据着热搜榜。百度提供全网热度前五十搜索的今日热点。系统今日热搜数据通过爬取百度风云榜今日热点所获得。利用Web 自动化测试工具python-selenium 库模拟用户操作浏览器进入百度热搜榜地址后,用谷歌开发者工具的调试找到今日热搜数据所在的标签地址以获取相应的每天热搜数据及其排名与热度值。设置好模拟人为使用chrome 浏览器的操作配置,包括调用chrome 浏览器、设置浏览器的User-Agent、添加chrome 浏览器参数、配置使用chrome 浏览器相对应版本的webdriver 等,配置好后进行数据调试获取。得到今日热搜的数据后,经过数据处理在系统前端动态图中显示,根据每条的热搜的内容,对每条热搜进行关键字提取并根据相应热度值显示该条热搜大小,该热搜显示越大,说明该热点关注度越高,热度值也越大,并且在数据库设计中,每条热搜与其热度值共同存储在content 内容字段中,利用python-jieba 模块对内容字段进行热搜与热度值切割。
本系统是基于网络爬虫技术的可视化项目开发[9]。疫情数据与热搜数据获取方面是利用requests模块获取腾讯提供的疫情实时数据,包含国内最新、国内历史、全球最新、全球历史的各项关于疫情确诊、治愈、死亡人数的累计和每日数据,以及利用selenium 模块获取最新百度热搜榜关键词,并将获取的结构化数据存储到sqlite3 中。系统可视化展示页面部分是利用echarts 图表技术,绘制需要的中国地图以及世界地图,以及想要展示的各项统计图例如柱状图、折线图、热搜热度动态展示图等。利用js 加入实时北京时间精确至秒的时间模块,在界面中每秒刷新,使用户对查看疫情数据是个实时数据,提高用户体验感。
系统设置全国疫情与全球疫情两个地图。全国疫情图根据各省疫情确诊数量分为五个确诊人数范围颜色,全球疫情根据各国疫情确诊数据分为五个确诊人数范围颜色,点击相应颜色可以进行调节过滤。
全国疫情数据可视化是通过全国疫情折线图来实现[10]。分别是关于疫情至今的累计数据统计图和新增数据统计图等两张折线统计图。累计数据统计图包括累计确诊、现有疑似、累计治愈、累计死亡数据的统计;新增数据统计图包括新增确诊、新增疑似、新增治愈、新增死亡数据的统计。单击任何数据,都能对其进行过滤,支持多项数据过滤最后只留一项数据,并对其重新制作折线统计图,从而使想观察的数据更加清晰,一目了然。
全球疫情数据可视化是全球疫情折线图来实现。分别是关于疫情至今的全球累计数据的统计图和全球新增确诊的统计图等两张折线统计图。累计数据统计图包括累计确诊、累计治愈、累计死亡。其余特点同中国折线统计图。
本系统数据库使用集成型数据库sqlite3。
china_history 表用来存储中国至今每日累计的疫情相关数据。Date 字段是存储每日疫情数据的日期,confrim、overseas_inputs、dead、heal 字段是疫情开始到该日期统计时的累计确诊、累计境外输入、累计死亡、累计治愈的人数,suspect 字段是现存疑似感染新冠肺炎未确诊的人数。china_history 表的具体字段及结构如表1 所示。
表1 china_history 表
china_lasted 表用来存储统计到今日为止全国每个省份中每个城市疫情的累计情况和新增情况。id 字段是存储每个城市统计时的序号,作为主键自增,update_time 字段是统计时间,suspect 字段是每个城市现存疑似人数,每次统计将以前统计的数据逻辑删除,插入新统计的数据,确保每座城市的唯一性,并按照国家、省份、城市字段升序排序。
hotsearch 表用来存储爬取的百度今日热点排名前五十的热搜数据,id 字段作为每次更新每条热搜的序号,作为主键自增,content 字段是存储热点与热度值两个数据,每次更新逻辑删除旧的数据,插入更新的数据。
3.2.1 系统主界面
疫情可视化系统开发主界面包括全国疫情追踪界面及全球疫情追踪界面,界面效果如图1 和图2 所示。
图1 全国疫情追踪界面
图2 全球疫情追踪界面
3.2.2 疫情地图
制作疫情地图及其他一些统计图、热搜图借助了Apache Echarts 绘画图表技术,Echarts 是基于js的开源数据可视化图标库,绘画图表简便快捷,效果简洁好看。在规划了绘制地图区域后准备中国地图信息的js 文件,下载一个可用的导入到项目中后,编写echarts 图表配置信息,根据各省疫情确诊的人数划分为5 个等级,确诊人数由少到多,颜色随严重程度的加深而加深,在左下角进行颜色的说明。疫情地图包括全国疫情图和全球疫情图,如图3、图4 所示。从图中可以看出,湖北疫情累计确诊人数是全国最多,其余各省得益于党和国家及广大人民群众的不懈努力,都没有达到最深颜色的程度,以图中选中区域福建来说,累计确诊人数统计到今天为止,一共598 名,并且没有现有确诊存在,疫情基本得到控制。全球疫情的实现及数据说明同中国疫情图。
图3 中国疫情图
图4 全球疫情图
3.2.3 折线统计图
疫情统计折线图如图5 和图6 所示。从全国累计趋势和新增趋势可以看出,我国疫情情况现在比较稳定,能够得到有效控制[11],但全球范围内,疫情确诊人数却持续增加,说明疫情在全球范围内未得到控制,且越来越严重。折线图可以选择只显示一种数据,并为数据重新制作折线图,便于更好分析疫情发展情况,我国疑似人数趋势,隐藏其他数据,如图7 所示。将鼠标移到相应线段可以展示是哪一天的数据,可以看到,一旦有疑似,可以很快确认是否被确诊,说明我国对新冠肺炎已经有有效措施进行排查,效果也很显著,侧面说明疫情得到控制。
图5 全国累计趋势与新增趋势折线图
图6 全球累计趋势与新增趋势折线图
图7 全国现有疑似与新增疑似折线
3.2.4 柱状图
如图8 和图9 所示,根据中国除湖北外的城市确诊情况和全球各国确诊情况制作柱状统计图。可以看出,在中国,香港确诊人数相较其他城市来说,需要加强防护与监管。而在世界范围内,可以看到,美国、印度、巴西国家确诊人数突破千万级别,在这些国家,疫情并未得到及时控制。
图8 全国确诊城市排名柱状图
图9 全球确诊国家排名柱状图
3.2.5 疫情热搜图
疫情热搜为今日热搜图,是今日搜索度和热度值排名前五十的热点,每日更新,利用后台数据处理提取关键字和热度值后使用echarts 绘画出动态热搜图,如图10 所示。由图中可以看出,今日热搜中安徽六安新冠疫情情况最多人关注,热度值为379158,将鼠标移到每个关键词,可以看到该热搜的热度值,热度值越高,热搜字体越大,也代表更多人关注;每一次切换页面都会根据关键字重新渲染热搜图,做出动态热搜效果。
图10 今日热搜动态图
本系统是基于网络爬虫技术的疫情可视化系统开发,借助requests 模块和selenium 模块进行疫情数据爬取,借助jieba 等模块进行返回数据处理,借助echarts 绘画图表技术进行可视化界面设计开发。系统开发完成可以方便人们随时进行疫情的查看,根据每日疫情的结果也可推断出我国疫情的控制过程以及世界疫情未来的发展趋势。
系统设计难点主要在于疫情数据的获取后如何整合出每一项想要的数据,并确保数据的实时性与准确性。所以疫情数据必须定时爬取更新,确保正确性必须多方多维度多次确认才能保证。
(注:文中显示数据为2021年5月15日)