探索 PrimeKG — 医学和医疗保健知识图谱
本文将简要介绍论文“构建知识图谱以实现精准医疗”(Chandak 等,2023)[1](即 PrimeKG),加载图数据并进行可视化,使用 Neo4j Desktop — 一种图数据库。
介绍
一切都是相互关联的。因此,用图形建模世界是一个自然的选择。例如,MONDO 疾病本体 [2] — 一个知识图谱,由数百万个实体组成,从基因到疾病;或者基因本体 [4] — 描述分子功能、细胞成分和生物过程。此外,还有数据银行,例如疾病基因网络 (DisGeNet) [3] — 探索基因与疾病的关联;Orphanet — 一部罕见疾病的百科全书。如上所示,这种医学和健康知识是零散的。PrimeKG [1] 是一个尝试…
…整合了 20 个高质量资源,以描述 17,080 种疾病及其 4,050,249 个关系,代表十个主要生物学尺度,包括与疾病相关的蛋白质扰动、生物过程和途径、解剖和表型尺度,以及所有已批准药物及其治疗作用,显著扩展了之前在疾病根源知识图谱中的努力。
让我们开始吧!😀
准备与加载
准备
- 按照链接访问 PrimeKG 原始数据 [5]。下载 “edges.csv” (368.6 MB) 和 “nodes.csv” (7.5 MB)。为什么?→ 还有其他文件,例如 “kg.csv”,它包含完整图(每行格式为 node1-relation-node2)。但是使用单独的节点和边文件导入图是 最快和最有效的方法 [8]。
- 下载并安装 Open JDK。我通常使用 Eclipse Temurin [7]。选择版本 17 (LTS) 或 21 (LTS)。安装后,检查
JAVA_HOME环境变量是否指向正确的 JDK 位置。为什么?→ 我们稍后需要 JDK 来运行 Neo4j 中的 “neo4j-admin.bat”。 - 使用 Notepad++ 将 “edges.csv” 的标题更改为
:TYPE,display_relation,:START_ID,:END_ID。将 “nodes.csv” 的标题更改为node_index:ID,node_id,:LABEL,node_name,node_source。为什么?→ Neo4j 导入工具 [8] 要求 CSV 文件的标题遵循特定的指南,例如哪个列是 ID。 - 使用 Notepad++ 在 “nodes.csv” 中将 “/” 替换为 “__”。为什么?→ Neo4j 节点名称必须遵循某些限制。
- 下载并安装 Anaconda ,或者至少安装带有 Pandas 库的 Python。为什么?→ 不幸的是,我发现 “edges.csv” 包含重复边,这意味着我们有一行 CSV 说 “节点 A 指向节点 B,关系为 _relation X_”,还有另一行说 “节点 B 指向节点 A,关系为 _relation X_”。**我们打算在 Neo4j 中构建一个 无向图 **。因此,我们必须删除重复边。我只知道如何使用 Python/Pandas 来做到这一点! 😅
1 | import pandas as pd |
加载
- 打开 Neo4j Desktop。创建一个新项目。添加“本地 DBMS”。寻找三个点:点击它,然后选择“打开文件夹”,再选择“DBMS”。
- Windows 资源管理器将打开 DBMS 所在的位置。在我的情况下,它是
C:\Users\[Username]\.Neo4jDesktop\relate-data\dbmss\dbms-886ac993–25d9–493a-922b-2d41e29b6446。 - 在那里打开 CMD。现在使用下面的命令。记得适当更改
[path]。
1 | .\bin\neo4j-admin database import full primekg --nodes="D:\[path]\nodes.csv" --relationships="D:\[path]\edges2.csv" --trim-strings=true |
- 在 Neo4j Desktop 中,点击“启动”按钮,根据已创建的 DBMS。然后点击“打开”以打开 Neo4j 浏览器。
- 创建数据库“primekg”。然后将其更改为使用该数据库作为 活动 数据库。(这些是 Cypher 查询 )
1 | CREATE DATABASE primekg |
在 Neo4j 浏览器中,输入命令以验证一切是否正常:
1 | MATCH (n) RETURN COUNT(n) |
该命令应返回 129375。这是图中的节点数量。然后使用以下命令进行进一步测试:
1 | MATCH ()-[r]-() RETURN COUNT(DISTINCT r) |
它应返回 4050249。在论文的第 2 页 [1] 中,我们读到:
在 129,375 个节点和 4,050,249 个关系中,PrimeKG 捕获了十个主要生物尺度的信息。
一切都已设置好!
可视化与探索
可视化
要获取数据库模式,我们可以在 Neo4j 浏览器中使用 CALL db.schema.visualization()。会显示一个可视化图形:
PrimeKG 模式
探索
要获取所有节点类型,请使用 CALL db.labels()。结果:
1 | ╒════════════════════╕ |
在论文[1]的第5页中,我们可以看到节点列表,并且它们是匹配的!

要获取所有关系类型,请使用 CALL db.relationshipTypes()。结果:
1 | ╒════════════════════════════╕ |
在论文[1]的第9页中,我们看到了关系类型的列表,它们(可能)是匹配的!😅
尽管图表复杂且完整,我对“疾病-暴露”和“疾病-疾病”之间的关联感兴趣。例如,我想知道糖尿病的环境风险因素可能是什么。查询:
1 | MATCH (e:exposure)-[:exposure_disease]-(d:disease) |
结果:
1 | ╒═════════════════════════════╤══════════════════════════════════════╕ |
对“双酚A”(BPA——一种用于生产聚碳酸酯塑料的化学物质)与“糖尿病”之间的关联进行一些合理性检查:论文[9]显示:
几项流行病学研究揭示了双酚A与 胰岛素抵抗的发展和葡萄糖稳态受损之间的显著关联……
备注
原始知识图谱以及PrimeKG所组成的数据库确实会随着时间而变化。如何从崩溃中重建PrimeKG(即更新它)在[6]中有建议。
“细节决定成败。” 综合多个数据源可能会带来挑战,因为不同的数据源可能会对疾病使用(略微)不同的名称。即使在同一来源中,“MONDO包含许多没有明显临床相关性的重复疾病实体。出于这个原因,我们希望将MONDO中的疾病分组为医学相关的实体”,正如Chandak等人所指出的[1]。然后,作者转向利用ClinicalBERT嵌入,设定截止阈值为0.98来确定相似性。这只是处理来自各种来源的原始数据的众多步骤之一。
原始的“edges.csv”包含有向边。起初,我认为这可能有某种假设,因为有向边能够有意义地指示“A影响B”(而不是反过来)。然而,当将完整的“edges.csv”加载到Pandas Dataframe中时,行数是论文中预期行数的_完美两倍_(8,100,498对比4,050,249)。所以我认为作者偶然得到了有向边,而不是经过仔细考虑。
有向边(在“edges.csv”中)—— 一个示例。最左侧的数字是行索引。
总之,PrimeKG不仅对医学研究人员有益,对机器学习开发人员也同样有益,因为他们可以利用这样的图进行特征工程或图嵌入 。 🧐
参考文献
[1] 建立知识图谱以实现精准医疗. Chandak 等 (2023) ( https://www.nature.com/articles/s41597-023-01960-3 )
[2] MONDO 疾病本体 ( https://monarchinitiative.org/ )
[3] DisGeNET ( https://disgenet.com/ )
[4] 基因本体 ( https://geneontology.org/ )
[5] PrimeKG 数据 ( https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/IXA7BM&version=2.1 )
[6] PrimeKG 源代码 ( https://github.com/mims-harvard/PrimeKG )
[7] Eclipse Temurin ( https://adoptium.net/temurin/releases/ )
[8] Neo4j 导入 ( https://neo4j.com/docs/operations-manual/current/tools/neo4j-admin/neo4j-admin-import/#import-tool-syntax )
[9] 双酚A与2型糖尿病:流行病学、功能和早期生活因素的综述 ( https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7830729/ )
知识图谱
知识图谱嵌入
Neo4j
Neo4j 图数据库
图嵌入
- 标题: 探索 PrimeKG — 医学和医疗保健知识图谱
- 作者: Barry
- 创建于 : 2024-07-24 09:01:02
- 更新于 : 2024-08-31 06:59:45
- 链接: https://wx.role.fun/2024/07/24/b0f8aaa2c78849f5b175a0d55f9b594b/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。