数据分析报告系列 | 疫情分析报告“炼成”笔记

2022-06-24

分享到

作者:程志鹏、刘洋、孙晓熠、蒋凯、赵博


前言


本系列的上一篇《数据分析报告是怎样“炼成”的》讲解了数据分析报告的基本步骤及我司一键式自动化数据分析报告生成平台的解决方案。文中提到我们做了一个疫情分析报告的演示案例,本篇我们将就这个案例的具体形成过程按步骤详细讲解,同样干货满满,感兴趣的读者建议继续阅读本文。


本文疫情数据分析预测报告展示,是我们研发的一键式自动化数据分析报告生成工具平台在疫情分析预测公共服务上的一个小案例。一键式自动化数据分析报告生成平台是江苏鸿程大数据研究院研发的一款高效便捷的通用化数据分析报告生成工具,可以适用于各个行业和政府职能部门的各类数据分析报告自动化生成。详细的平台介绍请见公众号文【应用】一键式自动化数据分析报告生成平台


背景



自3月起,国内本轮疫情形势严峻。为了帮助政府和大众及时了解各地疫情发展态势,我们基于一键式自动化数据分析报告生成平台,制作了一个疫情查询预测与报告生成网站,可以多维度灵活地查询国内外任意地区的疫情态势,并自动生成日/周/月报,为政府防疫决策提供参考依据,为大众及时了解当地疫情态势提供便捷。

该网站主要功能包括:

1、可互动疫情地图,对疫情的地理分布和重点区域进行直观展现;

2、可通过点选地图块/下拉框进行区域下钻,自助查看区域报告,国内支持全国、省、市三级,国外支持洲、国家两级;(见第6小节)

3、报告包含图表和文字,图表展示疫情指标趋势,文字对疫情态势、疫情规模等进行结论性描述;(见第4小节)

4、鉴于国外疫情时间跨度大,支持以日/周/月报等不同时间维度展现图表和分析报告;

5、支持日期切换,查看所有时间的历史报告。


为了完成上述各个功能,我们完成了数据采集、数据处理、指标目录树配置、数据查询展示与分析、编写报告模板与规则、疫情地图前端展示共6个步骤,其中前3个步骤提供数据基础,4、5两步提供疫情报告功能,第6步提供前端页面展示。以下分别详述。


01、数据采集




报告内容需要数据支撑,因此需要从外部获取数据。疫情报告的数据基础为疫情数据,首先,查找权威数据来源,通过网上查询,国内疫情数据来源于国家卫健委,国外疫情数据以霍普金斯大学数据较为权威。然后,采用Python requests、Selenium等爬虫技术,爬取网站数据,以文本、Excel、CSV等文件形式保存。

开发维护过程中,出现了国家卫健委疫情通报格式变更的问题,不再通报市、区级疫情数据,若从各市卫健委获取爬取,工作量较大,经调研分析,阿里提供了处理后的疫情数据,并且数据准确、及时,遂市、区级数据更换为阿里提供的疫情数据。

疫情数据每天都有更新,每天都要进行数次(国内外)数据采集,我们通过设置定时任务,在相应每日数据更新后自动执行采集任务,并在采集后通过邮件、钉钉通知方式通知我们数据采集状况,便于出现异常及时处理。


02、数据治理




由于获取到的原始数据并不完全符合本系统的要求,需要进一步处理,为后续报告生成提供支持。数据处理主要含数据结构化、指标映射、数据校验、逆透视等步骤。

1)数据结构化

直接爬取到的国家卫健委数据为每日疫情通报,需要分析通报内容,使用正则等技术将通报内数据提取并转换为表式数据;霍普金斯大学数据(GitHub)获取到的就是结构化数据,无需再处理。

2)指标映射

由于原始数据中大部分数据表头以及列数据中以中文文字的形式展示,例如:xx省、xx市、xx指标,同一个指标表示缺乏唯一性,为了更好的服务于报告分析,其中部分数据可以由统一的编码进行标识,因此使用映射的形式进行数据转换,将其转换成统一的编码。

少量的固定指标映射以字典的形式保存并进行映射,指标数量较多并且有一对多的映射指标,如下图地区指标,采用本系统内的目录结构树作为映射文件,并为了防止区域名重复(如多地同名的鼓楼区),对原始文件进行处理,将数据内的省与市指标结合,映射文件中的区域节点进行子关联,将指标一一对应,最后关联编码列,保障数据的准确性。





3)逆透视




如上图,左侧的二维表,右侧的是一维表。一维表是数据,自然生成的样子,也就是说,如果按照数据自然产生的话,就应该遵循一维表的格式来记录并存入数据库,而不是其他的样子。二维表是数据分类汇总后的呈现,更适合用在报告里进行展示。将一维表转为二维表的过程为透视,反过来,将二维表转为一维表的过程叫做逆透视。我们获取到的数据有些是二维表,就需要进行做逆透视转换。

4)数据校验

为了防止数据处理过程中可能会产生的数据丢失,以及错误数据进入数据库,对原始数据进行校验。如指标校验,处理过程中数据量比对。指标映射中,只通过能够被映射的指标,未被映射的指标则通过日志形式进行反馈,并对其进行原因分析。在开发中,就曾多次遇到数据出错的情况,多为省、市、区的名称在不同的通报里偶尔会有简称,或与国家行政区划名称不相符,导致数据异常无法录入。



03、指标目录树配置



目录结构树的配置过程中,我们配置了包括病例来源、病例种类、地图信息等目录树。其中,最为复杂的便是地图信息目录树的配置,关于地图信息目录树,我们最先使用的是某第三方网站上所提供的行政区域划分数据,但在之后的实际测试过程中,地图数据的缺失和编码的不完善为系统的正常使用产生影响。在我们后续的调研中,我们选择了“中华人民共和国民政部”官方网站所提供的最新行政区划代码数据,在经过一系列的整理,后续实践过程中也进行了不断补充完善,最终满足了系统对于地图信息的正常使用,并且行政区划代码编码逻辑本身的完善,也便于后期对于数据的维护和扩展。


04、数据查询展示与分析





在有了数据基础之后,我们把更多精力放在了如何去撰写一篇既通用还深刻的疫情报告上。首先,我们去调研了大量与之相类似的疫情报告,从中总结了以下经验:

1.报告要在数据披露的第一时间完成

2.报告数据不能出现大的偏差

3.数据变化趋势需要配合图表直观的展示

4.疫情地图颜色划分疫情程度

5.疫情地图的地图块支持下钻

6.行政区各辖区的疫情占比和程度

基于这些已有的疫情报告经验,我们也发挥了自己所独有的技术能力,开发了以下新的报告内容:

1.数据配合文字展示,不单单是一个表格

2.可灵活的切换时间查看往期报告

3.每一个有数据的辖区都有与之对应的报告

4.结合数据趋势变化给出预测结果

5.世界疫情报告分有日报、周报、月报

结合上述内容,我们设计了最初版疫情报告的原型,包括查询热点城市的数据趋势,分析疫情爆发、疫情拐点、疫情结束的数据特点,思考数据分析处理方式与判定条件等内容,并逐步完善不足和解决问题。

在报告的编写过程中,基础的数据展示如当日疫情新增xx例,无症状xx例等,而对于爆发、目前状态、拐点、结束的判断较为复杂,后研究设定连续4日以上疫情新增为0为当日暂无疫情,否则认为疫情存在,并作为疫情开始进行分析;为了减小数据波动对分析的影响,我们使用了统计学中的Z值指标判断疫情的爆发状态,Z值越大疫情爆发就越剧烈;而后通过数据下降趋势进行判断疫情是否出现好转、趋于结束、暂未出现拐点等情况,后发现疫情只出现零星几个的省市和疫情爆发中的省市使用同一套判断标准误差较大,又添加了对量级的参数判断,使判断更加准确。

在分析过程中,我们发现,国内省市数据与港澳台数据特点差异较大,遂单独分析港澳台数据;国外数据与国内差异也很大,并且如美国还会出现周末数据大幅下滑的现象,猜测周末不上班,检测也少了,基于此国外数据也单独分析,并以日、周、月为单位进行分析,得到了相对准确的分析结果。





05、确定疫情报告内容编写报告模板、规则


在制定模板的内容编写过程中,我们先是根据设计好的规则语句编写规则代码,之后再逐步在报告中插入规则语句并加以测试。随着疫情报告内容的不断完善,我们也为此编写了更多更复杂的规则代码。其中,有关于疫情数据预测的模型在设想过程中最为困难,我们试编写了多种预测模型,但最终结果都不能让我们满意,最终在专业知识和实际测试下,我们找到了现阶段最为合适的预测模型,并将其以代码形式呈现。

在最后的语句插入过程中,我们还根据读者的阅读习惯,对疫情报告做了描述上和排版上的调整。也对不同等级的行政区、国内外区分、日期划分做了不同的报告模板。在具体的划分过程中,我们针对每篇疫情报告的数据情况和需要关注的重点做了区别处理,并在每一段文字后,都配备了可以更加直观展示数据的图表。其中,图表在设计的过程中,我们也结合数据预期展示的结果对图表做了一些处理,包括y轴的开始和分割段数、x轴的分割段数、双轴、文本标签显示、折线或柱状颜色等。

在报告编写过程中,我们需要切换时间、区域来生成不同时间、不同区域的报告,这样可以编写一份模板,生成多份可用报告。一键式自动化数据分析报告生成平台支持设置报告模板的全局变量,我们使用这个功能,将报告日期和报告区域两个参数设置为全局变量,使用时将用户选取的实际值赋值给变量然后生成报告,实现了时间、区域切换的功能。


06、疫情地图、疫情报告联动展示




为了使报告数据更加多维且直观,我们考虑在纯文本的基础上增加ECharts图表来辅助展示数据,而文本则更专注与数据的分析结果和预测。在使用ECharts图的过程中因为国际数据与国内数据的量级差别比较大,需要根据实际数据的极值计算来动态的给予图表不同的单位,线段等。并且在折线图中的坐标数据展示方式都针对性的根据官网API文档多次调整了参数,最终才确定了现在的展示效果。

报告中的地图分为国内地图与国际地图两部分,均使用了ECharts地图组件结合GeoJson绘制,地图部分实现了区域图例颜色显示,悬停展示病例数据,以及点击下钻的功能。下钻时会根据当前区域加载GeoJson数据并调用接口更新当前区域报告。国际地图结合实际情况可以分别按日度,周度,月度查看报告,国内地图仅可以查看日度报告。在制图过程中由于部分地图数据的缺失需要手动在GeoJson工具中重新绘制地图轮廓或删减地图区域中的板块以及调整地图中区域名称的显示位置,力求可以更清晰的辨认地图块。考虑到手机端有些区域过小不方便点击的的问题,在地图左上角增加了选择区域的按钮,点击后可以通过搜索或滑动下拉列表的方式选择区域。

地图区域使用深浅不一的颜色来表示不同区域疫情的严重程度,颜色越深数据越大。为了直观展示综合疫情态势,我们使用了新增确诊、新增无症状、新增死亡等指标加权求和的方式,计算出当日的疫情指数,并将疫情指数的大小量化为不同色深。后又发现疫情零星出现地区会出现今天有明天没有的情况,得出指数波动较大,参考意义减小。后通过计算连续4日的疫情指数和作为当日的疫情指数,减小了波动,使地图色块更具参考价值。




总结



本文详细讲述了疫情报告的形成过程和步骤,期望读者有所收获。总而言之,撰写数据分析报告还是一个比较复杂的过程,涉及到数据采集、数据处理、指标配置、数据查询、数据图表、报告生成等一系列流程和工作。

我司的一键式自动化数据分析报告生成平台,可以为数据分析报告提供全流程支撑,除了上述功能外还具备智能归因分析、大屏展示等多种功能,使复杂的数据分析报告撰写任务变得简单。今后我们将基于该平台尝试更多有用、有趣的数据分析任务,敬请关注我司公众号,同时欢迎有需要的读者前来垂询和试用产品。