抗击新冠肺炎,如何进行实时动态时序图谱建模与分析?
作者 | 闭雨哲
来源 | ThutmoseAI
背景介绍
新冠肺炎是一种具有最长达24天潜伏期的新型突发性传染疾病,这种特性给疫情防控带来了巨大的挑战,随着感染规模的不断扩增,简单的人为治理已不太奏效,使用“大数据”技术手段来辅助人为治理社会有助于快速准确的定位问题关键,帮助决策者及时作出下一步规划。
这一个月来每天都会在各大站点查看感染人数的更新、病例的行程发布等等,然而互联信息更新总是不能赶上群众急切的小手手...
技术背景
知识图谱技术作为大数据走向人工智能的台阶,它以最契合社会行为的形式表达复杂的社会结构,非常适合分析具有关联关系的数据,使用知识图谱技术分析传染关系及社会动向非常有利于疫情的防控,对疫后的研究分析也有帮助。尽管当前大数据和人工智能的应用尚处于初级阶段,但以知识图谱为核心的研究成果正在带来一波新兴的科技潮流。
知识图谱背后的技术关键“图数据库”:
图形数据库是一种应用关系图理论存储复杂的实体之间的关系信息,即用“点”和“边”的形式来存储数据,最常见例子就是社会网络中人与人之间的关系,正是本次疫情中的关键线索。
使用技术
本文使用图特摩斯科技自研的国内首个时序图谱平台AbutionGraph作为技术支撑,主要技术突破点为:静态图+动态图+时序图+多维的存储形式。
解决问题:
疫情实时统计:实时统计医院/城市/省份的确诊/疑似/死亡/接触人数等
疫情实时分析:病例接触者人群溯源及时排查、高风险同行人群分析、城市区域风险等级计算等
疫情数据研究:病毒传播渠道及路径、寻找疾病候选药物,提供相应的药物作用机制等
使用数据:
本次演示共使用5类实体数据:包括正常人、病例、地址、交通工具、医院等数据信息,以及各类实体之间的关联关系,如“某患者曾出现于某超市”等关系。我们使用AbutionGraph依据真实场景建模,由于详细数据不公开,本文中均使用模拟数据进行分析。
与普通图存储的技术区别
在建模前,我们有必要先来理解一下多维、动态、时序这些在图谱存储中的新概念。
1)“一维”图谱和“多维”图谱的区别
一维图谱:
(常见的图形存储结构,如:JanusGraph、Neo4J等技术中使用)
多维图谱:
AbutionGraph独有的存储形式(实体属性细分,任意维度的数据包含,如张某某具有2个维度的数据,而李某某不患有疾病,可不包含“维度2”。)
2)“静态”、“动态”及“时序”图谱的区别
假定场景:实时统计每个人之间的交易总金额。
1.静态图谱:
静态图谱统计历史账单总金额方法:10+5+5=20元
(所有交易信息都查询出来,再逐个累加汇总)
2.动态图谱:
动态图谱统计历史账单总金额方法:数据产生后发生存储即实时自动汇总,及时查询得出20元。
3.动静结合:
静态图谱+动态图谱是AbutionGraph特有形式,即可以保持历史数据不变,又可无需人为干预实时根据历史数据统计出指标。
4.时序图谱:
时序指标计算是动态图谱的特殊形式,即根据“事件”发生的时间线,使用划分的时间区间进行实时指标计算。
如场景~统计每个人之间每天的实时交易总金额、统计每周(统计区间)实时新增病患。
新冠肺炎数据建模
了解了图形的多种存储形式后,接下来我们使用模拟数据依次建模,并详细介绍每个实体与关系的数据映射关系。
当发生突发公共事件时,我们在“正常时期”的数据图谱之上进行多维扩展,以支持更多业务,灵活应对疫情。
一)节点“人”数据建模
正常人数据(2维):
1.基本信息:性别、生日、籍贯等 (数据来自身份证采集等渠道)
2.曾患病信息:疾病名称、发病时间、就诊医院等 (数据来自医院联网数据等渠道)
患病人数据(3维):
1.基本信息:性别、生日、籍贯等
2.曾患病信息:疾病名称、发病时间、就诊医院等
3.患新冠肺炎:感染程度、诊断时间、感染原因、症状等 (数据来自各地医院实时上报等)
二) “人”-(收治于)->“医院”
实体“医院”数据(2维):
1.基本信息:病床数、医护数、病人数等 (实时动态数据 来自医院资源管理系统等渠道)
2.病例信息:收治数、确诊数、疑似数、病亡数、治愈数等 (实时动态数据 来自医院联网实时上报等渠道)
关系“收治于”数据(1维):
1.收治信息:收治时间、收治原因等 (数据 来自医院实时上报等渠道)
三) “人”-(住在、出现于、感染于)->“地址”
关系数据(3维边):
1.居住于:入住日期等 (历史数据 来自社区物业管理系统等渠道)
2.出现于:出现日期等 (历史数据 来自社区街道管理系统等渠道)
3.感染于:感染日期等 (实时数据 来自医院联网实时上报等渠道)
实体“地址”数据(1维):
1.地址:(无属性信息)
四) “人”-(乘坐)->“交通工具”
关系数据(1维):
1.乘坐:上车时间、上车地点、下车时间、下车地点、座位号等 (数据 来自交管部门管理系统等渠道)
实体“交通工具”数据(多维):
1.车基本信息:编号、座位数、交管局、投入时间、维修信息、描述信息 (数据 来自交管部门管理系统等)
2.高铁:司机、乘车人数、发车时间、始发站、终点站、途径站点等 (数据 来自交管部门管理系统等)
3.飞机:司机、登机人数、出发城市、到达城市、起飞时间等 (数据 来自航空公司管理系统等)
4.地铁:司机、车辆型号、发车时间、始发站、终点站、途径站点等 (数据 来自城市轨道管理系统等)
Ps:交通数据种类丰富, 有公交站点、地铁站点等静态数据,还有基于事件流的动态数据,例如,公交车进出站、地铁刷卡出行、出租车到达某一地理点等。
五) “人”-(接触、传染)->“人”
关系数据(1-2维):
1.接触:接触时间等 (数据 来自临时背调等渠道)
2.传染:无属性
实体“人”维度(多维可变):
健康人(未得过病)1个维度:“基本信息” 维度
亚健康(得过疾病)2个维度:“基本信息”、“曾患病信息” 维度
患病人(患新肺炎)3个维度:“基本信息”、“曾患病信息” 、“患新冠肺炎” 维度
(各维度的属性信息前章节已给出)
未确诊前样例数据:
确诊后样例数据:
感染人群数据时间线:
2020-02-07:“赵六”(未发病)--探亲->“赵七”(健康)
2020-02-10:“赵六”(发病),确诊患新冠肺炎
2020-02-11:“赵七”(未发病),但为确诊病例“赵六”密切接触者,随后查出感染
“赵七”的密切接触者“张女士”即应进入医学观察期
六) “医院”-(归属于、院上报)->“城市”
关系数据(2维):
1.院上报:患者姓名、患者年龄、患者病情(危重/严重/轻症)、诊断情况(确诊/疑似)、上报时间、上报人员等 (数据 来自医院病患数据采集等)
2.归属于: (无属性信息)
实体“城市”数据(2维):
1.市患者实时统计(动态):确诊总数、疑似总数、严重患者总数、轻症患者总数、时间区间-按天分区等 (数据 来自市医院医护实时汇报等)
2.市患者每日新增趋势统计(时序):确诊总数、疑似总数、严重患者总数、轻症患者总数、统计开始时间、结束时间等
七) “城市”-(归属于、市上报)->“省份”
关系数据(2维):
1.市上报(按天):确诊总数、疑似总数、严重患者总数、轻症患者总数等 (数据 来自市级数据实时自动获取)
2.归属于: (无属性信息)
实体“省份”数据(2维):
1.省总患者统计(动态):确诊总数、疑似总数、严重患者总数、轻症患者总数等 (数据 来自市医院医护实时汇报等)
2.省每日新增患者统计(时序):确诊总数、疑似总数、严重患者总数、轻症患者总数、统计开始时间、结束时间等
至此,数据建模介绍完毕。如上,数据统计部分已经实现自动化,即查即用。接下来基于此设定数据集进行一些更上层的分析场景演示。
场景分析演示
Ps:AbutionGraph查询方式偏API,暂未实现GSQL,为了方便理解,查询语句均使用相应查询逻辑的伪代码方式演示。
场景1、城市病例每日新增趋势查询(每日汇总)
查询:
vertex ["北京市","深圳市"]
use "市患者每日新增趋势统计"
select "开始时间" execute ">2019.01.20" //<<--按天分区汇总(预聚合-即图库自动计算的)
select "结束时间" execute "<2020.01.24"
结果:
北京市(2020.01.20):2例
北京市(2020.01.21):6例
北京市(2020.01.22):13例
北京市(2020.01.23):8例
深圳市(2020.01.20):4例
深圳市(2020.01.21):6例
深圳市(2020.01.22):18例
深圳市(2020.01.23):19例
场景2、城市病例分布情况查询(指定区间全量汇总)
查询:
vertex ["北京市","深圳市"]
use "市患者实时统计维度"
select "开始时间" execute ">2019.01.20" //<<--按天分区汇总(后聚合)
select "结束时间" execute "<2020.02.24" //<<--不指定区间即所有天数据汇总
groupBy [] ;
结果:
北京市(2020.01.20-2020.01.24):29例
深圳市(2020.01.20-2020.01.24):47例
场景3、省份病例每日新增趋势查询(每日汇总)
查询:
vertex ["广西省"]
use "省每日新增患者统计维度"
select "开始时间" execute ">2019.02.10"
select "结束时间" execute "<2020.02.11"
count "确诊总数,疑似总数" ;
结果:
广西省(2020.02.10):
确诊总数:11
疑似总数:29
广西省(2020.02.11):
确诊总数:18
疑似总数:30
场景4、城市病例的年龄段分布情况(3跳查询)
查询:
vertex ["北京市"] toEdge [“院归属于”] toEntity ["市患者实时统计"] toEdge [“院上报”]
use ["院上报维度"] select [“患者年龄”] mean() ;
结果:
70~79岁:1人
60~69岁:4人
50~59岁:3人
40~49岁:8人
30~39岁:5人
20~29岁:1人
10~19岁:0人
0~9岁:0人
Ps:如上查询为3-跳查询,如需求固定可在建模时为此逻辑创建一个动态维度,实现自动化计算。
场景5、查出某病例确诊前3天接触过的人群
查询:
Vertex [“梁某某”,“陈某”] toEntity [“患新冠肺炎”] select [“确诊时间”] toEdge [“接触”] by [“接触时间”>“确诊时间”-3天]
use "基本信息维度" ;
结果:
梁某妹
梁某兄
陈某夫
场景6、找出所有超级传播者
Ps:假定传染人数超过4个即为超级传播者。
查询:
use ["患新冠肺炎"] toEdge [“传染”] count >= 5 ;
结果:
场景7、查找患者传播链
Ps:假定传染人数超过4个即为超级传播者。
查询:
//<<--按患者传染的路径逐步遍历,直到终点实体无“患新冠肺炎”维度
use ["患新冠肺炎"] for ( toEdge [“传染”] ) until ( toEdge [] Dimension !=“患新冠肺炎”) ;
结果:
总结
AbutionGraph是个年轻的图数据库系统,它可以满足永不掉线的实时指标计算任务以及历史数据分析,多维度的存储模式除文中介绍的场景外,我们也可以在实体上动态存储关系上的属性,反之亦然,比如:在实体“张三”的某个维度上实时统计它最近联系过的10个朋友的名字并不断更新与保存。
(*本文由AI科技大本营转载,转载请联系原作者)
【end】
◆
精彩推荐
◆
推荐阅读
福利直达!CSDN技术公开课评选进行中
一文告诉你,如何使用Python构建一个“谷歌搜索”系统 | 内附代码
小米回应 50 亿疫情贷款申请;爱奇艺 App 崩溃;OpenSSH 8.2 发布
大神如何一招完美解决Hadoop集群无法正常关闭的问题!| 博文精选
Python 爬取李子柒辣椒酱 1794 条数据,有人嫌牛肉粒太小...... | 原力计划
比特币技术栈的演进
你点的每个“在看”,我都认真当成了AI
相关文章:
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除
相关环境和说明在《C拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入》已给出。本文将分析从头部、中间和尾部对各个容器进行删除的性能。(转载请指明出于breaksoftware的csdn博客) 删除 …

关于服务器启动慢的问题
今天去了家医院的机房,走进去一看,TMD的医院就是有钱,全是光纤和千兆网络环境,全全是思科的三层交换机和路由器,HP的服务器。我们需要安装点东西,登录一台服务器,我一看配置,呵呵&am…

python依赖包exe文件安装问题
2019独角兽企业重金招聘Python工程师标准>>> 在使用python的exe程序安装依赖包的时候,经常会出现类似于下面的错误: python version 2.7 required,which was not found in the registry 可以使用如下代码解决该问题: # # script to register …
C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除
相关环境和说明在《C拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入》已给出。本文将分析各个容器中遍历和查找的性能。(转载请指明出于breaksoftware的csdn博客) 遍历 从前往后 travers…
技术战“疫”,贾扬清、李飞飞要给程序员直播讲AI技术!
「时势造英雄,英雄亦造时势。」在这场波及全球且看不见硝烟的疫情下,无数英雄日夜奋战,无论是身处一线的医护工作者、政府职能部门、志愿者,还是坚守在家的人民群众,都在尽自己所能,在行动!与此…

关于端口映射的一个命令
今天安装一个远程会诊的系统,由于是在不同和的地方,需要在路由器上作下映射,由于是要远程连接对方的服务器,所以要在对方的路由器上设置下Interface fastethernet0/0 Ip address 192.168.1.1 255.255.255.0 Duplex auto Speed aut…

elasticsearch简介
Elasticsearch是 面向文档型数据库,这意味着它存储的是整个对象或者 文档,它不但会存储它们,还会为他们建立索引,这样你就可以搜索他们了。你可以在 Elasticsearch 中索引、搜索、排序和过滤这些文档。不需要成行成列的数据。所以…

C++拾取——使用stl标准库生成等差、等比数列的方法
代码是思想的表达。阅读代码是一个猜测、求证的过程。这个过程非常费脑,所以人们都不喜欢啰啰嗦嗦的表达方式。于是在相同认知水平下,简洁高效的表达是喜闻乐见的。本文将抛砖引玉,通过一些案例讲解如何去简化代码。(转载请指明出…

利用NetBIOS名称与其他计算机通信
当某台计算机与网络中的其他计算机通信时,它是如何依据对方的计算机名称来得知其IP地址呢?名称解析的方法有以下几种: 检查NetBIOS名称缓存(NetBIOS name cache)广播直接向WINS服务器查询何谓NetBIOS名称:如…
编程语言性能实测,Go比Python更胜一筹?
作者 | Pawel Dziubałka, Sebastian Karasiewicz译者 | 泓技出品 | AI科技大本营(ID:rgznai100)互联网上有非常多的精彩代码,它们成了构建各种基础设施的基础。你正在阅读的这个平台同样也在致力于创建出色的代码。尽管普通用户一般不会注意…

mysql备份策略的制定
需要考虑的因素: 1. 数据库是不是都是innoDB引擎表 -》决定备份方式,热备或冷备 2. 数据量大小 -》逻辑备(量小)或物理备,全量或增量 3. 数据库本地空间是否充足 -》备份到本地或远程 4. 需要多快恢复 -》备份频率 小时…

C++拾取——使用stl标准库实现排序算法及评测
今天看了一篇文章,讲各种语言的优势和劣势。其中一个观点:haskell非常适合写算法,因为使用者不用去关心具体的计算机实现,而只要关注于操作语义。这让它在专心研究算法的人中非常受欢迎。所以很多时候,语言的争论没有太…
几行代码构建全功能的对象检测模型,他是如何做到的?
作者 | Alan Bi 译者 | 武明利,责编 | Carol 出品 | AI科技大本营(ID:rgznai100) 如今,机器学习和计算机视觉已成为一种热潮。我们都看过关于自动驾驶汽车和面部识别的新闻,可能会想象建立自己的计算机视觉模型有多酷。…

SQL操作全集
SQL操作全集 下列语句部分是Mssql语句,不可以在access中使用。 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据…

css3媒体查询实现网站响应式布局
响应式建筑设计、响应式家具设计、响应式办公设计,这些词可能是已有的专业名词,也可能是我自己想出来的一些名词。因为在生活中,我们常常会见到很多让人惊叹的设计,为什么同一套东西经过不同的方式变化之后会给人不同的使用感受和…
流行于机器学习竞赛的Boosting,这篇文章讲的非常全了
作者 | AISHWARYA SINGH译者 | 武明利,责编 | Carol出品 | AI科技大本营(ID:rgznai100)你能说出至少两种机器学习中的 Boosting 吗?Boosting 已经存在了很多年,然而直到最近它们才成为机器学习社区的主流。那么&#x…
并行计算——OpenMP加速矩阵相乘
OpenMP是一套基于共享内存方式的多线程并发编程库。第一次接触它大概在半年前,也就是研究cuda编程的那段时间。OpenMP产生的线程运行于CPU上,这和cuda不同。由于GPU的cuda核心非常多,可以进行大量的并行计算,所以我们更多的谈论的…

JavaScript继承详解(四)
文章截图 - 更好的排版 在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript。 Crockford是JavaScript开发社区最知名的权威,是JSON、JSLint、JSMin和ADSafe之父,是《JavaScript: The …

C语言:在屏幕上输出信息
#include<stdio.h>int main(){printf ("This is a C program.\n");printf("welcome to bit\n");return 0;}结果:This is a C program.welcome to bitPress any key to continue转载于:https://blog.51cto.com/yaoyaolx/1715542

Colly源码解析——框架
Colly是一个使用golang实现的数据抓取框架,我们可以使用它快速搭建类似网络爬虫这样的应用。本文我们将剖析其源码,以探析其中奥秘。(转载请指明出于breaksoftware的csdn博客) Collector是Colly的核心结构体,其中包含了…

未经任何测试的源代码开放
未经任何测试的源代码开放 http://files.cnblogs.com/TextEditor/TextBoxEx.rar 这个代码只是一个Demo. 请将一个Vb.net的代码放在C盘下面,并且改名为Test.txt,然后使用菜单的Open来打开文件。 有任何问题,请在这里留言。 C#的上色还没有完成…

助力企业抗疫,360金融推出免费AI语音机器人
复工潮来临之际,为帮助各大企业进行高效的内部防疫宣传、员工行程信息收集以及快速生成公司内部防疫排班表,360金融针对复工企业的需求痛点推出了AI语音机器人,以助力企业更高效的防疫、抗疫。 针对复工企业的需求痛点,360金融人…

实现strncat
函数原型char *strncat(char *front,char *back,size_t count)参数说明back为源字符串,front为目的字符串,count为指定的back中的前count个字符。 所在库名#include <string.h>函数功能把back所指字符串的前count个字符添加到front结尾处&a…

Colly源码解析——结合例子分析底层实现
通过《Colly源码解析——框架》分析,我们可以知道Colly执行的主要流程。本文将结合http://go-colly.org上的例子分析一些高级设置的底层实现。(转载请指明出于breaksoftware的csdn博客) 递归深度 以下例子截取于Basic c : colly.NewCollecto…

无限路由 DI-624+A 详细介绍
无线路由器硬件安装设置图解1、确认宽带线路正常:无线宽带路由器可以让您将家中的计算机共享高速宽带网络连结至互联网;但在此之前,您必须先具备一部基于以太网络的Cable/DSL Modem(使用RJ-45 接头),并确定您的宽带网络在只有连接…
教你如何编写第一个爬虫
2019年不管是编程语言排行榜还是在互联网行业,Python一直备受争议,到底是Java热门还是Python热门也是一直让人争吵的话题。随着信息时代的迭代更新,人工智能的兴起,Python编程语言也随之被人们广泛学习,Python数据分析…

【BZOJ】3542: DZY Loves March
题意 \(m * m\)的网格,有\(n\)个点。\(t\)个询问:操作一:第\(x\)个点向四个方向移动了\(d\)个单位。操作二:询问同行同列其他点到这个点的曼哈顿距离和。强制在线。(\(n \le 10^5,m \le 10^{18}\)ÿ…

Gin源码解析和例子——路由
Gin是一个基于golang的net包实现的网络框架。从github上,我们可以看到它相对于其他框架而言,具有优越的性能。本系列将从应用的角度来解析其源码。(转载请指明出于breaksoftware的csdn博客) 本文我们将分析其路由的原理。先看个例…
一文讲透推荐系统提供web服务的2种方式
作者丨gongyouliu编辑丨zandy来源 | 大数据与人工智能(ID: ai-big-data)推荐系统是一种信息过滤技术,通过从用户行为中挖掘用户兴趣偏好,为用户提供个性化的信息,减少用户的找寻时间,降低用户的决策成本&am…

jQuery遍历json数组怎么整。。。
{"options":"[{\"text\":\"王家湾\",\"value\":\"9\"},{\"text\":\"李家湾\",\"value\":\"10\"},{\"text\":\"邵家湾\",\"value\":\"13\…