2. 数据来源与采集策略:公开数据库、文献挖掘、内部实验数据

做ADMET建模,数据从哪里来?这是所有工作的起点。我见过不少项目,算法调得再好,最后模型不准,回头一查,根子就在数据来源上出了问题。

今天这部分,我会带着大家梳理三种主要的数据来源:公开数据库、文献挖掘和内部实验数据。每种方法怎么用、有什么坑、我踩过哪些雷,都会讲到。

2.1 公开数据库:拿现成的,但别直接入模

公开数据库是最快的搞数据途径。你想想看,ChEMBL、PubChem、Tox21这些平台,存了几千万条化合物活性数据,而且是免费开放。但我个人的习惯是:用得越方便,质控越要较真。

ChEMBL

ChEMBL是欧洲生物信息学研究所维护的数据库,收录了药物靶点结合数据、ADMET数据、毒理数据。它的优点是高度结构化,每次发布都会做标准化。

  • 数据规模:目前有200万+化合物,10万+靶点,1.8亿+活性数据点。
  • 数据类型:IC50、Ki、EC50、Kd,以及溶解度、渗透性等ADET标签。
  • 下载方式:提供SQLite dump、SDF、CSV,也支持REST API。

我记得刚开始做项目时,从ChEMBL下载了人的CYP2D6抑制数据。看起来有1万多条,但一跑质控脚本,发现问题不少:有些值是"IC50 > 10uM"这种半定量,有些是"not active"这样模糊的描述。最终能用进建模的不到3000条。

我的小习惯:接到ChEMBL数据,一定先跑一遍标准字段映射脚本。把assay_type、bao_label、standard_relation这些字段筛一遍,再按置信度打分。

PubChem

PubChem数据量比ChEMBL还大,但质量控制参差不齐。因为它允许外部实验室直接提交数据,重复性差是常见问题。

对比维度ChEMBLPubChem
数据清洗程度高(官方有标准化流程)中(依赖提交方,官方做基础校验)
重复化合物处理已做合并存在多个CID对应同一结构
ADMET数据完整性较好分布稀疏,很多实验只有部分属性
推荐场景靶点结合建模、ADET预测初筛、大规模虚拟筛选

怎么拉PubChem数据?他们那个PUG REST API好使。

# 示例:按SMILES查询化合物CID
curl -X POST "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/smiles/cids/JSON" \
  -d "smiles=CCO"

# 返回示例
{"IdentifierList":{"CID":[702]}}

# 再查这个CID的溶度数据
curl "https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/702/JSON"
注意:PubChem的API有频率限制,一次性查太多会被封。我一般每次查1000个,间隔5秒。批量搞的话,建议用他们的FTP下载全量快照,本地建库。

Tox21

Tox21是美国EPA、NIH和FDA联合搞的项目。它主要关注内分泌干扰、细胞毒性、应激通路激活这些。

它最大的特点就是标准化。所有实验都是96/384孔板,用统一的浓度区间(0.1 nM-100 uM),活性判定也有明确的cutoff。说白了,它的数据整理质量,比一般数据库高一个档次。

但是有一点要注意:Tox21的化合物库是有偏的。它主要覆盖的是农药、工业化学品这些,药物相关结构很少。你用它的数据训练模型,预测新的药物类分子,泛化能力可能打折扣。

2.2 文献挖掘:吃螃蟹,但核要挑干净

公开数据库覆盖不了的数据,只能去文献里挖。我之前做过一个项目,要建血浆蛋白结合率的模型,ChEMBL和PubChem里只有3000条可用的,远远不够。

最后我们团队决定做文献挖掘。这里头门道很多,简单讲几个策略:

  • 关键词搜索:PubMed、Google Scholar、ACS、RSC,用"plasma protein binding"+"in vitro"+"human"这种组合。
  • 表格提取:很多文献把数据放在PDF表格里。传统方法是用Tabula这类工具,但现在AI辅助抽取效果也不错。
  • 补充材料:别只看正文,很多期刊的ESI补充材料里包含全量数据,而且通常是Excel或CSV格式。
  • 交叉验证:同一条数据出现在两篇或更多文献里,才能复用。
找文献的数据,我一般会跟建模型的人定一个规则:每条数据必须能溯源到原始论文。模型预测值偏了,我们得知道是文献测量误差,还是真正的新机制。

文献挖掘的常见坑

  • 单位不统一:Mg/mL、ng/mL、uM、nM,同一个值可能用几种单位,必须显式归一化。
  • 实验条件不完整:温度、pH值、缓冲液类型、血清来源,这些缺失了,数据就没法交叉比较。
  • 化合物命名混乱:同一个化合物可能有通用名、商品名、CAS、SMILES。我建议只用标准化InChI Key做唯一键。

嗯,这里要特别提一句,我一直用rdkit.Chem.MolFromSmiles做标准化,然后再转成InChI Key。这样可以规避名字歧义的问题。

2.3 内部实验数据:最可靠,也最麻烦

如果公司有自己的湿实验室,那内部数据是最宝贵的。因为实验流程、仪器、批次都是可控的,不像外部数据那样各种不确定性。

但是,内部数据有个致命伤:数据孤岛。我见过不少公司,每个课题组用各自的Excel表格,命名规范不一致、单位不一致、日期格式不一致。想统一起来,比重新做一轮实验还费劲。

内部数据整合的三个要点

  1. 制定数据录入标准:从ELN(电子实验记录本)入手,强制使用下拉菜单。IC50单位只能选"nM"或"uM",不能自由填写。
  2. 统一化合物注册:每个化合物注册到内部管理系统,分配唯一ID、SMILES、CAS。
  3. 记录实验元数据:实验日期、操作人、仪器型号、批次号。模型预测不准时,这些元数据是排查的第一入口。

我遇到过这样一个案例:同一个化合物,A课题组测的CYP3A4抑制IC50是2uM,B课题组测的是20uM。大家吵半天,最后发现A组用的底物是睾酮,B组用的是咪达唑仑。你看,底物不同,结果能差10倍。所以内部数据质的控制,不只是格式问题,更是对实验设计的理解问题。

千万不要把内部不同来源的数据直接融合在一起!批次效应是大忌。最好是每个批次建一个子集,建模时加入batch_id作为协变量,或者做批量校正。

2.4 三种来源怎么选?看这张图就明白了

数据来源与采集策略总览 公开数据库 文献挖掘 内部实验数据 API/FTP下载 标准化字段提取 PDF/HTML解析 表格抽取 & 交叉验证 ELN对接 / 数据导出 统一化合物注册 数据质控:去重 / 单位归一化 / 结构标准化 / 批次校正 输出:标准SMILES + 实验值 + 元数据 统一格式化ADMET数据库 可直接用于建模训练、验证、测试 注意:三种来源各有偏向,建模前必须做分布检验,防止预测偏差

2.5 不同来源的融合策略

大部分的模型最终都会把几个来源的数据合在一起用。问题来了:怎么保证融合后数据是一致的?

  • 结构匹配必须用同一套算法:我推荐RDKit的MolFromSmiles + CanonSmiles,确保同一化合物在不同数据源里不被当成两个实体。
  • 实验值的冲突处理:同一化合物、同一属性、不同来源,差异超过2倍,就标记为"冲突"并丢弃;差异在20%以内的,取几何均值。
  • 分布对齐:把内部数据、文献数据和公开数据库的数据分别做个分布图。如果某一部分的活性值范围明显不同,就要考虑是否加批处理或做校正。
有一次我在融合两个来源的hERG抑制数据时,发现内部数据的IC50普遍比ChEMBL大10倍。查了半天,原来是内部用的电生理法,ChEMBL大多用的是结合实验。后来我们统一只保留了电生理的数据,才把模型跑通。