[AbutionGraph] 新冠肺炎實時動態時序圖譜建模與分析

作者 | 閉雨哲

出品 | 北京圖特摩斯科技 (thutmose.cn)  ---- 點擊 原文 <--觀看視覺更佳

 

一、背景介紹

新冠肺炎是一種具有最長達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個朋友的名字並不斷更新與保存。

更多應用場景或者任何問題請反饋至郵箱: [email protected]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章