{
"cells": [
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import pylab\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## load mapping summary CSVs and gather CSV"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"sample_id='SRR606249'\n",
"#sample_id = 'p8808mo9'\n",
"#sample_id = 'p8808mo11'\n",
"\n",
"\n",
"# load mapping CSVs\n",
"all_df = pd.read_csv(f'outputs/minimap/depth/{sample_id}.summary.csv')\n",
"left_df = pd.read_csv(f'outputs/leftover/depth/{sample_id}.summary.csv')\n",
"\n",
"# load gather CSV\n",
"gather_df = pd.read_csv(f'outputs/{sample_id}.gather.csv')\n",
"\n",
"# names!\n",
"names_df = pd.read_csv(f'{sample_id}.acc.urls.csv')\n",
"\n",
"# connect gather_df to all_df and left_df using 'genome_id'\n",
"def fix_name(x):\n",
" return \"_\".join(x.split('_')[:2]).split('.')[0]\n",
"\n",
"gather_df['genome_id'] = gather_df['name'].apply(fix_name)\n",
"names_df['genome_id'] = names_df['acc'].apply(fix_name)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"# CTB bug FIXME\n",
"# this ensures that only rows that share genome_id are in all the dataframes\n",
"in_gather = set(gather_df.genome_id)\n",
"in_left = set(left_df.genome_id)\n",
"\n",
"in_both = in_left.intersection(in_gather)\n",
"\n",
"all_df = all_df[all_df.genome_id.isin(in_both)]\n",
"left_df = left_df[left_df.genome_id.isin(in_both)]\n",
"gather_df = gather_df[gather_df.genome_id.isin(in_both)]\n",
"names_df = names_df[names_df.genome_id.isin(in_both)]\n",
"\n",
"# reassign index now that we've maybe dropped rows\n",
"all_df.index = range(len(all_df))\n",
"left_df.index = range(len(left_df))\n",
"gather_df.index = range(len(gather_df))\n",
"names_df.index = range(len(names_df))\n",
"\n",
"assert len(all_df) == len(gather_df)\n",
"assert len(left_df) == len(gather_df)\n",
"assert len(names_df) == len(gather_df)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" acc | \n",
" genome_url | \n",
" assembly_report_url | \n",
" ncbi_tax_name | \n",
" genome_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" GCA_000013645.1 | \n",
" https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... | \n",
" https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... | \n",
" Paraburkholderia xenovorans LB400 | \n",
" GCA_000013645 | \n",
"
\n",
" \n",
" 1 | \n",
" GCA_000009705.1 | \n",
" https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... | \n",
" https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... | \n",
" Nostoc sp. PCC 7120 = FACHB-418 | \n",
" GCA_000009705 | \n",
"
\n",
" \n",
" 2 | \n",
" GCA_000196115.1 | \n",
" https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... | \n",
" https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... | \n",
" Rhodopirellula baltica SH 1 | \n",
" GCA_000196115 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" acc genome_url \\\n",
"0 GCA_000013645.1 https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... \n",
"1 GCA_000009705.1 https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... \n",
"2 GCA_000196115.1 https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... \n",
"\n",
" assembly_report_url \\\n",
"0 https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... \n",
"1 https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... \n",
"2 https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/0... \n",
"\n",
" ncbi_tax_name genome_id \n",
"0 Paraburkholderia xenovorans LB400 GCA_000013645 \n",
"1 Nostoc sp. PCC 7120 = FACHB-418 GCA_000009705 \n",
"2 Rhodopirellula baltica SH 1 GCA_000196115 "
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# re-sort left_df and all_df to match gather_df order, using matching genome_id column\n",
"all_df.set_index(\"genome_id\")\n",
"all_df.reindex(index=gather_df[\"genome_id\"])\n",
"all_df.reset_index()\n",
"\n",
"left_df.set_index(\"genome_id\")\n",
"left_df.reindex(index=gather_df[\"genome_id\"])\n",
"left_df.reset_index()\n",
"\n",
"left_df[\"mapped_bp\"] = (1 - left_df[\"percent missed\"]/100) * left_df[\"genome bp\"]\n",
"\n",
"names_df.set_index(\"genome_id\")\n",
"names_df.reindex(index=gather_df[\"genome_id\"])\n",
"names_df.reset_index()\n",
"\n",
"names_df[:3]"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unnamed: 0 | \n",
" genome bp | \n",
" missed | \n",
" percent missed | \n",
" coverage | \n",
" genome_id | \n",
" sample_id | \n",
" mapped_bp | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" GCA_000013645 | \n",
" 9731138 | \n",
" 70330 | \n",
" 0.722732 | \n",
" 10.224036 | \n",
" GCA_000013645 | \n",
" SRR606249 | \n",
" 9660808.0 | \n",
"
\n",
" \n",
" 1 | \n",
" GCA_000009705 | \n",
" 7211789 | \n",
" 174 | \n",
" 0.002413 | \n",
" 33.737305 | \n",
" GCA_000009705 | \n",
" SRR606249 | \n",
" 7211615.0 | \n",
"
\n",
" \n",
" 2 | \n",
" GCA_000196115 | \n",
" 7145576 | \n",
" 104 | \n",
" 0.001455 | \n",
" 134.405926 | \n",
" GCA_000196115 | \n",
" SRR606249 | \n",
" 7145472.0 | \n",
"
\n",
" \n",
" 3 | \n",
" GCA_000018565 | \n",
" 6785430 | \n",
" 631 | \n",
" 0.009299 | \n",
" 23.436817 | \n",
" GCA_000018565 | \n",
" SRR606249 | \n",
" 6784799.0 | \n",
"
\n",
" \n",
" 4 | \n",
" GCA_002959695 | \n",
" 6481410 | \n",
" 13840 | \n",
" 0.213534 | \n",
" 24.524634 | \n",
" GCA_002959695 | \n",
" SRR606249 | \n",
" 6467570.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unnamed: 0 genome bp missed percent missed coverage \\\n",
"0 GCA_000013645 9731138 70330 0.722732 10.224036 \n",
"1 GCA_000009705 7211789 174 0.002413 33.737305 \n",
"2 GCA_000196115 7145576 104 0.001455 134.405926 \n",
"3 GCA_000018565 6785430 631 0.009299 23.436817 \n",
"4 GCA_002959695 6481410 13840 0.213534 24.524634 \n",
"\n",
" genome_id sample_id mapped_bp \n",
"0 GCA_000013645 SRR606249 9660808.0 \n",
"1 GCA_000009705 SRR606249 7211615.0 \n",
"2 GCA_000196115 SRR606249 7145472.0 \n",
"3 GCA_000018565 SRR606249 6784799.0 \n",
"4 GCA_002959695 SRR606249 6467570.0 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"left_df[:5]"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" intersect_bp | \n",
" f_orig_query | \n",
" f_match | \n",
" f_unique_to_query | \n",
" f_unique_weighted | \n",
" average_abund | \n",
" median_abund | \n",
" std_abund | \n",
" name | \n",
" filename | \n",
" md5 | \n",
" f_match_orig | \n",
" unique_intersect_bp | \n",
" gather_result_rank | \n",
" remaining_bp | \n",
" genome_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 9323000 | \n",
" 0.024885 | \n",
" 0.977254 | \n",
" 0.024885 | \n",
" 0.008649 | \n",
" 6.831814 | \n",
" 6.0 | \n",
" 5.847358 | \n",
" GCA_000013645.1_ASM1364v1_genomic.fna.gz | \n",
" all-gather-genomes.sbt.zip | \n",
" ee9cb05018009af43429e83e7d502a0a | \n",
" 0.977254 | \n",
" 9323000 | \n",
" 0 | \n",
" 365320000 | \n",
" GCA_000013645 | \n",
"
\n",
" \n",
" 1 | \n",
" 7288000 | \n",
" 0.019453 | \n",
" 0.999040 | \n",
" 0.019453 | \n",
" 0.023517 | \n",
" 23.763035 | \n",
" 18.0 | \n",
" 29.637611 | \n",
" GCA_000009705.1_ASM970v1_genomic.fna.gz | \n",
" all-gather-genomes.sbt.zip | \n",
" 264cfdad44548ad96c4a24b6a514a877 | \n",
" 0.999040 | \n",
" 7288000 | \n",
" 1 | \n",
" 358032000 | \n",
" GCA_000009705 | \n",
"
\n",
" \n",
" 2 | \n",
" 7039000 | \n",
" 0.018789 | \n",
" 0.999858 | \n",
" 0.018789 | \n",
" 0.089562 | \n",
" 93.700242 | \n",
" 92.0 | \n",
" 27.877040 | \n",
" GCA_000196115.1_ASM19611v1_genomic.fna.gz | \n",
" all-gather-genomes.sbt.zip | \n",
" 7141c3fbf206734950d13cadba0bf46c | \n",
" 0.999858 | \n",
" 7039000 | \n",
" 2 | \n",
" 350993000 | \n",
" GCA_000196115 | \n",
"
\n",
" \n",
" 3 | \n",
" 6604000 | \n",
" 0.017627 | \n",
" 0.999697 | \n",
" 0.017627 | \n",
" 0.014621 | \n",
" 16.304058 | \n",
" 16.0 | \n",
" 6.636986 | \n",
" GCA_000018565.1_ASM1856v1_genomic.fna.gz | \n",
" all-gather-genomes.sbt.zip | \n",
" 5165e0f27ae96c8a78da00c2d30a8e36 | \n",
" 0.999697 | \n",
" 6604000 | \n",
" 3 | \n",
" 344389000 | \n",
" GCA_000018565 | \n",
"
\n",
" \n",
" 4 | \n",
" 6323000 | \n",
" 0.016877 | \n",
" 0.997948 | \n",
" 0.016877 | \n",
" 0.014897 | \n",
" 17.349676 | \n",
" 17.0 | \n",
" 8.548490 | \n",
" GCA_002959695.1_ASM295969v1_genomic.fna.gz | \n",
" all-gather-genomes.sbt.zip | \n",
" cefca2cf1f2ffaacdd22d23b45bfb6cb | \n",
" 0.997948 | \n",
" 6323000 | \n",
" 4 | \n",
" 338066000 | \n",
" GCA_002959695 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" intersect_bp f_orig_query f_match f_unique_to_query f_unique_weighted \\\n",
"0 9323000 0.024885 0.977254 0.024885 0.008649 \n",
"1 7288000 0.019453 0.999040 0.019453 0.023517 \n",
"2 7039000 0.018789 0.999858 0.018789 0.089562 \n",
"3 6604000 0.017627 0.999697 0.017627 0.014621 \n",
"4 6323000 0.016877 0.997948 0.016877 0.014897 \n",
"\n",
" average_abund median_abund std_abund \\\n",
"0 6.831814 6.0 5.847358 \n",
"1 23.763035 18.0 29.637611 \n",
"2 93.700242 92.0 27.877040 \n",
"3 16.304058 16.0 6.636986 \n",
"4 17.349676 17.0 8.548490 \n",
"\n",
" name filename \\\n",
"0 GCA_000013645.1_ASM1364v1_genomic.fna.gz all-gather-genomes.sbt.zip \n",
"1 GCA_000009705.1_ASM970v1_genomic.fna.gz all-gather-genomes.sbt.zip \n",
"2 GCA_000196115.1_ASM19611v1_genomic.fna.gz all-gather-genomes.sbt.zip \n",
"3 GCA_000018565.1_ASM1856v1_genomic.fna.gz all-gather-genomes.sbt.zip \n",
"4 GCA_002959695.1_ASM295969v1_genomic.fna.gz all-gather-genomes.sbt.zip \n",
"\n",
" md5 f_match_orig unique_intersect_bp \\\n",
"0 ee9cb05018009af43429e83e7d502a0a 0.977254 9323000 \n",
"1 264cfdad44548ad96c4a24b6a514a877 0.999040 7288000 \n",
"2 7141c3fbf206734950d13cadba0bf46c 0.999858 7039000 \n",
"3 5165e0f27ae96c8a78da00c2d30a8e36 0.999697 6604000 \n",
"4 cefca2cf1f2ffaacdd22d23b45bfb6cb 0.997948 6323000 \n",
"\n",
" gather_result_rank remaining_bp genome_id \n",
"0 0 365320000 GCA_000013645 \n",
"1 1 358032000 GCA_000009705 \n",
"2 2 350993000 GCA_000196115 \n",
"3 3 344389000 GCA_000018565 \n",
"4 4 338066000 GCA_002959695 "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gather_df[:5]"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"# subsample? take top 60...\n",
"\n",
"NUM=60\n",
"\n",
"left_df = left_df[:NUM]\n",
"all_df = all_df[:NUM]\n",
"gather_df = gather_df[:NUM]\n",
"names_df = names_df[:NUM]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## fig 1: examining leftover reads, in order of gather"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"