第4章 生物医学数据源:DrugBank、UniProt、PDB、CTD、GeneCards
搞知识图谱,最怕什么?
怕数据源不靠谱。
你再好的模型、再漂亮的图结构,喂进去垃圾数据,出来的一定是垃圾知识。
这一章我就带你过一遍药物靶点领域最核心的五个数据源。我自己的习惯是:
每做一个靶点相关的图项目,都会先在这几个库里跑一遍“数据体检”。
我们先看一张总览图,把这些库的定位和关系搞清楚。
4.1 DrugBank —— 药物-靶点关系的黄金标准
DrugBank 是我个人最常用的起点。
它把药物和靶点的对应关系整理得很清楚。每条记录都包含药物名、结构、靶点、作用机制、代谢通路等信息。
我刚开始做知识图谱时,总想着要自己从头爬PubMed来提取关系。后来发现,90%的主流药物-靶点关系在DrugBank里都已经是结构化的了。直接拿来做种子数据,效率高得不是一星半点。
核心数据模型(简化为三元组)
(Drug) --[targets]--> (Target/Protein)
(Drug) --[has_indication]--> (Disease)
(Drug) --[mechanism_of_action]--> (Mechanism)
我建议你重点关注这几个字段:
| 字段 | 说明 | 图构建价值 |
|---|---|---|
| DrugBank ID | 唯一标识符,如 DB00001 | 作为图中的节点ID |
| Target ID | 关联的靶点列表 | 建立药物→靶点边 |
| Action | 作用类型(inhibitor, agonist等) | 作为边的属性 |
| Pharmacodynamics | 药效学描述 | 丰富节点属性 |
4.2 UniProt —— 蛋白质的身份证
DrugBank里提到的靶点通常是个蛋白质名。但你想想看,“EGFR”这个词在PubMed、PDB、GeneCards里可能全是不同的ID体系。怎么统一?UniProt就是干这个的。
UniProt给每个蛋白质分配一个稳定的UniProt Accession(比如P00533对应EGFR)。它还附带功能描述、结构域、亚细胞定位、序列等信息。说白了,这是你做实体对齐的基石。
我建议的映射流程:
- 从DrugBank拿到靶点名称(或Gene Symbol)
- 用UniProt的ID Mapping工具(或API)查找到对应的Accession
- 把Accession作为图中Target节点的唯一标识
- 从UniProt的JSON/XML中提取功能描述,补到节点属性里
4.3 PDB —— 三维结构数据
做知识图谱不一定非得要结构数据,但如果你研究的是药物与靶点的结合位点,PDB就非常重要了。它提供蛋白质-配体复合物的三维坐标信息。
嗯,这部分数据比较重,通常不做全量接入。我一般只拉取和已知靶点相关的、分辨率足够好的结构来辅助验证药物-靶点关系。
使用示例:
用PDB的REST API查询某个靶点对应的所有结构:
# 查询P00533(EGFR)对应的PDB条目ID
curl "https://www.ebi.ac.uk/pdbe/api/pdb/entry/summary/P00533"
返回内容中会包含解析度(resolution),一般挑< 2.5Å的条目使用。
4.4 CTD —— 化学-基因-疾病关联
CTD(Comparative Toxicogenomics Database)是个宝库。它手工整理了大量的化学物质-基因/蛋白质相互作用以及化学物质-疾病关系。注意,它的“化学物质”包括药物,也包括环境毒物。
它的数据是经过专家审核的,置信度很高。
CTD表结构与图对应关系
| CTD表 | 对应图中的边类型 | 属性示例 |
|---|---|---|
| chemical_gene_ixn | Chemical --interacts_with--> Gene | InteractionTypes(如 increases expression) |
| chemical_disease | Chemical --associated_with--> Disease | DirectEvidence, InferenceScore |
| gene_disease | Gene --associated_with--> Disease | DiseaseID, Source |
做疾病-靶点-药物三角关系时,CTD是填补空白的利器。你自己的新闻稿药物在DrugBank里可能还没有标注全疾病,但CTD里大概率已经收录了。
4.5 GeneCards —— 基因中心数据库
GeneCards把所有跟基因相关的信息都汇总到一个卡片上:你搜一个基因,会看到它的别名、功能、相关疾病、表达谱、通路、药物、变异、参考文献……
说白了,它是知识图谱构建中的“信息聚合器”。
但有一点要注意:GeneCards的数据是自动集成和计算生成的,不像CTD那样全部手工审核。所以用它的时候,需要加一个置信度字段到你的图里。
我一般这么用:
- 从UniProt或DrugBank拿到Gene Symbol后,到GeneCards里拉取完整的别名列表。
- 把别名作为图中“Target”节点的
synonyms属性存储。 - 在实体对齐时,把这些别名作为候选匹配项。
你也别小看这一步。很多药物靶点在文献里用的是别名(比如用“c-erbB-2”代指“EGFR-2”),不做别名扩展,你的图就漏掉了大量关系。
4.6 数据源对比小结
这几个数据源各有侧重,我把它们的核心特征列了个表,方便你选择:
| 数据源 | 数据类型 | 核心标识符 | 审核级别 | 图构建角色 |
|---|---|---|---|---|
| DrugBank | 药物-靶点关系 | DrugBank ID | 专家审核 | 核心种子边 |
| UniProt | 蛋白质注释 | UniProt Acc. | 专家审核 | 靶点标准化与属性 |
| PDB | 三维结构 | PDB ID | 结构验证 | 结构属性补充 |
| CTD | 化学-基因-疾病关联 | MESH CUID/GeneID | 专家审核 | 疾病-靶点关系 |
| GeneCards | 基因综合信息 | Gene Symbol | 自动+部分审核 | 别名扩展与泛化检索 |
做药物靶点知识图谱的起手式:
- 用DrugBank的药物-靶点关系作为种子边。
- 用UniProt的Accession来统一靶点ID。
- 从CTD拉取疾病-基因关联来扩展图的结构。
- 用PDB的结构数据来增加靶点节点的属性。
- 用GeneCards的别名来做实体对齐时的辅助召回。
嗯,数据源就讲这么多。在实际操作中,你会发现每个数据源都有自己的API速率限制、数据格式差异、版本更新的频率等等。这些细节在后面的章节里碰到具体场景时,我会一个个给你讲明白。