{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Explore PCA for just the Proestou & Sullivan studies, starting with just 2023" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Study</th>\n", " <th>BioProject</th>\n", " <th>Experiment</th>\n", " <th>BREED</th>\n", " <th>treatment</th>\n", " <th>control</th>\n", " <th>Trait</th>\n", " <th>tissue</th>\n", " <th>Collection_Interval_Days</th>\n", " <th>Collection_Date</th>\n", " <th>subset</th>\n", " <th>TRSS</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>P&S 2023</td>\n", " <td>PRJNA894694</td>\n", " <td>SRX18040064</td>\n", " <td>ABC_VIMS_Family_2017084</td>\n", " <td>Dose 1x10^6</td>\n", " <td>0</td>\n", " <td>tolerant</td>\n", " <td>mantle</td>\n", " <td>7.0</td>\n", " <td>2018-06-20</td>\n", " <td>0.0</td>\n", " <td>tolerant</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>P&S 2023</td>\n", " <td>PRJNA894694</td>\n", " <td>SRX18040063</td>\n", " <td>ABC_VIMS_Family_2017084</td>\n", " <td>Control</td>\n", " <td>1</td>\n", " <td>tolerant</td>\n", " <td>mantle</td>\n", " <td>7.0</td>\n", " <td>2018-06-20</td>\n", " <td>1.0</td>\n", " <td>tolerant</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>P&S 2023</td>\n", " <td>PRJNA894694</td>\n", " <td>SRX18040062</td>\n", " <td>ABC_VIMS_Family_2017120</td>\n", " <td>Dose 1x10^6</td>\n", " <td>0</td>\n", " <td>sensitive</td>\n", " <td>mantle</td>\n", " <td>7.0</td>\n", " <td>2018-06-20</td>\n", " <td>0.0</td>\n", " <td>sensitive</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>P&S 2023</td>\n", " <td>PRJNA894694</td>\n", " <td>SRX18040061</td>\n", " <td>ABC_VIMS_Family_2017120</td>\n", " <td>Dose 1x10^8</td>\n", " <td>0</td>\n", " <td>sensitive</td>\n", " <td>mantle</td>\n", " <td>7.0</td>\n", " <td>2018-06-20</td>\n", " <td>1.0</td>\n", " <td>sensitive</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>P&S 2023</td>\n", " <td>PRJNA894694</td>\n", " <td>SRX18040060</td>\n", " <td>ABC_VIMS_Family_2017090</td>\n", " <td>Dose 1x10^6</td>\n", " <td>0</td>\n", " <td>sensitive</td>\n", " <td>mantle</td>\n", " <td>7.0</td>\n", " <td>2018-06-20</td>\n", " <td>0.0</td>\n", " <td>sensitive</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Study BioProject Experiment BREED treatment \\\n", "0 P&S 2023 PRJNA894694 SRX18040064 ABC_VIMS_Family_2017084 Dose 1x10^6 \n", "1 P&S 2023 PRJNA894694 SRX18040063 ABC_VIMS_Family_2017084 Control \n", "2 P&S 2023 PRJNA894694 SRX18040062 ABC_VIMS_Family_2017120 Dose 1x10^6 \n", "3 P&S 2023 PRJNA894694 SRX18040061 ABC_VIMS_Family_2017120 Dose 1x10^8 \n", "4 P&S 2023 PRJNA894694 SRX18040060 ABC_VIMS_Family_2017090 Dose 1x10^6 \n", "\n", " control Trait tissue Collection_Interval_Days Collection_Date \\\n", "0 0 tolerant mantle 7.0 2018-06-20 \n", "1 1 tolerant mantle 7.0 2018-06-20 \n", "2 0 sensitive mantle 7.0 2018-06-20 \n", "3 0 sensitive mantle 7.0 2018-06-20 \n", "4 0 sensitive mantle 7.0 2018-06-20 \n", "\n", " subset TRSS \n", "0 0.0 tolerant \n", "1 1.0 tolerant \n", "2 0.0 sensitive \n", "3 1.0 sensitive \n", "4 0.0 sensitive " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "import os\n", "from IPython.display import display\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.decomposition import PCA\n", "\n", "\n", "working_dir = \"~/git/Cvirg_Pmarinus_RNAseq/data/\"\n", "# === 1ï¸âƒ£ Load Expression Data (TSV) ===\n", "expression_file = os.path.join(working_dir, \"rnaseq_gene_counts\", \"merged_gene_counts.tsv\")\n", "expression_df = pd.read_csv(expression_file, sep=\"\\t\")\n", "\n", "# Load the metadata file\n", "metadata_file_path = os.path.join(working_dir, \"augmented_metadata.csv\")\n", "metadata_df = pd.read_csv(metadata_file_path)\n", "display(metadata_df.head())\n", "\n", "# Extract unique BioProject values along with their associated Study values\n", "unique_bioprojects = metadata_df[['BioProject', 'Study']].drop_duplicates()\n", "\n", "# Filter the metadata for the selected BioProjects\n", "# selected_bioprojects = [\"PRJNA894694\", \"PRJNA691949\", \"PRJNA590205\"]\n", "selected_bioprojects = [\"PRJNA691949\", \"PRJNA590205\"]\n", "filtered_metadata = metadata_df[metadata_df[\"BioProject\"].isin(selected_bioprojects)]\n", "\n", "# Extract the corresponding Experiment IDs (sample IDs)\n", "selected_experiments = filtered_metadata[\"Experiment\"].unique()\n", "\n", "# Subset the gene counts data to include only the selected Experiment IDs\n", "filtered_gene_counts = expression_df[['gene_id'] + list(selected_experiments)]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1UAAAJuCAYAAABYNSgcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjW0lEQVR4nOzdd3xTZf//8XfajK60pYyWUShTQUQUBAFlqFAVvVXqABTBgQtuRFQUERkyFMEbxdutgBNHka+CClUEB1NkyBBlI3u30DZNmvP7g19yEzpI6UjTvp6PRx4051w5+eT0JOTd6zrXMRmGYQgAAAAAcE5CAl0AAAAAAAQzQhUAAAAAFAOhCgAAAACKgVAFAAAAAMVAqAIAAACAYiBUAQAAAEAxEKoAAAAAoBgIVQAAAABQDIQqAAAAACgGQhVQwUyfPl0mk8l7M5vNqlOnju6++27t3r07T/utW7dq4MCBatKkicLDwxUREaELLrhAzzzzTL7tJalHjx4ymUwaOHBgkWo7vS6TyaSYmBh17txZc+fO9WmXlJSkfv36FWnbkpSZmalRo0Zp4cKFRX7s2Wzfvl3du3dXXFycTCaTBg8eXGDbpKQkXX/99SVeg78WLlyYZ18XdCtvpk6dqkaNGslqtcpkMunYsWOBLqlEjBo1qkj7e86cObrxxhtVq1YtWa1W2e12XXzxxRo5cqR27txZipUWn+e1FnTbvn17oEssdZ73YGl8Fp1Nv379fPZ3ZGSkkpKS9K9//UvTpk2Tw+E4521/8803GjVqVMkVC1Qg5kAXAKB0TJs2Teeff76ysrL0008/acKECVq0aJH++OMPRUZGSjr1xa1nz56qVq2aBg4cqIsvvlgmk0l//PGH3nvvPc2dO1erVq3y2e6BAwc0Z84cSdJHH32kSZMmKSwszO+6brnlFj322GNyu93aunWrxo4dqxtuuEFff/21unfvXqzXnJmZqdGjR0uSOnfuXKxtnenRRx/VsmXL9N577ykhIUE1a9Ys0e2XpEsuuURLlizxWXbzzTerYcOGmjRpUoCqOrvVq1dr0KBBuu+++9S3b1+ZzWbZ7fZAl1Wm3G637r77br3//vu69tprNWHCBCUlJSkrK0srVqzQtGnT9N5772nXrl2BLvWsvvvuO8XExORZXp7fOyXF8x5s1qxZQJ4/PDxcCxYskCRlZWVp165d+vbbb9W/f39NnjxZ3333nerUqVPk7X7zzTf673//S7AC8kGoAiqo5s2bq3Xr1pKkLl26KDc3V88995xmz56tO+64Q9u2bVPPnj3VpEkT/fjjjz5ffq688koNGjRIX375ZZ7tvv/++3I6nerevbvmzp2rWbNmqXfv3n7XFR8fr8suu0yS1L59e7Vr106NGjXSlClTih2qStO6devUpk0b3XTTTYEu5ayio6O9+9jDZrMpNjY2z/LTGYah7OxshYeHl3aJ+Vq/fr0kqX///mrTpk2JbDMzM1MRERElsq2y8MILL+j999/XhAkT9NRTT/msu+aaazRs2DC9+eabAaquaFq1aqVq1aoFuoyAHAP5vQfLUkhISJ7nv+uuu3T33Xfr+uuv1y233KKlS5cGqDqgYmL4H1BJeP6D3bFjhyTppZde0smTJ/Xaa6/l+9dkk8mkHj165Fn+3nvvKT4+XjNmzFB4eLjee++9YtXVsGFDVa9e3VtXQXbu3Kk777xTNWrUkM1mU9OmTTV58mS53W5Jp4bnVa9eXZI0evRo79CXsw0jPNt2PcN4Nm/erG+//bbEhjBlZ2dr2LBhql+/vqxWq2rXrq0BAwbkGe7mcDj02GOPKSEhQREREerYsaNWrlx5zkMkT+cZwvnGG2+oadOmstlsmjFjhqRT+7Bt27aKi4tTdHS0LrnkEr377rsyDMNnG56hjt99950uueQShYeH6/zzz89zXGRmZurxxx9X/fr1FRYWpri4OLVu3VqffPKJpFM9i3feeackqW3btnl+d++9954uuugi72Nvvvlmbdy40ec5+vXrp6ioKP3xxx/q1q2b7Ha7rrrqKp/XOm3aNJ133nkKDw9X69attXTpUhmGoRdffFH169dXVFSUrrzySm3evDnP/vr+++911VVXKTo6WhEREerQoYN++OGHPO3mzp2rli1bymazqX79+n73Dubk5GjixIlq3rx5nkDlYTabNWDAgDzLP/30U7Vr106RkZGKiopScnJynl5mz/7ZvHmzrrvuOkVFRSkxMVGPPfZYniFhOTk5Gjt2rM4//3zZbDZVr15dd999tw4ePOjXa/HH888/r5CQEH399dd56oyIiNAff/wh6X/vwQ8//FBDhgxRQkKCwsPD1alTpwJfY37HgL+vacGCBercubOqVq2q8PBw1a1bVykpKcrMzPS2ef3113XRRRcpKipKdrtd559/vp5++mnv+oKG/3311Vdq166dIiIiZLfb1bVr1zy9yp7hk+vXr1evXr0UExOj+Ph43XPPPTp+/Pi57ez/r1u3burfv7+WLVumn376ybv8008/Vbdu3VSzZk2Fh4eradOmeuqpp3Ty5Emfffvf//5XkvIdzvnf//5XHTt2VI0aNRQZGakLL7xQEydOlNPpLFbNQNAwAFQo06ZNMyQZK1as8Fn+8ssvG5KMt956yzAMw2jSpIkRHx9fpG3/+uuvhiTjiSeeMAzDMO68807DZDIZW7du9evxkowBAwb4LDty5IgREhJitG/f3rusXr16Rt++fb33Dxw4YNSuXduoXr268cYbbxjfffedMXDgQEOS8dBDDxmGYRjZ2dnGd999Z0gy7r33XmPJkiXGkiVLjM2bNxdYjz/bPX78uLFkyRIjISHB6NChg3e72dnZBW63Xr16Rvfu3Qtc73a7jeTkZMNsNhsjRoww5s+fb0yaNMmIjIw0Lr74Yp9t9+rVywgJCTGeeuopY/78+caUKVOMxMREIyYmxmcfnU1+NUkyateubbRo0cL4+OOPjQULFhjr1q0zDMMw+vXrZ7z77rtGWlqakZaWZjz33HNGeHi4MXr06DzbrVOnjtGsWTPj/fffN+bNm2fceuuthiRj0aJF3nYPPPCAERERYbz00kvGjz/+aMyZM8d4/vnnjalTpxqGYRjr1683nnnmGUOSMW3aNJ/f3fjx4w1JRq9evYy5c+ca77//vtGgQQMjJibG+Ouvv7zP0bdvX8NisRhJSUnGhAkTjB9++MGYN2+e97XWq1fPaN++vTFr1izjyy+/NJo0aWLExcUZjz76qHHjjTcac+bMMT766CMjPj7eaNGiheF2u73b/uCDDwyTyWTcdNNNxqxZs4yvv/7auP76643Q0FDj+++/97b7/vvvjdDQUOPyyy83Zs2aZXz++efGpZdeatStW9c423+5nvfXsGHD/P69GoZhjBs3zjCZTMY999xjzJkzx5g1a5bRrl07IzIy0li/fr3P/rFarUbTpk2NSZMmGd9//73x7LPPGiaTyef3mpuba1xzzTVGZGSkMXr0aCMtLc145513jNq1axvNmjUzMjMzC61n5MiRhiRj3759htPp9Lm5XC5vO7fbbVx33XVGlSpVjO3btxuGYRjvvfeeIcl45513vO1+/PFHQ5KRmJho3HjjjcbXX39tfPjhh0ajRo2M6OhoY8uWLT6vMb9jwN/XtG3bNiMsLMzo2rWrMXv2bGPhwoXGRx99ZPTp08c4evSoYRiG8cknnxiSjH//+9/G/Pnzje+//9544403jEGDBuWp+ccff/Qu++ijjwxJRrdu3YzZs2cbn376qdGqVSvDarUaP//8c579d9555xnPPvuskZaWZrz00kuGzWYz7r777rMeD3379jUiIyMLXO/5nHzuuee8y5577jnjP//5jzF37lxj4cKFxhtvvGHUr1/f6NKli7fN5s2bjVtuucWQ5P0cPP2z8NFHHzVef/1147vvvjMWLFhg/Oc//zGqVavmV81ARUCoAioYT6haunSp4XQ6jYyMDGPOnDlG9erVDbvdbuzbt88wDMMICwszLrvssiJt+5577jEkGRs3bjQM439fHEaMGOHX4yUZDz/8sOF0Oo2cnBxj48aNxrXXXmtIMv773/96250Zqp566ilDkrFs2TKf7T300EOGyWQyNm3aZBiGYRw8eNCQZIwcOdKvevzdrqemwoLS6c7W1vOlZuLEiT7LP/30U5/gu379ekOS8eSTT/q083ypK4lQFRMTYxw5cqTQx+bm5hpOp9MYM2aMUbVqVZ+wUa9ePSMsLMzYsWOHd1lWVpYRFxdnPPDAA95lzZs3N2666aZCnye/PwgcPXrUCA8PN6677jqftjt37jRsNpvRu3dv77K+ffsakoz33nsvz7YlGQkJCcaJEye8y2bPnm1IMlq2bOnzmqZMmWJIMtauXWsYhmGcPHnSiIuLM2644YY8++Wiiy4y2rRp413Wtm1bo1atWkZWVpZ3WXp6uhEXF3fWUDVz5kxDkvHGG2/kWXdmODl9P5jNZuPf//63T/uMjAwjISHBuO222/Lsn88++8yn7XXXXWecd9553vue4ys1NdWn3YoVKwxJxmuvvVbo6/CEgvxuDRs29Gl76NAho06dOkabNm2M33//3YiIiDDuvPNOnzaez5lLLrnE5/e0fft2w2KxGPfdd1+e13jmMeDva/riiy8MScbq1asLfH0DBw40YmNjC90HZ4aq3Nxco1atWsaFF15o5ObmettlZGQYNWrU8Pmjkmf/nfn58PDDDxthYWE++yA/ZwtVGzdu9PnD0ZncbrfhdDqNRYsWGZKMNWvWeNcNGDDgrMexYfzvM+P99983QkNDz/oZA1QEDP8DKqjLLrtMFotFdrtd119/vRISEvTtt98qPj7+nLZ34sQJffbZZ2rfvr3OP/98SVKnTp3UsGFDTZ8+3Ttc7mxee+01WSwWWa1WNW3aVIsXL9aYMWP08MMPF/iYBQsWqFmzZnnOs+nXr58Mw/CekF1UpbVdf57X8zynu/XWWxUZGekdUrZo0SJJ0m233ebT7pZbbpHZ7HtKrMvl8rkZZwzTK8iVV16pKlWq5Fvj1VdfrZiYGIWGhspisejZZ5/V4cOHdeDAAZ+2LVu2VN26db33w8LC1KRJE58hnW3atNG3336rp556SgsXLlRWVpZf9S1ZskRZWVl59lViYqKuvPLKfIffpaSk5LutLl26eCdpkaSmTZtKkq699lqfmfk8yz31L168WEeOHFHfvn199rHb7dY111yjFStW6OTJkzp58qRWrFihHj16+EzeYrfbdcMNN/j1evNz7NgxWSwWn9tvv/0mSZo3b55cLpfuuusun9rCwsLUqVOnPMPPTCZTnlpatGjh87uaM2eOYmNjdcMNN/hss2XLlkpISPB7Rrvvv/9eK1as8LnNnj3bp03VqlX16aef6vfff1f79u1Vt25dvfHGG/lur3fv3j6/p3r16ql9+/b68ccf87Q98xjw9zW1bNlSVqtV999/v2bMmKGtW7fm2XabNm107Ngx9erVS//3f/+nQ4cOnXVfbNq0SXv27FGfPn0UEvK/r15RUVFKSUnR0qVLfYYXStK//vUvn/stWrRQdnZ2nvdfUeX32bB161b17t1bCQkJ3vd7p06dJCnPMNuCrFq1Sv/6179UtWpV7zbuuusu5ebm6q+//ipWzUAwYKIKoIJ6//331bRpU5nNZsXHx+eZcatu3bratm2b39v79NNPdeLECd12220+5/3cdtttmjBhgtLS0pScnHzW7dx222164oknZDKZZLfb1bBhQ4WGhhb6mMOHDyspKSnP8lq1annXn4vS2q4/z2s2m73ngHmYTCYlJCR4n9fz75lB2Gw2q2rVqj7LLBaLz/1p06b5dc5VfjOxLV++XN26dVPnzp319ttvq06dOrJarZo9e7bGjRuXJxCdWYt0amKM09u98sorqlOnjj799FO98MILCgsLU3Jysl588UU1bty4wPo8+yC/OmvVqqW0tDSfZREREYqOjs53W3Fx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/no98MADcjgcevHFF3Xs2DE9//zzZ30NReF2u73XoXI4HNq5c6e+/fZbffbZZ2ratKk+++wzb9v27durSpUqevDBBzVy5EhZLBZ99NFHeYZVStKFF14o6dT11K699lqFhoaqRYsW6tq1q6xWq3r16qWhQ4cqOztbr7/+uo4ePVqirwso1wI1QwaA0lHQlOoF2bJli/Hwww8bjRo1Mmw2mxEeHm40a9bMGDJkiLFt2zYjJyfHqFGjhtGyZcsCt+FyuYw6deoYF154YaHPpXymVM/PmbP/GYZh7Nixw+jdu7dRtWpVw2KxGOedd57x4osv+sykZRinprS++OKLDZvN5tcMef5ut6iz/6mA2c889WRlZRlPPvmkUa9ePcNisRg1a9Y0HnroIe+0zR7Z2dnGkCFDjBo1anhnbFyyZIkRExNjPProo37VU1D9hf0+3nvvPeO8884zbDab0aBBA2PChAnGu+++a0gytm3bdtb90qlTJ6NTp07e+0899ZTRunVro0qVKt5tPvroo8ahQ4e8bQo7dt955x2jRYsWhtVqNWJiYowbb7zRZ7pwwyh81rP8Xuu2bdsMScaLL77os9wzc9vnn3/us3zRokVG9+7djbi4OMNisRi1a9c2unfvnqfdV1995a21bt26xvPPP++d0c1fX331lXHDDTcY8fHxhtlsNux2u9GyZUvjscceM/7888887WfPnm106dLFiI6ONmw2m1GvXj3jlltu8ZnuvaD9k19tTqfTmDRpknHRRRcZYWFhRlRUlHH++ecbDzzwgPH3338XWnths/9JMtLS0gyXy2V06tTJiI+PN/bu3evz+BdffNGQZHz55ZeGYfzv9/HBBx8YgwYNMqpXr27YbDbjiiuuMH777TefxxZ2DPjzmpYsWWLcfPPNRr169QybzWZUrVrV6NSpk/HVV195tzNjxgyjS5cuRnx8vGG1Wo1atWoZt912m3e2yNNrPn1KdcM49Xtq27atERYWZkRGRhpXXXWV8euvv+a7/w4ePOiz3PP+OP39lx/PDIieW3h4uFG3bl3jhhtuMN577z3D4XDkeczixYuNdu3aGREREUb16tWN++67z/j999+9lzjwcDgcxn333WdUr17dMJlMPvV8/fXX3n1bu3Zt44knnjC+/fbbfPcDUBGZDMPPKaIAAOXC4sWL1aFDB3300Ufq3bt3oMsBStXChQvVpUsXff7554VOFgIAgcTwPwAox9LS0rRkyRK1atVK4eHhWrNmjZ5//nk1btxYPXr0CHR5AABAhCoAKNeio6M1f/58TZkyRRkZGapWrZquvfZaTZgwIc/U2AAAIDAY/gcAAAAAxcCU6gAAAABQDIQqAAAAACgGQhUAAAAAFAMTVZzB7XZrz549stvt3iuEAwAAAKh8DMNQRkaGatWqpZCQgvujCFVn2LNnjxITEwNdBgAAAIByYteuXapTp06B6wlVZ7Db7ZJO7bjo6OgAV+Mfp9Op+fPnq1u3brJYLIEuB5UQxyDKA45DBBrHIAKNY7DkpaenKzEx0ZsRCkKoOoNnyF90dHRQhaqIiAhFR0fzBkJAcAyiPOA4RKBxDCLQOAZLz9lOC2KiCgAAAAAoBkIVAAAAABQDoQoAAAAAioFzqgAAAIBSZBiGXC6XcnNzS/V5nE6nzGazsrOzS/25KorQ0FCZzeZiX0qJUAUAAACUkpycHO3du1eZmZml/lyGYSghIUG7du3ieqtFEBERoZo1a8pqtZ7zNghVAAAAQClwu93atm2bQkNDVatWLVmt1lINO263WydOnFBUVFShF6rFKYZhKCcnRwcPHtS2bdvUuHHjc95vhCoAAACgFOTk5MjtdisxMVERERGl/nxut1s5OTkKCwsjVPkpPDxcFotFO3bs8O67c8HeBgAAAEoRAad8K4nfD79hAAAAACgGQhUAAAAAFAOhCgAAAACKgVAFAAAAlGMmk6nQW79+/UrleUeNGqWWLVuWyrbPxcKFC2UymXTs2LFAl5IHs/8BAAAA5djevXu9P3/66ad69tlntWnTJu+y8PBwn/ZOp1M2m63M6gM9VQAAAEC5lpCQ4L3FxMTIZDJ572dnZys2NlafffaZrrzySiUkJOjDDz+UJE2bNk1NmzZVWFiYzj//fL322ms+233yySfVpEkTRUREqEGDBhoxYoScTqckafr06Ro9erTWrFnj7RGbPn26pFM9Z2+++aauv/56RUREqGnTplqyZIk2b96szp07KzIyUu3atdOWLVt8nu/rr79Wq1atFBYWpgYNGmj06NFyuVze9SaTSe+8845uvvlmRUREqHHjxvrqq68kSdu3b1eXLl0kSVWqVCnVHrpzQagCAAAAgtyTTz6pgQMHatmyZUpOTtbbb7+t4cOHa9y4cdq4caPGjx+vESNGaMaMGd7H2O12TZ8+XRs2bNDLL7+st99+W//5z38kSbfffrsee+wxXXDBBdq7d6/27t2r22+/3fvY5557TnfddZdWr16t888/X71799YDDzygYcOG6bfffpMkDRw40Nt+3rx5uvPOOzVo0CBt2LBBb775pqZPn65x48b5vI7Ro0frtttu09q1a3Xdddfpjjvu0JEjR5SYmKjU1FRJ0qZNm7R37169/PLLpbY/i4pQBQAAAAS5wYMHq0ePHqpXr55q1aql5557TpMnT1aPHj1Uv3599ejRQ48++qjefPNN72OeeeYZtW/fXklJSbrhhhv02GOP6bPPPpN0akhhVFSUzGazt1fs9GGGd999t2677TY1adJETz75pLZv36477rhDycnJatq0qR555BEtXLjQ237cuHF66qmn1LdvXzVo0EBdu3bVc88951OPJPXr10+9evVSo0aNNH78eJ08eVLLly9XaGio4uLiJEk1atTw9tqVF5xTBQDlRK47V6kbU3V1g6sVFx4X6HIAAEGkdevW3p8PHjyoXbt26d5771X//v29y10ul08Q+eKLLzRlyhRt3rxZJ06ckMvlUnR0tF/P16JFC+/P8fHxkqQLL7zQZ1l2drbS09MVHR2tlStXasWKFT49U7m5ucrOzlZmZqYiIiLybDcyMlJ2u10HDhzwdzcEDKEKAMqJhdsXatLiSdqdvluPtns00OUAAIJIZGSk92e32y1Jevvtt9W2bVufdqGhoZKkpUuXqmfPnho9erSSk5MVExOjmTNnavLkyX49n8Vi8f5sMpkKXOapxe12a/To0erRo0eebYWFheW7Xc92PNsozwhVAFAO5LpzNWPNDO09sVepG1PVs3lP1bTXDHRZAIAgFB8fr9q1a2vr1q2644478m3z66+/ql69eho+fLh32Y4dO3zaWK1W5ebmlkhNl1xyiTZt2qRGjRqd8zasVqsklVhNJYlQBQDlwMLtC7Vq7yo1imukPRl7NHPdTHqrAADnbNSoURo0aJCio6N17bXXyuFw6LffftPRo0c1ZMgQNWrUSDt37tTMmTN16aWXau7cufryyy99tpGUlKRt27Zp9erVqlOnjux2+zlP1f7ss8/q+uuvV2Jiom699VaFhIRo7dq1+uOPPzR27Fi/tlGvXj2ZTCbNmTNH1113nfe8r/KAiSoAIMA8vVS5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RePGjREQEACtVovdu3dj+vTpcHNzw9ChQzFs2DAsXboUrVu3xs2bN/Hzzz+jZcuWeO211wDcW31TKpXw9vZ+7PMTET3zjPpEFxERVanytlQvT2RkpOjUqZOwsrISFhYWwsPDQ8ydO1dnS3UAZV5OTk4PHXfPnj3CwcFBFBcXS22lGyc8+Bo+fLjOsf/5z3+ESqUSWVlZ5Y7t6+urc0xRUZEICQkRjRs3Fubm5sLR0VG8//77Ou8hMjJSNGrUSJiZmQm1Wi0++OCDcscvKCgQbm5uIj4+Xqd9zZo1ws7OTjRs2LDM1uzlmTZtmgAgZs+eXW6fra2tsLS0FIMGDRLLli0T1tbWUn/plurlve/7N6qIiIgQzs7OQqlUCm9vb/Hjjz8KAFLupdf7/utQuolIcnKy1BYVFSVatWolzMzMRL169cSAAQOkvsLCQjF79mzh7OwsFAqFUKvVon///uLMmTNSzNixY8W77777yGtCRFQTyYR44J4IIiKiSiKEQIcOHTBx4kQMHjzY2OlQFblx4waaNm2KkydPVvh8GhFRTcZnqoiIqMrIZDJ8/fXX0Gq1xk6FqlBycjLCwsJYUBHRc4srVURERERERAbgShUREREREZEBWFQREREREREZgEUVERERERGRAVhUERERERERGYBFFRERERERkQFYVBERERERERmARRUREREREZEBWFQREREREREZgEUVERERERGRAf4P8pBY7bLQupMAAAAASUVORK5CYII=", "text/plain": [ "<Figure size 1000x700 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Transpose the dataframe so that samples are rows and genes are columns\n", "gene_expression_matrix = filtered_gene_counts.set_index(\"gene_id\").T\n", "\n", "# Log-transform the gene expression data (log2(x + 1) transformation)\n", "log_gene_expression_matrix = np.log2(gene_expression_matrix + 1)\n", "\n", "# === 4ï¸âƒ£ Select Top 5000 Most Variable Genes ===\n", "top_genes = log_gene_expression_matrix.var().nlargest(5000).index\n", "log_gene_expression_matrix_subset = log_gene_expression_matrix[top_genes]\n", "\n", "# Perform PCA on log-transformed, subsetted, standardized data\n", "pca_log = PCA(n_components=2)\n", "principal_components = pca_log.fit_transform(log_gene_expression_matrix_subset)\n", "\n", "# Compute explained variance ratios\n", "explained_variance_log = pca_log.explained_variance_ratio_ * 100\n", "\n", "# Create a DataFrame for PCA results\n", "pca_df = pd.DataFrame(principal_components, columns=[\"PC1\", \"PC2\"], index=log_gene_expression_matrix.index)\n", "\n", "# Merge with metadata to include Study and treatment information\n", "pca_df = pca_df.merge(metadata_df[[\"Experiment\", \"Study\", \"treatment\"]], left_index=True, right_on=\"Experiment\")\n", "\n", "# Define colors for different studies\n", "study_colors = {\n", " \"P&S 2023\": plt.cm.Blues, # Shades of blue for P&S 2023\n", " \"P&S 2021\": \"green\", # Green for P&S 2021\n", " \"P&S 2020\": \"red\", # Red for P&S 2020\n", "}\n", "\n", "# Assign colors to each sample individually\n", "sample_colors = {}\n", "\n", "# Extract unique dose levels in sorted order for a smoother gradient\n", "dose_samples = pca_df[pca_df[\"Study\"] == \"P&S 2023\"][\"treatment\"].unique()\n", "dose_levels = sorted([t for t in dose_samples if \"Dose\" in t], key=lambda x: x)\n", "dose_shades = [plt.cm.Blues(i) for i in np.linspace(0.2, 0.9, len(dose_levels))] # Distinct shades of blue\n", "dose_color_map = {dose_levels[i]: dose_shades[i] for i in range(len(dose_levels))}\n", "\n", "# Assign colors based on Study and Treatment\n", "for _, row in pca_df.iterrows():\n", " if \"Control\" in row[\"treatment\"]:\n", " sample_colors[row[\"Experiment\"]] = \"gray\" # Override everything if it's Control\n", " elif row[\"Study\"] == \"P&S 2023\" and \"Dose\" in row[\"treatment\"]:\n", " sample_colors[row[\"Experiment\"]] = dose_color_map.get(row[\"treatment\"], \"blue\") # Assign shade of blue for dose\n", " else:\n", " sample_colors[row[\"Experiment\"]] = study_colors.get(row[\"Study\"], \"black\") # Assign fixed study colors\n", "\n", "# Define marker styles for different treatment categories\n", "marker_map = {\n", " \"Control\": \"s\", # Squares for Control\n", " \"Injected\": \"D\", # Diamonds for Injected\n", " \"Fed\": \"^\", # Triangles for Fed\n", "}\n", "default_marker = \"o\" # Circles for Dose treatments\n", "\n", "# Assign marker styles based on treatment type\n", "treatment_marker_map = {t: marker_map.get(t.split()[0], default_marker) for t in pca_df[\"treatment\"].unique()}\n", "\n", "# Create the PCA plot for log-transformed data\n", "plt.figure(figsize=(10, 7))\n", "\n", "for study in pca_df[\"Study\"].unique():\n", " for treat in pca_df[\"treatment\"].unique():\n", " subset = pca_df[(pca_df[\"Study\"] == study) & (pca_df[\"treatment\"] == treat)]\n", " if not subset.empty:\n", " plt.scatter(subset[\"PC1\"], subset[\"PC2\"], \n", " color=[sample_colors[exp] for exp in subset[\"Experiment\"]], marker=treatment_marker_map[treat], \n", " label=f\"{study} - {treat}\", alpha=0.7)\n", "\n", "# Axis labels with explained variance\n", "plt.xlabel(f\"PC1 ({explained_variance_log[0]:.2f}% variance)\")\n", "plt.ylabel(f\"PC2 ({explained_variance_log[1]:.2f}% variance)\")\n", "plt.title(\"PCA Plot of Log-Transformed Gene Expression Data\")\n", "\n", "# Sort treatments for the legend (ensuring \"Control\" appears first)\n", "sorted_treatments = sorted(pca_df[\"treatment\"].unique(), key=lambda x: (\"Control\" not in x, x))\n", "\n", "# Create a sorted legend for treatments (using different shapes and colors)\n", "legend_elements_treatment = [\n", " plt.Line2D([0], [0], marker=treatment_marker_map[t], color='w', \n", " markerfacecolor=\"gray\" if \"Control\" in t else \"black\", markersize=8, label=t)\n", " for t in sorted_treatments\n", "]\n", "\n", "# Generate the sorted treatment legend\n", "legend_treatment = plt.legend(handles=legend_elements_treatment, title=\"Treatment\", loc=\"upper right\")\n", "\n", "# Create a separate legend for Study colors\n", "legend_elements_study = [\n", " plt.Line2D([0], [0], marker='o', color='w', \n", " markerfacecolor=study_colors[s] if isinstance(study_colors[s], str) else \"blue\", markersize=8, label=s)\n", " for s in pca_df[\"Study\"].unique()\n", "]\n", "legend_study = plt.legend(handles=legend_elements_study, title=\"Study\", loc=\"lower right\")\n", "\n", "# Add legends to the plot\n", "plt.gca().add_artist(legend_treatment)\n", "\n", "plt.grid(True)\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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.2" } }, "nbformat": 4, "nbformat_minor": 2 }