简述

新冠疫情自2019底爆发已有1年零3个月之久,很多媒体都有对疫情数据做出可视化与分析,但大多数据可视化都是二维地图的可视化。在一次浏览github的过程中,我无意发现了一个3D地球的可视化工具Globe.GL[1],就萌生把全球新冠疫情数据通过这个工具可视化出来的想法。这也是一个比较新颖的新冠疫情数据呈现方式,索性就接着作业的机会来实现。

借助全球的新冠疫情数据,我实现了近一年以来全球的疫情情况演变趋势的可视化,通过播放动画的方式呈现可视化结果,从中我看出了我国人民同心协力抗击疫情的优秀成果,也看见了美国为首的西方列国在面对疫情时的举足无措。做到最后也感受到了可视化的魅力,让我对世界有了更全面的认识。

数据源

疫情从最开始的中国本土爆发至世界性蔓延已过去了一年时间,一开始还担心数据获取上有一定困难,但经过google后发现,国外已有不少团队对每日的全球疫情信息进行了有效的整理,其中“Worldometers daily data”[2]就是一个在git开源的数据集。这个数据集每天都会自动更新数据源,数据主要来源是各国卫生部门公开的数据,在后台他会自动整合数据到规整格式,最终生成为csv文件。

(1)确诊人数据源

数据主要包括如下参数:

  1. 省份/州
  2. 国家/区域
  3. 经度、纬度
  4. 每日的确诊人数

(2)死亡人数数据源

数据主要包括如下参数:

  1. 省份/州
  2. 国家/区域
  3. 经度、纬度
  4. 每日的死亡人数

(3)病愈人数数据源

数据主要包括如下参数:

1. 省份/州

2. 国家/区域

3. 经度、纬度

4. 每日的病愈人数

在后续的开发过程中发现,Globe.GL中的经纬度数据要求是国家的经纬度信息,上述新冠疫情数据集中的经纬度数据和国家名称命名规范不能满足这个可视化工具的需求。因为,上述数据集中数据是每个国家详细城市的经纬度数据,在Globe.GL上使用这些经纬度信息不能映射到正确的国家地图板块上。所以我专门获取了适用于Globe.GL的经纬度数据集——Natural Earth[3]。后续的工作主要是提取其中的地理信息,和疫情数据做出整合。并且,在开发过程中考虑到,通过颜色来直观体现疫情的严重性,需要把确诊人数映射到颜色上,但后来发现不能直接根据确诊人数的多少直接进行映射,因为国家的人口基数同,可能会造成错误的视觉效果,所以还需要获取每个国家的总人口数据。很幸运的是,在获取的每个国家地理信息的数据集中就包含了国家人口的信息。

系统详述

  • 系统技术栈

编程语言:JavaScript,HTML,CSS

后台运行环境:Node.js

前端运行环境:浏览器

项目构建工具:snowpack[4]

可视化工具:globe,gl,d3.js[5]

  • 系统架构

图2 系统架构图

  • 数据处理

Node.js最大优势就在于它的异步操作上,作为爬虫这总存在大量请求IO的任务来说再合适不过,比python的单体爬虫效率高一个层次,所以选择用Node.js直接作为数据处理后台。

  1. 爬取疫情数据
  2. 爬取地理信息数据

由于得到的数据全部是csv数据文件,所以需要使用csv解析库进行解析,JavaScript第三方库提供了很好的支持,通过异步解析,在很短时间内就将数据加载到数据对象中,得到这些数据对象之后,根据国家名程或者经纬度进行数据整合。其中有些国家名称不合规范,我事先写好了映射函数直接进行替换即可得到规整数据集。

其中,爬虫任务和数据解析整合属于定时任务,可以在服务器写一个shell脚本定时执行.js文件即可获取实时更新的疫情数据。

  • 数据可视化

三维地球的可视化我使用的是globe,gl提供的地球模型和一些加载数据的API。对于可视化视觉方案我使用的是d3.js提供的一些API。比如根据不同国家确诊数量对颜色从黄色到红色的映射就使用了d3.js提供的颜色比例尺的API操作函数。

可视化的内容主要是,以每个国家的国旗作为国家标识,展示每个国家的确诊人数,死亡人数,病愈人数,同时展示每个国家人口基数。

可视化的颜色映射,在开发过程中发现通过颜色信息通道来展现疫情的严重性,如果不考虑每个国家的人口基数,就很难得出一个合理的视觉效果。所以我在衡量疫情严重性中加入了人口基数影响。

主要的思想是:严重程度 = min(确诊人数 : 人口基数 + 0.25min(死亡人数 : 病愈人数,1),1)

其中0.5参数是调整出来效果不错的经验值,这个公式基本反映了疫情严重程度。

因为数据是时序数据,我也就想到了用动画的方式来展示可视化结果,通过动画呈现,能明显看到地球上每个国家颜色的变化,从而知道疫情的走势变化。通过d3.js提供的一些控件我也可以通过拖拽播放进度条直接查看具体日期的疫情数据。

结果展示

我将最终工程文件部署到了阿里云服务器,可通过访问http://47.98.249.202/ 查看数据可视化结果。

图3 可视化平台

参考

[1] https://github.com/vasturiano/globe.gl

[2] https://github.com/bumbeishvili/covid19-daily-data

[3] https://github.com/nvkelso/natural-earth-vector

[4] https://www.snowpack.dev

[5] https://d3js.org/

新冠疫情全球数据可视化相关推荐

  1. 北大研究团队面向新冠疫情的数据可视化分析与模拟预测

    本次pythonday开发者日活动有幸请到北京大学的陈宝权教授做分享,以下是陈教授近期进行的面向新冠疫情的数据可视化分析与模拟预测项目,陈教授将会在本次活动上做分享与答疑,欢迎大家参与! 指导教师:陈 ...

  2. 隔离是否有效?北大面向新冠疫情的数据可视化分析与模拟预测

    近日,北京大学前沿计算研究中心陈宝权教授携团队面向新型肺炎疫情的数据,进行了可视化分析与模拟预测,为我们深度剖析疫情传播趋势,并预测了疫情疾病走势,为疫情防控决策和大众行为提供参考. 愿春暖花开之时, ...

  3. 美国约翰斯·霍普金斯大学全球新冠疫情统计数据网址

    新华网和央视经常提到美国约翰斯·霍普金斯大学发布的新冠疫情最新统计数据,下面就公布一下网址,不过墙内访问速度很慢很慢,小伙伴们要有思想准备~~~ 约翰斯·霍普金斯大学全球新冠疫情统计数据网址:http ...

  4. 约翰斯·霍普金斯大学全球新冠疫情统计数据

    新华网和央视经常提到美国约翰斯·霍普金斯大学发布的新冠疫情最新统计数据,下面就公布一下网址: 约翰斯·霍普金斯大学全球新冠疫情统计数据网址: 约翰斯·霍普金斯大学全球新冠疫情统计 比较难受的就是加载的 ...

  5. 新冠疫情数据可视化python_【一点资讯】新冠疫情数据分析 | Python可视化工具看全国各地的新增趋势 www.yidianzixun.com...

    - 点击上方"中国统计网"订阅我吧!- 文末领取[腾讯疫情分析完整代码+数据包] 本篇文章将分享腾讯疫情实时数据抓取,获取全国各地和贵州省各地区的实时数据,并将数据存储至本地,最后 ...

  6. 基于Springboot的新冠疫情可视化管理系统(可视化展示+后台管理功能)

    这里写自定义目录标题 基于Springboot的新冠疫情可视化管理系统 基础环境: 功能快捷键 实现效果图 源码查看 基于Springboot的新冠疫情可视化管理系统 本项目有基于Springboot ...

  7. 中国新冠疫情数据可视化

    文章目录 一.结果及源码展示 二.项目准备 1.第三方库 2.知识点概况 3.推荐视频 三.数据获取 四.数据库交互 五.绘制前端页面 六.Web程序开发 七.未来可期 一.结果及源码展示 自己做的这 ...

  8. 新冠疫情(COVID-19)统计数据获取方法

    新冠疫情(COVID-19)统计数据获取方法 新冠疫情最新统计数据 世界实时统计数据 新冠疫情最新统计数据 新华网和央视经常提到美国约翰斯·霍普金斯大学发布的新冠疫情最新统计数据,下面就公布一下网址, ...

  9. [数据科学]001.新冠病毒全球疫情-数据可视化-plotly-完整详尽教程

    -1 关于plotly 的小问题 因为plotly用着还不熟练,我把我遇到的一些plotly调用问题总结了一下: [打补丁]plotly常见问题 0. 前言: 疫情期间,工作'过于'繁忙...教程早已 ...

  10. 利用Python实现新冠疫情数据可视化(获取疫情历史数据,制作南丁格尔玫瑰图、疫情地图、动态疫情组合图、词云)

    文章目录 前言 1.获取疫情历史数据 2.制作南丁格尔玫瑰图 2.1 全球各国确诊人数玫瑰图 2.2 全国各省市零新增天数玫瑰图 3.制作疫情地图 3.1全国各省市目前确诊总人数疫情地图 3.2全球各 ...

最新文章

  1. 黄聪:Wordpress 模版技术手册 - WordPress Theme Technical manuals
  2. leetcode算法题--剪绳子 II
  3. ie浏览器里面无法输入文字:
  4. python与正则表达式(part4)--正则表达式分组
  5. 什么是CAS机制?(进阶篇)
  6. 百度、WordPress纷纷宣布停用React
  7. *p++和*++p_2020年P气瓶充装新版试题及P气瓶充装找答案
  8. 面试题:如何实现丝滑般的数据库扩容
  9. python opencv旋转图片_opencv3+python3进行图片旋转处理
  10. 【6.18校内test】T1多项式输出
  11. H264 SPS分析
  12. 车聘网框架及源码介绍
  13. YYText识别链接和点击事件
  14. office2020与2016版的不同_Office 2016 各版本之间不同(要使用Access 2016必须安装Office 2016专业版)...
  15. 分布式环境下限流方案的实现
  16. ssh中关于antion取jsp传递的值接收不到
  17. windows、mac桌面录制GIF
  18. 激光雷达鼻祖Velodyne谋求合并求生:高层动荡 亏损不止
  19. 牛顿-莱布尼茨公式练习习题
  20. i5-10310U怎么样相当于什么水平

热门文章

  1. gphp32.exe是什么文件?
  2. mac 版本charles安装报错-Charles cannot configure your proxy settings while it is on a read-only volume.
  3. 在linux下成功写Bingo游戏
  4. 英文转换-在线英文批量转换器免费
  5. 台式计算机调亮度快捷键,台式电脑怎么调节屏幕亮度
  6. Jquery Jqprint—借助Jquery Jqprint实现网页打印功能
  7. Linux中 ll 和 ls 区别
  8. Ubuntu下修改键盘排列
  9. 山东省第二届数据应用创新创业大赛-济南赛场赛题发布
  10. JS 不可逆加密后半部分,去混淆还原代码。