第4章 生物医学数据源:DrugBank、UniProt、PDB、CTD、GeneCards

搞知识图谱,最怕什么?
怕数据源不靠谱。
你再好的模型、再漂亮的图结构,喂进去垃圾数据,出来的一定是垃圾知识。

这一章我就带你过一遍药物靶点领域最核心的五个数据源。我自己的习惯是:
每做一个靶点相关的图项目,都会先在这几个库里跑一遍“数据体检”。

我们先看一张总览图,把这些库的定位和关系搞清楚。

生物医学数据源知识体系 DrugBank UniProt PDB CTD GeneCards 说明 DrugBank 是“药物-靶点”关系的核心枢纽。 UniProt 是蛋白质(靶点)的标准ID和功能注释源。 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药效学描述丰富节点属性
避坑指南: 下载DrugBank的XML格式时,注意带“-approved”标签的才是获批药物。我有一回没过滤,把实验阶段的化合物也拉进去了,结果图里全是噪声。

4.2 UniProt —— 蛋白质的身份证

DrugBank里提到的靶点通常是个蛋白质名。但你想想看,“EGFR”这个词在PubMed、PDB、GeneCards里可能全是不同的ID体系。怎么统一?UniProt就是干这个的。

UniProt给每个蛋白质分配一个稳定的UniProt Accession(比如P00533对应EGFR)。它还附带功能描述、结构域、亚细胞定位、序列等信息。说白了,这是你做实体对齐的基石。

我建议的映射流程:

  1. 从DrugBank拿到靶点名称(或Gene Symbol)
  2. 用UniProt的ID Mapping工具(或API)查找到对应的Accession
  3. 把Accession作为图中Target节点的唯一标识
  4. 从UniProt的JSON/XML中提取功能描述,补到节点属性里
为什么这样做? 我在一个项目中,发现同一篇论文里作者用“HER2”和“ErbB2”指代同一个靶点。如果没有UniProt来做标准化,构建出来的图会出现两个孤立节点——这根本没法用。

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Å的条目使用。

我曾经在做一个激酶靶点项目时,大量用了PDB里的结合模式数据来训练一个关系分类器。后来发现,分辨率大于3Å的结构噪声太大,还导致模型学习错误的结合模式。所以,质量过滤非常关键。

4.4 CTD —— 化学-基因-疾病关联

CTD(Comparative Toxicogenomics Database)是个宝库。它手工整理了大量的化学物质-基因/蛋白质相互作用以及化学物质-疾病关系。注意,它的“化学物质”包括药物,也包括环境毒物。
它的数据是经过专家审核的,置信度很高。

CTD表结构与图对应关系

CTD表对应图中的边类型属性示例
chemical_gene_ixnChemical --interacts_with--> GeneInteractionTypes(如 increases expression)
chemical_diseaseChemical --associated_with--> DiseaseDirectEvidence, InferenceScore
gene_diseaseGene --associated_with--> DiseaseDiseaseID, Source

做疾病-靶点-药物三角关系时,CTD是填补空白的利器。你自己的新闻稿药物在DrugBank里可能还没有标注全疾病,但CTD里大概率已经收录了。

注意! CTD的数据更新频率不如其他来源快。我建议把它作为静态参考快照加载,而不是每天更新的热数据。否则你的图会频繁地发生小的修订,不好维护。

4.5 GeneCards —— 基因中心数据库

GeneCards把所有跟基因相关的信息都汇总到一个卡片上:你搜一个基因,会看到它的别名、功能、相关疾病、表达谱、通路、药物、变异、参考文献……
说白了,它是知识图谱构建中的“信息聚合器”。

但有一点要注意:GeneCards的数据是自动集成和计算生成的,不像CTD那样全部手工审核。所以用它的时候,需要加一个置信度字段到你的图里。

我一般这么用:

  1. 从UniProt或DrugBank拿到Gene Symbol后,到GeneCards里拉取完整的别名列表。
  2. 把别名作为图中“Target”节点的synonyms属性存储。
  3. 在实体对齐时,把这些别名作为候选匹配项。

你也别小看这一步。很多药物靶点在文献里用的是别名(比如用“c-erbB-2”代指“EGFR-2”),不做别名扩展,你的图就漏掉了大量关系。

4.6 数据源对比小结

这几个数据源各有侧重,我把它们的核心特征列了个表,方便你选择:

数据源数据类型核心标识符审核级别图构建角色
DrugBank药物-靶点关系DrugBank ID专家审核核心种子边
UniProt蛋白质注释UniProt Acc.专家审核靶点标准化与属性
PDB三维结构PDB ID结构验证结构属性补充
CTD化学-基因-疾病关联MESH CUID/GeneID专家审核疾病-靶点关系
GeneCards基因综合信息Gene Symbol自动+部分审核别名扩展与泛化检索
我自己的组合建议:
做药物靶点知识图谱的起手式:
  1. 用DrugBank的药物-靶点关系作为种子边。
  2. 用UniProt的Accession来统一靶点ID。
  3. 从CTD拉取疾病-基因关联来扩展图的结构。
  4. 用PDB的结构数据来增加靶点节点的属性。
  5. 用GeneCards的别名来做实体对齐时的辅助召回。
这样搭起来的图,既有权威核心,又有横向覆盖,还留了扩展余地。

嗯,数据源就讲这么多。在实际操作中,你会发现每个数据源都有自己的API速率限制、数据格式差异、版本更新的频率等等。这些细节在后面的章节里碰到具体场景时,我会一个个给你讲明白。