关于 alterlab-chembl
alterlab-chembl 是面向药物发现与药物化学研究的 ChEMBL 数据库查询技能,使用 ChEMBL Python 客户端检索人工整理的生物活性分子数据。涵盖分子、靶点、生物活性及药物信息,也支持基于结构的搜索。
主要功能
- 01按名称、ID 或性质查询分子
- 02检索靶点及其生物活性
- 03进行相似性与子结构搜索
- 04查询药物、作用机制和适应症
- 05将查询结果导出为 pandas DataFrame
适用场景
- 01筛选特定靶点的抑制剂
- 02查找与给定结构相似的化合物
- 03分析已知药物的作用机制和活性
- 04按分子性质筛选虚拟筛选候选物
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-chembl安装后在 Claude Code 中输入/alterlab-chembl确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/api_reference.mdscripts/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 BioAssay | alterlab-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:查找某靶点的抑制剂
-
识别靶点 — 最可靠的方法是使用 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. -
查询该靶点的生物活性数据:
activities = new_client.activity.filter( target_chembl_id=target_id, standard_type='IC50', standard_value__lte=100 ) -
提取化合物 ID 并检索详细信息:
compound_ids = [act['molecule_chembl_id'] for act in activities] compounds = [new_client.molecule.get(cid) for cid in compound_ids]
工作流 2:分析已知药物
-
获取药物信息:
drug_info = new_client.drug.get('CHEMBL1234') -
检索作用机制:
mechanisms = new_client.mechanism.filter(molecule_chembl_id='CHEMBL1234') -
查找所有生物活性数据:
activities = new_client.activity.filter(molecule_chembl_id='CHEMBL1234')
工作流 3:构效关系(SAR)研究
-
查找相似化合物:
similar = new_client.similarity.filter(smiles='query_smiles', similarity=80) -
获取每种化合物的活性数据:
for compound in similar: activities = new_client.activity.filter( molecule_chembl_id=compound['molecule_chembl_id'] ) -
使用结果中的分子属性分析属性与活性的关系。
筛选运算符
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 图像