Therapeutics Data Commons (PyTDC) for AI-ready therapeutic ML datasets and benchmarks; use it when you need standardized dataset loading, meaningful splits (e.g., scaffold/cold-start), and consistent evaluation for ADME/Toxicity/DTI/DDI or molecular optimization.
64
78%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./scientific-skills/Evidence Insight/pytdc/SKILL.mdrandom, scaffold, and cold-start variants such as cold_drug, cold_target, cold_drug_target, plus temporal where applicable.Evaluator with common metrics (ROC-AUC, PR-AUC, RMSE, MAE, Spearman, etc.).references/oracles.md).Install (recommended):
uv pip install PyTDCUpgrade:
uv pip install PyTDC --upgradeCore runtime dependencies (installed automatically; versions depend on the PyTDC release you install):
PyTDC (latest from PyPI)numpypandasscikit-learntqdmseabornfuzzywuzzyOptional dependencies may be pulled in automatically depending on which submodules you use (e.g., graph backends or chemistry toolchains).
A complete runnable example that:
# pip install PyTDC scikit-learn
from tdc.single_pred import ADME
from tdc import Evaluator, Oracle
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import Ridge
def main():
# 1) Load a single-instance prediction dataset (ADME)
data = ADME(name="Caco2_Wang")
# 2) Create a scaffold split (train/valid/test)
split = data.get_split(method="scaffold", seed=42, frac=[0.7, 0.1, 0.2])
train, valid, test = split["train"], split["valid"], split["test"]
# 3) Train a simple baseline model on SMILES strings
# (character n-gram + ridge regression; replace with your own model)
model = Pipeline(
steps=[
("featurizer", CountVectorizer(analyzer="char", ngram_range=(2, 5))),
("regressor", Ridge(alpha=1.0)),
]
)
model.fit(train["Drug"], train["Y"])
# 4) Evaluate on the test set using a TDC Evaluator
y_pred = model.predict(test["Drug"])
evaluator = Evaluator(name="MAE")
mae = evaluator(test["Y"], y_pred)
print(f"Test MAE: {mae:.4f}")
# 5) Oracle scoring example (property scoring for a SMILES)
oracle = Oracle(name="DRD2")
score = oracle("CC(C)Cc1ccc(cc1)C(C)C(O)=O")
print(f"DRD2 Oracle score: {score}")
if __name__ == "__main__":
main()Related references and templates (if present in this skill package):
references/oracles.mdreferences/utilities.mdreferences/datasets.mdscripts/load_and_split_data.py, scripts/benchmark_evaluation.py, scripts/molecular_generation.pyPyTDC datasets follow a consistent interface:
from tdc.<problem> import <Task>
data = <Task>(name="<DatasetName>")
df = data.get_data(format="df")
split = data.get_split(method="scaffold", seed=1, frac=[0.7, 0.1, 0.2])<problem> is typically one of:
single_pred (single-entity property prediction)multi_pred (pairwise/multi-entity interaction prediction)generation (molecule/reaction generation tasks)Use get_split(...) to obtain {"train": ..., "valid": ..., "test": ...}.
Common parameters:
method: split strategyseed: random seed for reproducibilityfrac: [train, valid, test] fractions (when supported)Typical methods:
random: random shuffling splitscaffold: Bemis–Murcko scaffold-based split to reduce scaffold leakage and improve chemical generalizationcold_drug: test contains unseen drugscold_target: test contains unseen targetscold_drug_target: test contains unseen drugs and targetstemporal: time-based split for datasets with timestamps (when available)Example:
split = data.get_split(method="cold_target", seed=1)TDC provides a unified evaluator:
from tdc import Evaluator
evaluator = Evaluator(name="ROC-AUC") # classification
score = evaluator(y_true, y_pred)Choose metrics appropriate to the task type:
ROC-AUC, PR-AUC, F1, Accuracy, etc.RMSE, MAE, R2, Spearman, Pearson, etc.While schemas vary by task, common conventions include:
Single-instance prediction (e.g., ADME/Tox):
Drug (often SMILES) and label YDrug_ID / Compound_IDMulti-instance prediction (e.g., DTI):
Drug (SMILES), Target (protein sequence), label YDrug_ID, Target_IDOracles provide a callable scoring interface:
from tdc import Oracle
oracle = Oracle(name="GSK3B")
score = oracle("CCO...")
scores = oracle(["SMILES1", "SMILES2"])Use Oracles to:
For the full list of Oracles and their expected inputs/outputs, see references/oracles.md.
63c61d3
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.