226

ChEMBL:药物活性数据的核心数据库

ChEMBL 是开源生物活性数据的核心库,汇集大量从文献人工整理的化合物-靶点活性。这篇给出取数的 SQL / API 写法、必须做的清洗步骤,以及数据本身的噪声水平。

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 到这个量级就该停手了。

延伸资源