{
“cells”: [
{

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“# Using RNA read countsn”, “### Using EUKelele to assign protistan taxonomy and generate relative community community based on RNA read counts”

]

}, {

“cell_type”: “code”, “execution_count”: 1, “metadata”: {}, “outputs”: [], “source”: [

“import pandas as pd”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“When working with an environmental transcriptomic data set, we often want to assign taxonomy using reference databases populated with cultured isolates. It can be useful to have a single assembly which all individual transcripts within samples can relate (map) back to in order to perform gene expression comparisons across samples. In this example we ran EUKulele with a single metatranscriptomic assembly that was created by combining 40 individual samples using the metatranscriptomic assembly pipeline “eukrhythmic” (https://github.com/AlexanderLabWHOI/eukrhythmic). We use the EUKulele output, combined with a separately compiled read counts table produced with salmon (https://salmon.readthedocs.io/en/latest/salmon.html), to visualize the breakdown of taxonomic groups within each sample.”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“EUKulele was performed using the MMETSP database and diamond as the alignment choice (default), as below:n”, “n”, “EUKulele -s /output/transdecoder_mega_merge –protein_extension .pep -m mets

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“First, we load in the the annotated contig table located in the EUKulele output directory: n”, “n”, “output/taxonomy_estimated/sample-estimated-taxonomy.out

]

}, {

“cell_type”: “code”, “execution_count”: 2, “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>Unnamed: 0</th>n”, ” <th>transcript_name</th>n”, ” <th>classification_level</th>n”, ” <th>full_classification</th>n”, ” <th>classification</th>n”, ” <th>max_pid</th>n”, ” <th>ambiguous</th>n”, ” </tr>n”, ” </thead>n”, ” <tbody>n”, ” <tr>n”, ” <th>0</th>n”, ” <td>0</td>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_0</td>n”, ” <td>species</td>n”, ” <td>Stramenopiles; Ochrophyta; Bacillariophyta; Ba…</td>n”, ” <td>Skeletonema grethea</td>n”, ” <td>100.0</td>n”, ” <td>0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>1</th>n”, ” <td>0</td>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_10</td>n”, ” <td>species</td>n”, ” <td>Hacrobia; Haptophyta; Prymnesiophyceae; Prymne…</td>n”, ” <td>Chrysochromulina ericina</td>n”, ” <td>95.5</td>n”, ” <td>0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>2</th>n”, ” <td>0</td>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_100</td>n”, ” <td>species</td>n”, ” <td>Hacrobia; Haptophyta; Prymnesiophyceae; Prymne…</td>n”, ” <td>Chrysochromulina ericina</td>n”, ” <td>100.0</td>n”, ” <td>0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>3</th>n”, ” <td>0</td>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_1005</td>n”, ” <td>species</td>n”, ” <td>Alveolata; Dinoflagellata; Dinophyceae; Proroc…</td>n”, ” <td>Prorocentrum minimum</td>n”, ” <td>100.0</td>n”, ” <td>0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>4</th>n”, ” <td>0</td>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_1008</td>n”, ” <td>family</td>n”, ” <td>Stramenopiles; Ochrophyta; Bacillariophyta; Ba…</td>n”, ” <td>Araphid-pennate</td>n”, ” <td>77.1</td>n”, ” <td>0</td>n”, ” </tr>n”, ” </tbody>n”, “</table>n”, “</div>”

], “text/plain”: [

” Unnamed: 0 transcript_name \n”, “0 0 megahit_NarBay_A_megahit_NarBay_A_k111_0 n”, “1 0 megahit_NarBay_A_megahit_NarBay_A_k111_10 n”, “2 0 megahit_NarBay_A_megahit_NarBay_A_k111_100 n”, “3 0 megahit_NarBay_A_megahit_NarBay_A_k111_1005 n”, “4 0 megahit_NarBay_A_megahit_NarBay_A_k111_1008 n”, “n”, ” classification_level full_classification \n”, “0 species Stramenopiles; Ochrophyta; Bacillariophyta; Ba… n”, “1 species Hacrobia; Haptophyta; Prymnesiophyceae; Prymne… n”, “2 species Hacrobia; Haptophyta; Prymnesiophyceae; Prymne… n”, “3 species Alveolata; Dinoflagellata; Dinophyceae; Proroc… n”, “4 family Stramenopiles; Ochrophyta; Bacillariophyta; Ba… n”, “n”, ” classification max_pid ambiguous n”, “0 Skeletonema grethea 100.0 0 n”, “1 Chrysochromulina ericina 95.5 0 n”, “2 Chrysochromulina ericina 100.0 0 n”, “3 Prorocentrum minimum 100.0 0 n”, “4 Araphid-pennate 77.1 0 “

]

}, “execution_count”: 2, “metadata”: {}, “output_type”: “execute_result”

}

], “source”: [

“taxa=pd.read_table(‘merged_merged-estimated-taxonomy.out’)n”, “taxa.head()”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“This file shows the result of the alignment, with each contig matching an annotation in the database listed alongside the level of classification achieved (classification_level & classification), full classification description as presented in the database (full_classification), the maximum percentage identity as calculated by the aligner (max_pid), and whether there were discrepancies assigning the taxonomic cutoff (ambiguous). Descriptions of the EUKulele output are provided here: https://eukulele.readthedocs.io/en/latest/

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“Next we want to separate out the classification levels in the “full_classification” column so that we can collapse counts based on the taxonomic level of interest. Be aware that the classification levels are specific to the taxonomic database used in the alignment, and the original references should be consulted to determine the appropriate levels:”

]

}, {

“cell_type”: “code”, “execution_count”: 5, “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>Name</th>n”, ” <th>Supergroup</th>n”, ” <th>Division</th>n”, ” <th>Class</th>n”, ” <th>Order</th>n”, ” <th>Family</th>n”, ” <th>Genus</th>n”, ” <th>Species</th>n”, ” </tr>n”, ” </thead>n”, ” <tbody>n”, ” <tr>n”, ” <th>0</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_0</td>n”, ” <td>Stramenopiles</td>n”, ” <td>Ochrophyta</td>n”, ” <td>Bacillariophyta</td>n”, ” <td>Bacillariophyta_X</td>n”, ” <td>Polar-centric-Mediophyceae</td>n”, ” <td>Skeletonema</td>n”, ” <td>Skeletonema grethea</td>n”, ” </tr>n”, ” <tr>n”, ” <th>1</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_10</td>n”, ” <td>Hacrobia</td>n”, ” <td>Haptophyta</td>n”, ” <td>Prymnesiophyceae</td>n”, ” <td>Prymnesiales</td>n”, ” <td>Chrysochromulinaceae</td>n”, ” <td>Chrysochromulina</td>n”, ” <td>Chrysochromulina ericina</td>n”, ” </tr>n”, ” <tr>n”, ” <th>2</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_100</td>n”, ” <td>Hacrobia</td>n”, ” <td>Haptophyta</td>n”, ” <td>Prymnesiophyceae</td>n”, ” <td>Prymnesiales</td>n”, ” <td>Chrysochromulinaceae</td>n”, ” <td>Chrysochromulina</td>n”, ” <td>Chrysochromulina ericina</td>n”, ” </tr>n”, ” <tr>n”, ” <th>3</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_1005</td>n”, ” <td>Alveolata</td>n”, ” <td>Dinoflagellata</td>n”, ” <td>Dinophyceae</td>n”, ” <td>Prorocentrales</td>n”, ” <td>Prorocentraceae</td>n”, ” <td>Prorocentrum</td>n”, ” <td>Prorocentrum minimum</td>n”, ” </tr>n”, ” <tr>n”, ” <th>4</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_1008</td>n”, ” <td>Stramenopiles</td>n”, ” <td>Ochrophyta</td>n”, ” <td>Bacillariophyta</td>n”, ” <td>Bacillariophyta_X</td>n”, ” <td>Araphid-pennate</td>n”, ” <td>None</td>n”, ” <td>None</td>n”, ” </tr>n”, ” </tbody>n”, “</table>n”, “</div>”

], “text/plain”: [

” Name Supergroup Division \n”, “0 megahit_NarBay_A_megahit_NarBay_A_k111_0 Stramenopiles Ochrophyta n”, “1 megahit_NarBay_A_megahit_NarBay_A_k111_10 Hacrobia Haptophyta n”, “2 megahit_NarBay_A_megahit_NarBay_A_k111_100 Hacrobia Haptophyta n”, “3 megahit_NarBay_A_megahit_NarBay_A_k111_1005 Alveolata Dinoflagellata n”, “4 megahit_NarBay_A_megahit_NarBay_A_k111_1008 Stramenopiles Ochrophyta n”, “n”, ” Class Order Family \n”, “0 Bacillariophyta Bacillariophyta_X Polar-centric-Mediophyceae n”, “1 Prymnesiophyceae Prymnesiales Chrysochromulinaceae n”, “2 Prymnesiophyceae Prymnesiales Chrysochromulinaceae n”, “3 Dinophyceae Prorocentrales Prorocentraceae n”, “4 Bacillariophyta Bacillariophyta_X Araphid-pennate n”, “n”, ” Genus Species n”, “0 Skeletonema Skeletonema grethea n”, “1 Chrysochromulina Chrysochromulina ericina n”, “2 Chrysochromulina Chrysochromulina ericina n”, “3 Prorocentrum Prorocentrum minimum n”, “4 None None “

]

}, “execution_count”: 5, “metadata”: {}, “output_type”: “execute_result”

}

], “source”: [

“df = pd.concat([taxa[‘transcript_name’], taxa[‘full_classification’].str.split(’; ‘, expand=True)], axis=1)n”, “#Label columns in data framen”, “df.columns = [‘Name’, ‘Supergroup’,’Division’,’Class’,’Order’,’Family’,’Genus’,’Species’]n”, “df.head()”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“Next we create and read in a counts table created using standard salmon output, although a similar table could be generated using any read aligner. Counts from individual samples aligning to the fasta assembly are joined into one data frame. There are many ways to achieve this, and the approach below was adapted based on solutions posted on StackOverflow (https://stackoverflow.com/questions/44428429/replace-column-name-with-file-name-shell-script) and StackExchange (https://unix.stackexchange.com/questions/467523/awk-for-merging-multiple-files-with-common-columnn”, “). “

]

}, {

“cell_type”: “code”, “execution_count”: 6, “metadata”: {

“scrolled”: true

}, “outputs”: [

{

“name”: “stdout”, “output_type”: “stream”, “text”: [

“/vortexfs1/omics/alexander/ncohen/BATS2019-clio-metaT/EUKulele_NB/output/taxonomy_estimation/salmon_indiv_to_megan”, “/vortexfs1/omics/alexander/ncohen/BATS2019-clio-metaT/EUKulele_NB/output/taxonomy_estimationn”

]

}, {

“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>Name</th>n”, ” <th>Supergroup</th>n”, ” <th>Division</th>n”, ” <th>Class</th>n”, ” <th>Order</th>n”, ” <th>Family</th>n”, ” <th>Genus</th>n”, ” <th>Species</th>n”, ” <th>Unnamed: 1</th>n”, ” <th>SRR1810204</th>n”, ” <th>…</th>n”, ” <th>SRR1810207</th>n”, ” <th>SRR1810208</th>n”, ” <th>SRR1810209</th>n”, ” <th>SRR1810210</th>n”, ” <th>SRR1810211</th>n”, ” <th>SRR1810801</th>n”, ” <th>SRR181799</th>n”, ” <th>SRR1945044</th>n”, ” <th>SRR1945045</th>n”, ” <th>SRR1945046</th>n”, ” </tr>n”, ” </thead>n”, ” <tbody>n”, ” <tr>n”, ” <th>0</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_0</td>n”, ” <td>Stramenopiles</td>n”, ” <td>Ochrophyta</td>n”, ” <td>Bacillariophyta</td>n”, ” <td>Bacillariophyta_X</td>n”, ” <td>Polar-centric-Mediophyceae</td>n”, ” <td>Skeletonema</td>n”, ” <td>Skeletonema grethea</td>n”, ” <td>NaN</td>n”, ” <td>0.000</td>n”, ” <td>…</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>1</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_10</td>n”, ” <td>Hacrobia</td>n”, ” <td>Haptophyta</td>n”, ” <td>Prymnesiophyceae</td>n”, ” <td>Prymnesiales</td>n”, ” <td>Chrysochromulinaceae</td>n”, ” <td>Chrysochromulina</td>n”, ” <td>Chrysochromulina ericina</td>n”, ” <td>NaN</td>n”, ” <td>0.000</td>n”, ” <td>…</td>n”, ” <td>3.973</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>2</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_100</td>n”, ” <td>Hacrobia</td>n”, ” <td>Haptophyta</td>n”, ” <td>Prymnesiophyceae</td>n”, ” <td>Prymnesiales</td>n”, ” <td>Chrysochromulinaceae</td>n”, ” <td>Chrysochromulina</td>n”, ” <td>Chrysochromulina ericina</td>n”, ” <td>NaN</td>n”, ” <td>9.369</td>n”, ” <td>…</td>n”, ” <td>7.093</td>n”, ” <td>4.902</td>n”, ” <td>15.165</td>n”, ” <td>0.0</td>n”, ” <td>5.869</td>n”, ” <td>8.824</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>3</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_1005</td>n”, ” <td>Alveolata</td>n”, ” <td>Dinoflagellata</td>n”, ” <td>Dinophyceae</td>n”, ” <td>Prorocentrales</td>n”, ” <td>Prorocentraceae</td>n”, ” <td>Prorocentrum</td>n”, ” <td>Prorocentrum minimum</td>n”, ” <td>NaN</td>n”, ” <td>0.000</td>n”, ” <td>…</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>4</th>n”, ” <td>megahit_NarBay_A_megahit_NarBay_A_k111_1008</td>n”, ” <td>Stramenopiles</td>n”, ” <td>Ochrophyta</td>n”, ” <td>Bacillariophyta</td>n”, ” <td>Bacillariophyta_X</td>n”, ” <td>Araphid-pennate</td>n”, ” <td>None</td>n”, ” <td>None</td>n”, ” <td>NaN</td>n”, ” <td>0.000</td>n”, ” <td>…</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” </tbody>n”, “</table>n”, “<p>5 rows × 22 columns</p>n”, “</div>”

], “text/plain”: [

” Name Supergroup Division \n”, “0 megahit_NarBay_A_megahit_NarBay_A_k111_0 Stramenopiles Ochrophyta n”, “1 megahit_NarBay_A_megahit_NarBay_A_k111_10 Hacrobia Haptophyta n”, “2 megahit_NarBay_A_megahit_NarBay_A_k111_100 Hacrobia Haptophyta n”, “3 megahit_NarBay_A_megahit_NarBay_A_k111_1005 Alveolata Dinoflagellata n”, “4 megahit_NarBay_A_megahit_NarBay_A_k111_1008 Stramenopiles Ochrophyta n”, “n”, ” Class Order Family \n”, “0 Bacillariophyta Bacillariophyta_X Polar-centric-Mediophyceae n”, “1 Prymnesiophyceae Prymnesiales Chrysochromulinaceae n”, “2 Prymnesiophyceae Prymnesiales Chrysochromulinaceae n”, “3 Dinophyceae Prorocentrales Prorocentraceae n”, “4 Bacillariophyta Bacillariophyta_X Araphid-pennate n”, “n”, ” Genus Species Unnamed: 1 SRR1810204 … \n”, “0 Skeletonema Skeletonema grethea NaN 0.000 … n”, “1 Chrysochromulina Chrysochromulina ericina NaN 0.000 … n”, “2 Chrysochromulina Chrysochromulina ericina NaN 9.369 … n”, “3 Prorocentrum Prorocentrum minimum NaN 0.000 … n”, “4 None None NaN 0.000 … n”, “n”, ” SRR1810207 SRR1810208 SRR1810209 SRR1810210 SRR1810211 SRR1810801 \n”, “0 0.000 0.000 0.000 0.0 0.000 0.000 n”, “1 3.973 0.000 0.000 0.0 0.000 0.000 n”, “2 7.093 4.902 15.165 0.0 5.869 8.824 n”, “3 0.000 0.000 0.000 0.0 0.000 0.000 n”, “4 0.000 0.000 0.000 0.0 0.000 0.000 n”, “n”, ” SRR181799 SRR1945044 SRR1945045 SRR1945046 n”, “0 0.0 0.0 0.0 0.0 n”, “1 0.0 0.0 0.0 0.0 n”, “2 0.0 0.0 0.0 0.0 n”, “3 0.0 0.0 0.0 0.0 n”, “4 0.0 0.0 0.0 0.0 n”, “n”, “[5 rows x 22 columns]”

]

}, “execution_count”: 6, “metadata”: {}, “output_type”: “execute_result”

}

], “source”: [

“#Move over to the directory containing salmon outputn”, “%cd /vortexfs1/omics/alexander/ncohen/BATS2019-clio-metaT/EUKulele_NB/output/taxonomy_estimation/salmon_indiv_to_megan”, “! for i in *_quant/quant.sf; do awk -F, -v OFS=, ‘NR==1{split(FILENAME,a,”_quant”);$2= a[1] “”}1’ ${i} | awk ‘{gsub(/\NumReads\,/,””,$5)}1’> ${i}_cleaned; donen”, “! awk ‘{samples[$1] = samples[$1] OFS $NF}; END {print “Name”, samples[“Name”]; delete samples[“Name”]; for (name in samples) print name, samples[name]}’ */quant.sf_cleaned > table.tabn”, “counts=pd.read_table(‘table.tab’, sep = ” “) n”, “%cd /vortexfs1/omics/alexander/ncohen/BATS2019-clio-metaT/EUKulele_NB/output/taxonomy_estimationn”, “combined = df.join(counts.set_index(‘Name’), on=’Name’)n”, “combined.head()”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“As a side note, it is also helpful during these environmental metatranscriptomic analyses to combine functional annotations alongside taxonomic identifications and read counts into one dataframe for downstream visualization, sharing, and exploration of the data. To do this, we can read in kegg annotations obtained by aligning our assembly against the KEGG database. [This is also performed within the eukrhythmic metatranscriptomic assembly pipeline using arKEGGio (https://github.com/AlexanderLabWHOI/eukrhythmic)]:”

]

}, {

“cell_type”: “code”, “execution_count”: 7, “metadata”: {}, “outputs”: [

{

“name”: “stdout”, “output_type”: “stream”, “text”: [

“/vortexfs1/omics/alexander/data/NB_subsampled_11Sept/keggn”

]

}, {

“name”: “stderr”, “output_type”: “stream”, “text”: [

“/vortexfs1/home/ncohen/.conda/envs/EUKulele/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3072: DtypeWarning: Columns (3,4,5,6,7,8,9,10,11,12) have mixed types.Specify dtype option on import or set low_memory=False.n”, ” interactivity=interactivity, compiler=compiler, result=result)n”

]

}, {

“name”: “stdout”, “output_type”: “stream”, “text”: [

“/vortexfs1/omics/alexander/ncohen/BATS2019-clio-metaT/EUKulele_NB/output/taxonomy_estimationn”

]

}, {

“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>KO</th>n”, ” <th>query_id</th>n”, ” <th>subject_id</th>n”, ” <th>perc_ident</th>n”, ” <th>length</th>n”, ” <th>mismatch</th>n”, ” <th>gapopen</th>n”, ” <th>qstart</th>n”, ” <th>qend</th>n”, ” <th>sstart</th>n”, ” <th>…</th>n”, ” <th>SRR1810207</th>n”, ” <th>SRR1810208</th>n”, ” <th>SRR1810209</th>n”, ” <th>SRR1810210</th>n”, ” <th>SRR1810211</th>n”, ” <th>SRR1810801</th>n”, ” <th>SRR181799</th>n”, ” <th>SRR1945044</th>n”, ” <th>SRR1945045</th>n”, ” <th>SRR1945046</th>n”, ” </tr>n”, ” </thead>n”, ” <tbody>n”, ” <tr>n”, ” <th>0</th>n”, ” <td>K03283</td>n”, ” <td>megahit_NarBay_B_megahit_NarBay_B_k101_36771</td>n”, ” <td>smin:v1.2.008389.t1</td>n”, ” <td>92.1</td>n”, ” <td>151</td>n”, ” <td>12</td>n”, ” <td>0</td>n”, ” <td>49</td>n”, ” <td>501</td>n”, ” <td>6</td>n”, ” <td>…</td>n”, ” <td>2.479</td>n”, ” <td>1.431</td>n”, ” <td>10.28</td>n”, ” <td>0.0</td>n”, ” <td>3.311</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>1</th>n”, ” <td>K03283</td>n”, ” <td>megahit_NarBay_B_megahit_NarBay_B_k101_36771</td>n”, ” <td>smin:v1.2.025479.t1</td>n”, ” <td>92.1</td>n”, ” <td>139</td>n”, ” <td>11</td>n”, ” <td>0</td>n”, ” <td>85</td>n”, ” <td>501</td>n”, ” <td>2</td>n”, ” <td>…</td>n”, ” <td>2.479</td>n”, ” <td>1.431</td>n”, ” <td>10.28</td>n”, ” <td>0.0</td>n”, ” <td>3.311</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>2</th>n”, ” <td>K03283</td>n”, ” <td>megahit_NarBay_B_megahit_NarBay_B_k101_36771</td>n”, ” <td>tgo:TGME49_273760</td>n”, ” <td>83.4</td>n”, ” <td>151</td>n”, ” <td>25</td>n”, ” <td>0</td>n”, ” <td>49</td>n”, ” <td>501</td>n”, ” <td>6</td>n”, ” <td>…</td>n”, ” <td>2.479</td>n”, ” <td>1.431</td>n”, ” <td>10.28</td>n”, ” <td>0.0</td>n”, ” <td>3.311</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>3</th>n”, ” <td>K03283</td>n”, ” <td>megahit_NarBay_B_megahit_NarBay_B_k101_36771</td>n”, ” <td>ddi:DDB_G0273249</td>n”, ” <td>80.1</td>n”, ” <td>151</td>n”, ” <td>30</td>n”, ” <td>0</td>n”, ” <td>49</td>n”, ” <td>501</td>n”, ” <td>4</td>n”, ” <td>…</td>n”, ” <td>2.479</td>n”, ” <td>1.431</td>n”, ” <td>10.28</td>n”, ” <td>0.0</td>n”, ” <td>3.311</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” <tr>n”, ” <th>4</th>n”, ” <td>K03283</td>n”, ” <td>megahit_NarBay_B_megahit_NarBay_B_k101_36771</td>n”, ” <td>ddi:DDB_G0273623</td>n”, ” <td>80.1</td>n”, ” <td>151</td>n”, ” <td>30</td>n”, ” <td>0</td>n”, ” <td>49</td>n”, ” <td>501</td>n”, ” <td>4</td>n”, ” <td>…</td>n”, ” <td>2.479</td>n”, ” <td>1.431</td>n”, ” <td>10.28</td>n”, ” <td>0.0</td>n”, ” <td>3.311</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” </tr>n”, ” </tbody>n”, “</table>n”, “<p>5 rows × 42 columns</p>n”, “</div>”

], “text/plain”: [

” KO query_id subject_id \n”, “0 K03283 megahit_NarBay_B_megahit_NarBay_B_k101_36771 smin:v1.2.008389.t1 n”, “1 K03283 megahit_NarBay_B_megahit_NarBay_B_k101_36771 smin:v1.2.025479.t1 n”, “2 K03283 megahit_NarBay_B_megahit_NarBay_B_k101_36771 tgo:TGME49_273760 n”, “3 K03283 megahit_NarBay_B_megahit_NarBay_B_k101_36771 ddi:DDB_G0273249 n”, “4 K03283 megahit_NarBay_B_megahit_NarBay_B_k101_36771 ddi:DDB_G0273623 n”, “n”, ” perc_ident length mismatch gapopen qstart qend sstart … SRR1810207 \n”, “0 92.1 151 12 0 49 501 6 … 2.479 n”, “1 92.1 139 11 0 85 501 2 … 2.479 n”, “2 83.4 151 25 0 49 501 6 … 2.479 n”, “3 80.1 151 30 0 49 501 4 … 2.479 n”, “4 80.1 151 30 0 49 501 4 … 2.479 n”, “n”, ” SRR1810208 SRR1810209 SRR1810210 SRR1810211 SRR1810801 SRR181799 SRR1945044 \n”, “0 1.431 10.28 0.0 3.311 0.0 0.0 0.0 n”, “1 1.431 10.28 0.0 3.311 0.0 0.0 0.0 n”, “2 1.431 10.28 0.0 3.311 0.0 0.0 0.0 n”, “3 1.431 10.28 0.0 3.311 0.0 0.0 0.0 n”, “4 1.431 10.28 0.0 3.311 0.0 0.0 0.0 n”, “n”, ” SRR1945045 SRR1945046 n”, “0 0.0 0.0 n”, “1 0.0 0.0 n”, “2 0.0 0.0 n”, “3 0.0 0.0 n”, “4 0.0 0.0 n”, “n”, “[5 rows x 42 columns]”

]

}, “execution_count”: 7, “metadata”: {}, “output_type”: “execute_result”

}

], “source”: [

“%cd /vortexfs1/omics/alexander/data/NB_subsampled_11Sept/keggn”, “kegg = pd.read_csv(‘cat.kegg.csv’, sep =’\t’)n”, “%cd /vortexfs1/omics/alexander/ncohen/BATS2019-clio-metaT/EUKulele_NB/output/taxonomy_estimationn”, “#Match columns containing contig IDs. In the counts dataframe, “Name” contains contig IDs. In the KEGG output, it is “query_id”.n”, “merged = kegg.join(combined.set_index(‘Name’), on=’query_id’) #Check this returns the correct counts/annotations n”, “merged.head()n”, “#merged.to_csv(‘counts_taxa_kegg.csv’) #Optional export of table to .csv file”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“Next we subset the counts/taxonomy dataframe to retain only the sample counts columns and the classification level of interest (in this case, Phylum):”

]

}, {

“cell_type”: “code”, “execution_count”: 8, “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>SRR1810204</th>n”, ” <th>SRR1810205</th>n”, ” <th>SRR1810206</th>n”, ” <th>SRR1810207</th>n”, ” <th>SRR1810208</th>n”, ” <th>SRR1810209</th>n”, ” <th>SRR1810210</th>n”, ” <th>SRR1810211</th>n”, ” <th>SRR1810801</th>n”, ” <th>SRR181799</th>n”, ” <th>SRR1945044</th>n”, ” <th>SRR1945045</th>n”, ” <th>SRR1945046</th>n”, ” <th>Supergroup</th>n”, ” </tr>n”, ” </thead>n”, ” <tbody>n”, ” <tr>n”, ” <th>0</th>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>Stramenopiles</td>n”, ” </tr>n”, ” <tr>n”, ” <th>1</th>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>3.973</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>Hacrobia</td>n”, ” </tr>n”, ” <tr>n”, ” <th>2</th>n”, ” <td>9.369</td>n”, ” <td>1.001</td>n”, ” <td>0.0</td>n”, ” <td>7.093</td>n”, ” <td>4.902</td>n”, ” <td>15.165</td>n”, ” <td>0.0</td>n”, ” <td>5.869</td>n”, ” <td>8.824</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>Hacrobia</td>n”, ” </tr>n”, ” <tr>n”, ” <th>3</th>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>Alveolata</td>n”, ” </tr>n”, ” <tr>n”, ” <th>4</th>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.000</td>n”, ” <td>0.000</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>0.0</td>n”, ” <td>Stramenopiles</td>n”, ” </tr>n”, ” </tbody>n”, “</table>n”, “</div>”

], “text/plain”: [

” SRR1810204 SRR1810205 SRR1810206 SRR1810207 SRR1810208 SRR1810209 \n”, “0 0.000 0.000 0.0 0.000 0.000 0.000 n”, “1 0.000 0.000 0.0 3.973 0.000 0.000 n”, “2 9.369 1.001 0.0 7.093 4.902 15.165 n”, “3 0.000 0.000 0.0 0.000 0.000 0.000 n”, “4 0.000 0.000 0.0 0.000 0.000 0.000 n”, “n”, ” SRR1810210 SRR1810211 SRR1810801 SRR181799 SRR1945044 SRR1945045 \n”, “0 0.0 0.000 0.000 0.0 0.0 0.0 n”, “1 0.0 0.000 0.000 0.0 0.0 0.0 n”, “2 0.0 5.869 8.824 0.0 0.0 0.0 n”, “3 0.0 0.000 0.000 0.0 0.0 0.0 n”, “4 0.0 0.000 0.000 0.0 0.0 0.0 n”, “n”, ” SRR1945046 Supergroup n”, “0 0.0 Stramenopiles n”, “1 0.0 Hacrobia n”, “2 0.0 Hacrobia n”, “3 0.0 Alveolata n”, “4 0.0 Stramenopiles “

]

}, “execution_count”: 8, “metadata”: {}, “output_type”: “execute_result”

}

], “source”: [

“#Subset out taxonomic level of interest and sample ID columnsn”, “subset = combined.loc[:, ‘SRR1810204’:’SRR1945046’]n”, “subset[“Supergroup”]=combined[“Supergroup”]n”, “subset.head()”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“We import visualization libraries and a color palette”

]

}, {

“cell_type”: “code”, “execution_count”: 9, “metadata”: {}, “outputs”: [], “source”: [

“import matplotlib.pyplot as pltn”, “import seaborn as snsn”, “color = sns.set_palette(sns.color_palette(“husl”, 10))”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“Next we collapse (sum) rows with the same taxonomic annotation. This table will be valuable for downstream applications such as reporting relative community abundance percentages:”

]

}, {

“cell_type”: “code”, “execution_count”: 10, “metadata”: {}, “outputs”: [], “source”: [

“#Group counts by Phylum in each samplen”, “x = subset.groupby([‘Supergroup’]).sum()n”, “#Save grouped dataframe to .csv file (optional)n”, “#x.to_csv(‘counts_phylum.csv’)”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“Lastly, we plot the results as a stacked barplot. This shows directly comparable community composition across samples using read counts. We conclude that we have a high relative abundance of Stramenopiles in these samples based on the transcript pool.”

]

}, {

“cell_type”: “code”, “execution_count”: 11, “metadata”: {}, “outputs”: [

{
“data”: {

“image/png”: “iVBORw0KGgoAAAANSUhEUgAAAdkAAAE6CAYAAABalyguAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABAB0lEQVR4nO3deVxU9f4/8Nd7hkUQXFDEFVARAVEivC5YmmtaapaapaVZaul1qTTt3vrea/artHKJ2y2XrhmlLVfLW1p6K9fyamGkIgKmoqaAKMoiizB8fn/MjCGxaecMzPH1fDzm0SxnzutzGJv3nHM+n/MRpRSIiIhIe6babgAREZFRscgSERHphEWWiIhIJyyyREREOmGRJSIi0gmLLBERkU50K7IislpEzolIQg2WXSoiP9tuKSJySa92EREROYroNU5WRHoDyAMQq5QKv473zQAQqZR6VJeGEREROYhue7JKqV0Asso+JyLtRWSLiOwXkd0iElLBWx8E8KFe7SIiInIUFwfnrQTwhFLqqIh0B/AWgH72F0UkAEBbANsc3C4iIiLNOazIiogXgGgA/xYR+9Pu5RZ7AMB6pZTFUe0iIiLSiyP3ZE0ALimlbqlimQcA/NkxzSEiItKXw4bwKKVyAJwQkdEAIFYR9tdt52cbA/ifo9pERESkJz2H8HwIa8HsKCK/ishjAMYBeExEDgA4DOCeMm95AMBHitMCERGRQeg2hIeIiOhmxys+ERER6YRFloiISCe69C5u2rSpCgwM1GPVRESGtH///vNKKd/abgdpS5ciGxgYiLi4OD1WTURkSCJysrbbQNrj4WIiIiKdsMgSERHphEWWiIhIJyyyREREOmGRJSIi0gmLLBERkU5YZImIiHTCIktERKQTR84nS0Q3YNY7l6/7PW9Mqq9DS4joenFPloiISCcsskRERDphkSUiItIJiywREZFOWGSJiIh0wiJLRESkExZZIiIinbDIEhER6YRFloiISCcsskRERDphkSUiItIJiywREZFOWGSJiIh0wiJLRESkExZZIiIinbDIEhER6YRFloiISCcsskRERDpxqclCIpIKIBeABUCJUqqrno0iIiIyghoVWZu+SqnzurWEiIjIYHi4mIiISCc1LbIKwH9FZL+ITNGzQUREREZR08PFtymlzohIMwBfi0iSUmpX2QVsxXcKAPj7+2vc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+zwAzJw5s2VMTEzT55577pwjtl1rLLJ/wPWf+62be8uA8faYjfTZEDmKfVLzjIwM1/bt2xeOGDHi6iVXOnfufLl9+/bFANCpU6f8Y8eOuVW0jueff96vXr16pX/5y18yAeCrr77yXrJkSfPCwkLTpUuXXMLCwgoAZAPAgw8+mFXROvbv3+/xt7/9rVVubq758uXL5j59+mRrvrEOYsgia9Rfl3oy2h7z9V8mkkWWyH5ONjc313THHXd0WLhwYbPnn3/+nO21stPHoaSk5He/zDdu3Oi9ceNGn7179yYBQH5+vsyePTtg3759iUFBQcVPP/10y8LCwquzv1V2CHjKlClt169f/0vPnj0LYmJimuzcudNb+611DM3nziOqCyzmxOu6EdFvvL29S2NiYk699dZbfsXFv5vrvEIpKSluTz75ZMCGDRuOeXl5KQDIz883AUDz5s1LsrOzTV988UXjqtdilZ+fb/L39y8uKiqSjz76yOeGN6QOMOSerKNwb4mI9FKTITd66tWrV0FISEjBypUrfQICAqqttCtWrGiSnZ1tvueee4IAwM/P78rOnTt/sU0v18nX17ekptPJPfvss2e7desW6uPjU3Lrrbfm5eXlmf/o9tQWQxZZR51f5B4QERmJfco6u7JT3g0dOjTXfj82NvaU/b59GrrevXvnL168OK38OmNiYs7GxMScLf982enrAGDJkiVXl5k3b17mvHnzDDGkx5BF1mjnF+n6Xf95+Zv7nDwR6YPnZImIiHRiyD1ZR+HeEhERVYVFlgzJaON+icg5sciSIfG8PBHVBSyyfwD3loiIqCossn8A95aIrh9/nNbMrHcuazrV3RuT6tdo3O28efOab9iwoYnJZFImkwlvvfXWye+++67+U089dd5ZL9K/a9cuz9WrVzdZs2bN6ZiYmCZxcXH1yw5D0hOLLBERAQC++eab+lu3bm106NChRA8PD5WWluZSVFQkDz/8cLvJkydnVVRkS0pK4OJSt0tJ796983v37p1fG9kcwkNEDtUqfcx13chxzpw54+rj41Pi4eGhAKBFixYlH3zwQeNz58659unTJ7h79+7BAODp6Rk5efLk1h07dgz79ttvvebMmdMiPDw8tEOHDp0efPDBgNJSay3u1q1bx8cee6xNeHh4aLt27Trt3LnTc9CgQe0DAgLCZ86ceXXWnbfeesunc+fOoSEhIWFjx44NKCkpgT1nxowZrTp27BgWERERcvr0aRcASE5OduvRo0dwcHBwWM+ePYOPHj3qBgAjR44MHDt2rH94eHhoYGBg+IcfftgQADZt2uTdt2/foPLbe/bsWZc777yzfXh4eGh4eHjof//73/oAsHnzZq+QkJCwkJCQsNDQ0LCLFy/ecK1kkSUiw+lyXq77RsCIESNyzp496xYYGBj+0EMP+W/evNnr+eefP9esWbPinTt3puzbty8FAAoKCkzdu3e/nJycnHjnnXfmPfPMM+cSEhKOHD169HBBQYHpo48+amhfp5ubW2lCQsKRiRMnZo4ePTpo1apVp5KSkg5//PHHTdPT080//fRTvfXr1/vExcUlJSUlJZpMJrV8+fIm9pyePXvmJScnJ/bs2TPvH//4hy8ATJ061X/cuHEXUlJSEseMGXNh6tSpbex5p0+fdj9w4MCRL7744uiTTz4ZkJ+fX+mH+/jjj7d5+umnMxISEo589tlnx5544olAAFi8eHHzmJiYk0lJSYl79+5N8vLyuuHD5HV7H5+IqA4zWnFu2LBhaUJCQuKWLVu8v/32W+8JEya0/9vf/vZr+eXMZjMeeeSRi/bHVU1nd++9914CgIiIiIKgoKAC+3WQ27RpU3T8+HG3HTt2eCUkJHhGRESEAtYJ35s1a1YCAK6uruqBBx7IBoCoqKjL33zzTQMAiI+Pr//VV18dA4CpU6dmvfDCC63tbRk5cmSW2WxG586di9q0aVP0888/16tse7///vsGR48evToxfV5enjk7O9vUo0ePvDlz5rS5//77sx588MGL7du3Z5ElIqI/zsXFBUOHDs0dOnRobpcuXQref//9JuWXcXNzK7Wfh61uOrt69eopADCZTNdMl2cymVBSUiJKKRk9evSFf/7zn2cqaIsymUxX21XR9HrliUiVj8tSSuGnn3464unpqco+//LLL6ePGDEi+z//+U/D22+/PWTz5s1HIyMjC6vLrggPFxOR4VzveV+e+7U6cOCA+6FDh9ztj+Pj4z1at259pX79+pbs7OwK68WNTmdnN3jw4JxNmzY1PnPmjAsAZGRkmFNSUiqcEN4uMjLy8jvvvNMYAFasWOHTtWvXPPtrn376aWOLxYLDhw+7nz592j0iIqLS4njbbbflvPLKK83sj/fs2eMBAIcPH3bv1q1bwUsv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n”, “text/plain”: [

“<Figure size 432x288 with 1 Axes>”

]

}, “metadata”: {

“needs_background”: “light”

}, “output_type”: “display_data”

}

], “source”: [

“plot = x.T #Transpose dataframen”, “plot.head()n”, “plot.plot.bar(stacked=True, legend=True).legend(loc=(1, 0))n”, “color”

]

}

], “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.6.9”

}

}, “nbformat”: 4, “nbformat_minor”: 2

}