原文地址:https://mp.weixin.qq.com/s/9BYk1ONd3gKTzBW0WnxuJw

一、背景与数据来源介绍

新型肺炎作为一种存在潜伏期的传染病,分析其传染关系及接触关系非常有利于疫情的防控,对疫后的研究分析也有帮助。本文将介绍基于图数据库对新型肺炎图谱进行建模与分析的过程及效果。

图数据库(Graph Database)是一种复杂关系数据的处理系统,一种使用顶点、边和属性来表示与存储数据,并以图结构进行语义查询的数据库。图数据库的关键概念是边,通过边将顶点连接在一起,从而进行快速的图检索操作。

图数据库非常适合用于分析此类关联关系数据,此次使用百度开源的HugeGraph图数据库作为分析工具。分析数据数据均来源于各地卫健委或权威网站公开公布,如北京、石家庄、温州、南昌、宜春等城市。分析场景包括:

  • 疫情中分析,如:病例接触了哪些人以及个人的风险分析、高风险群体分析等;
  • 疫情后分析,如:病毒传播路径、病毒变异、抗体等分析。

新型肺炎传染图谱

本次演示共导入了5类实体数据:包括正常人、病例、地址、交通工具、医院等数据信息,以及各类实体之间的关联关系,如“病例乘坐某交通工具”关系。

数据导入后效果

导入数据详细介绍如下:

1、病例数据:共导入了43条病例数据,包括病例的年龄、性别、感染原因、症状、确诊日期、省市等信息。

2、地址数据:共导入了32条地址数据,比如“裕华区裕翔社区卫生服务中心”,主要包括上述病例出现过的地址。

3、交通工具数据:共导入了6条交通工具数据,如高铁、航班、公交地铁等信息,主要包括上述病例乘坐过的交通工具。(这个数据较少省市公布)

4、医院数据:共导入了10条医院数据,如“北医科大学第四医院”,主要包括上述病例收治的医院。

5、“传染链”视图:共导入了8条传染数据,如“病例甲传染了病例乙”,主要包括上述病例和疑似病例的传染关系。

6、“交通工具链”视图:共导入了8条交通工具乘坐信息数据,比如“病例甲在1月18日乘坐了G310次高铁”,主要包括上述病例和疑似病例的乘坐关系。

7、“出现于场所”视图:共导入了9条病例、19条正常人出现的场所地址信息数据,比如“病例甲在1月21日10点到过XX超市”,主要包括上述病例和正常人的出现的地址关系。

8、某个病例关系链视图:除上述关联关系外,还导入了“感染于”、“现住”、“常住”、“收治于”等关系,主要包括上述病例和疑似病例的各种其它关系。

9、“正常人”数据:共导入了22条正常人数据,包括姓名、年龄、性别、详细地址等信息;另外还导入了28条正常人的轨迹信息,如“某个正常人在1月19日乘坐过G512次高铁”、“某个正常人在1月20日10点到过XX超市”。(注意:正常人数据并不准确,仅供演示参考)

到此,数据建模与导入介绍完毕。接下来基于此数据集进行各种分析场景的演示。

二、分析场景演示

场景1:基本统计信息

本场景中包含了7种基本的统计分析,分别是:分析确诊病例的城市分布情况、病例的省份分布情况、病例的确诊日期分布情况、病例的平均年龄、病例的年龄段分布情况等。(注意:这些统计信息仅仅是基于上述导入数据集计算的)

1、病例的城市分布情况

注:表格部分展示了分析结果,表格底部灰色部分展示了分析计算的查询语句,查询语句使用的是HugeGraph提供的标准Gremlin图查询语言,下同。

石家庄市

18人

北京市

8人

温州市

7人

宜春市

6人

南昌市

4人

g.V().hasLabel('病例').groupCount().by('市')

.unfold().order().by(values,desc)

2、病例的省份分布情况

河北省

18人

江西省

10人

北京市

8人

浙江省

7人

g.V().hasLabel('病例').groupCount().by('省')

.unfold().order().by(values,desc)

3、病例的确诊日期分布情况(Top3)

2020-02-03

7人

2020-01-29

6人

2020-01-20

5人

g.V().hasLabel('病例').groupCount().by('确诊日期')

.unfold().order().by(values,desc).limit(3)

4、病例的平均年龄

平均年龄

44岁

g.V().hasLabel('病例').values('年龄').mean()

5、病例的年龄段分布情况

40~49岁

13人

30~39岁

11人

60~69岁

6人

50~59岁

4人

10~19岁

2人

70~79岁

1人

20~29岁

1人

0~9岁

1人

g.V().hasLabel('病例')

.filter{it.get().property('年龄').isPresent()}

.groupCount().by(values('年龄')

.math('floor(_/10)*10')).unfold()

.order().by(values,desc)

6、最容易的感染传染方式(Top3)

家人亲密接触

11人

探亲

7人

武汉市务工返回

6人

g.V().hasLabel('病例')

.filter{it.get().property('感染原因').isPresent()}

.groupCount().by('感染原因').unfold()

.order().by(values,desc).limit(4)

7、家人亲密接触方式感染的传染关系分布情况

夫妻

4对

母子

3对

父子

2对

父女

1对

岳婿

1对

g.E().hasLabel('传染').groupCount().by('传染关系')

.unfold().order().by(values,desc)

场景2:与确诊病例直接接触过的人(1层关系)

下图中的3个红色点代表已确诊病例,深蓝色点代表正常人,这些人与病例有过接触,有感染风险:

场景2:与病例直接接触过的人

查询语句:

g.V().hasLabel('病例').union(out('乘坐').in('正常乘坐').simplePath(),out('出现于').in('正常出现于').simplePath()).hasLabel('正常人').path()

注:查询语句使用的是HugeGraph提供的标准Gremlin图查询语言,下同。

 

场景3:与确诊病例间接接触过的人(2层关系)

下图中的左上角红色点代表已确诊病例,深蓝色点代表正常人,这些正常人与病例有过直接接触(如田某某),或者间接接触(其它蓝色点,如李某某与田某某在建设大街XX烟酒超市接触过),均有感染风险:

场景3:与病例间接接触过的人

查询语句:

g.V().hasLabel('病例').union(out('乘坐').in('正常乘坐').simplePath().out('正常乘坐').in('正常乘坐').simplePath(),  out('出现于').in('正常出现于').simplePath().out('正常出现于').in('正常出现于').simplePath()).hasLabel('正常人').path()

场景4:某个正常人是否与确诊病例直接或间接接触过

换一个角度,以正常人为中心来考虑并进行分析。下图中的左上角蓝色点是一个正常人“黄某某”,查看他是否有直接或间接和红色点所代表的已确诊病例关系,从图中可以看出,他与病例“sjz0203-21”有直接接触,且与病例“sjz0202-14”有间接接触。

场景4:某个正常人是否与病例有接触

查询语句:

g.V('黄某某').repeat(out('正常乘坐','正常出现于').in('正常乘坐','正常出现于','乘坐','出现于').simplePath()).times(2).emit(hasLabel('病例')).hasLabel('病例').path()

 

场景5:找出所有的超级传播者

我们要从所有的病例里面找到超级传播者,这里假设一个病例若传染了5个以上的人则定义为超级传播者,下图中心的红色点“sjz0202-14”病例即是找出来的超级传播者(传染了“sjz0202-15”和“sjz0203-21”等5个人)。

场景5:找出超级传播者

查询语句:

g.V().hasLabel('病例').where(outE('传染').count().is(gte(5))).order().by(outE('传染').count(),desc).limit(10)

 

场景6:找出超级传播者接触过的人(包括已确诊病例和正常人)

一般来说,超级传播者的风险比较高,与超级传播者接触过的人风险也是比较高的,下图展示了如何找到这些高风险的人:中心的红色点是超级传播者,周围的红色点和蓝色点所代表的人是高风险的人。

场景6:超级传播者接触过的人

查询语句:

g.V().hasLabel('病例').where(outE('传染').count().is(gte(5))).order().by(outE('传染').count(),desc).limit(10).both().choose(hasLabel('病例'),identity(),both('乘坐','出现于','正常乘坐','正常出现于').simplePath()).path()

场景7:病例传染链分析(如疫情后病毒变异分析)

为了在疫情后进行病毒变异分析,需要分析一个病例的上游传染链,即某病例是被谁传染的,上一个人又是被谁传染的,找到直到源头,形成一条传染链。有了传染链之后可以对链上的每个病例的病毒信息进行比对分析(假设每条病例数据里面存储了病毒的身份签名信息)。下图展示了最左边的病例“sjz0205-123”的传染链,传染源头则是最右边的病例“sjz0127-9”。

场景7-1:病例的传染链

查询语句:

g.V('sjz0205-123').repeat(__.in('传染')).until(__.not(__.in('传染'))).path()

下一步计算链上的病毒变异次数,也就是比对链上病例的病毒签名,计算去重之后病毒的种类数量。如下图示例中的结果是变异3次。

场景7-2:传染链的病毒变异次数

查询语句:

g.V('sjz0205-123').repeat(__.in('传染')).until(__.not(__.in('传染'))).path().unfold().values('病毒').dedup().count()

每个病例都有一条传染链,为了分析所有病例的传染链的病毒变异情况,比如找出变异次数最多的那条链,那么需要先找到所有的传染链,然后计算每条链的变异次数,最后比较各条链,找出变异次数最多的一条链。下图展示了所有的传染链。

场景7-3:找出所有传染链

查询语句:

g.V().hasLabel('病例').repeat(__.in('传染')).until(__.not(__.in('传染'))).path().dedup()

下图展示了所有传染链的病毒变异次数。

场景7-4:找出所有传染链的病毒变异次数

查询语句:

g.V().hasLabel('病例').repeat(__.in('传染')).until(__.not(__.in('传染'))).path().dedup() .project('传染链','变异次数').by(unfold().id().fold()).by(unfold().values('病毒').dedup().count())

场景8:病例传染环分析

在疫情早中期,对于某个病例来说,随着病毒传染更多的人,往往会在该病例的周围形成一圈一圈的传染环,比如某病例传染了3个人,假设被传染的人又每个传染3人,则第一层环上包括3人,第二层环上包含9人。为了分析某一层环上病例的病毒变异情况,需要找到该层环上的病例,然后对环上的每个病例的病毒信息进行比对分析。下图展示了病例“sjz0127-9”的第一层和第二层传染环。

场景8:病例的传染环

查询语句:

g.V('sjz0127-9').repeat(out('传染')).times(2).emit().path()

介绍完毕。

原文地址:https://mp.weixin.qq.com/s/9BYk1ONd3gKTzBW0WnxuJw


HugeGraph图数据库介绍

HugeGraph是一款易用、高效、通用的开源图数据库系统(Graph Database,GitHub项目地址), 实现了Apache TinkerPop3框架及完全兼容Gremlin查询语言, 具备完善的工具链组件,助力用户轻松构建基于图数据库之上的应用和产品。HugeGraph支持百亿以上的顶点和边快速导入,并提供毫秒级的关联关系查询能力(OLTP), 并可与Hadoop、Spark等大数据平台集成以进行离线分析(OLAP)。

HugeGraph典型应用场景包括深度关系探索、关联分析、路径搜索、特征抽取、数据聚类、社区检测、 知识图谱等,适用业务领域有如网络安全、电信诈骗、金融风控、广告推荐、社交网络和智能机器人等。

本系统的主要应用场景是解决百度安全事业部所面对的反欺诈、威胁情报、黑产打击等业务的图数据存储和建模分析需求,在此基础上逐步扩展及支持了更多的通用图应用。

HugeGraph图数据库优势

  1. 大规模:支持百亿规模的顶点及边的存储与分析,适合多维度、深链路的复杂分析场景;
  2. 高性能:在图存储和图计算方面进行深度优化,多种批量导入工具,快速完成百亿级数据导入,实现毫秒级的关联关系查询能力(OLTP), 且可与Hadoop、Spark等大数据平台集成以进行离线分析;
  3. 可视化界面:向导式的元数据建模、数据导入操作,降低使用成本;提供直观清晰的可视化分析体验,各类图上的多维定制化查询及丰富的图算法,轻松实现多度查询、路径分析、聚类、推荐等;
  4. 快速导入:支持File/HDFS/MySQL/PG/Oracle/SQLServer等数据源,轻松实现百亿数据的快速导入使用,并提供可视化的导入操作,使用门槛低,方便业务人员操作;
  5. 完善的工具链:提供一键部署、备份、图数据统计、升级、运维等周边工具,并可与SparkX等大数据平台集成进行离线分析。

基于图数据库的新型肺炎传染图谱建模与分析相关推荐

  1. 基于图数据库、图算法、图神经网络的 ID Resolution/ID Mapping 大数据分析方法与代码示例

    本文首发于 NebulaGraph 公众号 "本文是一个基于 NebulaGraph 上的图数据库.图算法.图神经网络的 ID Resolution/ID Mapping 方法综述,除了基本 ...

  2. 【技术分享】李文哲:基于图数据库的大数据应用

    本文整理自DTCC2016主题演讲内容,录音整理及文字编辑IT168@田晓旭@老鱼.如需转载,请先联系本公众号获取授权! 演讲嘉宾 李文哲 普惠金融首席数据科学家 普惠金融(puhuifinance. ...

  3. 基于图数据库的空间频繁并置模式挖掘

    摘要 空间频繁并置模式(SPCP)是一组空间特征的子集,它们的实例在地理空间中频繁地出现在一起.基于内存物化实例邻近关系并搜索模式实例效率较高,但实例信息会被重复存储.图数据库技术能高效地对具有复杂关 ...

  4. 基于图数据库的菜品推荐系统

    基于图数据库的菜品推荐系统 基于图数据库的菜品推荐系统 一.菜品主材提取 二.数据结构 三.系统架构 Here's the table of contents: 基于图数据库的菜品推荐系统 本文来自社 ...

  5. 基于图数据的研报词关联之聚合分析

    基于图数据的研报词关联之聚合分析 基于图数据的研报关键词聚合分析 一.算法介绍 二.数据模型 三.计算关键词上下文聚合相似性 四.关键词上下文聚合性能测试 五.计算聚合相似性[CYPHER优化] 六. ...

  6. 杂波分析 matlab,基于systemview matlab的天基雷达杂波建模与分析

    文章编号!"##$%$&'()(##'*#"%#&+%##+基于-.-/01230415/657的天基 雷达杂波建模与分析 李明史林唐艾宾 )西安电子科技大学西安 ...

  7. 知识图谱-基于图数据库的知识表示常用结构以及Nebula Graph的实现

    目录 一.知识图谱的表示方式 1.1 特定领域的知识图谱 特点 1.2 简单的通用知识图谱 特点 补充 1.3 可自定义本体的通用知识图谱 特点 补充 二.图数据库选型 三.基于Nebula Grap ...

  8. c++图的创建_使用 Amazon Neptune 构建基于图数据库的应用

    在社交网络.推荐引擎和欺诈检测等应用场景中,您需要在数据之间创建关系并快速查询这些关系,此时,图数据库将比关系数据库更具优势.因为使用关系数据库构建这些类型的应用程序面临着许多挑战.您将需要创建多个具 ...

  9. 论文浅尝 | 基于图卷积网络的跨语言图谱实体对齐

    论文笔记整理:谭亦鸣,东南大学博士生,研究兴趣:知识图谱问答 本文提出了一种基于图卷积网络的跨语言实体对齐方法,通过设计一种属性 embedding 用于 GCN 的训练,发现GCN能同时学习到特征 ...

最新文章

  1. 表格(增加行号) http://www.blogjava.net/zeyuphoenix/archive/2010/04/19/318788.html
  2. Python 3.x print 小结
  3. android多屏幕适配资源生成,android – 多屏幕适配相关
  4. 深入分析MFC文档视图结构(项目实践)
  5. Tokenview:当前Filecash网络目前总质押量约为627926枚FIC
  6. 多分类问题的另一种处理策略——softmax回归
  7. linux机器不能上网,Deepin Linux 无法上网
  8. 特征提取、特征描述、特征匹配的通俗解释
  9. NYOJ 371 机器人II
  10. 机房收费系统——项目开发计划书
  11. IDEA 2020 返回上一步快捷键
  12. java虚拟内存不足
  13. walking机器人入门教程-gmapping算法建图
  14. 向量代数:向量加法、共线与共面
  15. ISO14229 理解(一)
  16. Win10 发布UWD图形驱动程序 有助于小幅提高性能
  17. 一文详解 m3u8视频格式与视频秒开优化
  18. 蓝桥杯练习系统答案-数的读法-Python
  19. 【前端三分钟】利用Javascript实现打字效果
  20. 投资者可以自己对接股票交易接口吗?

热门文章

  1. 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏
  2. Apache Druid安装部署手册
  3. 通过计算机组成原理你能得到什么?
  4. matlab 时间坐标轴,matlab坐标轴范围
  5. 学习典范【管理学之七】
  6. [二分查找] [luoguP3500] [POI2010] TES-Intelligence Test
  7. 金融行业必看20部电影
  8. mysql signal_[MySQL]MySQL的signal sqlstate
  9. 【Windows7系统装什么浏览器好用】
  10. VS2015编译适用于XP系统sp3的dll全过程-无需vs2015运行库