175 lines (174 with data), 70.7 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "4069f724",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/mnt/d/Forschung/Breast-Cancer-Treatment-Prediction/venv/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Path to dataset files: /home/kesslermatics/.cache/kagglehub/datasets/raghadalharbi/breast-cancer-gene-expression-profiles-metabric/versions/1\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_32394/2461765115.py:9: DtypeWarning: Columns (678,688,690,692) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" df = pd.read_csv(os.path.join(path, \"METABRIC_RNA_Mutation.csv\"))\n"
]
}
],
"source": [
"import kagglehub\n",
"import os\n",
"import pandas as pd\n",
"\n",
"# Download latest version\n",
"path = kagglehub.dataset_download(\"raghadalharbi/breast-cancer-gene-expression-profiles-metabric\")\n",
"\n",
"print(\"Path to dataset files:\", path)\n",
"df = pd.read_csv(os.path.join(path, \"METABRIC_RNA_Mutation.csv\"))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "653061b1",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_32394/2753520122.py:14: DtypeWarning: Columns (678,688,690,692) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" df = pd.read_csv(os.path.join(path, \"METABRIC_RNA_Mutation.csv\"))\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAvZ1JREFUeJzs3Xl4Tdf79/HPkeHkkIkISdpEiIhQQVEzMbQxRRXVqoqZ1lQzqWopGooa6meotoaa1VClpahZTSlKpTGURoumpsTUkOQ8f3hyvo4kJDiivF/Xta8re+21177XzhG5s9Ze22A2m80CAAAAAAAPXa6cDgAAAAAAgCcVSTcAAAAAADZC0g0AAAAAgI2QdAMAAAAAYCMk3QAAAAAA2AhJNwAAAAAANkLSDQAAAACAjZB0AwAAAABgIyTdAAAAAADYCEk3AAAAclyDBg3UqVOnnA7jnoYOHSqDwZDTYTyR1qxZI2dnZ/3zzz85HQrwUJF0AwCeGAaDIUvbpk2bbBrHqVOnNGzYML3wwgvKmzev8ufPr9DQUK1fvz7D+pcuXVLnzp3l6empPHnyqFatWvr555+zdK3Q0NBM+/nbb789zG5ZTJkyRbNmzbJJ2w8qNDRUzz33XE6Hcd9Onz6toUOHav/+/TkdyiO1fft2/fDDDxo4cKClbNOmTVafZzs7OxUoUEDNmzdXTExMDkb7eLnzPt2+vf766zkdXoYy+xlSr149FS1aVFFRUY8+KMCG7HM6AAAAHpavvvrKan/OnDlat25duvLg4GCbxvHNN99o9OjRatKkidq0aaPk5GTNmTNHL774or788ku1a9fOUjc1NVUNGzbUgQMH1L9/f+XPn19TpkxRaGiooqOjFRgYeM/rPfvssxn+kurj4/NQ+5VmypQpyp8/v9q2bWuT9p9mp0+f1rBhw+Tv768yZcrkdDiPzJgxY1SnTh0VLVo03bGePXuqQoUKunnzpn755RdNmzZNmzZt0qFDh+Tl5ZUD0T6e0u7T7fz9/XMmmHu428+QLl26qF+/fho2bJhcXFwefXCADZB0AwCeGG+++abV/s6dO7Vu3bp05bZWq1YtxcXFKX/+/Jayt956S2XKlNH7779vlXR//fXX2rFjh5YsWaLmzZtLklq0aKFixYrpgw8+0Pz58+95PTc3t0fex4fNbDbr33//lclkyulQckRycrJSU1NzOowcER8fr9WrV2vatGkZHq9evbrl34YkBQUF6e2339acOXM0YMCARxXmY+/O+/SwXL16VXny5Hno7WamWbNm6tGjh5YsWaL27ds/susCtsT0cgDAU+Xq1avq27evfH19ZTQaFRQUpLFjx8psNlvVMxgM6t69u+bNm6egoCA5OTmpXLly2rJlyz2vUbJkSauEW5KMRqMaNGigP//8U5cvX7aUf/311ypYsKCaNm1qKfP09FSLFi30zTffKCkp6QF7LCUlJemDDz5Q0aJFZTQa5evrqwEDBqRre+bMmapdu7YKFCggo9GoEiVKaOrUqVZ1/P399euvv2rz5s2WKayhoaGSMn/WddasWTIYDDp58qRVO40aNdLatWtVvnx5mUwmTZ8+XdKt6fa9evWyfI+KFi2q0aNH33dSmva9XLJkiUqUKCGTyaTKlSvr4MGDkqTp06eraNGicnJyUmhoqFWc0v+mrEdHR6tKlSoymUwqXLhwhklifHy8OnTooIIFC8rJyUmlS5fW7NmzreqcPHlSBoNBY8eO1YQJExQQECCj0agpU6ZYRirbtWtnub9p03C3bt2qV199VX5+fpbvY+/evXX9+nWr9tu2bStnZ2f99ddfatKkiZydneXp6al+/fopJSXFqm5qaqomTpyoUqVKycnJSZ6enqpXr5727t1rVW/u3LkqV66cTCaT8uXLp9dff12nTp2yqnP06FE1a9ZMXl5ecnJy0rPPPqvXX39dCQkJd/3+rF69WsnJyapbt+5d66WpXr26JOn48eNW5WPHjlWVKlXk4eEhk8mkcuXK6euvv053ftrnYcWKFXruuedkNBpVsmRJrVmzJl3dbdu2qUKFCnJyclJAQIDlM3qn5ORkDR8+3PK99Pf317vvvpvu31ja537Tpk2Wz32pUqUsj7wsW7bM8r0oV66c9u3bl6V7khX79u1T/fr15erqKmdnZ9WpU0c7d+60qpP2b3Xz5s3q2rWrChQooGeffdZy/Pvvv1f16tWVJ08eubi4qGHDhvr111+t2jh79qzatWunZ599VkajUd7e3nr55Zct/67u9jNEkgoUKKCQkBB98803D63vQE5jpBsA8NQwm81q3LixNm7cqA4dOqhMmTJau3at+vfvr7/++kvjx4+3qr9582YtWrRIPXv2tCRF9erV0+7du+/rueGzZ88qd+7cyp07t6Vs3759ev7555Url/XfwV944QV99tlnOnLkiEqVKnXXdlNSUnTu3DmrMicnJzk7Oys1NVWNGzfWtm3b1LlzZwUHB+vgwYMaP368jhw5ohUrVljOmTp1qkqWLKnGjRvL3t5e3377rbp27arU1FR169ZNkjRhwgT16NFDzs7OGjx4sCSpYMGC2b4XkhQbG6uWLVuqS5cu6tSpk4KCgnTt2jXVrFlTf/31l7p06SI/Pz/t2LFDkZGROnPmjCZMmHBf19q6datWrlxp6UdUVJQaNWqkAQMGaMqUKeratasuXryojz/+WO3bt9ePP/5odf7FixfVoEEDtWjRQi1bttTixYv19ttvy9HR0TIad/36dYWGhurYsWPq3r27ChcurCVLlqht27a6dOmS3nnnHas2Z86cqX///VedO3eW0WjUK6+8osuXL+v9999X586dLclllSpVJElLlizRtWvX9Pbbb8vDw0O7d+/Wp59+qj///FNLliyxajslJUVhYWGqWLGixo4dq/Xr12vcuHEKCAjQ22+/banXoUMHzZo1S/Xr11fHjh2VnJysrVu3aufOnSpfvrwkaeTIkRoyZIhatGihjh076p9//tGnn36qGjVqaN++fXJ3d9eNGzcUFhampKQk9ejRQ15eXvrrr7+0atUqXbp0SW5ubpl+b3bs2CEPDw8VKlQoS9/LtOQtb968VuUTJ05U48aN1apVK924cUMLFy7Uq6++qlWrVqlhw4ZWdbdt26Zly5apa9eucnFx0aRJk9SsWTPFxcXJw8NDknTw4EG99NJL8vT01NChQ5WcnKwPPvggw897x44dNXv2bDVv3lx9+/bVrl27FBUVpZiYGC1fvtyq7rFjx/TGG2+oS5cuevPNNzV27FiFh4dr2rRpevfdd9W1a1dJtz6jLVq0UGxsbLqfDxm5fPlyup8D+fLlU65cufTrr7+qevXqcnV11YABA+Tg4KDp06crNDRUmzdvVsWKFa3O69q1qzw9PfX+++/r6tWrkm49vtOmTRuFhYVp9OjRunbtmqZOnapq1app3759lqnszZo106+//qoePXrI399f8fHxWrduneLi4uTv75+lnyHlypWz+tkE/OeZAQB4QnXr1s18+391K1asMEsyjxgxwqpe8+bNzQaDwXzs2DFLmSSzJPPevXstZX/88YfZycnJ/Morr2Q7lqNHj5qd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3LhRzz777F3bjYyMVEJCgmU7depUtuICAAAAQNINZCowMFAmk8myMNqdSpUqpfLly2vGjBmaP3++2rdvn67Ozp070+0HBwdb9hMTE/XSSy/J0dFRK1eulJOTU7bj3L59u15++WW9+eabKl26tIoUKaIjR45Y1TGbzerevbuWL1+uH3/8UYULF75nu0ajUa6urlYbAAAAgOzJ+mpNwFPGyclJAwcO1IABA+To6KiqVavqn3/+0a+//mp5rVfHjh3VvXt35cmTR6+88kq6NrZv366PP/5YTZo00bp167RkyRKtXr1a0v8S7mvXrmnu3LlKTExUYmKiJMnT01N2dnaSpGPHjunKlSs6e/asrl+/bnmmu0SJEnJ0dFRgYKC+/vpr7dixQ3nz5tUnn3yiv//+WyVKlLDE0a1bN82fP1/ffPONXFxcdPbsWUmSm5vbPUf0AQAAANw/km7gLoYMGSJ7e3u9//77On36tLy9vfXWW29Zjrds2VK9evVSy5YtMxyl7tu3r/bu3athw4bJ1dVVn3zyicLCwiTdeg58165dkqSiRYtanXfixAn5+/tLupXYb9682XKsbNmyVnXee+89/f777woLC1Pu3LnVuXNnNWnSxLJCuSRNnTpVkhQaGmp1nZkzZ6Z7Dh0AAADAw8Pq5cADOHnypAICArRnzx49//zzVsf8/f3Vq1cv9erVK2eCe8jSVmdk9XI8bVi9HAAAZCSrq5cz0g3ch5s3b+r8+fN67733VKlSpXQJNwAAAABILKQG3Jft27fL29tbe/bs0bRp03I6HAAAAACPKUa6gfsQGhqqez2ZcfLkyUcTDAAAAIDHFiPdAAAAAADYCCPdALJly4iWvLMbAAAAyCJGugEAAAAAsBGSbgAAAAAAbISkGwAAAAAAGyHpBgAAAADARlhIDUC21HhvgeyMppwOA/hPih4TkdMhAACAR4yRbgAAAAAAbISkGwAAAAAAGyHpBgAAAADARki6AQAAAACwEZJu4C5CQ0PVq1evh9aev7+/JkyY8NDak6RZs2bJ3d39obYJAAAA4OEg6QZy0GeffabQ0FC5urrKYDDo0qVLVsc3bdokg8GQ4bZnz577uub27dtlb2+vMmXKPHgHAAAAANwVSTeQg65du6Z69erp3XffzfB4lSpVdObMGautY8eOKly4sMqXL5/t6126dEkRERGqU6fO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j0Bqaqo+/vhjFS1aVEajUX5+fho5cqTl+O+//65atWopd+7cKl26tH766Ser87dt26bq1avLZDLJ19dXPXv21NWrVzO93ueffy53d3dt2LBBklS/fn2NGDFCr7zyim06CAAAACBDJN3AIxAZGalRo0ZpyJAhOnz4sObPn6+CBQtajg8ePFj9+vXT/v37VaxYMbVs2VLJycmSpOPHj6tevXpq1qyZfvnlFy1atEjbtm1T9+7dM7zWxx9/rEGDBumHH35QnTp1Hkn/AAAAAGTMYDabzTkdBPAku3z5sjw9PTV58mR17NjR6tjJkydVuHBhff755+rQoYMk6fDhwypZsqRiYmJUvHhxdezYUXZ2dpo+fbrlvG3btqlmzZq6evWqnJyc5O/vr169eunMmTP66quvtG7dOpUsWTLDeAwGg5YvX64mTZrcNe6kpCQlJSVZ9hMTE+Xr66vSPabJzmi6z7sBAI9e9JiInA4BAPAESkxMlJubmxISEuTq6pppPftHGBPwVIqJiVFSUtJdR51DQkIsX3t7e0uS4uPjVbx4cR04cEC//PKL5s2bZ6ljNpuVmpqqEydOKDg4WJI0btw4Xb16VXv37lWRIkUeOO6oqCgNGzbsgdsBAAAAnmZMLwdszGS696iwg4OD5WuDwSDp1nPgknTlyhV16dJF+/fvt2wHDhzQ0aNHFRAQYDmvevXqSklJ0eLFix9K3JGRkUpISLBsp06deijtAgAAAE8TRroBGwsMDJTJZNKGDRvSTS/Piueff16HDx9W0aJF71rvhRdeUPfu3VWvXj3Z29urX79+9xuyJMloNMpoND5QGwAAAMDTjqQbsDEnJycNHDhQAwYMkKOjo6pWrap//vlHv/76a5YWOhs4cKAqVaqk7t27q2PHjsqTJ48OHz6sdevWafLkyVZ1q1Spou+++07169eXvb29evXqJenWaPmxY8cs9U6cOKH9+/crX7588vPze6j9BQAAAPA/JN3AIzBkyBDZ29vr/fff1+nTp+Xt7a233norS+eGhIRo8+bNGjx4sKpXry6z2ayAgAC99tprGdavVq2aVq9erQYNGsjOzk49evTQ3r17VatWLUudPn36SJLatGmjWbNmPXD/AAAAAGSM1csBZEna6oysXg7gv4bVywEAtpDV1ctZSA0AAAAAABsh6QYAAAAAwEZIugEAAAAAsBGS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PWBlZYXPP/8cKioqSE5OxsWLFzFz5kzcuXMHX3/9NX788Ud8/PHHCA8PR48ePdC1a1e0adOm2ttMRERERERFPsiRbolEgl27dsHAwADt27eHu7s76tevj02bNoll+vXrB09PT3Tq1AnGxsb4/fffAQALFizAoUOHYGlpiWbNmr11G9atWwdTU1O0b98effr0wfDhw6GjoyM3FfhNRowYgb59+2LAgAFo3bo1Hj9+jFGjRr11myojNDQUoaGhcHZ2xokTJxAVFYXatWu/cZ9+/fph8ODBcHFxwfXr13HgwAExqbWxscHWrVuxfft2ODk5Yfny5eLq5VKptMJt8/f3x9ixYxEQEABHR0fs379ffBQZUDRSPXfuXLRo0QItW7ZEWloa9u7dK44IV+Qc+/j4YNGiRVi2bBmaNGmCHj16iKujV7c2bdpg1apVCAsLg7OzMw4ePIipU6fKlfHw8MDu3btx8OBBtGzZEm3atMHChQtRr149CIIAX19ftGrVSnysmYeHB77++mv873//Q05OjkLaTUREREREgESozM2wpDB37tyBpaUlDh8+XK0LdFW3tLQ02NjYIDExscRzqxVh1qxZWLFiBe8nfgdkZ2dDT08PzmNWQFVa/fe1ExERERH9W8K8IcpuQpmK/z7Oysoq91bMD3J6+bvg6NGjyMnJgaOjIzIyMjBhwgRYW1ujffv2ym6aUi1btgwtW7aEkZERYmNjMW/ePHF0loiIiIiI6H3zQU4vfxfk5eXhhx9+QJMmTdCnTx8YGxsjOjq6xMrcNW327Nlyj516/VX8fG1FunbtGnr16oXGjRtjxowZCAgIQFBQkMKPW102bNhQZvyaNGmi7OYREREREVEN4/RykpOZmSmu4v1vMpkMdevWreEWvV+ePXuGBw8elLpNXV0d9erVq+EWVR9OLyciIiKimsbp5fSfY2hoCENDQ2U3472lo6MDHR0dZTeDiIiIiIjeEUy6iahSjs0cxGd2ExERERFVEO/pJiIiIiIiIlIQJt1ERERERERECsKkm4iIiIiIiEhBmHQTERERERERKQgXUiOiSmk/9Xc+MoyIiIiIatS7/OiwN+FINxEREREREZGCMOkmIiIiIiIiUhAm3UREREREREQKwqSbiIiIiIiISEGUlnR37NgR3333nbIODwCIjo6GRCLB06dPldqOf3tX21WT0tLS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",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import os\n",
"\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import OneHotEncoder, StandardScaler\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.pipeline import Pipeline\n",
"\n",
"df = pd.read_csv(os.path.join(path, \"METABRIC_RNA_Mutation.csv\"))\n",
"\n",
"# Drop rows with missing target\n",
"df = df.dropna(subset=[\"chemotherapy\"])\n",
"\n",
"# Drop ID and known outcome variables\n",
"drop_cols = [\n",
" \"patient_id\"\n",
"]\n",
"X = df.drop(columns=drop_cols + [\"chemotherapy\"], errors=\"ignore\")\n",
"y = df[\"chemotherapy\"].astype(int)\n",
"\n",
"# Keep only useful columns\n",
"X = X.loc[:, X.nunique() > 1] # drop constant cols\n",
"X = X.dropna(axis=1, thresh=int(0.8 * len(X))) # drop cols with >20% missing\n",
"combined = pd.concat([X, y], axis=1).dropna()\n",
"X = combined.drop(columns=[\"chemotherapy\"])\n",
"y = combined[\"chemotherapy\"]\n",
"\n",
"# Split columns by type\n",
"numeric_cols = X.select_dtypes(include=[\"int64\", \"float64\"]).columns.tolist()\n",
"categorical_cols = X.select_dtypes(include=[\"object\", \"bool\", \"category\"]).columns.tolist()\n",
"X[categorical_cols] = X[categorical_cols].astype(str)\n",
"\n",
"# Preprocessing\n",
"preprocessor = ColumnTransformer([\n",
" (\"num\", StandardScaler(), numeric_cols),\n",
" (\"cat\", OneHotEncoder(handle_unknown=\"ignore\", drop=\"first\"), categorical_cols)\n",
"])\n",
"\n",
"# Pipeline with Random Forest\n",
"pipeline = Pipeline([\n",
" (\"preprocess\", preprocessor),\n",
" (\"clf\", RandomForestClassifier(n_estimators=100, random_state=42))\n",
"])\n",
"\n",
"# Train/Test split\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.2, random_state=42)\n",
"\n",
"# Fit model\n",
"pipeline.fit(X_train, y_train)\n",
"\n",
"# Get feature names\n",
"encoded_cat_names = pipeline.named_steps[\"preprocess\"].named_transformers_[\"cat\"].get_feature_names_out(categorical_cols)\n",
"feature_names = numeric_cols + list(encoded_cat_names)\n",
"\n",
"# Get importances\n",
"importances = pipeline.named_steps[\"clf\"].feature_importances_\n",
"indices = np.argsort(importances)[::-1][:20]\n",
"\n",
"# Plot\n",
"os.makedirs(\"../outputs/figures\", exist_ok=True)\n",
"plt.figure(figsize=(10, 6))\n",
"sns.barplot(x=importances[indices][::-1], y=np.array(feature_names)[indices][::-1])\n",
"plt.title(\"Top 20 Feature Importances (Random Forest)\")\n",
"plt.xlabel(\"Importance\")\n",
"plt.tight_layout()\n",
"plt.savefig(\"../outputs/figures/feature_importance_random_forest.png\")\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ae836567",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "venv",
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}