ChEMBL(EMBL-EBI 维护)是开源生物活性数据的核心库:由专业人员从医药化学文献中人工提取化合物结构、靶点和活性数值。它是绝大多数活性预测模型的数据起点——但原始数据不能直接拿来训练,中间的清洗步骤才是真正决定模型质量的地方。
规模与内容
| 内容 | 量级 |
|---|---|
| 化合物 | 约 240 万个不同结构 |
| 活性记录 | 逾 2,000 万条 |
| 靶点 | 约 1.5 万个 |
| 测定(assay) | 约 160 万个 |
| 文献来源 | 约 9 万篇论文 + 专利数据 |
版本按 ChEMBL_34、ChEMBL_35 这样递增。论文里必须写明版本号,不同版本数据量与清洗规则都有变化,不写版本的结果无法复现。
三种取数方式
# 方式一:Python 客户端(小规模查询最方便)
pip install chembl_webresource_client
from chembl_webresource_client.new_client import new_client
target = new_client.target
res = target.search("EGFR")
tid = [t for t in res if t["organism"] == "Homo sapiens"][0]["target_chembl_id"]
activities = new_client.activity.filter(
target_chembl_id=tid,
standard_type="IC50",
assay_type="B", # B = binding,功能测定用 F
).only(["molecule_chembl_id", "canonical_smiles", "standard_value",
"standard_units", "standard_relation", "pchembl_value",
"assay_chembl_id", "document_chembl_id"])
df = pd.DataFrame(activities)
-- 方式二:本地 SQLite(大规模建模的正确方式)
-- 从 EBI FTP 下载 chembl_35_sqlite.tar.gz(约 4 GB)
SELECT md.chembl_id, cs.canonical_smiles,
act.standard_type, act.standard_relation,
act.standard_value, act.standard_units, act.pchembl_value,
a.assay_id, a.confidence_score, d.doc_id
FROM activities act
JOIN assays a ON a.assay_id = act.assay_id
JOIN target_dictionary td ON td.tid = a.tid
JOIN molecule_dictionary md ON md.molregno = act.molregno
JOIN compound_structures cs ON cs.molregno = act.molregno
JOIN docs d ON d.doc_id = a.doc_id
WHERE td.chembl_id = 'CHEMBL203' -- EGFR
AND act.standard_type IN ('IC50','Ki','Kd')
AND act.standard_relation = '='
AND act.pchembl_value IS NOT NULL
AND a.confidence_score >= 8;
第三种是直接下 SDF / TSV 全量文件做离线处理。建模项目应该用本地 SQLite——Web API 有速率限制,拉几万条记录会非常慢。
必须做的清洗步骤
- 只保留
standard_relation = '=':大量记录是>或<(如「IC50 > 10 μM」),这是删失数据。当成精确值会严重污染训练集,要么剔除,要么按删失数据专门处理。 - 用
pchembl_value:它是 ChEMBL 已经统一换算好的 −log10(摩尔浓度),避免自己处理 nM/μM/mg·mL⁻¹ 混杂单位时出错。 - 按
confidence_score过滤:这个 0–9 的分数表示「活性与靶点的对应关系有多确定」。建模建议只用 ≥ 8(直接分配到单一蛋白),低分记录的靶点归属很不可靠。 - 分开 assay 类型:结合测定(B)与功能测定(F)测的是不同的东西,IC50 数值不可混用。同样,不同细胞系、不同 ATP 浓度下的激酶 IC50 也不可比。
- 处理重复测量:同一化合物-靶点常有多条来自不同文献的记录。取中位数比取均值稳健;若多条记录跨度超过 1 个 log 单位,说明数据本身有问题,建议整条剔除。
- 结构标准化:去盐、中和电荷、统一互变异构,再按标准化后的 SMILES 去重(见 171《RDKit》)。
数据噪声的真实水平
这是用 ChEMBL 建模必须知道的一件事:公开活性数据本身的实验误差就不小。多项分析表明,同一化合物-靶点对在不同文献间的 pIC50 差异,标准差通常在 0.5 个 log 单位左右。这意味着:
- 模型的 RMSE 若已接近 0.5~0.7 log 单位,基本触及数据噪声天花板,再优化模型收益有限;
- 报告 RMSE 为 0.3 的模型很可能存在数据泄漏(如同分子跨划分出现);
- 把预测误差控制在 0.5 log 以内已经是很好的结果,不必追求更高。
许可
ChEMBL 数据采用 CC BY-SA 许可,可商用,但需署名且衍生作品需以相同方式共享。这一点比 DrugBank(见 229《DrugBank》)宽松得多,是它成为建模主力数据源的重要原因。
上手提示
- 建模用本地 SQLite,不要用 Web API 拉大批数据;
- 三个必做过滤:
relation='='、pchembl_value非空、confidence_score ≥ 8; - 不同 assay 类型的活性不可混用,重复记录跨度过大就整条剔除;
- 数据噪声约 0.5 log,模型 RMSE 到这个量级就该停手了。
延伸资源
- 对照数据源:227《PubChem》、228《BindingDB》、229《DrugBank》;
- 数据清洗工具:171《RDKit》、218《Datamol》;
- 取数实战见「实战流程」模块;评测纪律:169《Benchmark 陷阱》。