alterlab-pytdc について
alterlab-pytdcは、治療領域の機械学習向けに整理されたデータセットとベンチマークを提供するPyTDCの活用スキルです。予測、相互作用モデル、分子生成を標準化された分割と評価で扱います。
主な機能
- 01治療領域のキュレーション済みデータセット
- 02単一・複数エンティティの予測タスク
- 03分子生成と逆合成
- 04ベンチマークグループと評価指標
- 05データ分割とデータ処理ユーティリティ
活用シーン
- 01創薬ベンチマークでモデルを評価
- 02分子特性や薬物相互作用を予測
- 03分子を生成して特性を評価
- 04Scaffold分割やCold splitでデータを準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-pytdcインストール後、Claude Code で/alterlab-pytdcを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/datasets.mdoracles.mdutilities.mdscripts/benchmark_evaluation.pyload_and_split_data.pymolecular_generation.py詳細
PyTDC(Therapeutics Data Commons)
概要
PyTDC は、創薬と医薬品開発のための AI 対応データセットとベンチマークを提供するオープンサイエンスプラットフォームです。標準化された評価指標と有意義なデータ分割を備えた、治療薬開発パイプライン全体にわたるキュレーション済みデータセットにアクセスできます。データセットは、単一インスタンス予測(分子/タンパク質の特性)、複数インスタンス予測(薬物と標的の相互作用、薬物間相互作用)、生成(分子生成、逆合成)の3つのカテゴリに分類されています。
このスキルを使用する場面
以下の場合に、このスキルを使用してください:
- 創薬や治療薬の ML データセットを扱う
- 標準化された医薬品関連タスクで機械学習モデルのベンチマークを実施する
- 分子特性(ADME、毒性、生物活性)を予測する
- 薬物と標的の相互作用、または薬物間相互作用を予測する
- 望ましい特性を持つ新規分子を生成する
- 適切な訓練/テスト分割(スキャフォールド、コールドスプリット)を備えたキュレーション済みデータセットにアクセスする
- 特性最適化に分子オラクルを使用する
該当しないケース
| シナリオ | 代わりに使用 |
|---|---|
| 読み込んだ分子を特徴量化し、モデルを訓練/評価する | 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(Drug-Target Interaction、薬物と標的の相互作用)
薬物とタンパク質標的の結合親和性を予測します。
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(Drug-Drug Interaction、薬物間相互作用)
薬物ペア間の相互作用を予測します。
from tdc.multi_pred import DDI
data = DDI(name='DrugBank')
split = data.get_split()
相互作用の種類を予測するマルチクラス分類タスクです。データセットには、1,706 種類の薬物による 191,808 件の DDI ペアが含まれています。
3. PPI(Protein-Protein Interaction、タンパク質間相互作用)
タンパク質間相互作用を予測します。
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()
オラクルと組み合わせて、特定の特性を最適化します。
from tdc import Oracle
oracle = Oracle(name='GSK3B')
score = oracle('CC(C)Cc1ccc(cc1)C(C)C(O)=O') # Evaluate SMILES
利用可能なすべてのオラクル関数については、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')
オラクルの詳細なドキュメントと分子生成のワークフローについては、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 の辞書を返します(seed をキーとする辞書ではありません)。seed ごとの train/valid 分割は group.get_train_valid_split(...) から取得します。test セットは固定されています。各 seed の予測をベンチマーク名をキーとする辞書に格納し、それらの辞書をリストにまとめて group.evaluate_many(...) に渡してください(単一 seed の提出用辞書には group.evaluate(predictions) のみを使用してください)。
ADMET グループには 22 個のデータセットが含まれ、吸収、分布、代謝、排泄、毒性を網羅しています。
その他のベンチマークグループ
利用可能なベンチマークグループには、次のようなデータセットのコレクションが含まれます。
- ADMET 特性
- 薬物と標的の相互作用
- 薬物の組み合わせ予測
- その他のより専門的な治療タスク
ベンチマーク評価のワークフローについては、scripts/benchmark_evaluation.py を参照してください。
データ関数
TDC には、4 つのカテゴリーに分類された包括的なデータ処理ユーティリティが用意されています。
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 タスク用 — テストで未知となるエンティティ('Drug'、'Target'、またはリスト)をcolumn_nameに設定します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、Accuracy、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. 分子生成オラクル
TDC には、分子最適化用のオラクル関数が 17 種類以上あります。
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'])
オラクルの完全なドキュメントについては、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:オラクルを用いた分子生成
オラクル関数を用いた目標指向型生成の例については、scripts/molecular_generation.py を参照してください。
リソース
このスキルには、一般的な TDC ワークフローで使えるリソースが含まれています。
scripts/
load_and_split_data.py:さまざまな戦略で TDC データセットを読み込み、分割するためのテンプレートbenchmark_evaluation.py:適切な 5 シードプロトコルでベンチマークグループの評価を実行するためのテンプレートmolecular_generation.py:オラクル関数を用いた分子生成のためのテンプレート
references/
datasets.md:タスクの種類ごとに整理された、利用可能なすべてのデータセットの詳細なカタログoracles.md:17 種類以上あるすべての分子生成オラクルの完全なドキュメントutilities.md:データ処理、分割、評価ユーティリティの詳細ガイド
その他のリソース
- 公式ウェブサイト:https://tdcommons.ai
- ドキュメント:https://tdc.readthedocs.io
- GitHub:https://github.com/mims-harvard/TDC
- 論文:NeurIPS 2021 — 「Therapeutics Data Commons: Machine Learning Datasets and Tasks for Drug Discovery and Development」
AlterLab Academic Skills スイートの一部です。