4. 数据获取与来源:公共数据库与文献挖掘
数据获取是靶点图谱质控的第一步,也是基础中的基础。我经常跟团队说一句话:「垃圾进,垃圾出」。你后面质检做得再好,如果源头数据是脏的,整个项目可能都得返工。
这一章我带你实地走一遍常用数据源的获取流程。当然,不光是跑命令,更多是我踩过的坑和总结出的习惯。
4.1 核心公共数据库概览
做药物靶点图谱,三个数据库绕不开:DrugBank、ChEMBL、TCGA。它们的定位不同,质量特征也差很多。
| 数据库 | 数据类型 | 更新频率 | 质控常见问题 |
|---|---|---|---|
| DrugBank | 获批药物 + 靶点关联 | 每年1-2次 | 靶点标识符版本不一致 |
| ChEMBL | 活性数据 + 靶点 | 每季度 | 活性值单位不统一,缺失 |
| TCGA | 基因组 / 转录组 / 临床 | 不定期 | 样本ID错乱,批次效应 |
我个人习惯先把这三个库的元数据拉下来,建一个快照。这么做的好处是:一旦后面发现数据对不上,能很快定位是数据更新导致的差异,还是我处理过程出了问题。
4.2 DrugBank:手动下载与解析
DrugBank提供XML格式的完整数据包,但必须是注册用户。嗯,这里要注意:免费下载版和商用版字段不完全一样。
我记得有一次项目急着用,直接拿了免费版跑流程。结果发现「DrugBank ID」跟文献里对不上,浪费了两天时间。后来核实才知道,免费版里不少靶点标注的是「UniProt ID」,而不是内部ID。
推荐的获取方式:
# 登录后手动下载,不要用爬虫
# DrugBank 对自动化访问有限制
# 下载最新 full database XML (~1.2 GB)
# 解析用 Python + lxml
import lxml.etree as ET
tree = ET.parse('drugbank_all_full_database.xml')
root = tree.getroot()
ns = {'db': 'http://www.drugbank.ca'}
targets = root.findall('.//db:target', ns)
4.3 ChEMBL:API 与批量下载
ChEMBL 是我个人最喜欢用的。为什么?它开放、标准化、有 API。说白了,你可以用几条命令就把想要的靶点-化合物活性数据拉下来,不用跟几百 MB 的 XML 搏斗。
获取流程大致是:
- 用 ChEMBL web API 查询目标靶点
- 拉取关联的活性数据
- 校验 pChEMBL 值、标准类型和单位
举个实际例子:
# 使用 chembl_webresource_client
from chembl_webresource_client.new_client import new_client
molecule = new_client.molecule
target = new_client.target
# 根据 UniProt ID 查靶点
t = target.get('P00533') # EGFR
# 拉取活性数据
activities = new_client.activity
res = activities.filter(target_chembl_id=t['target_chembl_id'])
# 只保留 IC50,单位 nM
clean = [r for r in res if r['standard_type'] == 'IC50'
and r['standard_units'] == 'nM']
4.4 TCGA:临床与突变数据的获取
TCGA 的数据量最大,但也是最容易出问题的。我个人经验是:不要直接使用原始文件,最好走官方推荐的 GDC Data Portal 或 TCGA-Biolinks 包。
举个例子,下载某个癌种的体细胞突变信息:
# R 语言,使用 TCGAbiolinks
library(TCGAbiolinks)
query <- GDCquery(
project = "TCGA-LUAD",
data.category = "Simple Nucleotide Variation",
data.type = "Masked Somatic Mutation",
workflow.type = "Aliquot Ensemble Somatic Variant Merged and Masked"
)
GDCdownload(query)
data <- GDCprepare(query)
你想想看,如果直接去 AWS 公开存储桶里扒文件,有可能拿到非标准化的 VCF 格式。不同中心提交的 VCF 字段名都不一样,后期整合起来很痛苦。
4.5 文献挖掘:手动 vs 自动化
公共数据库之外,还有一大块数据来源是文献。很多靶点-疾病关联,尤其是比较新的,数据库还没收录。
文献挖掘有两条路:
- 手动阅读 + 标准化录入:准确率高,但效率低。推荐用于核心靶点的核查。
- 自动化 NER + 关系抽取:效率高,但噪声大。适合大规模筛选。
我在一个项目中试过用 PubTator 的 API 批量提取基因-疾病关联。结果发现,同样的基因名在不同上下文里可能被识别成药物或化合物。这种误识率必须人工复核。
# PubTator API 查询示例
import requests
pmid_list = ["12345678", "23456789"]
url = "https://www.ncbi.nlm.nih.gov/research/pubtator-api/publications/export/biocxml"
response = requests.post(url, data={"pmids": ",".join(pmid_list)})
print(response.text)
4.6 多源数据整合策略
数据各自拉下来之后,最头疼的其实就是整合。不同库用的 ID 体系不同,字段语义也不同。
我建议的流程如下:
- ID 映射: 统一用 Ensembl Gene ID 或 UniProt ID 作为主键。
- 去重: 根据同一篇文献 / 同一个实验识别重复记录。
- 冲突处理: 如果一个靶点在不同库里关联的疾病不同,优先采信更高证据等级的源(如 FDA 标签 > 文献 > 数据库)。
下面这张图概括了整个数据获取与整合的逻辑链:
4.7 质控要点小结
数据获取阶段,我个人最看重的质控点有三个:
- 版本锁定: 所有数据源必须记录拉取时的版本号或日期。
- 格式校验: 用 schema 或约定好的字段规范做自动化检查。
- ID 无歧义: 统一 ID 体系,避免出现「同一个基因,三个名字」的情况。
你想想看,这些事看起来琐碎,但真到项目中期,数据越堆越多,早期的一个小疏忽就可能被放大。我宁愿在获取阶段多花半天做校验,也不愿意后期花一周去排查。