{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5e118486",
   "metadata": {},
   "source": [
    "# Selecting a dataset the way an agent should\n",
    "\n",
    "**Level:** advanced &nbsp;·&nbsp; **Language:** Python &nbsp;·&nbsp; **Runtime:** under a minute\n",
    "&nbsp;·&nbsp; **Access:** none required\n",
    "\n",
    "An agent asked to \"find a cancer dataset for studying treatment resistance\" will\n",
    "typically search names and descriptions, pick the largest well-known cohort, and be\n",
    "wrong - because the fields the analysis depends on may be empty, and nothing in a\n",
    "catalog description says so.\n",
    "\n",
    "This workbook shows the selection an agent should make instead: filter on measured\n",
    "capability, rank on fit, and read the blocking limitations *before* committing. It\n",
    "runs against the CD2S structured export, which is the machine-readable\n",
    "form of every dataset page."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e1a6199a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:43:01.703629Z",
     "iopub.status.busy": "2026-09-21T00:43:01.703549Z",
     "iopub.status.idle": "2026-09-21T00:43:02.151544Z",
     "shell.execute_reply": "2026-09-21T00:43:02.151148Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "602 datasets in the index\n",
      "columns an agent can filter on: 39\n"
     ]
    }
   ],
   "source": [
    "import json\n",
    "from pathlib import Path\n",
    "\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "\n",
    "# The export ships with this repository. When the site is deployed it is also served at\n",
    "# /data/index.json, so the same code works against a URL with one line changed.\n",
    "CANDIDATES = [\n",
    "    Path(\"../../web/public/data/index.json\"),\n",
    "    Path(\"../../pipeline/data/dist/index.json\"),\n",
    "]\n",
    "INDEX_PATH = next((p for p in CANDIDATES if p.exists()), None)\n",
    "if INDEX_PATH is None:\n",
    "    raise SystemExit(\"Run `cds export` in ../../pipeline first\")\n",
    "\n",
    "rows = json.loads(INDEX_PATH.read_text())\n",
    "df = pd.DataFrame(rows)\n",
    "print(f\"{len(df)} datasets in the index\")\n",
    "print(f\"columns an agent can filter on: {len(df.columns)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a3e04e3",
   "metadata": {},
   "source": [
    "## 1. The naive selection, and why it fails\n",
    "\n",
    "Rank by cohort size and the answer looks obvious."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6e63bc96",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:43:02.152658Z",
     "iopub.status.busy": "2026-09-21T00:43:02.152550Z",
     "iopub.status.idle": "2026-09-21T00:43:02.158443Z",
     "shell.execute_reply": "2026-09-21T00:43:02.157947Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Largest cohorts:\n",
      "\n",
      "   short_title  n_cases has_treatment_response has_survival_endpoint\n",
      "   msk_ch_2023  42714.0                  False                 False\n",
      "          nlst  26410.0                   None                  None\n",
      "  msk_met_2021  25775.0                  False                  True\n",
      "msk_chord_2024  24950.0                  False                  True\n",
      "   msk_ch_2020  24146.0                  False                 False\n",
      "\n",
      "A size-ranked agent picks: msk_ch_2023 (42,714 cases)\n",
      "  treatment response recorded : False\n",
      "  survival endpoint derivable : False\n"
     ]
    }
   ],
   "source": [
    "naive = df.sort_values(\"n_cases\", ascending=False, na_position=\"last\").head(5)\n",
    "print(\"Largest cohorts:\\n\")\n",
    "print(\n",
    "    naive[[\"short_title\", \"n_cases\", \"has_treatment_response\", \"has_survival_endpoint\"]]\n",
    "    .to_string(index=False)\n",
    ")\n",
    "\n",
    "top = naive.iloc[0]\n",
    "print(f\"\\nA size-ranked agent picks: {top['short_title']} ({top['n_cases'] or 0:,.0f} cases)\")\n",
    "print(f\"  treatment response recorded : {top['has_treatment_response']}\")\n",
    "print(f\"  survival endpoint derivable : {top['has_survival_endpoint']}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a271ebe",
   "metadata": {},
   "source": [
    "## 2. Filter on measured capability instead\n",
    "\n",
    "The index carries the results of auditing every dataset's clinical completeness, so the\n",
    "filter is a property of the data rather than of the description."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e92ff288",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:43:02.159375Z",
     "iopub.status.busy": "2026-09-21T00:43:02.159316Z",
     "iopub.status.idle": "2026-09-21T00:43:02.164375Z",
     "shell.execute_reply": "2026-09-21T00:43:02.164059Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "51 of 602 datasets record BOTH treatment response and a\n",
      "survival endpoint, measured from actual field coverage.\n",
      "\n",
      "short_title  n_cases  median_followup_months access_tier  n_modalities\n",
      " TARGET-AML   2492.0                    41.7       mixed             9\n",
      "    CPTAC-3   1866.0                    22.9       mixed             9\n",
      " MP2PRT-ALL   1510.0                   100.2       mixed             6\n",
      "  TCGA-BRCA   1098.0                    27.1       mixed            12\n",
      "  HCMI-CMDC    805.0                    15.8       mixed            10\n",
      "   TCGA-GBM    617.0                    12.0       mixed            12\n",
      "    TCGA-OV    608.0                    32.7       mixed            11\n",
      "  TCGA-LUAD    585.0                    21.6       mixed            12\n",
      "  TCGA-UCEC    560.0                    29.5       mixed            12\n",
      "  TCGA-KIRC    537.0                    38.6       mixed            12\n"
     ]
    }
   ],
   "source": [
    "REQUIREMENTS = {\n",
    "    \"has_treatment_response\": True,\n",
    "    \"has_survival_endpoint\": True,\n",
    "}\n",
    "\n",
    "eligible = df.copy()\n",
    "for field, wanted in REQUIREMENTS.items():\n",
    "    eligible = eligible[eligible[field] == wanted]\n",
    "\n",
    "print(f\"{len(eligible)} of {len(df)} datasets record BOTH treatment response and a\")\n",
    "print(\"survival endpoint, measured from actual field coverage.\\n\")\n",
    "\n",
    "cols = [\"short_title\", \"n_cases\", \"median_followup_months\", \"access_tier\", \"n_modalities\"]\n",
    "print(\n",
    "    eligible.sort_values(\"n_cases\", ascending=False, na_position=\"last\")\n",
    "    .head(10)[cols]\n",
    "    .to_string(index=False)\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb45cf6b",
   "metadata": {},
   "source": [
    "## 3. Rank on fit, not on fame\n",
    "\n",
    "A simple transparent score: prefer follow-up long enough to observe the outcome,\n",
    "adequate sample size, open access, and - deliberately - datasets that are *under*-used,\n",
    "because a novel question is easier to ask where fewer people have already looked."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "dbf41c79",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:43:02.165239Z",
     "iopub.status.busy": "2026-09-21T00:43:02.165187Z",
     "iopub.status.idle": "2026-09-21T00:43:02.171456Z",
     "shell.execute_reply": "2026-09-21T00:43:02.171115Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ranked by fit for a treatment-resistance question:\n",
      "\n",
      "short_title  fit_score  n_cases  median_followup_months access_tier  reuse_gap_index  is_showcase\n",
      " MP2PRT-ALL       9.75   1510.0                   100.2       mixed           -1.661         True\n",
      " TARGET-AML       9.50   2492.0                    41.7       mixed           -2.001         True\n",
      "  PDC000622       8.59    193.0                    24.5        open           -1.790         True\n",
      "    CPTAC-3       8.06   1866.0                    22.9       mixed           -1.417         True\n",
      "  TCGA-BRCA       8.00   1098.0                    27.1       mixed            2.587         True\n",
      "  HCMI-CMDC       7.62    805.0                    15.8       mixed           -2.155         True\n",
      " CGCI-BLGSP       7.25    388.0                    15.7       mixed           -3.055        False\n",
      "  PDC000245       6.36    111.0                    12.8        open           -2.142        False\n",
      "\n",
      "Selected: Molecular Profiling to Predict Response to Treatment for Acute Lymphoblastic Leukemia\n"
     ]
    }
   ],
   "source": [
    "def score(row) -> float:\n",
    "    s = 0.0\n",
    "    n = row.get(\"n_cases\") or row.get(\"n_samples\") or 0\n",
    "    if n >= 1000:\n",
    "        s += 3\n",
    "    elif n >= 300:\n",
    "        s += 2\n",
    "    elif n >= 100:\n",
    "        s += 1\n",
    "\n",
    "    fu = row.get(\"median_followup_months\") or 0\n",
    "    if fu >= 60:\n",
    "        s += 3\n",
    "    elif fu >= 24:\n",
    "        s += 2\n",
    "    elif fu > 0:\n",
    "        s += 1\n",
    "\n",
    "    if row.get(\"access_tier\") == \"open\":\n",
    "        s += 1.5\n",
    "    s += min(row.get(\"n_modalities\") or 0, 8) * 0.25\n",
    "\n",
    "    # Reward under-used resources: a negative reuse gap index means less reuse than\n",
    "    # comparable datasets, which is an opportunity rather than a warning.\n",
    "    rgi = row.get(\"reuse_gap_index\")\n",
    "    if rgi is not None and rgi == rgi and rgi < 0:\n",
    "        s += min(-rgi, 3) * 0.75\n",
    "    if row.get(\"is_showcase\"):\n",
    "        s += 1  # a reviewed page means the limitations are already written down\n",
    "    return round(s, 2)\n",
    "\n",
    "\n",
    "eligible = eligible.copy()\n",
    "eligible[\"fit_score\"] = eligible.apply(score, axis=1)\n",
    "ranked = eligible.sort_values(\"fit_score\", ascending=False)\n",
    "\n",
    "print(\"Ranked by fit for a treatment-resistance question:\\n\")\n",
    "print(\n",
    "    ranked.head(8)[\n",
    "        [\"short_title\", \"fit_score\", \"n_cases\", \"median_followup_months\",\n",
    "         \"access_tier\", \"reuse_gap_index\", \"is_showcase\"]\n",
    "    ].to_string(index=False)\n",
    ")\n",
    "\n",
    "choice = ranked.iloc[0]\n",
    "print(f\"\\nSelected: {choice['title']}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "496be94a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:43:02.172434Z",
     "iopub.status.busy": "2026-09-21T00:43:02.172379Z",
     "iopub.status.idle": "2026-09-21T00:43:02.175310Z",
     "shell.execute_reply": "2026-09-21T00:43:02.174954Z"
    }
   },
   "outputs": [],
   "source": [
    "# One house style for every figure below: a single accent, one contrast colour for the\n",
    "# thing the reader must not miss, and nothing else. Defined here rather than imported so\n",
    "# the downloaded notebook runs on its own.\n",
    "INK, ACCENT, WARN, MUTED = \"#1f2430\", \"#2f6f6b\", \"#b4762a\", \"#9aa3b2\"\n",
    "mpl.rcParams.update(\n",
    "    {\n",
    "        \"figure.dpi\": 120,\n",
    "        \"savefig.dpi\": 120,\n",
    "        \"font.size\": 9.5,\n",
    "        \"axes.titlesize\": 11,\n",
    "        \"axes.titleweight\": \"semibold\",\n",
    "        \"axes.labelcolor\": INK,\n",
    "        \"axes.titlecolor\": INK,\n",
    "        \"text.color\": INK,\n",
    "        \"axes.edgecolor\": MUTED,\n",
    "        \"xtick.color\": MUTED,\n",
    "        \"ytick.color\": MUTED,\n",
    "        \"axes.grid\": True,\n",
    "        \"grid.color\": \"#e6e9ef\",\n",
    "        \"grid.linewidth\": 0.8,\n",
    "        \"axes.axisbelow\": True,\n",
    "    }\n",
    ")\n",
    "\n",
    "\n",
    "def finish(ax, title):\n",
    "    ax.set_title(title, loc=\"left\")\n",
    "    for side in (\"top\", \"right\"):\n",
    "        ax.spines[side].set_visible(False)\n",
    "    ax.figure.tight_layout()\n",
    "    return ax"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "475caf8b",
   "metadata": {},
   "source": [
    "### Why this one, and not the biggest one\n",
    "\n",
    "The selected cohort is highlighted. Reading the scores as a chart makes the agent's\n",
    "reasoning auditable: a human can see at a glance whether the ranking is decided by fit\n",
    "or by a single dominant term."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "de4837b7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:43:02.176296Z",
     "iopub.status.busy": "2026-09-21T00:43:02.176241Z",
     "iopub.status.idle": "2026-09-21T00:43:02.261849Z",
     "shell.execute_reply": "2026-09-21T00:43:02.261524Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Failed to find font weight semibold for DejaVu Sans, now using 700.\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1032x696 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "top = ranked.head(8).iloc[::-1]\n",
    "colors = [ACCENT if t == choice[\"short_title\"] else MUTED for t in top[\"short_title\"]]\n",
    "pos = list(range(len(top)))\n",
    "fig, ax = plt.subplots(figsize=(8.6, 0.5 * len(top) + 1.8))\n",
    "ax.barh(pos, top[\"fit_score\"], color=colors, height=0.62)\n",
    "ax.set_yticks(pos)\n",
    "ax.set_yticklabels(top[\"short_title\"])\n",
    "for i, v in enumerate(top[\"fit_score\"]):\n",
    "    ax.text(v, i, f\" {v:.2f}\", va=\"center\", fontsize=8.5, color=INK)\n",
    "ax.set_xlabel(\"fit score for a treatment-resistance question\")\n",
    "ax.set_xlim(0, float(top[\"fit_score\"].max()) * 1.14)\n",
    "ax.grid(axis=\"y\", visible=False)\n",
    "finish(ax, \"Ranked on measured capability, not on size or fame\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad3f924f",
   "metadata": {},
   "source": [
    "## 4. Read the blocking limitations before committing\n",
    "\n",
    "This is the step that distinguishes a careful agent from a fast one. Each dataset's\n",
    "full record carries limitations graded by severity, and a `blocking` limitation means a\n",
    "whole class of analysis is ruled out no matter how the model is specified."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "86d3dad3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:43:02.263022Z",
     "iopub.status.busy": "2026-09-21T00:43:02.262958Z",
     "iopub.status.idle": "2026-09-21T00:43:02.267373Z",
     "shell.execute_reply": "2026-09-21T00:43:02.266979Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MP2PRT-ALL: 0 blocking, 4 major limitations\n",
      "\n",
      "No blocking limitations recorded. Proceed, minding the major ones:\n",
      "\n",
      "  [missing_data] Despite complete treatment-outcome coverage, the descriptive treatment fields are empty: treatment type, treatment given and therapeutic agents are all at 0%. The regimen field names the pro\n",
      "  [missing_data] Cause of death is not recorded for any case, so competing risks cannot be separated.\n",
      "  [ascertainment_bias] Participants are enrolled on cooperative-group trials, which select for access to a participating center and for eligibility criteria that exclude some patients. Outcomes in trial population\n"
     ]
    }
   ],
   "source": [
    "record_path = INDEX_PATH.parent / \"datasets\" / f\"{choice['id']}.json\"\n",
    "record = json.loads(record_path.read_text())\n",
    "\n",
    "blocking = [l for l in record.get(\"limitations\", []) if l[\"severity\"] == \"blocking\"]\n",
    "major = [l for l in record.get(\"limitations\", []) if l[\"severity\"] == \"major\"]\n",
    "\n",
    "print(f\"{choice['short_title']}: {len(blocking)} blocking, {len(major)} major limitations\\n\")\n",
    "for l in blocking:\n",
    "    print(f\"BLOCKING [{l['kind']}]\")\n",
    "    print(f\"  {l['statement'][:300]}\")\n",
    "    print(f\"  rules out: {', '.join(l['affected_analyses'])}\\n\")\n",
    "\n",
    "if not blocking:\n",
    "    print(\"No blocking limitations recorded. Proceed, minding the major ones:\\n\")\n",
    "    for l in major[:3]:\n",
    "        print(f\"  [{l['kind']}] {l['statement'][:190]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05893dc1",
   "metadata": {},
   "source": [
    "## 5. Emit a task brief\n",
    "\n",
    "What an agent should hand to the next step: the dataset, the access route, the\n",
    "questions it can support, and the constraints it must respect."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "af1167ca",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-21T00:43:02.268405Z",
     "iopub.status.busy": "2026-09-21T00:43:02.268346Z",
     "iopub.status.idle": "2026-09-21T00:43:02.271164Z",
     "shell.execute_reply": "2026-09-21T00:43:02.270803Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\n",
      "  \"dataset_id\": \"gdc-mp2prt-all\",\n",
      "  \"title\": \"Molecular Profiling to Predict Response to Treatment for Acute Lymphoblastic Leukemia\",\n",
      "  \"selected_because\": {\n",
      "    \"fit_score\": 9.75,\n",
      "    \"cases\": 1510,\n",
      "    \"median_followup_months\": 100.2,\n",
      "    \"treatment_response_recorded\": true,\n",
      "    \"access_tier\": \"mixed\",\n",
      "    \"reuse_gap_index\": -1.661\n",
      "  },\n",
      "  \"access\": {\n",
      "    \"mechanism\": \"Data Access Request through dbGaP using an eRA Commons account; institutional signing official approval required\",\n",
      "    \"landing_page\": \"https://portal.gdc.cancer.gov/projects/MP2PRT-ALL\",\n",
      "    \"steps\": [\n",
      "      \"Confirm which trial protocols the cohort draws from\",\n",
      "      \"Scope with the 7,459 open-access files\",\n",
      "      \"Submit a dbGaP data access request\",\n",
      "      \"Query the project from code, with no credentials\",\n",
      "      \"Pass the token when the agent needs controlled files\"\n",
      "    ]\n",
      "  },\n",
      "  \"supported_questions\": [\n",
      "    \"Which genomic features predict failure of protocolised induction therapy in paediatric B-cell acute lymphoblastic leukaemia?\",\n",
      "    \"Do Hispanic or Latino children carry a different genomic landscape or a different response profile, and does genomics explain any of the known outcome disparity?\",\n",
      "    \"What are the long-term survival determinants in paediatric ALL, given follow-up that extends beyond fifteen years?\",\n",
      "    \"How do subtype-defining fusions and copy number alterations interact with assigned risk group and delivered therapy?\"\n",
      "  ],\n",
      "  \"must_not_do\": [\n",
      "    \"Estimating paediatric ALL incidence or population survival.\",\n",
      "    \"Comparing specific chemotherapy agents head to head.\"\n",
      "  ],\n",
      "  \"blocking_constraints\": [],\n",
      "  \"provenance\": {\n",
      "    \"review_status\": \"project_curated\",\n",
      "    \"metadata_retrieved\": \"2026-09-18T02:35:42.169383Z\"\n",
      "  }\n",
      "}\n"
     ]
    }
   ],
   "source": [
    "brief = {\n",
    "    \"dataset_id\": record[\"id\"],\n",
    "    \"title\": record[\"title\"],\n",
    "    \"selected_because\": {\n",
    "        \"fit_score\": float(choice[\"fit_score\"]),\n",
    "        \"cases\": record[\"cohort\"].get(\"n_cases\"),\n",
    "        \"median_followup_months\": record[\"longitudinal\"].get(\"median_followup_months\"),\n",
    "        \"treatment_response_recorded\": record[\"longitudinal\"].get(\"has_treatment_response\"),\n",
    "        \"access_tier\": record[\"access\"][\"tier\"],\n",
    "        \"reuse_gap_index\": record[\"reuse_metrics\"].get(\"reuse_gap_index\"),\n",
    "    },\n",
    "    \"access\": {\n",
    "        \"mechanism\": record[\"access\"].get(\"mechanism\"),\n",
    "        \"landing_page\": record.get(\"landing_page_url\"),\n",
    "        \"steps\": [s[\"action\"] for s in record.get(\"access_steps\", [])],\n",
    "    },\n",
    "    \"supported_questions\": [q[\"question\"] for q in record.get(\"useful_for\", [])][:5],\n",
    "    \"must_not_do\": [u[\"statement\"] for u in record.get(\"inappropriate_uses\", [])],\n",
    "    \"blocking_constraints\": [\n",
    "        {\"kind\": l[\"kind\"], \"rules_out\": l[\"affected_analyses\"]} for l in blocking\n",
    "    ],\n",
    "    \"provenance\": {\n",
    "        \"review_status\": record[\"review\"][\"status\"],\n",
    "        \"metadata_retrieved\": record.get(\"retrieved_at\"),\n",
    "    },\n",
    "}\n",
    "print(json.dumps(brief, indent=2)[:2600])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43c9d709",
   "metadata": {},
   "source": [
    "## What this demonstrates\n",
    "\n",
    "The selection changed because the filter was a *measurement* rather than a description.\n",
    "A size-ranked search returns the largest cohort; a capability-ranked search returns one\n",
    "where the analysis is actually possible, and hands the next step an explicit list of\n",
    "what the data cannot support.\n",
    "\n",
    "Every field used here is in the published export, so any agent can do this without\n",
    "scraping pages or guessing at what a dataset contains."
   ]
  }
 ],
 "metadata": {
  "cds": {
   "built_at": "2026-09-21T00:43:01.300479+00:00",
   "source": "workbooks/python/06_agent_dataset_selection.py"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
