{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import sys\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set()\n", "import itertools\n", "from matplotlib import rcParams\n", "from collections import defaultdict\n", "rcParams['font.family'] = 'sans-serif'\n", "rcParams['font.sans-serif'] = ['Arial']\n", "rcParams['pdf.fonttype'] = 42\n", "rcParams['axes.formatter.useoffset'] = False" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Loading datasets:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "fiveeight = pd.read_csv(\"../../Analysis/diffBUM-HMM/mature_rRNA_5.8S_control_identical_conditions_diff_BUM_HMM.txt\",\\\n", " sep=\"\\t\",\\\n", " index_col=0,\n", " header=0)\n", "five = pd.read_csv(\"../../Analysis/diffBUM-HMM/mature_rRNA_5S_control_identical_conditions_diff_BUM_HMM.txt\",\\\n", " sep=\"\\t\",\\\n", " index_col=0,\n", " header=0)\n", "twentyfive = pd.read_csv(\"../../Analysis/diffBUM-HMM/mature_rRNA_25S_control_identical_conditions_diff_BUM_HMM.txt\",\\\n", " sep=\"\\t\",\\\n", " index_col=0,\n", " header=0)\n", "eighteen = pd.read_csv(\"../../Analysis/diffBUM-HMM/mature_rRNA_18S_control_identical_conditions_diff_BUM_HMM.txt\",\\\n", " sep=\"\\t\",\\\n", " index_col=0,\n", " header=0)\n", "\n", "eighteennew = pd.read_csv(\"../../Analysis/diffBUM-HMM/mature_rRNA_18S_control_identical_conditions_Fun12analysis_diff_BUM_HMM.txt\",\\\n", " sep=\"\\t\",\\\n", " index_col=0,\n", " header=0)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dropping positions with insufficient coverage:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "position = fiveeight[fiveeight == -999].dropna().index\n", "fiveeight.drop(position,inplace=True)\n", "position = five[five == -999].dropna().index\n", "five.drop(position,inplace=True)\n", "position = eighteen[eighteen == -999].dropna().index\n", "eighteen.drop(position,inplace=True)\n", "\n", "position = eighteennew[eighteennew== -999].dropna().index\n", "eighteennew.drop(position,inplace=True)\n", "\n", "position = twentyfive[twentyfive == -999].dropna().index\n", "twentyfive.drop(position,inplace=True)\n", "\n", "### Only the last position had a -999 in the datasets." ] }, { "cell_type": "code", "execution_count": 4, "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>UU</th>\n", " <th>UM</th>\n", " <th>MU</th>\n", " <th>MM</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <td>1</td>\n", " <td>1.0</td>\n", " <td>1.694943e-63</td>\n", " <td>1.694943e-63</td>\n", " <td>2.872833e-126</td>\n", " </tr>\n", " <tr>\n", " <td>2</td>\n", " <td>1.0</td>\n", " <td>3.862743e-12</td>\n", " <td>3.862743e-12</td>\n", " <td>1.492079e-23</td>\n", " </tr>\n", " <tr>\n", " <td>3</td>\n", " <td>1.0</td>\n", " <td>5.676103e-24</td>\n", " <td>5.676103e-24</td>\n", " <td>3.221815e-47</td>\n", " </tr>\n", " <tr>\n", " <td>4</td>\n", " <td>1.0</td>\n", " <td>7.203460e-16</td>\n", " <td>7.203460e-16</td>\n", " <td>5.188983e-31</td>\n", " </tr>\n", " <tr>\n", " <td>5</td>\n", " <td>1.0</td>\n", " <td>5.886530e-29</td>\n", " <td>5.886530e-29</td>\n", " <td>3.465124e-57</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " UU UM MU MM\n", "1 1.0 1.694943e-63 1.694943e-63 2.872833e-126\n", "2 1.0 3.862743e-12 3.862743e-12 1.492079e-23\n", "3 1.0 5.676103e-24 5.676103e-24 3.221815e-47\n", "4 1.0 7.203460e-16 7.203460e-16 5.188983e-31\n", "5 1.0 5.886530e-29 5.886530e-29 3.465124e-57" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eighteennew.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Making violinplots:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Gathering all the data from the UM and MU columns that have the posteriors for being differentially modified:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "_fiveeight = list(itertools.chain.from_iterable(fiveeight[[\"UM\",\"MU\"]].values))\n", "_five = list(itertools.chain.from_iterable(five[[\"UM\",\"MU\"]].values))\n", "_twentyfive = list(itertools.chain.from_iterable(twentyfive[[\"UM\",\"MU\"]].values))\n", "_eighteen = list(itertools.chain.from_iterable(eighteen[[\"UM\",\"MU\"]].values))\n", "\n", "_eighteennew = list(itertools.chain.from_iterable(eighteennew[[\"UM\",\"MU\"]].values))" ] }, { "cell_type": "code", "execution_count": 6, "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>UU</th>\n", " <th>UM</th>\n", " <th>MU</th>\n", " <th>MM</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <td>1</td>\n", " <td>1.000000</td>\n", " <td>2.699683e-11</td>\n", " <td>2.699683e-11</td>\n", " <td>7.288288e-22</td>\n", " </tr>\n", " <tr>\n", " <td>2</td>\n", " <td>1.000000</td>\n", " <td>1.647115e-22</td>\n", " <td>1.647115e-22</td>\n", " <td>2.712988e-44</td>\n", " </tr>\n", " <tr>\n", " <td>3</td>\n", " <td>1.000000</td>\n", " <td>1.879406e-32</td>\n", " <td>1.879406e-32</td>\n", " <td>3.532169e-64</td>\n", " </tr>\n", " <tr>\n", " <td>4</td>\n", " <td>1.000000</td>\n", " <td>4.654247e-24</td>\n", " <td>4.654247e-24</td>\n", " <td>2.166201e-47</td>\n", " </tr>\n", " <tr>\n", " <td>5</td>\n", " <td>1.000000</td>\n", " <td>2.401017e-14</td>\n", " <td>2.401017e-14</td>\n", " <td>5.764884e-28</td>\n", " </tr>\n", " <tr>\n", " <td>6</td>\n", " <td>0.999999</td>\n", " <td>3.115782e-07</td>\n", " <td>3.115782e-07</td>\n", " <td>9.708104e-14</td>\n", " </tr>\n", " <tr>\n", " <td>7</td>\n", " <td>1.000000</td>\n", " <td>3.736168e-12</td>\n", " <td>3.736168e-12</td>\n", " <td>1.395895e-23</td>\n", " </tr>\n", " <tr>\n", " <td>8</td>\n", " <td>1.000000</td>\n", " <td>4.472711e-14</td>\n", " <td>4.472711e-14</td>\n", " <td>2.000514e-27</td>\n", " </tr>\n", " <tr>\n", " <td>9</td>\n", " <td>1.000000</td>\n", " <td>1.333472e-22</td>\n", " <td>1.333472e-22</td>\n", " <td>1.778149e-44</td>\n", " </tr>\n", " <tr>\n", " <td>10</td>\n", " <td>1.000000</td>\n", " <td>1.276043e-30</td>\n", " <td>1.276043e-30</td>\n", " <td>1.628285e-60</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " UU UM MU MM\n", "1 1.000000 2.699683e-11 2.699683e-11 7.288288e-22\n", "2 1.000000 1.647115e-22 1.647115e-22 2.712988e-44\n", "3 1.000000 1.879406e-32 1.879406e-32 3.532169e-64\n", "4 1.000000 4.654247e-24 4.654247e-24 2.166201e-47\n", "5 1.000000 2.401017e-14 2.401017e-14 5.764884e-28\n", "6 0.999999 3.115782e-07 3.115782e-07 9.708104e-14\n", "7 1.000000 3.736168e-12 3.736168e-12 1.395895e-23\n", "8 1.000000 4.472711e-14 4.472711e-14 2.000514e-27\n", "9 1.000000 1.333472e-22 1.333472e-22 1.778149e-44\n", "10 1.000000 1.276043e-30 1.276043e-30 1.628285e-60" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fiveeight[:10]" ] }, { "cell_type": "code", "execution_count": 7, "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>UU</th>\n", " <th>UM</th>\n", " <th>MU</th>\n", " <th>MM</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <td>1</td>\n", " <td>1.0</td>\n", " <td>1.694943e-63</td>\n", " <td>1.694943e-63</td>\n", " <td>2.872833e-126</td>\n", " </tr>\n", " <tr>\n", " <td>2</td>\n", " <td>1.0</td>\n", " <td>3.862743e-12</td>\n", " <td>3.862743e-12</td>\n", " <td>1.492079e-23</td>\n", " </tr>\n", " <tr>\n", " <td>3</td>\n", " <td>1.0</td>\n", " <td>5.676103e-24</td>\n", " <td>5.676103e-24</td>\n", " <td>3.221815e-47</td>\n", " </tr>\n", " <tr>\n", " <td>4</td>\n", " <td>1.0</td>\n", " <td>7.203460e-16</td>\n", " <td>7.203460e-16</td>\n", " <td>5.188983e-31</td>\n", " </tr>\n", " <tr>\n", " <td>5</td>\n", " <td>1.0</td>\n", " <td>5.886530e-29</td>\n", " <td>5.886530e-29</td>\n", " <td>3.465124e-57</td>\n", " </tr>\n", " <tr>\n", " <td>6</td>\n", " <td>1.0</td>\n", " <td>2.685610e-11</td>\n", " <td>2.685610e-11</td>\n", " <td>7.212499e-22</td>\n", " </tr>\n", " <tr>\n", " <td>7</td>\n", " <td>1.0</td>\n", " <td>2.340133e-22</td>\n", " <td>2.340133e-22</td>\n", " <td>5.476222e-44</td>\n", " </tr>\n", " <tr>\n", " <td>8</td>\n", " <td>1.0</td>\n", " <td>2.489041e-18</td>\n", " <td>2.489041e-18</td>\n", " <td>6.195327e-36</td>\n", " </tr>\n", " <tr>\n", " <td>9</td>\n", " <td>1.0</td>\n", " <td>2.491819e-08</td>\n", " <td>2.491819e-08</td>\n", " <td>6.209161e-16</td>\n", " </tr>\n", " <tr>\n", " <td>10</td>\n", " <td>1.0</td>\n", " <td>2.037583e-30</td>\n", " <td>2.037583e-30</td>\n", " <td>4.151746e-60</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " UU UM MU MM\n", "1 1.0 1.694943e-63 1.694943e-63 2.872833e-126\n", "2 1.0 3.862743e-12 3.862743e-12 1.492079e-23\n", "3 1.0 5.676103e-24 5.676103e-24 3.221815e-47\n", "4 1.0 7.203460e-16 7.203460e-16 5.188983e-31\n", "5 1.0 5.886530e-29 5.886530e-29 3.465124e-57\n", "6 1.0 2.685610e-11 2.685610e-11 7.212499e-22\n", "7 1.0 2.340133e-22 2.340133e-22 5.476222e-44\n", "8 1.0 2.489041e-18 2.489041e-18 6.195327e-36\n", "9 1.0 2.491819e-08 2.491819e-08 6.209161e-16\n", "10 1.0 2.037583e-30 2.037583e-30 4.151746e-60" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eighteennew[:10]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "_fiveeightMM = list(itertools.chain.from_iterable(fiveeight[[\"MM\"]].values))\n", "_fiveMM = list(itertools.chain.from_iterable(five[[\"MM\"]].values))\n", "_twentyfiveMM = list(itertools.chain.from_iterable(twentyfive[[\"MM\"]].values))\n", "_eighteenMM = list(itertools.chain.from_iterable(eighteen[[\"MM\"]].values))\n", "\n", "_eighteennewMM = list(itertools.chain.from_iterable(eighteennew[[\"MM\"]].values))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Putting it in a dataframe, 25S first:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "index = np.arange(0,len(_twentyfive))\n", "values = pd.DataFrame(np.nan,index=index,columns=[\"5SMM\",\"5.8SMM\",\"18SMM\",\"18S-Fun12MM\",\"25SMM\",\"5S\",\"5.8S\",\"18S\",\"18S-Fun12\",\"25S\"])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "length = len(_five)-1\n", "values.loc[0:length,\"5S\"] = _five\n", "\n", "length = len(_fiveeight)-1\n", "values.loc[0:length,\"5.8S\"] = _fiveeight\n", "\n", "length = len(_eighteen)-1\n", "values.loc[0:length,\"18S\"] = _eighteen\n", "\n", "length = len(_eighteennew)-1\n", "values.loc[0:length,\"18S-Fun12\"] = _eighteennew\n", "\n", "length = len(_twentyfive)-1\n", "values.loc[0:length,\"25S\"] = _twentyfive\n", "\n", "length = len(_fiveMM)-1\n", "values.loc[0:length,\"5SMM\"] = _fiveMM\n", "\n", "length = len(_fiveeightMM)-1\n", "values.loc[0:length,\"5.8SMM\"] = _fiveeightMM\n", "\n", "length = len(_eighteenMM)-1\n", "values.loc[0:length,\"18SMM\"] = _eighteenMM\n", "\n", "length = len(_eighteennewMM)-1\n", "values.loc[0:length,\"18S-Fun12MM\"] = _eighteennewMM\n", "\n", "length = len(_twentyfiveMM)-1\n", "values.loc[0:length,\"25SMM\"] = _twentyfiveMM" ] }, { "cell_type": "code", "execution_count": 11, "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>5SMM</th>\n", " <th>5.8SMM</th>\n", " <th>18SMM</th>\n", " <th>18S-Fun12MM</th>\n", " <th>25SMM</th>\n", " <th>5S</th>\n", " <th>5.8S</th>\n", " <th>18S</th>\n", " <th>18S-Fun12</th>\n", " <th>25S</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <td>0</td>\n", " <td>9.999888e-01</td>\n", " <td>7.288288e-22</td>\n", " <td>1.981656e-27</td>\n", " <td>2.872833e-126</td>\n", " <td>0.295833</td>\n", " <td>5.588118e-06</td>\n", " <td>2.699683e-11</td>\n", " <td>4.451579e-14</td>\n", " <td>1.694943e-63</td>\n", " <td>2.480723e-01</td>\n", " </tr>\n", " <tr>\n", " <td>1</td>\n", " <td>7.138806e-03</td>\n", " <td>2.712988e-44</td>\n", " <td>5.230114e-43</td>\n", " <td>1.492079e-23</td>\n", " <td>0.988544</td>\n", " <td>5.588118e-06</td>\n", " <td>2.699683e-11</td>\n", " <td>4.451579e-14</td>\n", " <td>1.694943e-63</td>\n", " <td>2.480723e-01</td>\n", " </tr>\n", " <tr>\n", " <td>2</td>\n", " <td>4.629931e-34</td>\n", " <td>3.532169e-64</td>\n", " <td>1.970948e-33</td>\n", " <td>3.221815e-47</td>\n", " <td>1.000000</td>\n", " <td>7.735265e-02</td>\n", " <td>1.647115e-22</td>\n", " <td>7.231953e-22</td>\n", " <td>3.862743e-12</td>\n", " <td>5.711572e-03</td>\n", " </tr>\n", " <tr>\n", " <td>3</td>\n", " <td>3.819163e-59</td>\n", " <td>2.166201e-47</td>\n", " <td>3.534559e-76</td>\n", " <td>5.188983e-31</td>\n", " <td>1.000000</td>\n", " <td>7.735265e-02</td>\n", " <td>1.647115e-22</td>\n", " <td>7.231953e-22</td>\n", " <td>3.862743e-12</td>\n", " <td>5.711572e-03</td>\n", " </tr>\n", " <tr>\n", " <td>4</td>\n", " <td>1.592421e-98</td>\n", " <td>5.764884e-28</td>\n", " <td>3.745262e-22</td>\n", " <td>3.465124e-57</td>\n", " <td>1.000000</td>\n", " <td>2.151727e-17</td>\n", " <td>1.879406e-32</td>\n", " <td>4.439537e-17</td>\n", " <td>5.676103e-24</td>\n", " <td>1.258842e-11</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " 5SMM 5.8SMM 18SMM 18S-Fun12MM 25SMM \\\n", "0 9.999888e-01 7.288288e-22 1.981656e-27 2.872833e-126 0.295833 \n", "1 7.138806e-03 2.712988e-44 5.230114e-43 1.492079e-23 0.988544 \n", "2 4.629931e-34 3.532169e-64 1.970948e-33 3.221815e-47 1.000000 \n", "3 3.819163e-59 2.166201e-47 3.534559e-76 5.188983e-31 1.000000 \n", "4 1.592421e-98 5.764884e-28 3.745262e-22 3.465124e-57 1.000000 \n", "\n", " 5S 5.8S 18S 18S-Fun12 25S \n", "0 5.588118e-06 2.699683e-11 4.451579e-14 1.694943e-63 2.480723e-01 \n", "1 5.588118e-06 2.699683e-11 4.451579e-14 1.694943e-63 2.480723e-01 \n", "2 7.735265e-02 1.647115e-22 7.231953e-22 3.862743e-12 5.711572e-03 \n", "3 7.735265e-02 1.647115e-22 7.231953e-22 3.862743e-12 5.711572e-03 \n", "4 2.151727e-17 1.879406e-32 4.439537e-17 5.676103e-24 1.258842e-11 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "values.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Making plots:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(0.0,1.0,0.1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1080x432 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig,ax = plt.subplots(figsize=(15,6))\n", "ax = sns.boxplot(data=values)\n", "ylabels = [0,0.2,0.4,0.6,0.8,1.0]\n", "ax.set_yticks(ylabels)\n", "ax.set_yticklabels(ylabels)\n", "fig.savefig(\"diffBUM_HMM_output_control_samples.pdf\",dpi=400)\n", "\n", "\n", "\n", "#ON 15 January 2021 I ran up until here to generate new figure with 18S-Fun2; does not make sense to run remaining cells as they are nto affected by latest results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check if anything at all was modified in 5.8S and whether it makes sense with the structure!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Making 5.8S MM output file:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "fiveeight[\"MM\"].to_csv(\"5.8S_MM_values.txt\",sep=\"\\t\",header=False)\n", "eighteen[\"MM\"].to_csv(\"18S_MM_values.txt\",sep=\"\\t\",header=False)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "totalmodnucs = len(eighteen[eighteen.MM >= 0.95])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 253 out of the 1799 nucleotides with sufficient coverage were called modified in all three datasets:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "253" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "totalmodnucs" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "totalnucs = len(eighteen.index)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1799" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "totalnucs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot nucleotides predicted to be modified by diffBUM_HMM on 18S structure (requires pyCRAC)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\n", "Bad key \"text.kerning_factor\" on line 4 in\n", "/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/stylelib/_classic_test_patch.mplstyle.\n", "You probably need to get an updated matplotlibrc file from\n", "http://github.com/matplotlib/matplotlib/blob/master/matplotlibrc.template\n", "or from the matplotlib source distribution\n" ] } ], "source": [ "%%bash\n", "\n", "DIR=../../Scripts\n", "\n", "python $DIR/colorStructureFile.py \\\n", "-f \"../../Analysis/rRNA_secondary_structure_diagrams/S_cerevisiae.svg\" \\\n", "-d \"18S_MM_values.txt\" \\\n", "-c BUM_HMM \\\n", "-o \"18S_MM_values.svg\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The control dataset is a DMS Structure-Seq dataset. So the expectation would be that mostly A's and C's would be called modified by difBUM_HMM. Check this!!!!:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "refseq = \"\".join([i.strip() for i in open(\"../../Reference_sequences/18S_refseq.txt\",\"r\").readlines()])" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'TATCTGGTTG'" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "refseq[:10]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1800" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(refseq)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Int64Index([ 7, 8, 9, 10, 13, 18, 21, 22, 23, 24,\n", " ...\n", " 1705, 1706, 1719, 1720, 1721, 1722, 1727, 1729, 1730, 1748],\n", " dtype='int64', length=253)\n" ] } ], "source": [ "significant = eighteen[eighteen.MM >= 0.95].index\n", "print(significant)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " UU UM MU MM\n", "7 5.843202e-09 7.643500e-05 7.643500e-05 0.999847\n", "8 3.881934e-19 6.230517e-10 6.230517e-10 1.000000\n", "9 1.030573e-13 3.210253e-07 3.210253e-07 0.999999\n", "10 4.675099e-06 2.157523e-03 2.157523e-03 0.995680\n", "13 9.115940e-08 3.018350e-04 3.018350e-04 0.999396\n", "... ... ... ... ...\n", "1722 2.873284e-14 1.695076e-07 1.695076e-07 1.000000\n", "1727 5.923253e-21 7.696267e-11 7.696267e-11 1.000000\n", "1729 7.931163e-26 2.816232e-13 2.816232e-13 1.000000\n", "1730 1.820529e-33 4.266766e-17 4.266766e-17 1.000000\n", "1748 4.296382e-18 2.072772e-09 2.072772e-09 1.000000\n", "\n", "[253 rows x 4 columns]\n" ] } ], "source": [ "print(eighteen[eighteen.MM >= 0.95])" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "nucdict = defaultdict(int)\n", "for pos in significant:\n", " nuc = refseq[pos]\n", " nucdict[nuc] += 1" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "defaultdict(int, {'T': 35, 'G': 17, 'A': 154, 'C': 47})" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nucdict" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig,ax = plt.subplots()\n", "x = np.arange(len(nucdict.keys()))\n", "y = nucdict.values()\n", "ax.bar(x,y)\n", "ax.set_xticks([0,1,2,3])\n", "ax.set_xticklabels([\"U\",\"G\",\"A\",\"C\"],fontsize=18)\n", "ax.set_ylabel(\"Nucleotide Count\",fontsize=14)\n", "ax.set_xlabel(\"Nucleotide\",fontsize=14)\n", "fig.savefig(\"18S_rRNA_control_MM_nucleotide_counts.pdf\",dpi=400)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }