mcpField
A
alterlab-pytdc

alterlab-pytdc

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

关于 alterlab-pytdc

alterlab-pytdc 是使用 PyTDC 的技能;PyTDC 提供经过整理的治疗领域机器学习数据集与基准,支持预测、相互作用建模和分子生成,并提供标准化划分与评估。

主要功能

  1. 01整理后的治疗领域数据集
  2. 02单实体与多实体预测任务
  3. 03分子生成与逆合成
  4. 04基准组与评估指标
  5. 05数据集划分和处理工具

适用场景

  1. 01在药物发现基准上评估模型
  2. 02预测分子性质或药物相互作用
  3. 03生成分子并评估其性质
  4. 04使用骨架或冷启动划分准备数据

安装

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

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

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

包含的文件

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

evals/
evals.json
references/
datasets.md
oracles.md
utilities.md
scripts/
benchmark_evaluation.py
load_and_split_data.py
molecular_generation.py

详细介绍

PyTDC(Therapeutics Data Commons)

概述

PyTDC 是一个开放科学平台,提供适用于 AI 的药物发现与开发数据集和基准。用户可以访问涵盖整个治疗研发流程的精选数据集,这些数据集采用标准化评估指标和有意义的数据划分,并分为三类:单实例预测(分子/蛋白质属性)、多实例预测(药物-靶点相互作用、DDI)和生成(分子生成、逆合成)。

何时使用此技能

在以下情况应使用此技能:

  • 使用药物发现或治疗领域的 ML 数据集
  • 在标准化的制药任务上对机器学习模型进行基准测试
  • 预测分子属性(ADME、毒性、生物活性)
  • 预测药物-靶点或药物-药物相互作用
  • 生成具有目标属性的新分子
  • 访问具有适当训练/测试划分(骨架划分、冷启动划分)的精选数据集
  • 使用分子 oracle 优化属性
不适用的情况
场景改用
对已加载的分子进行特征化并训练/评估模型alterlab-deepchem(模型)或 alterlab-molfeat(特征)
获取 TDC 精选数据集之外、针对某个靶点的原始生物活性记录(IC50/Ki)alterlab-chembl
获取针对某个蛋白质靶点的实测结合亲和力alterlab-bindingdb
查询 PrimeKG 知识图谱本身(药物-疾病路径)alterlab-primekg

安装与设置

为 PyTDC 创建独立的虚拟环境:

uv venv --python 3.12        # PyTDC 1.1.15 resolves on Python 3.10-3.12, not 3.13
uv pip install PyTDC         # 1.1.15 is the latest release (Mar 2025)

PyTDC 1.1.15 严格固定了较旧的依赖栈——numpy<2、pandas<3、rdkit<2024.3.1、transformers<4.51、datasets<2.20——并会拉取 cellxgene-census 和 tiledbsoma 等大型额外依赖,因此无法与当前版本的 RDKit 2026.x、numpy 2.x、pandas 3.x 或 transformers 5.x 共用环境。如果需要使用较新的库,请将数据划分导出为 CSV/Parquet,然后在单独的环境中进行特征化/训练。

快速入门

访问任意 TDC 数据集的基本模式如下:

from tdc.<problem> import <Task>
data = <Task>(name='<Dataset>')
split = data.get_split(method='scaffold', seed=1, frac=[0.7, 0.1, 0.2])
df = data.get_data(format='df')

其中:

  • <problem>:single_pred、multi_pred 或 generation 之一
  • <Task>:具体任务类别(例如 ADME、DTI、MolGen)
  • <Dataset>:该任务下的数据集名称

示例 - 加载 ADME 数据:

from tdc.single_pred import ADME
data = ADME(name='Caco2_Wang')
split = data.get_split(method='scaffold')
# Returns dict with 'train', 'valid', 'test' DataFrames

单实例预测任务

单实例预测是指预测单个生物医学实体(分子、蛋白质等)的属性。

可用任务类别
1. ADME(吸收、分布、代谢、排泄)

预测药物分子的药代动力学属性。

from tdc.single_pred import ADME
data = ADME(name='Caco2_Wang')  # Intestinal permeability
# Other datasets: HIA_Hou, Bioavailability_Ma, Lipophilicity_AstraZeneca, etc.

常见 ADME 数据集:

  • Caco2 - 肠道通透性
  • HIA - 人体肠道吸收
  • Bioavailability - 口服生物利用度
  • Lipophilicity - 辛醇-水分配系数
  • Solubility - 水溶性
  • BBB - 血脑屏障穿透性
  • CYP - 细胞色素 P450 代谢
2. 毒性(Tox)

预测化合物的毒性和不良反应。

from tdc.single_pred import Tox
data = Tox(name='hERG')  # Cardiotoxicity
# Other datasets: AMES, DILI, Carcinogens_Lagunin, etc.

常见毒性数据集:

  • hERG - 心脏毒性
  • AMES - 致突变性
  • DILI - 药物性肝损伤
  • Carcinogens - 致癌性
  • ClinTox - 临床试验毒性
3. HTS(高通量筛选)

根据筛选数据进行生物活性预测。

from tdc.single_pred import HTS
data = HTS(name='SARSCoV2_Vitro_Touret')
4. QM(量子力学)

分子的量子力学属性。

from tdc.single_pred import QM
data = QM(name='QM7')
5. 其他单实例预测任务
  • Yields:化学反应产率预测
  • Epitope:生物制剂的表位预测
  • Develop:开发阶段预测
  • CRISPROutcome:基因编辑结果预测
数据格式

单实例预测数据集通常返回包含以下列的 DataFrame:

  • Drug_ID 或 Compound_ID:唯一标识符
  • Drug 或 X:SMILES 字符串或分子表示
  • Y:目标标签(连续值或二元值)

多实例预测任务

多实例预测是指预测多个生物医学实体之间相互作用的属性。

可用任务类别
1. DTI(药物-靶标相互作用)

预测药物与蛋白质靶标之间的结合亲和力。

from tdc.multi_pred import DTI
data = DTI(name='BindingDB_Kd')
split = data.get_split()
# Cold-drug split (test set has only unseen drugs):
cold = data.get_split(method='cold_split', column_name='Drug')

可用数据集:

  • BindingDB_Kd - 解离常数(52,284 对)
  • BindingDB_IC50 - 半数抑制浓度(991,486 对)
  • BindingDB_Ki - 抑制常数(375,032 对)
  • DAVIS、KIBA - 激酶结合数据集

数据格式: Drug_ID、Target_ID、Drug(SMILES)、Target(序列)、Y(结合亲和力)

2. DDI(药物-药物相互作用)

预测药物对之间的相互作用。

from tdc.multi_pred import DDI
data = DDI(name='DrugBank')
split = data.get_split()

多分类任务,用于预测相互作用类型。数据集包含 191,808 对 DDI 和 1,706 种药物。

3. PPI(蛋白质-蛋白质相互作用)

预测蛋白质-蛋白质相互作用。

from tdc.multi_pred import PPI
data = PPI(name='HuRI')
4. 其他多预测任务
  • GDA:基因-疾病关联
  • DrugRes:药物耐药性预测
  • DrugSyn:药物协同作用预测
  • PeptideMHC:肽-MHC 结合
  • AntibodyAff:抗体亲和力预测
  • MTI:miRNA-靶标相互作用
  • Catalyst:催化剂预测
  • TrialOutcome:临床试验结果预测

生成任务

生成任务涉及创建具有理想属性的新型生物医学实体。

1. 分子生成(MolGen)

生成多样且新颖、具有理想化学属性的分子。

from tdc.generation import MolGen
data = MolGen(name='ChEMBL_V29')
split = data.get_split()

结合 oracle 优化特定属性:

from tdc import Oracle
oracle = Oracle(name='GSK3B')
score = oracle('CC(C)Cc1ccc(cc1)C(C)C(O)=O')  # Evaluate SMILES

所有可用的 oracle 函数,请参阅 references/oracles.md。

2. 逆合成(RetroSyn)

预测合成目标分子所需的反应物。

from tdc.generation import RetroSyn
data = RetroSyn(name='USPTO')
split = data.get_split()

数据集包含来自 USPTO 数据库的 1,939,253 个反应。

3. 配对分子生成

生成分子对(例如,前药-药物对)。

from tdc.generation import PairMolGen
data = PairMolGen(name='Prodrug')

有关 oracle 的详细文档和分子生成工作流,请参阅 references/oracles.md 和 scripts/molecular_generation.py。

基准组

基准组提供经过整理的相关数据集集合,用于系统评估模型。

ADMET 基准组
from tdc.benchmark_group import admet_group
group = admet_group(path='data/')

predictions_list = []
for seed in [1, 2, 3, 4, 5]:
    benchmark = group.get('Caco2_Wang')
    name = benchmark['name']
    # train_val is split into train/valid per seed; test is FIXED across seeds.
    train_val, test = benchmark['train_val'], benchmark['test']
    train, valid = group.get_train_valid_split(
        benchmark=name, split_type='default', seed=seed
    )
    # Train model here, then predict on `test`
    predictions = {name: model.predict(test)}  # dict keyed by benchmark name
    predictions_list.append(predictions)

# Evaluate across the 5 seeds → {'caco2_wang': [mean, std]}
results = group.evaluate_many(predictions_list)

请注意其结构:group.get(name) 返回一个包含 name、train_val、test 键的字典(并非以种子为键)。每个种子的训练/验证划分来自 group.get_train_valid_split(...);test 集保持固定。将每个种子的预测结果放入以基准名称为键的字典中,将这些字典收集到一个列表里,然后传递给 group.evaluate_many(...)。(仅对于单种子的提交字典,使用 group.evaluate(predictions)。)

ADMET 组包含 22 个数据集,涵盖吸收、分布、代谢、排泄和毒性。

其他基准组

可用的基准组包括以下类别的数据集:

  • ADMET 属性
  • 药物-靶标相互作用
  • 药物组合预测
  • 以及更多专业治疗任务

有关基准评估工作流,请参阅 scripts/benchmark_evaluation.py。

数据函数

TDC 提供全面的数据处理实用工具,分为四类。

1. 数据集划分

通过多种策略获取训练/验证/测试划分:

# Scaffold split (default for most tasks)
split = data.get_split(method='scaffold', seed=1, frac=[0.7, 0.1, 0.2])

# Random split
split = data.get_split(method='random', seed=42, frac=[0.8, 0.1, 0.1])

# Cold split (for DTI/DDI tasks) — pick the held-out entity via column_name
split = data.get_split(method='cold_split', column_name='Drug', seed=1)    # Unseen drugs in test
split = data.get_split(method='cold_split', column_name='Target', seed=1)  # Unseen targets in test
# Pass a list to hold out multiple entities: column_name=['Drug', 'Target']

可用的划分策略:

  • random:随机打乱
  • scaffold:基于骨架的划分(Bemis-Murcko,用于确保化学多样性)
  • cold_split:适用于 DTI/DDI 任务——将 column_name 设为希望在测试集中未见过的实体('Drug'、'Target' 或列表)
  • combination:适用于药物组合数据集
2. 模型评估

使用标准化指标进行评估:

from tdc import Evaluator

# For binary classification
evaluator = Evaluator(name='ROC-AUC')
score = evaluator(y_true, y_pred)

# For regression
evaluator = Evaluator(name='RMSE')
score = evaluator(y_true, y_pred)

可用指标: ROC-AUC、PR-AUC、F1、准确率、RMSE、MAE、R2、Spearman、Pearson 等。

3. 数据处理

TDC 提供 11 种核心处理工具:

from tdc.chem_utils import MolConvert

# Molecule format conversion
converter = MolConvert(src='SMILES', dst='PyG')
pyg_graph = converter('CC(C)Cc1ccc(cc1)C(C)C(O)=O')

处理工具包括:

  • 分子格式转换(SMILES、SELFIES、PyG、DGL、ECFP 等)
  • 分子过滤器(PAINS、药物相似性)
  • 标签二值化与单位转换
  • 数据平衡(过采样/欠采样)
  • 配对数据的负采样
  • 图转换
  • 实体检索(CID 转 SMILES、UniProt 转序列)

如需查看完整的工具文档,请参阅 references/utilities.md。

4. 分子生成 Oracle

TDC 提供 17 种以上用于分子优化的 Oracle 函数:

from tdc import Oracle

# Single oracle
oracle = Oracle(name='DRD2')
score = oracle('CC(C)Cc1ccc(cc1)C(C)C(O)=O')

# Multiple oracles
oracle = Oracle(name='JNK3')
scores = oracle(['SMILES1', 'SMILES2', 'SMILES3'])

如需查看完整的 Oracle 文档,请参阅 references/oracles.md。

高级功能

检索可用数据集
from tdc.utils import retrieve_dataset_names

# Get all ADME datasets
adme_datasets = retrieve_dataset_names('ADME')

# Get all DTI datasets
dti_datasets = retrieve_dataset_names('DTI')
标签转换
from tdc.utils import get_label_map
label_map = get_label_map(name='DrugBank', task='DDI')

# Unit/log conversion is done via methods ON the dataset object, not a standalone import:
data = DTI(name='DAVIS')
data.convert_to_log(form='binding')   # e.g. Kd (nM) -> pKd; convert_from_log() reverses it
数据库查询
from tdc.utils import cid2smiles, uniprot2seq

# Convert PubChem CID to SMILES
smiles = cid2smiles(2244)

# Convert UniProt ID to amino acid sequence
sequence = uniprot2seq('P12345')

常见工作流

工作流 1:训练单个预测模型

完整示例请参阅 scripts/load_and_split_data.py:

from tdc.single_pred import ADME
from tdc import Evaluator

# Load data
data = ADME(name='Caco2_Wang')
split = data.get_split(method='scaffold', seed=42)

train, valid, test = split['train'], split['valid'], split['test']

# Train model (user implements)
# model.fit(train['Drug'], train['Y'])

# Evaluate
evaluator = Evaluator(name='MAE')
# score = evaluator(test['Y'], predictions)
工作流 2:基准评估

多个随机种子及规范评估流程的完整示例,请参阅 scripts/benchmark_evaluation.py。

工作流 3:使用 Oracle 进行分子生成

如需查看使用 Oracle 函数进行目标导向生成的示例,请参阅 scripts/molecular_generation.py。

资源

此技能包含适用于常见 TDC 工作流的捆绑资源:

scripts/
  • load_and_split_data.py:使用多种策略加载和拆分 TDC 数据集的模板
  • benchmark_evaluation.py:使用规范的 5 个随机种子流程运行基准组评估的模板
  • molecular_generation.py:使用 Oracle 函数生成分子的模板
references/
  • datasets.md:按任务类型整理的所有可用数据集完整目录
  • oracles.md:所有 17 种以上分子生成 Oracle 的完整文档
  • utilities.md:数据处理、拆分和评估工具的详细指南

其他资源

属于 AlterLab Academic Skills 套件的一部分。

评论

支持 Markdown