4. 数据源识别与接入
在药物研发数据整合工程中,数据源识别与接入是整个数据流水线的起点。如果源头没有理清,后续的清洗、标准化和建模都会建立在不可靠的基础上。本节聚焦三类典型数据源:以活性数据为核心的 ChEMBL、以化合物结构与属性为核心的 PubChem、以三维结构为核心的 PDB,以及企业内部的实验记录系统(如电子实验记录本 ELN、LIMS 中的检测结果)。目标不是简单罗列接口,而是建立一套可复用的对接方法:先识别数据源的类型与边界,再确定接入方式,最后把外部数据与内部记录在实体层面关联起来。
一、先识别数据源的类型与边界
不同数据源在“数据形态”和“更新方式”上差异很大,接入策略必须据此区分。ChEMBL 是经过人工审编的活性数据库,核心实体是化合物(molecule)、靶点(target)、活性测定(assay)和活性值(activity),提供 REST API 与批量下载(如 chembl_34 的 SQLite/PostgreSQL dump)。PubChem 更偏向化合物与生物测定的公共仓库,包含 CID、SID、AID 等标识体系,适合做结构检索、属性补全和交叉引用。PDB 则以实验解析的三维结构为单位,核心是 PDB ID、链、配体、分辨率与方法,适合结构生物学场景。内部实验记录系统通常是事务型数据库或 ELN 导出文件,字段命名自由、单位不统一,但包含最关键的“本企业实测数据”。
识别阶段要回答三个问题:该源提供的主键是什么?它覆盖哪些实体?它的更新频率和许可约束如何?例如 ChEMBL 的活性记录以 activity_id 为主键,关联 molecule_chembl_id 与 target_chembl_id;PubChem 的化合物以 CID 为稳定标识;PDB 以 4 字符 PDB ID 为入口。内部系统往往以实验编号或样品编号为主键,需要额外建立映射。
二、接入方式的选择与实现
接入方式取决于数据量、更新频率和实时性要求。对于 ChEMBL,如果只需要特定靶点或特定化合物的活性数据,用 REST API 按条件查询更高效;如果需要全库分析,则下载官方 dump 导入本地 PostgreSQL 更合适。以下是一个 ChEMBL API 查询示例,按靶点获取活性记录:
GET https://www.ebi.ac.uk/chembl/api/data/activity.json
?target_chembl_id=CHEMBL203
&standard_type=IC50
&limit=100
&offset=0
返回的 JSON 中每条记录包含 molecule_chembl_id、standard_value、standard_units、assay_chembl_id 等字段。接入时要注意分页(limit/offset)和速率限制,建议在客户端做重试与缓存。PubChem 的接入可以通过 PUG-REST 按 CID 获取属性,例如:
GET https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2244/property/
MolecularFormula,MolecularWeight,CanonicalSMILES/JSON
PDB 的接入通常以文件为单位,通过 https://files.rcsb.org/download/1ABC.cif 下载 mmCIF 文件,再用 Bio.PDB 或 gemmi 解析链、配体和分辨率。内部实验记录系统的接入则更依赖具体系统:如果 ELN 提供数据库只读账号,可以直接查询;如果只有导出文件,则需要约定 CSV/Excel 模板,固定列名和单位。
三、实体映射:把外部数据和内部记录连起来
接入的难点不在“取到数据”,而在“把同一实体在不同源中认出来”。化合物层面,最可靠的做法是用 InChIKey 做结构匹配。InChIKey 是 InChI 的固定长度哈希,前 14 位对应骨架连接性,后 10 位对应立体化学和同位素信息。内部注册表中的 SMILES 可以先转成 InChIKey,再与 ChEMBL、PubChem 中的 InChIKey 比对。如果内部记录只有化合物名称,则需要先做名称到结构的解析,这一步往往需要人工复核。
靶点层面,ChEMBL 使用 target_chembl_id,PDB 使用 PDB ID 和链标识,内部实验记录可能只写基因名或蛋白名。建议建立一张映射表,字段包括:内部靶点编号、基因名、UniProt AC、ChEMBL target ID、PDB ID、物种、备注。映射表一旦建立,后续接入就可以自动关联。
四、对接流程中的关键检查点
一个可复用的对接流程通常包含以下检查点。第一,确认主键与标识体系:ChEMBL 用 chembl_id,PubChem 用 CID,PDB 用 PDB ID,内部系统用内部编号,四者不能混用。第二,确认单位与量纲:ChEMBL 活性值可能以 nM、uM 或 % 表示,内部实验记录可能用 mg/mL 或 % inhibition,接入时必须统一到同一单位体系并记录原始单位。第三,确认时间戳与版本:公共数据库会更新,内部记录也会修订,接入时要保留 source_version 和 fetch_time,便于追溯。第四,确认许可与合规:ChEMBL 和 PubChem 数据可公开使用,但内部实验记录涉及企业机密,接入后的存储和访问必须符合内部数据分级要求。
| 数据源 | 主键 | 推荐接入方式 | 关键映射字段 | 注意事项 |
|---|---|---|---|---|
| ChEMBL | activity_id / molecule_chembl_id | REST API 或 dump 导入 | InChIKey、target_chembl_id | 注意 standard_value 单位与 assay 类型 |
| PubChem | CID | PUG-REST 按 CID 查询 | InChIKey、CanonicalSMILES | 区分 CID 与 SID,避免混用 |
| PDB | PDB ID | mmCIF 文件下载解析 | UniProt AC、配体 CCD ID | 注意分辨率与链选择 |
| 内部 ELN/LIMS | 实验编号 / 样品编号 | 数据库只读查询或模板导出 | 内部化合物ID、内部靶点ID | 单位不统一,需人工确认 |
五、一个可执行的对接示例
假设内部有一个化合物 INT-001,SMILES 为 CC(=O)Oc1ccccc1C(=O)O(阿司匹林)。对接步骤如下:第一步,用 RDKit 将 SMILES 转为 InChIKey,得到 BSYNRYMUTXBXSQ-UHFFFAOYSA-N。第二步,用该 InChIKey 查询 ChEMBL API,获取对应的 molecule_chembl_id 和活性记录。第三步,用同一 InChIKey 查询 PubChem,获取 CID 和分子属性。第四步,将内部实验记录中的活性值(例如某次酶抑制实验的 IC50)与 ChEMBL 中同靶点活性记录放在同一张表中,保留来源标识。第五步,把映射结果写入内部映射表,后续新化合物可以复用同一流程。
数据源识别与接入不是一次性任务,而是持续维护的过程。公共数据库会更新版本,内部实验记录会新增批次,映射表也需要随之维护。把接入流程脚本化、把映射关系持久化、把异常记录留痕,才能让后续的数据整合和建模建立在稳定可靠的基础上。