mcpField
A
alterlab-chembl

alterlab-chembl

github.com/alterlab-ieu数据与数据库7867 次安装5 周前更新
代码仓库

关于 alterlab-chembl

alterlab-chembl 是面向药物发现与药物化学研究的 ChEMBL 数据库查询技能,使用 ChEMBL Python 客户端检索人工整理的生物活性分子数据。涵盖分子、靶点、生物活性及药物信息,也支持基于结构的搜索。

主要功能

  1. 01按名称、ID 或性质查询分子
  2. 02检索靶点及其生物活性
  3. 03进行相似性与子结构搜索
  4. 04查询药物、作用机制和适应症
  5. 05将查询结果导出为 pandas DataFrame

适用场景

  1. 01筛选特定靶点的抑制剂
  2. 02查找与给定结构相似的化合物
  3. 03分析已知药物的作用机制和活性
  4. 04按分子性质筛选虚拟筛选候选物

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-chembl

安装后在 Claude Code 中输入/alterlab-chembl确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
references/
api_reference.md
scripts/
example_queries.py

详细介绍

ChEMBL 数据库

概述

ChEMBL 是由欧洲生物信息学研究所(EBI)维护的人工整理生物活性分子数据库。ChEMBL 37 版本(2026 年 5 月)收录了约 290 万种不同的化合物、约 2,450 万条生物活性测量数据、约 18,500 个靶点,以及已获批药物和临床候选药物的数据(实时统计:https://www.ebi.ac.uk/chembl/api/data/status.json)。使用 ChEMBL Python 客户端以编程方式访问和查询这些数据,开展药物发现和药物化学研究。

何时使用此技能

在以下情形中使用此技能:

  • 化合物搜索:按名称、结构或属性查找分子
  • 靶点信息:检索蛋白质、酶或生物靶点的数据
  • 生物活性数据:查询 IC50、Ki、EC50 或其他活性测量数据
  • 药物信息:查找已获批药物、作用机制或适应症
  • 结构搜索:执行相似性或子结构搜索
  • 化学信息学:分析分子属性和成药性
  • 靶点-配体关系:探索化合物与靶点的相互作用
  • 药物发现:识别抑制剂、激动剂或生物活性分子
不适用情形
情形请改用
来自 BindingDB 的实测结合常数(Ki/Kd),或其完整 TSV 转储文件alterlab-bindingdb
通用化合物查询、名称↔CID/SMILES 转换、PubChem BioAssayalterlab-pubchem
药物相互作用、药品标签、详细药理记录alterlab-drugbank
可购买的化合物/适用于分子对接的 3D 化合物库alterlab-zinc-db
从结构在本地计算描述符或指纹alterlab-rdkit

安装和设置

Python 客户端

以编程方式访问需要 ChEMBL Python 客户端:

uv pip install chembl_webresource_client
基本用法模式
from chembl_webresource_client.new_client import new_client

# Access different endpoints
molecule = new_client.molecule
target = new_client.target
activity = new_client.activity
drug = new_client.drug

核心功能

1. 分子查询

按 ChEMBL ID 检索:

molecule = new_client.molecule
aspirin = molecule.get('CHEMBL25')

按名称搜索:

results = molecule.filter(pref_name__icontains='aspirin')

按属性筛选:

# Find small molecules (MW <= 500) with favorable LogP
results = molecule.filter(
    molecule_properties__mw_freebase__lte=500,
    molecule_properties__alogp__lte=5
)
2. 靶点查询

检索靶点信息:

target = new_client.target
egfr = target.get('CHEMBL203')

搜索特定类型的靶点:

# Find all kinase targets
kinases = target.filter(
    target_type='SINGLE PROTEIN',
    pref_name__icontains='kinase'
)
3. 生物活性数据

查询某靶点的活性数据:

activity = new_client.activity
# Find potent EGFR inhibitors
results = activity.filter(
    target_chembl_id='CHEMBL203',
    standard_type='IC50',
    standard_value__lte=100,
    standard_units='nM'
)

获取某化合物的所有活性数据:

compound_activities = activity.filter(
    molecule_chembl_id='CHEMBL25',
    pchembl_value__isnull=False
)
4. 基于结构的搜索

相似性搜索:

similarity = new_client.similarity
# Find compounds similar to aspirin
similar = similarity.filter(
    smiles='CC(=O)Oc1ccccc1C(=O)O',
    similarity=85  # 85% similarity threshold
)

子结构搜索:

substructure = new_client.substructure
# Find compounds containing benzene ring
results = substructure.filter(smiles='c1ccccc1')
5. 药物信息

检索药物数据:

drug = new_client.drug
drug_info = drug.get('CHEMBL25')

获取作用机制:

mechanism = new_client.mechanism
mechanisms = mechanism.filter(molecule_chembl_id='CHEMBL25')

查询药物适应症:

drug_indication = new_client.drug_indication
indications = drug_indication.filter(molecule_chembl_id='CHEMBL25')

查询工作流

工作流 1:查找某靶点的抑制剂
  1. 识别靶点 — 最可靠的方法是使用 UniProt 登录号,因为名称 搜索采用模糊匹配(pref_name__icontains='EGFR' 会优先返回嵌合体和 蛋白质-蛋白质相互作用靶点,而 CHEMBL203 的 pref_name 是 "Epidermal growth factor receptor",因此基因符号只能匹配同义词):

    targets = new_client.target.filter(
        target_components__accession='P00533',  # human EGFR
        target_type='SINGLE PROTEIN',
    )
    target_id = targets[0]['target_chembl_id']  # CHEMBL203
    # By symbol instead: target_synonym__icontains='EGFR' plus organism='Homo sapiens',
    # then check pref_name — substring matches also hit VEGFR1/2/3.
    
  2. 查询该靶点的生物活性数据:

    activities = new_client.activity.filter(
        target_chembl_id=target_id,
        standard_type='IC50',
        standard_value__lte=100
    )
    
  3. 提取化合物 ID 并检索详细信息:

    compound_ids = [act['molecule_chembl_id'] for act in activities]
    compounds = [new_client.molecule.get(cid) for cid in compound_ids]
    
工作流 2:分析已知药物
  1. 获取药物信息:

    drug_info = new_client.drug.get('CHEMBL1234')
    
  2. 检索作用机制:

    mechanisms = new_client.mechanism.filter(molecule_chembl_id='CHEMBL1234')
    
  3. 查找所有生物活性数据:

    activities = new_client.activity.filter(molecule_chembl_id='CHEMBL1234')
    
工作流 3:构效关系(SAR)研究
  1. 查找相似化合物:

    similar = new_client.similarity.filter(smiles='query_smiles', similarity=80)
    
  2. 获取每种化合物的活性数据:

    for compound in similar:
        activities = new_client.activity.filter(
            molecule_chembl_id=compound['molecule_chembl_id']
        )
    
  3. 使用结果中的分子属性分析属性与活性的关系。

筛选运算符

ChEMBL 支持 Django 风格的查询筛选器:

  • __exact - 精确匹配
  • __iexact - 不区分大小写的精确匹配
  • __contains / __icontains - 子字符串匹配
  • __startswith / __endswith - 前缀/后缀匹配
  • __gt、__gte、__lt、__lte - 数值比较
  • __range - 值处于范围内
  • __in - 值在列表中
  • __isnull - 检查是否为空

数据导出和分析

将结果转换为 pandas DataFrame 以供分析:

import pandas as pd

activities = new_client.activity.filter(target_chembl_id='CHEMBL203')
df = pd.DataFrame(list(activities))

# Analyze results
print(df['standard_value'].describe())
print(df.groupby('standard_type').size())

性能优化

缓存

客户端会自动缓存结果 24 小时。配置缓存:

from chembl_webresource_client.settings import Settings

# Disable caching
Settings.Instance().CACHING = False

# Adjust cache expiration (seconds)
Settings.Instance().CACHE_EXPIRE = 86400
延迟求值

只有在访问数据时才会执行查询。转换为列表以强制执行:

# Query is not executed yet
results = molecule.filter(pref_name__icontains='aspirin')

# Force execution
results_list = list(results)
分页

结果会自动分页。遍历所有结果:

for activity in new_client.activity.filter(target_chembl_id='CHEMBL203'):
    # Process each activity
    print(activity['molecule_chembl_id'])

常见用例

查找激酶抑制剂
# Identify kinase targets
kinases = new_client.target.filter(
    target_type='SINGLE PROTEIN',
    pref_name__icontains='kinase'
)

# Get potent inhibitors
for kinase in kinases[:5]:  # First 5 kinases
    activities = new_client.activity.filter(
        target_chembl_id=kinase['target_chembl_id'],
        standard_type='IC50',
        standard_value__lte=50
    )
探索药物再利用
# Get approved drugs (the drug endpoint also lists clinical candidates,
# so filter on max_phase=4; ~3,000 approved of ~16,000 drug records)
drugs = new_client.drug.filter(max_phase=4)

# For each drug, find all targets
for drug in drugs[:10]:
    mechanisms = new_client.mechanism.filter(
        molecule_chembl_id=drug['molecule_chembl_id']
    )
虚拟筛选
# Find compounds with desired properties
candidates = new_client.molecule.filter(
    molecule_properties__mw_freebase__range=[300, 500],
    molecule_properties__alogp__lte=5,
    molecule_properties__hba__lte=10,
    molecule_properties__hbd__lte=5
)

资源

scripts/example_queries.py

可直接使用的 Python 函数,演示常见的 ChEMBL 查询模式:

  • get_molecule_info() - 按 ID 获取分子详情
  • search_molecules_by_name() - 按名称搜索分子
  • find_molecules_by_properties() - 按属性筛选
  • get_bioactivity_data() - 查询靶点的生物活性
  • find_similar_compounds() - 相似性搜索
  • substructure_search() - 子结构匹配
  • get_drug_info() - 获取药物信息
  • find_kinase_inhibitors() - 专用激酶抑制剂搜索
  • export_to_dataframe() - 将结果转换为 pandas DataFrame

请查阅此脚本,了解实现细节和使用示例。

references/api_reference.md

全面的 API 文档,包括:

  • 完整的端点列表(分子、靶点、活性、分析、药物等)
  • 所有筛选运算符和查询模式
  • 分子属性和生物活性字段
  • 高级查询示例
  • 配置和性能调优
  • 错误处理和速率限制

如需详细的 API 信息或排查查询问题,请参阅本文档。

重要说明

数据可靠性
  • ChEMBL 数据经过人工整理,但可能存在不一致
  • 始终检查活性记录中的 data_validity_comment 字段
  • 注意 potential_duplicate 标记
单位和标准
  • 生物活性值使用标准单位(nM、uM 等)
  • pchembl_value 提供归一化活性(-log 标度)
  • 检查 standard_type 以了解测量类型(IC50、Ki、EC50 等)
速率限制
  • 遵守 ChEMBL 的公平使用政策
  • 使用缓存以尽量减少重复请求
  • 对于大型数据集,请考虑批量下载
  • 避免短时间内连续快速请求 API
化学结构格式
  • SMILES 字符串是主要的结构格式
  • 化合物可使用 InChI key
  • 可通过图像端点生成 SVG 图像

其他资源

评论

支持 Markdown