From e276513b19af5e967b5ba359bbdb331cc6d8f4c7 Mon Sep 17 00:00:00 2001 From: Katherine Eaton Date: Thu, 9 Sep 2021 16:53:36 -0400 Subject: [PATCH] new plotting for mean rate --- .../notebooks/beast_auspice_clade.py.ipynb | 1107 ++++++++++------- workflow/notebooks/iqtree_stats.py.ipynb | 172 ++- 2 files changed, 828 insertions(+), 451 deletions(-) diff --git a/workflow/notebooks/beast_auspice_clade.py.ipynb b/workflow/notebooks/beast_auspice_clade.py.ipynb index 90f62450..a40d9a05 100644 --- a/workflow/notebooks/beast_auspice_clade.py.ipynb +++ b/workflow/notebooks/beast_auspice_clade.py.ipynb @@ -75,7 +75,9 @@ "tree_dir = project_dir + \"/beast/all/chromosome/clade/tree\"\n", "log_dir = project_dir + \"/beast/all/chromosome/clade/log\"\n", "\n", - "metadata_path = project_dir + \"/iqtree/all/chromosome/full/filter{}/filter-taxa/metadata.tsv\".format(MISSING_DATA)\n", + "divtree_path = project_dir + \"iqtree/all/chromosome/full/filter5/filter-taxa/iqtree.treefile\"\n", + "#metadata_path = project_dir + \"/iqtree/all/chromosome/full/filter{}/filter-taxa/metadata.tsv\".format(MISSING_DATA)\n", + "metadata_path = project_dir + \"/iqtree_stats/all/chromosome/full/filter{}/metadata.tsv\".format(MISSING_DATA)\n", "auspice_config_path = project_dir + \"/config/auspice_config.json\"\n", "\n", "# ------------------------------------------\n", @@ -129,8 +131,7 @@ "}\n", "BRANCH_LIST_REVERSE = list(BRANCH_LIST.keys())\n", "BRANCH_LIST_REVERSE.reverse()\n", - "\n", - "NUM_STATES = 10\n", + "population_list = copy.copy(BRANCH_LIST_REVERSE)\n", "\n", "NO_DATA_CHAR = \"NA\"\n", "JSON_INDENT=2\n", @@ -237,6 +238,18 @@ " root_rtt_dist\n", " clade_rtt_dist\n", " population_rtt_dist\n", + " tstv\n", + " cds_sites\n", + " ns_sites\n", + " ss_sites\n", + " ns_ss_ratio\n", + " other_var\n", + " other_var_ratio\n", + " homo_het_sites\n", + " homo_sites\n", + " het_sites\n", + " het_ratio\n", + " external_branch_length\n", " \n", " \n", " sample\n", @@ -272,6 +285,18 @@ " \n", " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -309,6 +334,18 @@ " 0.000073\n", " NA\n", " 0.000006\n", + " NA\n", + " NA\n", + " NA\n", + " NA\n", + " NA\n", + " NA\n", + " NA\n", + " NA\n", + " NA\n", + " NA\n", + " NA\n", + " 4.004600e-06\n", " \n", " \n", " GCA_009909635.1_ASM990963v1_genomic\n", @@ -344,6 +381,18 @@ " 0.000073\n", " NA\n", " 0.000010\n", + " 1.854\n", + " 216\n", + " 121\n", + " 51\n", + " 2.37255\n", + " 1\n", + " 0.0196078\n", + " 242\n", + " 216\n", + " 26\n", + " 0.107438\n", + " 2.120100e-06\n", " \n", " \n", " GCA_009669545.1_ASM966954v1_genomic\n", @@ -379,6 +428,18 @@ " 0.000054\n", " NA\n", " 0.000012\n", + " 1.935\n", + " 246\n", + " 134\n", + " 60\n", + " 2.23333\n", + " 0\n", + " 0\n", + " 271\n", + " 246\n", + " 25\n", + " 0.0922509\n", + " 0.000000e+00\n", " \n", " \n", " GCA_009669555.1_ASM966955v1_genomic\n", @@ -414,6 +475,18 @@ " 0.000055\n", " NA\n", " 0.000012\n", + " 2.119\n", + " 241\n", + " 133\n", + " 58\n", + " 2.2931\n", + " 0\n", + " 0\n", + " 258\n", + " 241\n", + " 17\n", + " 0.0658915\n", + " 2.356000e-07\n", " \n", " \n", " GCA_009669565.1_ASM966956v1_genomic\n", @@ -449,6 +522,18 @@ " 0.000055\n", " NA\n", " 0.000012\n", + " 2\n", + " 247\n", + " 135\n", + " 60\n", + " 2.25\n", + " 0\n", + " 0\n", + " 265\n", + " 247\n", + " 18\n", + " 0.0679245\n", + " 4.711000e-07\n", " \n", " \n", " ...\n", @@ -484,6 +569,18 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", " SAMEA7313243_45\n", @@ -519,6 +616,18 @@ " 0.000075\n", " NA\n", " 0.000022\n", + " 1.917\n", + " 96\n", + " 48\n", + " 28\n", + " 1.71429\n", + " 3\n", + " 0.107143\n", + " 120\n", + " 96\n", + " 24\n", + " 0.2\n", + " 1.202300e-06\n", " \n", " \n", " SAMEA7313246_49\n", @@ -554,6 +663,18 @@ " 0.000060\n", " NA\n", " 0.000007\n", + " 1.813\n", + " 171\n", + " 74\n", + " 45\n", + " 1.64444\n", + " 17\n", + " 0.377778\n", + " 260\n", + " 171\n", + " 89\n", + " 0.342308\n", + " 5.131000e-07\n", " \n", " \n", " SAMEA6651390\n", @@ -589,6 +710,18 @@ " 0.000060\n", " NA\n", " 0.000006\n", + " 2.378\n", + " 138\n", + " 72\n", + " 40\n", + " 1.8\n", + " 1\n", + " 0.025\n", + " 218\n", + " 138\n", + " 80\n", + " 0.366972\n", + " 2.360000e-08\n", " \n", " \n", " SAMEA6637004\n", @@ -624,6 +757,18 @@ " 0.000061\n", " NA\n", " 0.000007\n", + " 2.143\n", + " 140\n", + " 75\n", + " 41\n", + " 1.82927\n", + " 1\n", + " 0.0243902\n", + " 193\n", + " 140\n", + " 53\n", + " 0.274611\n", + " 9.423000e-07\n", " \n", " \n", " SAMEA6637002\n", @@ -659,10 +804,22 @@ " 0.000060\n", " NA\n", " 0.000006\n", + " 1.838\n", + " 154\n", + " 75\n", + " 43\n", + " 1.74419\n", + " 8\n", + " 0.186047\n", + " 231\n", + " 154\n", + " 77\n", + " 0.333333\n", + " 2.360000e-08\n", " \n", " \n", "\n", - "

601 rows × 32 columns

\n", + "

601 rows × 44 columns

\n", "" ], "text/plain": [ @@ -876,21 +1033,77 @@ "SAMEA6637004 0.000061 NA \n", "SAMEA6637002 0.000060 NA \n", "\n", - " population_rtt_dist \n", - "sample \n", - "Reference 0.000006 \n", - "GCA_009909635.1_ASM990963v1_genomic 0.000010 \n", - "GCA_009669545.1_ASM966954v1_genomic 0.000012 \n", - "GCA_009669555.1_ASM966955v1_genomic 0.000012 \n", - "GCA_009669565.1_ASM966956v1_genomic 0.000012 \n", - "... ... \n", - "SAMEA7313243_45 0.000022 \n", - "SAMEA7313246_49 0.000007 \n", - "SAMEA6651390 0.000006 \n", - "SAMEA6637004 0.000007 \n", - "SAMEA6637002 0.000006 \n", + " population_rtt_dist tstv cds_sites \\\n", + "sample \n", + "Reference 0.000006 NA NA \n", + "GCA_009909635.1_ASM990963v1_genomic 0.000010 1.854 216 \n", + "GCA_009669545.1_ASM966954v1_genomic 0.000012 1.935 246 \n", + "GCA_009669555.1_ASM966955v1_genomic 0.000012 2.119 241 \n", + "GCA_009669565.1_ASM966956v1_genomic 0.000012 2 247 \n", + "... ... ... ... \n", + "SAMEA7313243_45 0.000022 1.917 96 \n", + "SAMEA7313246_49 0.000007 1.813 171 \n", + "SAMEA6651390 0.000006 2.378 138 \n", + "SAMEA6637004 0.000007 2.143 140 \n", + "SAMEA6637002 0.000006 1.838 154 \n", + "\n", + " ns_sites ss_sites ns_ss_ratio other_var \\\n", + "sample \n", + "Reference NA NA NA NA \n", + "GCA_009909635.1_ASM990963v1_genomic 121 51 2.37255 1 \n", + "GCA_009669545.1_ASM966954v1_genomic 134 60 2.23333 0 \n", + "GCA_009669555.1_ASM966955v1_genomic 133 58 2.2931 0 \n", + "GCA_009669565.1_ASM966956v1_genomic 135 60 2.25 0 \n", + "... ... ... ... ... \n", + "SAMEA7313243_45 48 28 1.71429 3 \n", + "SAMEA7313246_49 74 45 1.64444 17 \n", + "SAMEA6651390 72 40 1.8 1 \n", + "SAMEA6637004 75 41 1.82927 1 \n", + "SAMEA6637002 75 43 1.74419 8 \n", "\n", - "[601 rows x 32 columns]" + " other_var_ratio homo_het_sites homo_sites \\\n", + "sample \n", + "Reference NA NA NA \n", + "GCA_009909635.1_ASM990963v1_genomic 0.0196078 242 216 \n", + "GCA_009669545.1_ASM966954v1_genomic 0 271 246 \n", + "GCA_009669555.1_ASM966955v1_genomic 0 258 241 \n", + "GCA_009669565.1_ASM966956v1_genomic 0 265 247 \n", + "... ... ... ... \n", + "SAMEA7313243_45 0.107143 120 96 \n", + "SAMEA7313246_49 0.377778 260 171 \n", + "SAMEA6651390 0.025 218 138 \n", + "SAMEA6637004 0.0243902 193 140 \n", + "SAMEA6637002 0.186047 231 154 \n", + "\n", + " het_sites het_ratio \\\n", + "sample \n", + "Reference NA NA \n", + "GCA_009909635.1_ASM990963v1_genomic 26 0.107438 \n", + "GCA_009669545.1_ASM966954v1_genomic 25 0.0922509 \n", + "GCA_009669555.1_ASM966955v1_genomic 17 0.0658915 \n", + "GCA_009669565.1_ASM966956v1_genomic 18 0.0679245 \n", + "... ... ... \n", + "SAMEA7313243_45 24 0.2 \n", + "SAMEA7313246_49 89 0.342308 \n", + "SAMEA6651390 80 0.366972 \n", + "SAMEA6637004 53 0.274611 \n", + "SAMEA6637002 77 0.333333 \n", + "\n", + " external_branch_length \n", + "sample \n", + "Reference 4.004600e-06 \n", + "GCA_009909635.1_ASM990963v1_genomic 2.120100e-06 \n", + "GCA_009669545.1_ASM966954v1_genomic 0.000000e+00 \n", + "GCA_009669555.1_ASM966955v1_genomic 2.356000e-07 \n", + "GCA_009669565.1_ASM966956v1_genomic 4.711000e-07 \n", + "... ... \n", + "SAMEA7313243_45 1.202300e-06 \n", + "SAMEA7313246_49 5.131000e-07 \n", + "SAMEA6651390 2.360000e-08 \n", + "SAMEA6637004 9.423000e-07 \n", + "SAMEA6637002 2.360000e-08 \n", + "\n", + "[601 rows x 44 columns]" ] }, "metadata": {}, @@ -923,7 +1136,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'1.ORI': 2016.0, '1.IN': 2008.0, '1.ANT': 2004.0, '1.PRE': 1767.5, '2.MED': 2018.0, '2.ANT': 2008.0, '4.ANT': 2015.0, '3.ANT': 2017.0, '0.ANT4': 765.0, '0.ANT': 2019.0, '0.PE': 2014.0, '0.PRE': -1686.0}\n" + "{'0.PRE': -1686.0, '0.PE': 2014.0, '0.ANT': 2019.0, '0.ANT4': 765.0, '3.ANT': 2017.0, '4.ANT': 2015.0, '2.ANT': 2008.0, '2.MED': 2018.0, '1.PRE': 1767.5, '1.ANT': 2004.0, '1.IN': 2008.0, '1.ORI': 2016.0}\n" ] } ], @@ -932,12 +1145,12 @@ "mrsd_dict = {}\n", "\n", "with open(out_path, \"w\") as outfile:\n", - " for branch in BRANCH_LIST:\n", - " branch_df = metadata_df[metadata_df[\"branch_minor\"].isin(BRANCH_LIST[branch])]\n", - " if len(branch_df) == 0: continue\n", - " max_date = max(branch_df[\"date_mean\"])\n", - " outfile.write(\"{}\\t{}\\n\".format(branch, max_date))\n", - " mrsd_dict[branch] = max_date\n", + " for population in population_list:\n", + " pop_df = metadata_df[metadata_df[\"population\"] == population]\n", + " if len(pop_df) == 0: continue\n", + " max_date = max(pop_df[\"date_mean\"])\n", + " outfile.write(\"{}\\t{}\\n\".format(population, max_date))\n", + " mrsd_dict[population] = max_date\n", " \n", "print(mrsd_dict)" ] @@ -961,18 +1174,18 @@ "output_type": "stream", "text": [ "/mnt/c/Users/ktmea/Projects/plague-phylogeography-projects/main/augur/all/chromosome/full/filter5/beast/clock/range_sampling_dates.tsv\n", - "1.ORI 1924.0 2016.0 92.0\n", - "1.IN 1954.0 2008.0 54.0\n", - "1.ANT 1954.0 2004.0 50.0\n", - "1.PRE 1330.0 1767.5 437.5\n", - "2.MED 1912.0 2018.0 106.0\n", - "2.ANT 1924.0 2008.0 84.0\n", - "4.ANT 1977.0 2015.0 38.0\n", - "3.ANT 1961.0 2017.0 56.0\n", - "0.ANT4 237.5 765.0 527.5\n", - "0.ANT 1947.0 2019.0 72.0\n", + "0.PRE -2776.5 -1686.0 1090.5\n", "0.PE -1836.0 2014.0 3850.0\n", - "0.PRE -2776.5 -1686.0 1090.5\n" + "0.ANT 1947.0 2019.0 72.0\n", + "0.ANT4 237.5 765.0 527.5\n", + "3.ANT 1961.0 2017.0 56.0\n", + "4.ANT 1977.0 2015.0 38.0\n", + "2.ANT 1924.0 2008.0 84.0\n", + "2.MED 1912.0 2018.0 106.0\n", + "1.PRE 1330.0 1767.5 437.5\n", + "1.ANT 1954.0 2004.0 50.0\n", + "1.IN 1954.0 2008.0 54.0\n", + "1.ORI 1924.0 2016.0 92.0\n" ] } ], @@ -980,17 +1193,17 @@ "out_path = os.path.join(augur_dir, \"range_sampling_dates.tsv\")\n", "print(out_path)\n", "with open(out_path, \"w\") as outfile:\n", - " outfile.write(\"{}\\t{}\\t{}\\t{}\\t{}\\t{}\\n\".format(\"branch\", \"n\", \"min_date\", \"max_date\", \"range_date\", \"range_n\"))\n", - " for branch in BRANCH_LIST:\n", - " branch_df = metadata_df[metadata_df[\"branch_minor\"].isin(BRANCH_LIST[branch])]\n", - " if len(branch_df) == 0: continue\n", - " n = len(branch_df)\n", - " max_date = max(branch_df[\"date_mean\"])\n", - " min_date = min(branch_df[\"date_mean\"])\n", + " outfile.write(\"{}\\t{}\\t{}\\t{}\\t{}\\t{}\\n\".format(\"population\", \"n\", \"min_date\", \"max_date\", \"range_date\", \"range_n\"))\n", + " for population in population_list:\n", + " pop_df = metadata_df[metadata_df[\"population\"] == population]\n", + " if len(pop_df) == 0: continue\n", + " n = len(pop_df)\n", + " max_date = max(pop_df[\"date_mean\"])\n", + " min_date = min(pop_df[\"date_mean\"])\n", " range_date = max_date - min_date\n", " range_n = round(range_date / n, 2)\n", - " print(branch, min_date, max_date, range_date)\n", - " outfile.write(\"{}\\t{}\\t{}\\t{}\\t{}\\t{}\\n\".format(branch, n, min_date, max_date, range_date, range_n))" + " print(population, min_date, max_date, range_date)\n", + " outfile.write(\"{}\\t{}\\t{}\\t{}\\t{}\\t{}\\n\".format(population, n, min_date, max_date, range_date, range_n))" ] }, { @@ -1003,7 +1216,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 160, "id": "outside-logistics", "metadata": {}, "outputs": [ @@ -1011,29 +1224,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "['0.PRE', '0.PE', '0.ANT', '3.ANT', '4.ANT', '2.ANT', '2.MED', '1.PRE', '1.ANT', '1.IN', '1.ORI']\n", - "{'country': {'Canada': '#8000ff', 'Turkmenistan': '#7215ff', 'Uzbekistan': '#652afe', 'Peru': '#573ffd', 'Switzerland': '#4a53fc', 'England': '#3c66fa', 'Estonia': '#2f79f7', 'Madagascar': '#228bf4', 'Kazakhstan': '#149df1', 'Democratic Republic of the Congo': '#07adee', 'United States of America': '#07bcea', 'Kenya': '#14c9e5', 'Zimbabwe': '#22d5e0', 'Norway': '#2fe0db', 'Bolivia': '#3cead5', 'Indonesia': '#4af1d0', 'Mongolia': '#57f7c9', 'Kyrgyzstan': '#65fcc3', 'Russia': '#72febc', 'Tajikistan': '#80ffb4', 'Myanmar': '#8dfead', 'Armenia': '#9afca5', 'India': '#a8f79d', 'Germany': '#b5f194', 'Vietnam': '#c3ea8b', 'The Netherlands': '#d0e083', 'Brazil': '#ddd579', 'Georgia': '#ebc970', 'Poland': '#f8bc66', 'Italy': '#ffad5d', 'Algeria': '#ff9d53', 'Lithuania': '#ff8b49', 'Spain': '#ff793f', 'China': '#ff6634', 'Nepal': '#ff532a', 'France': '#ff3f20', 'Azerbaijan': '#ff2a15', 'Uganda': '#ff150b', 'Iran': '#ff0000', 'NA': '#969696'}, 'province': {'Yunnan': '#8000ff', 'Central Java': '#7b07ff', 'Catalonia': '#760eff', 'Himachal Pradesh': '#7215ff', 'Inner Mongolia': '#6d1dff', 'New Mexico': '#6924fe', 'Gegharkunik Province': '#642bfe', 'Zavkhan Province': '#6032fe', 'Övörkhangai': '#5b39fd', 'Pärnu maakond': '#5740fd', 'Tuva Republic': '#5247fc', 'Nidwalden': '#4d4dfc', 'Brandenburg': '#4954fb', 'Lazio': '#445bfb', 'Goranboy District': '#4062fa', 'Hovsgel': '#3b68f9', 'Midlands': '#376ff9', 'St. Petersberg': '#3275f8', 'Talas Region': '#2e7bf7', 'Bavaria': '#2982f6', 'Tatarstan': '#2488f5', 'Irkutsk Oblast': '#208ef4', 'Qinghai': '#1b94f3', \"Provence-Alpes-Côte d'Azur\": '#1799f2', 'Cajamarca': '#129ff1', 'Gandaki Pradesh': '#0ea5ef', 'Maharashtra': '#09aaee', 'Saskatchewan': '#05afed', 'Khánh Hoà Province': '#00b4ec', 'Karachay-Cherkessia': '#05b9ea', 'Altai Republic': '#09bee9', 'Pomeranian Voivodeship': '#0ec3e7', 'Xinjiang': '#12c7e6', 'Krasnoyarsk Krai': '#17cce4', 'Atyrau': '#1bd0e3', 'Khovd': '#20d4e1', 'Nagorno-Karabakh Republic': '#24d8df', 'Nevada': '#29dcdd', 'Hebei': '#2edfdc', 'Occitanie': '#32e3da', 'Kurdistan': '#37e6d8', 'Baden-Württemberg': '#3be9d6', 'Osh Region': '#40ecd4', 'Ho Chi Minh City': '#44eed2', 'Greater London': '#49f1d0', 'Shymkent': '#4df3ce', 'Nairobi': '#52f5cc', 'Tamil Nadu': '#57f7ca', 'Fizuli District': '#5bf9c7', 'Balkan': '#60fac5', 'Arizona': '#64fbc3', 'Dornogovi': '#69fcc1', 'Province de Fianarantsoa': '#6dfdbe', 'Tibet': '#72febc', 'Issyk-Kul Region': '#76ffb9', 'Govi-Altai': '#7bffb7', 'Stavropol Krai': '#80ffb4', 'NA': '#969696', 'La Libertad': '#89ffaf', 'Aktobe Region': '#8dfead', 'Samtskhe-Javakheti': '#92fdaa', 'Gujarat': '#96fca7', 'Ingushetia': '#9bfba5', 'Heilongjiang': '#9ffaa2', 'Baku': '#a4f99f', 'Centre-Loire Valley': '#a8f79c', 'Ömnögovi': '#adf599', 'Mangystau Region': '#b2f396', 'West Kazakhstan region': '#b6f194', 'Samara Oblast': '#bbee91', 'Naryn Region': '#bfec8e', 'Rostov Oblast': '#c4e98b', 'Almaty Region': '#c8e688', 'East of England': '#cde385', 'Sughd Province': '#d1df82', 'Chechnya': '#d6dc7e', 'Lâm Đồng Province': '#dbd87b', 'Republic of Dagestan': '#dfd478', 'Astrakhan Oblast': '#e4d075', 'Gansu': '#e8cc72', 'Guangxi Zhuang': '#edc76f', 'Vilnius County': '#f1c36b', 'Altai Krai': '#f6be68', 'State of Mato Grosso': '#fab965', 'Kirov Oblast': '#ffb462', 'Shahbuz Rayon': '#ffaf5e', 'Jilin': '#ffaa5b', 'Ningxia': '#ffa558', 'North Brabant': '#ff9f54', 'Kabardino-Balkaria': '#ff9951', 'Valencia Community': '#ff944d', 'MSila': '#ff8e4a', 'Kyzylorda Region': '#ff8847', 'Zabaykalsky Krai': '#ff8243', 'Shamkir District': '#ff7b40', 'Sečuán': '#ff753c', 'La Paz': '#ff6f39', 'California': '#ff6835', 'Shirak Province': '#ff6232', 'Panevezys County': '#ff5b2e', 'Colorado': '#ff542b', 'Republic of Kalmykia': '#ff4d27', 'Bayan-Ölgii': '#ff4724', 'West Kazakhstan Region': '#ff4020', 'Fujian': '#ff391d', 'Oslo': '#ff3219', 'Navoiy Region': '#ff2b15', 'Bayankhongor': '#ff2412', 'Shaanxi': '#ff1d0e', 'Qazakh District': '#ff150b', 'Syunik Province': '#ff0e07', 'Texas': '#ff0704', 'Atyrau Region': '#ff0000'}, 'branch_major': {'0.PRE': '#8000ff', '0.PE': '#4c4ffc', '0.ANT': '#1996f3', '3.ANT': '#1acee3', '4.ANT': '#4df3ce', '2.ANT': '#80ffb4', '2.MED': '#b3f396', '1.PRE': '#e6ce74', '1.ANT': '#ff964f', '1.IN': '#ff4f28', '1.ORI': '#ff0000', 'NA': '#969696', '0.ANT4': '#1996f3'}, 'branch_minor': {'1.ANT1': '#8000ff', '2.MED2': '#7116ff', '1.ORI3': '#632cfe', '1.PRE1': '#5542fd', '0.ANT3': '#4757fb', '2.ANT1': '#396cf9', '0.PE7': '#2b7ff6', '1.PRE0': '#1c92f3', '0.ANT1': '#0ea4f0', '3.ANT1': '#00b4ec', '1.ORI2': '#0ec3e7', '0.PE2': '#1cd1e2', '0.ANT4': '#2adddd', '1.PRE3': '#39e7d7', '0.PRE2': '#47f0d1', '2.ANT2': '#55f6ca', '2.MED1': '#63fbc3', '4.ANT1': '#71febc', '0.PE4h': '#80ffb4', '0.PE4m': '#8efeac', '0.ANT2': '#9cfba4', '2.MED3': '#aaf69b', '1.ORI1': '#b8f092', '1.IN2': '#c6e789', '1.IN1': '#d4dd80', '0.ANT5': '#e3d176', '2.MED0': '#f1c36c', '0.PRE1': '#ffb462', '0.PE8': '#ffa457', '1.PRE2': '#ff924d', '0.PE4t': '#ff8042', '0.PE10': '#ff6c37', '0.PE5': '#ff572c', '3.ANT2': '#ff4221', '1.IN3': '#ff2c16', '0.PE4a': '#ff160b', '2.ANT3': '#ff0000', 'NA': '#969696'}, 'continent': {'Europe': '#8000ff', 'Asia': '#00b4ec', 'Africa': '#80ffb4', 'North America': '#ffb462', 'South America': '#ff0000', 'NA': '#969696'}}\n" + "{'population': {'0.PRE': '#8000ff', '0.PE': '#5148fc', '0.ANT': '#238af5', '0.ANT4': '#0cc1e8', '3.ANT': '#3ae8d7', '4.ANT': '#68fcc1', '2.ANT': '#97fca7', '2.MED': '#c5e88a', '1.PRE': '#f3c16a', '1.ANT': '#ff8a48', '1.IN': '#ff4824', '1.ORI': '#ff0000', 'NA': '#c4c4c4', 'prune': '#c4c4c4'}, 'country': {'Kyrgyzstan': '#8000ff', 'Nepal': '#7215ff', 'Canada': '#652afe', 'Germany': '#573ffd', 'Mongolia': '#4a53fc', 'The Netherlands': '#3c66fa', 'Zimbabwe': '#2f79f7', 'Uganda': '#228bf4', 'Kazakhstan': '#149df1', 'Algeria': '#07adee', 'Indonesia': '#07bcea', 'Kenya': '#14c9e5', 'Iran': '#22d5e0', 'India': '#2fe0db', 'England': '#3cead5', 'Tajikistan': '#4af1d0', 'Myanmar': '#57f7c9', 'Russia': '#65fcc3', 'France': '#72febc', 'Vietnam': '#80ffb4', 'Estonia': '#8dfead', 'Spain': '#9afca5', 'Brazil': '#a8f79d', 'United States of America': '#b5f194', 'China': '#c3ea8b', 'Peru': '#d0e083', 'Bolivia': '#ddd579', 'Poland': '#ebc970', 'Armenia': '#f8bc66', 'Turkmenistan': '#ffad5d', 'Switzerland': '#ff9d53', 'Italy': '#ff8b49', 'Georgia': '#ff793f', 'Uzbekistan': '#ff6634', 'Norway': '#ff532a', 'Lithuania': '#ff3f20', 'Democratic Republic of the Congo': '#ff2a15', 'Madagascar': '#ff150b', 'Azerbaijan': '#ff0000', 'NA': '#969696'}, 'province': {'Rostov Oblast': '#8000ff', 'La Libertad': '#7b07ff', 'Brandenburg': '#760eff', 'Central Java': '#7215ff', 'Shirak Province': '#6d1dff', 'Ho Chi Minh City': '#6924fe', 'Baden-Württemberg': '#642bfe', 'Fizuli District': '#6032fe', 'Nevada': '#5b39fd', 'Greater London': '#5740fd', 'Kirov Oblast': '#5247fc', 'Shymkent': '#4d4dfc', 'Xinjiang': '#4954fb', 'Gegharkunik Province': '#445bfb', 'Centre-Loire Valley': '#4062fa', 'Kurdistan': '#3b68f9', 'Shahbuz Rayon': '#376ff9', 'Balkan': '#3275f8', 'Krasnoyarsk Krai': '#2e7bf7', 'Cajamarca': '#2982f6', 'Govi-Altai': '#2488f5', 'Qazakh District': '#208ef4', 'State of Mato Grosso': '#1b94f3', 'Arizona': '#1799f2', 'Kabardino-Balkaria': '#129ff1', 'Heilongjiang': '#0ea5ef', 'Nagorno-Karabakh Republic': '#09aaee', 'Sughd Province': '#05afed', 'Pomeranian Voivodeship': '#00b4ec', 'La Paz': '#05b9ea', 'Jilin': '#09bee9', 'Panevezys County': '#0ec3e7', \"Provence-Alpes-Côte d'Azur\": '#12c7e6', 'Bayankhongor': '#17cce4', 'Colorado': '#1bd0e3', 'Goranboy District': '#20d4e1', 'Province de Fianarantsoa': '#24d8df', 'Ningxia': '#29dcdd', 'Bayan-Ölgii': '#2edfdc', 'Maharashtra': '#32e3da', 'Himachal Pradesh': '#37e6d8', 'Astrakhan Oblast': '#3be9d6', 'Vilnius County': '#40ecd4', 'Tibet': '#44eed2', 'Karachay-Cherkessia': '#49f1d0', 'Altai Krai': '#4df3ce', 'New Mexico': '#52f5cc', 'Fujian': '#57f7ca', 'Gansu': '#5bf9c7', 'Aktobe Region': '#60fac5', 'Kyzylorda Region': '#64fbc3', 'St. Petersberg': '#69fcc1', 'Mangystau Region': '#6dfdbe', 'Nidwalden': '#72febc', 'Hovsgel': '#76ffb9', 'Oslo': '#7bffb7', 'Osh Region': '#80ffb4', 'Tuva Republic': '#84ffb2', 'Dornogovi': '#89ffaf', 'Baku': '#8dfead', 'Atyrau': '#92fdaa', 'Samara Oblast': '#96fca7', 'Syunik Province': '#9bfba5', 'West Kazakhstan region': '#9ffaa2', 'Pärnu maakond': '#a4f99f', 'Shamkir District': '#a8f79c', 'Stavropol Krai': '#adf599', 'Issyk-Kul Region': '#b2f396', 'Zavkhan Province': '#b6f194', 'Tamil Nadu': '#bbee91', 'Valencia Community': '#bfec8e', 'Gandaki Pradesh': '#c4e98b', 'California': '#c8e688', 'Texas': '#cde385', 'Saskatchewan': '#d1df82', 'Inner Mongolia': '#d6dc7e', 'Republic of Dagestan': '#dbd87b', 'Naryn Region': '#dfd478', 'Qinghai': '#e4d075', 'Altai Republic': '#e8cc72', 'Zabaykalsky Krai': '#edc76f', 'Gujarat': '#f1c36b', 'Talas Region': '#f6be68', 'Tatarstan': '#fab965', 'North Brabant': '#ffb462', 'West Kazakhstan Region': '#ffaf5e', 'Lazio': '#ffaa5b', 'Sečuán': '#ffa558', 'Almaty Region': '#ff9f54', 'MSila': '#ff9951', 'Navoiy Region': '#ff944d', 'Ömnögovi': '#ff8e4a', 'Lâm Đồng Province': '#ff8847', 'Hebei': '#ff8243', 'NA': '#969696', 'Atyrau Region': '#ff753c', 'Samtskhe-Javakheti': '#ff6f39', 'Ingushetia': '#ff6835', 'Shaanxi': '#ff6232', 'Midlands': '#ff5b2e', 'Catalonia': '#ff542b', 'East of England': '#ff4d27', 'Republic of Kalmykia': '#ff4724', 'Bavaria': '#ff4020', 'Guangxi Zhuang': '#ff391d', 'Yunnan': '#ff3219', 'Irkutsk Oblast': '#ff2b15', 'Khovd': '#ff2412', 'Övörkhangai': '#ff1d0e', 'Chechnya': '#ff150b', 'Nairobi': '#ff0e07', 'Occitanie': '#ff0704', 'Khánh Hoà Province': '#ff0000'}, 'continent': {'Africa': '#8000ff', 'Asia': '#00b4ec', 'Europe': '#80ffb4', 'North America': '#ffb462', 'South America': '#ff0000', 'NA': '#969696'}, 'host_order': {'Siphonaptera': '#8000ff', 'Lagomorpha': '#4c4ffc', 'Rodentia': '#1996f3', 'Marsupialia': '#1acee3', 'Artiodactyla': '#4df3ce', 'Lepidoptera': '#80ffb4', 'NA': '#969696', 'Human': '#e6ce74', 'Ixodida': '#ff964f', 'Phthiraptera': '#ff4f28', 'Carnivora': '#ff0000'}}\n" ] } ], "source": [ "out_path_colors = os.path.join(augur_dir, \"colors.tsv\")\n", - "attributes = [\"country\", \"province\", \"branch_major\", \"branch_minor\",\"continent\"]\n", + "attributes = [\"country\", \"province\",\"continent\", \"host_order\"]\n", "colors_dict = {}\n", "\n", + "colors_dict[\"population\"] = {'0.PRE': '#8000ff', '0.PE': '#5148fc', '0.ANT': '#238af5', '0.ANT4': '#0cc1e8', '3.ANT': '#3ae8d7', '4.ANT': '#68fcc1', '2.ANT': '#97fca7', '2.MED': '#c5e88a', '1.PRE': '#f3c16a', '1.ANT': '#ff8a48', '1.IN': '#ff4824', '1.ORI': '#ff0000', 'NA': '#c4c4c4'}\n", + "colors_dict[\"population\"][\"prune\"] = \"#c4c4c4\"\n", + "\n", "for attr in attributes:\n", " # Create the color map\n", " colors_dict[attr] = {}\n", " \n", - " # Set branch_major based on list\n", - " if attr == \"branch_major\":\n", - " states = list(BRANCH_LIST.keys())\n", - " states.reverse()\n", - " # Remove minor branch\n", - " states.remove(\"0.ANT4\")\n", - " print(states)\n", - " else:\n", - " states = set(metadata_df[attr])\n", + " states = set(metadata_df[attr])\n", " \n", " # Create the custom color map (pyplot)\n", " cmap = plt.get_cmap(\"rainbow\", len(states))\n", @@ -1048,9 +1255,6 @@ " \n", " # Add unknown\n", " colors_dict[attr][NO_DATA_CHAR] = \"#969696\"\n", - " # Add minor branch\n", - " if attr == \"branch_major\":\n", - " colors_dict[attr][\"0.ANT4\"] = colors_dict[attr][\"0.ANT\"]\n", " \n", "print(colors_dict)\n", "\n", @@ -1168,6 +1372,17 @@ { "cell_type": "code", "execution_count": 11, + "id": "honey-barcelona", + "metadata": {}, + "outputs": [], + "source": [ + "divtree = Phylo.read(divtree_path, \"newick\")\n", + "divtree.ladderize(reverse=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, "id": "small-message", "metadata": {}, "outputs": [ @@ -1175,7 +1390,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 0.PRE\n" + "Population: 0.PRE\n" ] }, { @@ -1194,7 +1409,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 0.PE\n", + "Population: 0.PE\n", "Rename: GCA_002412235.1_Y.pestis_A_1249_genomic_44 GCA_002412235.1_Y.pestis_A-1249_genomic_44\n", "Rename: GCA_003122795.1_Y.pestis_I_2422_genomic_40 GCA_003122795.1_Y.pestis_I-2422_genomic_40\n" ] @@ -1215,7 +1430,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 0.ANT\n", + "Population: 0.ANT\n", "Rename: GCA_002412225.1_Y.pestis_A_1486_genomic_53 GCA_002412225.1_Y.pestis_A-1486_genomic_53\n", "Rename: GCA_002412255.1_Y.pestis_A_1836_genomic_36 GCA_002412255.1_Y.pestis_A-1836_genomic_36\n", "Rename: GCA_002412245.1_Y.pestis_A_1691_genomic_48 GCA_002412245.1_Y.pestis_A-1691_genomic_48\n" @@ -1237,7 +1452,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 0.ANT4\n" + "Population: 0.ANT4\n" ] }, { @@ -1256,7 +1471,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 3.ANT\n" + "Population: 3.ANT\n" ] }, { @@ -1275,7 +1490,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 4.ANT\n" + "Population: 4.ANT\n" ] }, { @@ -1294,7 +1509,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 2.ANT\n" + "Population: 2.ANT\n" ] }, { @@ -1313,7 +1528,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 1.PRE\n" + "Population: 1.PRE\n" ] }, { @@ -1332,7 +1547,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 1.ANT\n" + "Population: 1.ANT\n" ] }, { @@ -1351,7 +1566,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 1.IN\n" + "Population: 1.IN\n" ] }, { @@ -1370,7 +1585,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: 1.ORI\n", + "Population: 1.ORI\n", "Rename: GCA_000986995.1_YPES001_SEQ_2_ASM_1_genomic_22 GCA_000986995.1_YPES001-SEQ-2-ASM-1_genomic_22\n", "Rename: GCA_000324805.2_EV76_CN_genomic_90 GCA_000324805.2_EV76-CN_genomic_90\n" ] @@ -1392,7 +1607,7 @@ "# Construct a dictionary to hold the trees\n", "tree_dict = {}\n", "\n", - "for branch in [\"prune\"] + BRANCH_LIST_REVERSE:\n", + "for population in [\"prune\"] + population_list:\n", " for filename in os.listdir(tree_dir):\n", " if not filename.endswith(\".tree\") and not filename.endswith(\".tre\"): continue\n", " # For clock model \n", @@ -1400,21 +1615,21 @@ " \n", " filepath = os.path.join(tree_dir, filename)\n", " \n", - " # Check file matches branch\n", + " # Check file matches population\n", " filename_strip = filename.split(\"_\")[0].replace(\"SC\",\"\").replace(\"UCLN\",\"\")\n", - " if filename_strip == branch:\n", + " if filename_strip == population:\n", " \n", - " print(\"Branch:\", branch)\n", - " tree_dict[branch] = {} \n", + " print(\"Population:\", population)\n", + " tree_dict[population] = {} \n", " \n", " # Add tree files to dict\n", - " tree_dict[branch][\"tree_file_raw\"] = filepath \n", - " tree_dict[branch][\"tree_file_edit\"] = os.path.join(tree_dir, branch + \".nex\")\n", - " tree_dict[branch][\"sample_rename\"] = {}\n", + " tree_dict[population][\"tree_file_raw\"] = filepath \n", + " tree_dict[population][\"tree_file_edit\"] = os.path.join(tree_dir, population + \".nex\")\n", + " tree_dict[population][\"sample_rename\"] = {}\n", " \n", " # Read in raw tree to deal with dashes\n", - " with open(tree_dict[branch][\"tree_file_raw\"], \"r\") as infile: \n", - " with open(tree_dict[branch][\"tree_file_edit\"], \"w\") as outfile: \n", + " with open(tree_dict[population][\"tree_file_raw\"], \"r\") as infile: \n", + " with open(tree_dict[population][\"tree_file_edit\"], \"w\") as outfile: \n", " raw_tree = infile.read()\n", " # Remove quotations if they exist\n", " raw_tree = raw_tree.replace(\"'\",\"\")\n", @@ -1432,24 +1647,24 @@ " if len(line.split(\" \")) == 1:\n", " name_dashes = line.strip()\n", " name_no_dashes = name_dashes.replace(\"-\",\"_\")\n", - " tree_dict[branch][\"sample_rename\"][name_no_dashes] = name_dashes\n", + " tree_dict[population][\"sample_rename\"][name_no_dashes] = name_dashes\n", " line = line.replace(\"-\",\"_\")\n", " \n", " outfile.write(line + \"\\n\")\n", " \n", " # Read in edited tree\n", - " trees = Phylo.parse(tree_dict[branch][\"tree_file_edit\"], \"nexus\")\n", + " trees = Phylo.parse(tree_dict[population][\"tree_file_edit\"], \"nexus\")\n", " # There should be only 1 tree\n", " for t in trees:\n", - " tree_dict[branch][\"tree\"] = t\n", - " tree_dict[branch][\"tree\"].ladderize(reverse=True)\n", + " tree_dict[population][\"tree\"] = t\n", + " tree_dict[population][\"tree\"].ladderize(reverse=True)\n", " break\n", "\n", " # Rename sample names back to with dashes\n", - " for c in tree_dict[branch][\"tree\"].find_clades():\n", - " if c.name in tree_dict[branch][\"sample_rename\"]:\n", + " for c in tree_dict[population][\"tree\"].find_clades():\n", + " if c.name in tree_dict[population][\"sample_rename\"]:\n", " orig_name = c.name\n", - " c.name = tree_dict[branch][\"sample_rename\"][c.name]\n", + " c.name = tree_dict[population][\"sample_rename\"][c.name]\n", " print(\"Rename:\", orig_name, c.name)\n", " \n", " # Strip the date suffix\n", @@ -1458,16 +1673,209 @@ " \n", " # Rename internal nodes\n", " node_i = 0\n", - " for c in tree_dict[branch][\"tree\"].find_clades():\n", + " for c in tree_dict[population][\"tree\"].find_clades():\n", " if not c.name:\n", " c.name = \"NODE{}\".format(node_i)\n", " node_i += 1\n", " \n", - " if branch in tree_dict:\n", - " Phylo.draw(tree_dict[branch][\"tree\"], label_func = lambda x: '')\n", + " if population in tree_dict:\n", + " Phylo.draw(tree_dict[population][\"tree\"], label_func = lambda x: '')\n", " " ] }, + { + "cell_type": "markdown", + "id": "pending-single", + "metadata": {}, + "source": [ + "## External Branch Lengths" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "japanese-straight", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['1.ORI', '1.IN', '1.ANT', '1.PRE', '2.MED', '2.ANT', '4.ANT', '3.ANT', '0.ANT4', '0.ANT', '0.PE', '0.PRE']\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
total_brancheslong_branchespercpopulation
1.ORI11721.7094021.ORI
1.IN3925.1282051.IN
1.ANT4125.0000001.ANT
1.PRE4012.5000001.PRE
2.MED1161714.6551722.MED
...............
0.ANT41200.0000000.ANT4
0.ANT10310.9708740.ANT
0.PE862023.2558140.PE
0.PRE8112.5000000.PRE
prune601487.986689prune
\n", + "

13 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " total_branches long_branches perc population\n", + "1.ORI 117 2 1.709402 1.ORI\n", + "1.IN 39 2 5.128205 1.IN\n", + "1.ANT 4 1 25.000000 1.ANT\n", + "1.PRE 40 1 2.500000 1.PRE\n", + "2.MED 116 17 14.655172 2.MED\n", + "... ... ... ... ...\n", + "0.ANT4 12 0 0.000000 0.ANT4\n", + "0.ANT 103 1 0.970874 0.ANT\n", + "0.PE 86 20 23.255814 0.PE\n", + "0.PRE 8 1 12.500000 0.PRE\n", + "prune 601 48 7.986689 prune\n", + "\n", + "[13 rows x 4 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "population_list = []\n", + "\n", + "# Add external branch length\n", + "for t in divtree.get_terminals():\n", + " sample = t.name\n", + " population = metadata_df[\"population\"][sample]\n", + " if population not in population_list:\n", + " population_list.append(population)\n", + " metadata_df.at[sample, \"external_branch_length\"] = t.branch_length\n", + "population_list.reverse()\n", + "\n", + "# Branch Lengths\n", + "print(population_list)\n", + "long_branch_dict = {pop: {\"total_branches\" : 0, \"long_branches\" : 0, \"perc\": 0,} for pop in population_list + [\"prune\"]}\n", + "total_branches = 0\n", + "long_branches = 0\n", + "threshold = 1e-5\n", + "\n", + "for rec in metadata_df.iterrows():\n", + " sample = rec[0]\n", + " population = rec[1][\"population\"]\n", + " length = rec[1][\"external_branch_length\"]\n", + " long_branch_dict[population][\"total_branches\"] += 1\n", + " long_branch_dict[\"prune\"][\"total_branches\"] += 1\n", + " long_branches += 1\n", + " if length >= threshold:\n", + " long_branch_dict[population][\"long_branches\"] += 1\n", + " long_branch_dict[\"prune\"][\"long_branches\"] += 1\n", + "\n", + "\n", + " \n", + "for pop in long_branch_dict:\n", + " long_branch_dict[pop][\"perc\"] = (long_branch_dict[pop][\"long_branches\"] / long_branch_dict[pop][\"total_branches\"]) * 100\n", + " \n", + "branch_df = pd.DataFrame.from_dict(long_branch_dict, orient=\"index\")\n", + "branch_df[\"population\"] = branch_df.index \n", + "\n", + "display(branch_df)" + ] + }, { "cell_type": "markdown", "id": "excited-alloy", @@ -1478,7 +1886,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 56, "id": "loaded-injury", "metadata": {}, "outputs": [ @@ -1486,19 +1894,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "Branch: prune\n", - "Branch: 0.PRE\n", - "Branch: 0.PE\n", - "Branch: 0.ANT\n", - "Branch: 0.ANT4\n", - "Branch: 3.ANT\n", - "Branch: 4.ANT\n", - "Branch: 2.ANT\n", - "Branch: 2.MED\n", - "Branch: 1.PRE\n", - "Branch: 1.ANT\n", - "Branch: 1.IN\n", - "Branch: 1.ORI\n" + "Population: prune\n", + "Population: 1.ORI\n", + "Population: 1.IN\n", + "Population: 1.ANT\n", + "Population: 1.PRE\n", + "Population: 2.MED\n", + "Population: 2.ANT\n", + "Population: 4.ANT\n", + "Population: 3.ANT\n", + "Population: 0.ANT4\n", + "Population: 0.ANT\n", + "Population: 0.PE\n", + "Population: 0.PRE\n" ] } ], @@ -1506,7 +1914,7 @@ "# Construct a dictionary to hold the logs\n", "log_dict = {}\n", "\n", - "for branch in [\"prune\"] + BRANCH_LIST_REVERSE:\n", + "for population in [\"prune\"] + population_list:\n", " for filename in os.listdir(log_dir):\n", " if not filename.endswith(\".log\"): continue \n", " # For clock model \n", @@ -1514,16 +1922,16 @@ " \n", " filepath = os.path.join(log_dir, filename)\n", " \n", - " # Check file matches branch\n", + " # Check file matches population\n", " filename_strip = filename.split(\"_\")[0].replace(\"SC\",\"\").replace(\"UCLN\",\"\")\n", - " if filename_strip == branch:\n", + " if filename_strip == population:\n", " \n", - " print(\"Branch:\", branch)\n", + " print(\"Population:\", population)\n", "\n", - " log_dict[branch] = {} \n", + " log_dict[population] = {} \n", " \n", " # Add log files to dict\n", - " log_dict[branch][\"log_file_raw\"] = filepath \n", + " log_dict[population][\"log_file_raw\"] = filepath \n", " \n", " with open(filepath, \"r\") as infile:\n", " read_lines = infile.read().split(\"\\n\")\n", @@ -1556,7 +1964,7 @@ " df = df.iloc[burnin_lines:]\n", " \n", " # Add df to dict\n", - " log_dict[branch][\"log_df\"] = df" + " log_dict[population][\"log_df\"] = df" ] }, { @@ -1569,7 +1977,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 58, "id": "heated-universal", "metadata": {}, "outputs": [ @@ -1594,13 +2002,14 @@ " \n", " \n", " \n", - " branch\n", + " population\n", " meanRate\n", " coefficientOfVariation\n", " age(root)\n", - " log_meanRate\n", + " meanRate_log\n", " stdevRate\n", - " log_stdevRate\n", + " stdevRate_log\n", + " long_external_branches\n", " \n", " \n", " \n", @@ -1612,7 +2021,8 @@ " 1870.199785\n", " -15.862743\n", " 2.931263e-07\n", - " -15.042662\n", + " -15.0427\n", + " 2\n", " \n", " \n", " 1\n", @@ -1622,7 +2032,8 @@ " 1866.083827\n", " -15.844431\n", " 1.904447e-07\n", - " -15.473904\n", + " -15.4739\n", + " 2\n", " \n", " \n", " 2\n", @@ -1632,7 +2043,8 @@ " 1892.098874\n", " -15.688764\n", " 2.288878e-07\n", - " -15.290034\n", + " -15.29\n", + " 2\n", " \n", " \n", " 3\n", @@ -1642,7 +2054,8 @@ " 1880.957022\n", " -15.737501\n", " 2.313678e-07\n", - " -15.279257\n", + " -15.2793\n", + " 2\n", " \n", " \n", " 4\n", @@ -1652,7 +2065,8 @@ " 1870.652997\n", " -15.907201\n", " 1.761486e-07\n", - " -15.551938\n", + " -15.5519\n", + " 2\n", " \n", " \n", " ...\n", @@ -1663,6 +2077,7 @@ " ...\n", " ...\n", " ...\n", + " ...\n", " \n", " \n", " 8996\n", @@ -1672,7 +2087,8 @@ " -6235.697641\n", " -18.210314\n", " 2.282513e-08\n", - " -17.595404\n", + " -17.5954\n", + " 48\n", " \n", " \n", " 8997\n", @@ -1682,7 +2098,8 @@ " -6190.730108\n", " -18.177924\n", " 2.334389e-08\n", - " -17.572931\n", + " -17.5729\n", + " 48\n", " \n", " \n", " 8998\n", @@ -1692,7 +2109,8 @@ " -6057.513385\n", " -18.186486\n", " 2.347987e-08\n", - " -17.567122\n", + " -17.5671\n", + " 48\n", " \n", " \n", " 8999\n", @@ -1702,7 +2120,8 @@ " -6122.519517\n", " -18.185068\n", " 2.303957e-08\n", - " -17.586053\n", + " -17.5861\n", + " 48\n", " \n", " \n", " 9000\n", @@ -1712,41 +2131,42 @@ " -6753.403547\n", " -18.182621\n", " 2.306917e-08\n", - " -17.584769\n", + " -17.5848\n", + " 48\n", " \n", " \n", "\n", - "

93469 rows × 7 columns

\n", + "

93469 rows × 8 columns

\n", "" ], "text/plain": [ - " branch meanRate coefficientOfVariation age(root) log_meanRate \\\n", - "0 1.ORI 1.290917e-07 2.270683 1870.199785 -15.862743 \n", - "1 1.ORI 1.314774e-07 1.448497 1866.083827 -15.844431 \n", - "2 1.ORI 1.536231e-07 1.489931 1892.098874 -15.688764 \n", - "3 1.ORI 1.463154e-07 1.581295 1880.957022 -15.737501 \n", - "4 1.ORI 1.234782e-07 1.426556 1870.652997 -15.907201 \n", - "... ... ... ... ... ... \n", - "8996 prune 1.234131e-08 1.849490 -6235.697641 -18.210314 \n", - "8997 prune 1.274758e-08 1.831241 -6190.730108 -18.177924 \n", - "8998 prune 1.263891e-08 1.857745 -6057.513385 -18.186486 \n", - "8999 prune 1.265684e-08 1.820325 -6122.519517 -18.185068 \n", - "9000 prune 1.268785e-08 1.818210 -6753.403547 -18.182621 \n", + " population meanRate coefficientOfVariation age(root) \\\n", + "0 1.ORI 1.290917e-07 2.270683 1870.199785 \n", + "1 1.ORI 1.314774e-07 1.448497 1866.083827 \n", + "2 1.ORI 1.536231e-07 1.489931 1892.098874 \n", + "3 1.ORI 1.463154e-07 1.581295 1880.957022 \n", + "4 1.ORI 1.234782e-07 1.426556 1870.652997 \n", + "... ... ... ... ... \n", + "8996 prune 1.234131e-08 1.849490 -6235.697641 \n", + "8997 prune 1.274758e-08 1.831241 -6190.730108 \n", + "8998 prune 1.263891e-08 1.857745 -6057.513385 \n", + "8999 prune 1.265684e-08 1.820325 -6122.519517 \n", + "9000 prune 1.268785e-08 1.818210 -6753.403547 \n", "\n", - " stdevRate log_stdevRate \n", - "0 2.931263e-07 -15.042662 \n", - "1 1.904447e-07 -15.473904 \n", - "2 2.288878e-07 -15.290034 \n", - "3 2.313678e-07 -15.279257 \n", - "4 1.761486e-07 -15.551938 \n", - "... ... ... \n", - "8996 2.282513e-08 -17.595404 \n", - "8997 2.334389e-08 -17.572931 \n", - "8998 2.347987e-08 -17.567122 \n", - "8999 2.303957e-08 -17.586053 \n", - "9000 2.306917e-08 -17.584769 \n", + " meanRate_log stdevRate stdevRate_log long_external_branches \n", + "0 -15.862743 2.931263e-07 -15.0427 2 \n", + "1 -15.844431 1.904447e-07 -15.4739 2 \n", + "2 -15.688764 2.288878e-07 -15.29 2 \n", + "3 -15.737501 2.313678e-07 -15.2793 2 \n", + "4 -15.907201 1.761486e-07 -15.5519 2 \n", + "... ... ... ... ... \n", + "8996 -18.210314 2.282513e-08 -17.5954 48 \n", + "8997 -18.177924 2.334389e-08 -17.5729 48 \n", + "8998 -18.186486 2.347987e-08 -17.5671 48 \n", + "8999 -18.185068 2.303957e-08 -17.5861 48 \n", + "9000 -18.182621 2.306917e-08 -17.5848 48 \n", "\n", - "[93469 rows x 7 columns]" + "[93469 rows x 8 columns]" ] }, "metadata": {}, @@ -1754,14 +2174,15 @@ } ], "source": [ - "mega_df = pd.DataFrame(columns=[\"branch\", \"meanRate\", \"coefficientOfVariation\", \"age(root)\", \"log_meanRate\", \"stdevRate\"])\n", + "columns = [\"population\", \"meanRate\", \"coefficientOfVariation\", \"age(root)\", \"meanRate_log\", \"stdevRate\", \"stdevRate_log\", \"long_external_branches\"]\n", "\n", - "branch_list = [\"prune\"] + BRANCH_LIST_REVERSE\n", - "branch_list.reverse()\n", + "mega_df = pd.DataFrame(columns=columns)\n", "\n", - "for branch in branch_list:\n", - " df = log_dict[branch][\"log_df\"]\n", - " branches = [branch] * len(df)\n", + "\n", + "\n", + "for population in population_list + [\"prune\"]:\n", + " df = log_dict[population][\"log_df\"]\n", + " populations = [population] * len(df)\n", " \n", " mean_rate = list(df[\"meanRate\"])\n", " mean_rate_log = [np.log(rate) for rate in mean_rate]\n", @@ -1782,55 +2203,62 @@ " age_root = list(df[\"age(root)\"])\n", " \n", " mrsd = 2019\n", - " if branch in mrsd_dict:\n", - " mrsd = mrsd_dict[branch]\n", + " if population in mrsd_dict:\n", + " mrsd = mrsd_dict[population]\n", " age_root_calendar = [mrsd - age for age in age_root]\n", " \n", + " long_external_branches = long_branch_dict[population][\"long_branches\"]\n", + " long_external_branches = [long_external_branches] * len(populations)\n", " data = {\n", - " \"branch\": branches, \n", + " \"population\": populations, \n", " \"meanRate\": mean_rate, \n", " \"coefficientOfVariation\": coefficient_of_variation,\n", " \"age(root)\" : age_root_calendar,\n", - " \"log_meanRate\" : mean_rate_log,\n", + " \"meanRate_log\" : mean_rate_log,\n", " \"stdevRate\": stdev_rate,\n", - " \"log_stdevRate\": stdev_rate_log,\n", + " \"stdevRate_log\": stdev_rate_log,\n", + " \"long_external_branches\" : long_external_branches,\n", " }\n", " data_df = pd.DataFrame(data)\n", " mega_df = mega_df.append(data_df)\n", "\n", + "mega_df.fillna(NO_DATA_CHAR, inplace=True)\n", "display(mega_df)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 44, "id": "convertible-extra", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "/mnt/c/Users/ktmea/Projects/plague-phylogeography-projects/main//beast/all/chromosome/clade/log/meanRate_coefficientOfVariation_ageRoot.tsv\n" - ] + "data": { + "text/plain": [ + "'out_path = os.path.join(log_dir, \"meanRate_coefficientOfVariation_ageRoot.tsv\")\\nprint(out_path)\\n\\nwith open(out_path, \"w\") as outfile:\\n params = [\"meanRate\", \"coefficientOfVariation\", \"age(root)\"] \\n header = [\"population\"]\\n for param in params:\\n header.append(param)\\n header.append(param + \"_ci\")\\n line = \"{}\\t{}\\t{}\\t{}\\t{}\\t{}\\t{}\".format(*header)\\n outfile.write(line + \"\\n\")\\n for population in log_dict:\\n df = mega_df[mega_df[\"population\"] == population]\\n param_dict = {h:0 for h in header}\\n param_dict[\"population\"] = population\\n params = [\"meanRate\", \"coefficientOfVariation\", \"age(root)\"]\\n \\n for param in params:\\n kde = sma.nonparametric.KDEUnivariate(\\n df[param]\\n )\\n kde.fit()\\n peak_i = np.argmax(kde.density)\\n peak = kde.support[peak_i]\\n ci = np.array(\\n np.percentile(\\n np.array(df[param]),\\n (100 - 95, 95),\\n axis=0,\\n )\\n )\\n if \"age\" in param:\\n ci_pretty = str([round(n) for n in ci]).strip(\"[]\").replace(\" \",\"\")\\n elif \"coeff\" in param:\\n ci_pretty = str([round(n, 2) for n in ci]).strip(\"[]\").replace(\" \",\"\")\\n else:\\n ci_pretty = str([n for n in ci]).strip(\"[]\").replace(\" \",\"\")\\n\\n param_dict[param] = peak\\n param_dict[param + \"_ci\"] = ci_pretty\\n \\n data = param_dict.values() \\n line = \"{}\\t{}\\t{}\\t{}\\t{}\\t{}\\t{}\".format(*data)\\n outfile.write(line + \"\\n\")\\n \\n log_dict[population][\"param_dict\"] = param_dict'" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "out_path = os.path.join(log_dir, \"meanRate_coefficientOfVariation_ageRoot.tsv\")\n", + "\"\"\"out_path = os.path.join(log_dir, \"meanRate_coefficientOfVariation_ageRoot.tsv\")\n", "print(out_path)\n", "\n", "with open(out_path, \"w\") as outfile:\n", " params = [\"meanRate\", \"coefficientOfVariation\", \"age(root)\"] \n", - " header = [\"branch\"]\n", + " header = [\"population\"]\n", " for param in params:\n", " header.append(param)\n", " header.append(param + \"_ci\")\n", " line = \"{}\\t{}\\t{}\\t{}\\t{}\\t{}\\t{}\".format(*header)\n", " outfile.write(line + \"\\n\")\n", - " for branch in log_dict:\n", - " df = mega_df[mega_df[\"branch\"] == branch]\n", + " for population in log_dict:\n", + " df = mega_df[mega_df[\"population\"] == population]\n", " param_dict = {h:0 for h in header}\n", - " param_dict[\"branch\"] = branch\n", + " param_dict[\"population\"] = population\n", " params = [\"meanRate\", \"coefficientOfVariation\", \"age(root)\"]\n", " \n", " for param in params:\n", @@ -1861,12 +2289,12 @@ " line = \"{}\\t{}\\t{}\\t{}\\t{}\\t{}\\t{}\".format(*data)\n", " outfile.write(line + \"\\n\")\n", " \n", - " log_dict[branch][\"param_dict\"] = param_dict" + " log_dict[population][\"param_dict\"] = param_dict\"\"\"" ] }, { "cell_type": "markdown", - "id": "frequent-refund", + "id": "ancient-terrorism", "metadata": {}, "source": [ "## Plot Mean Rate" @@ -1874,272 +2302,119 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "fitted-sauce", + "execution_count": 198, + "id": "molecular-european", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['1.ORI', '1.IN', '1.ANT', '1.PRE', '2.MED', '2.ANT', '4.ANT', '3.ANT', '0.ANT4', '0.ANT', '0.PE', '0.PRE', 'All']\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "FONTSIZE=12\n", + "FONTSIZE=14\n", "plt.rc('font', size=FONTSIZE)\n", - "DPI=400\n", + "DPI=50\n", "LINEWIDTH=1\n", - "FIGSIZE=[6,6]\n", + "FIGSIZE=[12,6]\n", "\n", "## All\n", - "fig, axes = plt.subplots(1, 2, figsize=FIGSIZE, dpi=DPI, sharey=True)\n", - "fig.subplots_adjust(wspace=0.35)\n", - "\n", - "branch_list = [\"prune\"] + BRANCH_LIST_REVERSE\n", - "branch_list.reverse()\n", + "fig, axes = plt.subplots(1, 3, figsize=FIGSIZE, dpi=DPI, sharey=True)\n", + "fig.subplots_adjust(wspace=0.2)\n", "\n", "# -------------------------------\n", "# Mean Substitution Rate\n", "ax = axes[0]\n", - "\n", - "# Regular\n", - "#sns.violinplot(ax=ax, data=mega_df, y=\"branch\", x=\"meanRate\", inner=None, scale=\"width\", order=branch_list)\n", - "#ax.set_xlim(min(mega_df[\"meanRate\"]) - 1e-7, max(mega_df[\"meanRate\"]) + 2e-7)\n", - "#ax.set_xlabel(\"Mean Substitution Rate\", fontsize=FONTSIZE + 2)\n", - "\n", - "# Log\n", - "sns.violinplot(ax=ax, data=mega_df, y=\"branch\", x=\"log_meanRate\", inner=None, scale=\"width\", order=branch_list)\n", - "#ax.set_xlim(min(mega_df[\"log_meanRate\"]) - 0.5, max(mega_df[\"log_meanRate\"]) + 2)\n", - "ax.set_xlim(-20, -12) \n", - "ax.set_xlabel(\"log(Mean)\", fontsize=FONTSIZE + 2)\n", - "\n", - "ax.set_ylabel(\"Population\", fontsize=FONTSIZE + 2)\n", + "sns.violinplot(\n", + " ax=ax, \n", + " data=mega_df, \n", + " y=\"population\", \n", + " x=\"meanRate\", \n", + " inner=None, \n", + " scale=\"width\", \n", + " order=population_list + [\"prune\"],\n", + " palette=colors_dict[\"population\"],\n", + ")\n", + "ax.set_xlabel(\"Substitution Rate\\nMean\")\n", + "ax.xaxis.set_major_locator(ticker.MultipleLocator(2e-7))\n", + "ax.set_xlim(-1e-7,max(mega_df[\"meanRate\"]) + 3e-7)\n", + "y = 0\n", + "for population in population_list + [\"prune\"]:\n", + " pop_df = mega_df[mega_df[\"population\"] == population]\n", + " max_rate = max(pop_df[\"meanRate\"])\n", + " mean_rate = sum(pop_df[\"meanRate\"]) / len(pop_df[\"meanRate\"])\n", + " t = \"{:.1e}\".format(mean_rate)\n", + " x = max_rate + 5e-8\n", + " ax.text(x, y + 0.1, str(t), fontsize=FONTSIZE-6)\n", + " y += 1\n", "\n", "# -------------------------------\n", "# Standard Deviation\n", "ax = axes[1]\n", - "#df = mega_df[(mega_df[\"log_stdevRate\"] != np.nan) & (mega_df[\"branch\"] != \"1.ANT\")]\n", - "df = mega_df[(mega_df[\"log_stdevRate\"] != np.nan)]\n", - "# Regular\n", - "#sns.violinplot(ax=ax, data=df, y=\"branch\", x=\"stdevRate\", inner=None, scale=\"width\", order=branch_list)\n", - "#ax.set_xlim(-0.5, max(mega_df[\"coefficientOfVariation\"]) + 2)\n", - "\n", - "# Log\n", - "sns.violinplot(ax=ax, data=df, y=\"branch\", x=\"log_stdevRate\", inner=None, scale=\"width\", order=branch_list)\n", - "ax.set_xlim(-20, -12) \n", - "ax.set_xlabel(\"log(Standard Deviation)\", fontsize=FONTSIZE + 2)\n", - "# -------------------------------\n", - "# Style\n", - "for ax in axes:\n", - " \n", - " if ax == axes[0]:\n", - " ax.yaxis.tick_right()\n", - " # Linewidths\n", - " ax.xaxis.set_tick_params(width=LINEWIDTH)\n", - " ax.yaxis.set_tick_params(width=LINEWIDTH)\n", - " \n", - " # Fontsizes\n", - " ax.tick_params(axis='x', labelsize=FONTSIZE - 2)\n", - " ax.tick_params(axis='y', labelsize=FONTSIZE - 2)\n", - " \n", - " if ax != axes[0] and ax != axes[-1]:\n", - " ax.set_yticks([])\n", - " ax.set_ylabel(\"\")\n", - " else:\n", - " labels = copy.deepcopy(branch_list)\n", - " labels[-1] = \"All\"\n", - " ax.set_yticklabels(labels=labels)\n", - " \n", - " if ax == axes[-1]:\n", - " #ax.yaxis.tick_right()\n", - " ax.set_ylabel(\"\")\n", - " \n", - " # Iterate through items in axis\n", - " for spine in ax.spines:\n", - " ax.spines[spine].set_linewidth(0.5)\n", - " \n", - " for i in range(0, len(ax.collections)):\n", - " collection = ax.collections[i]\n", - "\n", - " branch = branch_list[i]\n", - " color = \"#c4c4c4\"\n", - " if branch in colors_dict[\"branch_major\"]:\n", - " color = colors_dict[\"branch_major\"][branch]\n", - "\n", - " collection.set_facecolor(color)\n", - " collection.set_linewidth(LINEWIDTH)\n", - " \n", - "# Save\n", - "out_path = os.path.join(log_dir, \"meanRate_stdev\")\n", - "plt.savefig(out_path + \".png\", bbox_inches=\"tight\")\n", - "plt.savefig(out_path + \".svg\", bbox_inches=\"tight\") " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "exempt-synthetic", - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "\"\"\"FONTSIZE=4\n", - "LINEWIDTH=0.5\n", - "plt.rc('font', size=FONTSIZE)\n", - "plt.rc('lines', linewidth=LINEWIDTH)\n", - "\n", - "fig, axes = plt.subplots(1, 4, figsize=(5,2), dpi=300, gridspec_kw={'width_ratios': [1,1,1,1]})\n", - "fig.subplots_adjust(wspace=0.15)\n", - "\n", - "branch_list = [\"prune\"] + BRANCH_LIST_REVERSE\n", - "branch_list.reverse()\n", - "\n", - "\n", - "# -------------------------------\n", - "# Mean Substitution Rate\n", - "ax = axes[0]\n", - "\n", - "sns.violinplot(ax=ax, data=mega_df, y=\"branch\", x=\"log_meanRate\", inner=None, scale=\"width\", order=branch_list)\n", - "ax.set_xlabel(\"log(Mean Substitution Rate)\", fontsize=FONTSIZE * 1, fontweight=\"bold\")\n", - "ax.set_ylabel(\"Branch.Biovar\", fontsize=FONTSIZE * 1, fontweight=\"bold\")\n", - "ax.set_xlim(min(mega_df[\"log_meanRate\"]) - 0.5, max(mega_df[\"log_meanRate\"]) + 2)\n", - "\n", - "# Text\n", - "for i in range(len(ax.collections)): \n", - " branch = branch_list[i]\n", - " branch_df = mega_df[mega_df[\"branch\"] == branch]\n", - " max_log_rate = max(branch_df[\"log_meanRate\"])\n", - " peak = log_dict[branch][\"param_dict\"][\"meanRate\"]\n", - " \n", - " xbuff = 0.25\n", - " ybuff = 0.05\n", - " ax.annotate(\n", - " (\"{:.2e}\".format(peak)),\n", - " xy=(max_log_rate + xbuff, i + ybuff),\n", - " xycoords=\"data\",\n", - " fontsize=FONTSIZE * 0.65,\n", - " )\n", - " \n", - "# -------------------------------\n", - "# Coefficient of Variation\n", - "ax = axes[1]\n", - "\n", - "sns.violinplot(ax=ax, data=mega_df, y=\"branch\", x=\"coefficientOfVariation\", inner=None, scale=\"width\", order=branch_list)\n", - "ax.set_xlabel(\"Coefficient of Variation\", fontsize=FONTSIZE * 1, fontweight=\"bold\") \n", - "ax.set_xlim(-0.5, max(mega_df[\"coefficientOfVariation\"]) + 2)\n", - "\n", - "# Text\n", - "for i in range(len(ax.collections)): \n", - " branch = branch_list[i]\n", - " branch_df = mega_df[mega_df[\"branch\"] == branch]\n", - " max_coeff = max(branch_df[\"coefficientOfVariation\"])\n", - " peak = log_dict[branch][\"param_dict\"][\"coefficientOfVariation\"]\n", - " \n", - " xbuff = 0.5\n", - " ybuff = 0.05\n", - " ax.annotate(\n", - " (\"{:.2}\".format(peak)),\n", - " xy=(max_coeff + xbuff, i + ybuff),\n", - " xycoords=\"data\",\n", - " fontsize=FONTSIZE * 0.65,\n", - " )\n", + "sns.violinplot(\n", + " ax=ax, \n", + " data=mega_df, \n", + " y=\"population\", \n", + " x=\"stdevRate\", \n", + " inner=None, \n", + " scale=\"width\", \n", + " order=population_list + [\"prune\"],\n", + " palette=colors_dict[\"population\"],\n", + ")\n", + "ax.set_xlabel(\"Substitution Rate\\nStandard Deviation\")\n", + "#ax.xaxis.set_major_locator(ticker.MultipleLocator(2e-7))\n", "\n", "# -------------------------------\n", - "# Age Root\n", + "# Long External Branches\n", "ax = axes[2]\n", + "sns.barplot(\n", + " ax=ax,\n", + " data=branch_df[branch_df[\"population\"] != \"prune\"],\n", + " y=\"population\",\n", + " x=\"long_branches\",\n", + " ec=\"black\",\n", + " order=population_list + [\"prune\"],\n", + " palette=colors_dict[\"population\"],\n", "\n", - "df = mega_df[(mega_df[\"branch\"] == 'prune') | (mega_df[\"branch\"] == '0.PRE')]\n", - "sns.violinplot(ax=ax, data=df, y=\"branch\", x=\"age(root)\", inner=None, scale=\"width\", order=branch_list)\n", - "ax.set_xlabel(\"Root Age\", fontsize=FONTSIZE * 1, fontweight=\"bold\") \n", - "ax.set_xlim(-15001,1001)\n", - "\n", - "# Text\n", - "num_collections = len(ax.collections)\n", - "num_labels = len(branch_list + [\"prune\"])\n", - "i_start = num_labels - num_collections - 1\n", - "for i in range(len(ax.collections)):\n", - " branch = branch_list[0-len(ax.collections):][i]\n", - " branch_df = mega_df[mega_df[\"branch\"] == branch]\n", - " max_age = max(branch_df[\"age(root)\"])\n", - " peak = log_dict[branch][\"param_dict\"][\"age(root)\"]\n", - " \n", - " xbuff = 1000\n", - " ybuff = 0.05\n", - " ax.annotate(\n", - " (\"{}\".format(round(peak))),\n", - " xy=(max_age + xbuff, i + i_start + ybuff),\n", - " xycoords=\"data\",\n", - " fontsize=FONTSIZE * 0.65,\n", - " )\n", - "\n", - "# -------------------------------\n", - "# Age Clade\n", - "ax = axes[3]\n", - "\n", - "df = mega_df[(mega_df[\"branch\"] != 'prune') & (mega_df[\"branch\"] != '0.PRE')]\n", - "sns.violinplot(ax=ax, data=df, y=\"branch\", x=\"age(root)\", inner=None, scale=\"width\", order=branch_list)\n", - "ax.set_xlabel(\"Root Age\", fontsize=FONTSIZE * 1, fontweight=\"bold\") \n", - "ax.set_xticks(range(-500,2500,500))\n", - "ax.set_xlim(-500, 2500)\n", - "\n", - "# Text\n", - "for i in range(len(ax.collections)): \n", - " branch = branch_list[i]\n", - " branch_df = mega_df[mega_df[\"branch\"] == branch]\n", - " max_age = max(branch_df[\"age(root)\"])\n", - " peak = log_dict[branch][\"param_dict\"][\"age(root)\"]\n", - " \n", - " xbuff = 100\n", - " ybuff = 0.05\n", - " ax.annotate(\n", - " (\"{}\".format(round(peak))),\n", - " xy=(max_age + xbuff, i + ybuff),\n", - " xycoords=\"data\",\n", - " fontsize=FONTSIZE * 0.65,\n", - " )\n", + ")\n", + "ax.set_xlabel(\"Number of Long\\nExternal Branches\")\n", "\n", "# -------------------------------\n", "# Style\n", + "labels = population_list + [\"All\"]\n", + "print(labels)\n", "for ax in axes:\n", - " # Linewidths\n", - " ax.xaxis.set_tick_params(width=LINEWIDTH)\n", - " ax.yaxis.set_tick_params(width=LINEWIDTH)\n", - " \n", - " # Fontsizes\n", - " ax.tick_params(axis='x', labelsize=FONTSIZE * 0.75)\n", - " ax.tick_params(axis='y', labelsize=FONTSIZE)\n", " \n", - " if ax != axes[0] and ax != axes[-1]:\n", - " ax.set_yticks([])\n", - " ax.set_ylabel(\"\")\n", - " else:\n", - " labels = copy.deepcopy(branch_list)\n", - " labels[-1] = \"All\"\n", + " if ax == axes[0]:\n", + " ax.set_ylabel(\"Population\")\n", " ax.set_yticklabels(labels=labels)\n", - " if ax == axes[-1]:\n", - " ax.yaxis.tick_right()\n", - " ax.set_ylabel(\"\")\n", - " \n", - " # Iterate through items in axis\n", + " else:\n", + " ax.set_ylabel(\"\")\n", + " \n", " for spine in ax.spines:\n", - " ax.spines[spine].set_linewidth(0.5)\n", + " ax.spines[spine].set_linewidth(LINEWIDTH)\n", + " for collection in ax.collections:\n", + " collection.set_linewidth(LINEWIDTH)\n", " \n", - " for i in range(0, len(ax.collections)):\n", - " collection = ax.collections[i]\n", - " branch = branch_list[i]\n", - " # Samples from base\n", - " if ax == axes[2]:\n", - " branch = branch_list[0-len(ax.collections):][i]\n", - " color = \"#c4c4c4\"\n", - " if branch in colors_dict[\"branch_major\"]:\n", - " color = colors_dict[\"branch_major\"][branch]\n", - "\n", - " collection.set_facecolor(color)\n", - " collection.set_linewidth(LINEWIDTH) \n", - "\n", - " \n", - "\n", - "\n", "# Save\n", - "#out_path = os.path.join(log_dir, \"meanRate_coefficientOfVariation_ageRoot\")\n", - "plt.savefig(out_path + \".png\", bbox_inches=\"tight\", facecolor=\"white\")\n", - "plt.savefig(out_path + \".svg\", bbox_inches=\"tight\")\n", - "\"\"\"" + "out_path = os.path.join(log_dir, \"meanRate_stdev\")\n", + "plt.savefig(out_path + \".png\", bbox_inches=\"tight\")\n", + "plt.savefig(out_path + \".svg\", bbox_inches=\"tight\") " ] }, { diff --git a/workflow/notebooks/iqtree_stats.py.ipynb b/workflow/notebooks/iqtree_stats.py.ipynb index d868f0f6..9914da4a 100644 --- a/workflow/notebooks/iqtree_stats.py.ipynb +++ b/workflow/notebooks/iqtree_stats.py.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 21, "id": "laughing-atlanta", "metadata": {}, "outputs": [], @@ -29,7 +29,7 @@ "import geopandas\n", "import shapely\n", "import matplotlib.pyplot as plt\n", - "from matplotlib import colors,lines\n", + "from matplotlib import colors,lines,ticker\n", "import cartopy.crs as ccrs\n", "import scipy\n", "import datetime\n", @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "id": "described-shipping", "metadata": {}, "outputs": [], @@ -79,7 +79,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, "id": "foster-survivor", "metadata": {}, "outputs": [ @@ -99,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 4, "id": "cloudy-catering", "metadata": {}, "outputs": [], @@ -138,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 5, "id": "addressed-liver", "metadata": {}, "outputs": [], @@ -187,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 6, "id": "every-portrait", "metadata": {}, "outputs": [ @@ -479,7 +479,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 7, "id": "lined-timothy", "metadata": {}, "outputs": [], @@ -501,7 +501,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 8, "id": "satellite-lover", "metadata": {}, "outputs": [], @@ -525,7 +525,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 9, "id": "nuclear-hepatitis", "metadata": {}, "outputs": [], @@ -556,7 +556,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 10, "id": "paperback-ability", "metadata": {}, "outputs": [ @@ -1511,7 +1511,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 11, "id": "surprised-copyright", "metadata": {}, "outputs": [ @@ -1521,7 +1521,7 @@ "'colors_dict = {}\\n\\n# Initialize columns\\nmetadata_df[\"population_color\"] = [NO_DATA_CHAR] * len(metadata_df)\\nmetadata_df[\"population\"] = [NO_DATA_CHAR] * len(metadata_df)\\n\\n# Colors dictionary is based off full tree\\nfor t in full_divtree.get_terminals():\\n branch_minor = full_metadata_df[\"branch_minor\"][t.name]\\n branch_major = full_metadata_df[\"branch_major\"][t.name]\\n population = branch_major\\n if branch_minor == \"0.ANT4\":\\n population = branch_minor\\n metadata_df.at[t.name, \"population\"] = population\\n if population not in colors_dict and population != NO_DATA_CHAR:\\n colors_dict[population] = \"\"\\n\\n\\n# Create the custom color map (pyplot)\\ncmap = plt.get_cmap(\"rainbow\", len(colors_dict))\\n# Convert the color map to a list of RGB values\\ncmaplist = [cmap(i) for i in range(cmap.N)]\\n# Convert RGB values to hex colors\\nattr_hex = [colors.to_hex(col) for col in cmaplist]\\n\\n# Assign colors to value\\nfor population, color in zip(colors_dict, attr_hex):\\n colors_dict[population] = color\\n# Add NA\\ncolors_dict[NO_DATA_CHAR] = \"#c4c4c4\"\\n\\nfor c in divtree.get_terminals():\\n sample = c.name\\n population = metadata_df[\"population\"][c.name]\\n population_color = colors_dict[population]\\n metadata_df.at[sample, \"population_color\"] = population_color\\n\\nprint(colors_dict)\\n#display(metadata_df)'" ] }, - "execution_count": 18, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1578,7 +1578,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 12, "id": "tutorial-found", "metadata": {}, "outputs": [ @@ -2520,7 +2520,7 @@ "" ] }, - "execution_count": 19, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, @@ -2599,7 +2599,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 13, "id": "trained-pottery", "metadata": {}, "outputs": [ @@ -3569,7 +3569,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 14, "id": "outside-interpretation", "metadata": {}, "outputs": [], @@ -3612,7 +3612,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 15, "id": "immediate-gravity", "metadata": {}, "outputs": [ @@ -10880,7 +10880,7 @@ "'vals = range(50, 160, 5)\\n\\nheader = \"{}\\t{}\\t{}\".format(\"val\", \"long\", \"short\")\\nlong = []\\nshort = []\\nprint(header)\\nfor val in vals:\\n val = val /100\\n sub_df = df[df[x] <= val]\\n long_branches = len(sub_df[sub_df[\"external_branch_length\"] >= 1e-5])\\n short_branches = len(sub_df) - long_branches\\n line = \"{}\\t{}\\t{}\".format(val, long_branches, short_branches)\\n long.append(long_branches)\\n short.append(short_branches)\\n print(line)\\n \\nsns.scatterplot(x=[v / 100 for v in vals], y=short, label=\"short\")\\nsns.scatterplot(x=[v / 100 for v in vals], y=long, label=\"long\")'" ] }, - "execution_count": 22, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -10913,13 +10913,106 @@ "sns.scatterplot(x=[v / 100 for v in vals], y=long, label=\"long\")\"\"\"" ] }, + { + "cell_type": "markdown", + "id": "equal-iraqi", + "metadata": {}, + "source": [ + "## Branch Lengths" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 164, "id": "tropical-welding", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "image/png": "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ZbzzzjuNNv6lpaWsW7cuP0E55/KuauNmjtavM5Z5/L3z8hSNc/nT6br9AXbddVfefvttzFLNEbJNfX0906ZN8wx/zjnnOpRO2fgPHToUoNE8/3V1dZx77rme298551yH0ikbf0nstttuvPHGG4UOxblOT9KxkiokvSXp7BTvV0paFD0elzQ0xfKnJY2IrVMby+u/UNIZ+fydnGvrOmXjDzB69GiWLl3aaNe/cy53JJUA5cB4YD/gUkn9UxQ91Mz2Bl4ELk+x/Fngh7Hl68xsbOxxV45+BefapU7b+JeVlVFdXc3KlSvTlikqKuKGG27w9L7O5c5BwFIzW2FmnwCzgIkZyj8DjEqxfC5hZlDnXBN02latqKiIffbZhxdffDFtmeLiYi6++GKKi4vzGJlzncpOwIrY6+U0nOo72XFAqgnAJtFw9r++Sd3+h8ULS5ooqXxL9actjdu5dq1TNf6JXP9Lly5l6dKl7Lfffrz22mt88sknKcvX1NRQVlZGTU1NniN1rtNQimWprsXNk7QQ6A1cl7R8JXA08KfY8uRu/2cbbMBstplN6dqleyvDd6596lSN/wcffMDcuXNZsGABM2bMYOXKley5554888wzadf597//nccInet0VtDwTH848H6KcodGjfiZZrYuvhzYBVgEXJOzKJ3rYDpV4w/bcv0PGxb2N0ceeSSLFy/OeO3fOZczC4AxkoZJ6k3ovp/dnArMrBa4CDhLUr8cxOhch9PpGv9kvXv35uijj+ahhx6iqqpqu/dLSjplEkTn8iJquL8HPAW8Akw1s48kzZK0UzPqWQHcA5wbLUq+5v+drAfvXDvmLRuw7777snLlSu68805OO+20rfn8S0tL/Xq/czlmZo/ScLAeZjYp9rwszXplSa8viD33fZtzGfgXhJD055hjjuGpp57itttuY//992evvfZi4MCB3HXXXey7774NbvfbfffdvUfAOedcu1XwFkzSscD/Ei5BXG9mv8vHdhMj/xN23313xo8fz5577smLL77InXfeyaeffspVV13FlVdeSY8ePSgqKuLTTz9lwIABDBgwgJKSEoYPH06PHj0oLS1l1apVdOnShdLSUrp06cLo0aMpLS2ltraWioqKBttKHDxkeq+p0tWRvLyl9TvnnOtYCtoKxLJ7HQlsAF6W9LCZrc31tj/44AMqKipYu3Yt7777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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "long_branch_dict = {pop: {\"total_branches\" : 0, \"long_branches\" : 0, \"perc\": 0,} for pop in population_list}\n", + "threshold = 1e-5\n", + "\n", + "for rec in metadata_df.iterrows():\n", + " sample = rec[0]\n", + " population = rec[1][\"population\"]\n", + " length = rec[1][\"external_branch_length\"]\n", + " long_branch_dict[population][\"total_branches\"] += 1\n", + " if length >= threshold:\n", + " long_branch_dict[population][\"long_branches\"] += 1\n", + "\n", + "for pop in long_branch_dict:\n", + " long_branch_dict[pop][\"perc\"] = (long_branch_dict[pop][\"long_branches\"] / long_branch_dict[pop][\"total_branches\"]) * 100\n", + "\n", + "df = pd.DataFrame.from_dict(long_branch_dict, orient=\"index\")\n", + "df[\"population\"] = df.index\n", + "\n", + "FONTSIZE=14\n", + "plt.rc('font', size=FONTSIZE)\n", + "DPI=50\n", + "FIGSIZE=[12,6]\n", + "## All\n", + "fig, axes = plt.subplots(1,2,figsize=FIGSIZE, dpi=DPI)\n", + "fig.subplots_adjust(wspace=0.5)\n", + "ax = axes[0]\n", + "sns.histplot(\n", + " ax=ax,\n", + " data=metadata_df,\n", + " x=\"external_branch_length\",\n", + " kde=True,\n", + " bins=50,\n", + " color=\"grey\",\n", + ")\n", + "\n", + "ax.axvline(1e-5, color=\"black\", ls=\"--\", label=\"Threshold\")\n", + "ax.set_ylabel(\"Number of External Branches\")\n", + "ax.set_xlabel(\"External Branch Length\\n(Substitutions/Site)\")\n", + "ax.xaxis.set_major_locator(ticker.MultipleLocator(1e-5))\n", + "ax.legend(fontsize=FONTSIZE-2, edgecolor=\"black\")\n", + "\n", + "ax = axes[1]\n", + "\n", + "\n", + "sns.barplot(\n", + " ax=ax,\n", + " data=df,\n", + " #x=\"perc\",\n", + " x=\"long_branches\",\n", + " y=\"population\",\n", + " palette=colors_dict,\n", + " ec=\"black\",\n", + ")\n", + "\n", + "\"\"\"y = 0\n", + "for rec in df.iterrows():\n", + " #x = rec[1][\"perc\"]\n", + " x = rec[1][\"perc\"]\n", + " t = rec[1][\"long_branches\"]\n", + " ax.text(x + 0.25, y + 0.1, str(round(t)), fontsize=FONTSIZE-4)\n", + " y += 1\"\"\"\n", + "\n", + "\"\"\"for y, x in enumerate(list(df[\"perc\"])):\n", + " print(y,x)\n", + " ax.text(x + 0.5, y + .25, str(round(x)) + \"%\", fontsize=FONTSIZE-4)\"\"\"\n", + "\n", + "ax.set_ylabel(\"Population\")\n", + "ax.set_xlabel(\"Number of External Branches\\nLonger Than Threshold\")\n", + "\n", + "out_path = os.path.join(out_dir, \"long_branches\")\n", + "plt.savefig(out_path + \".png\", bbox_inches=\"tight\")\n", + "plt.savefig(out_path + \".svg\", bbox_inches=\"tight\")" + ] }, { "cell_type": "markdown", @@ -10931,7 +11024,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 16, "id": "amateur-forwarding", "metadata": {}, "outputs": [ @@ -11115,12 +11208,30 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 17, "id": "sunset-ranking", "metadata": { "scrolled": true }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/ktmeaton/miniconda3/envs/plague-phylogeography/lib/python3.7/site-packages/pandas/core/indexing.py:845: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " self.obj[key] = _infer_fill_value(value)\n", + "/home/ktmeaton/miniconda3/envs/plague-phylogeography/lib/python3.7/site-packages/pandas/core/indexing.py:966: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " self.obj[item] = s\n" + ] + }, { "data": { "image/png": "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Szp1RkkIIYR0d1paWtzGxqbawcGh6s0333z47LPPPjx+/HivsrIy9vrrr/czMTFx09LS8nRzcxt87Ngx/brr6rqodu/ebTR48GAnLS0tT2dn5yGxsbH1XU0bNmww0dXV9ZCtr6WuLbFYLHzmmWf69+3b11VbW9vTwcHB+euvvzape33KlCl2SUlJ+j///LNZXWvV9evXNeV1dUVGRuq7uroO1tLS8jQxMXGbNWtWv/Lyclb3uq+v76BXXnnF5u2337YyNjZ26927t9sbb7xhXVNT017f3idQ4kMIIYR0Itra2pLq6mo2Z84c68OHDxt/++23d+Lj468MGTKk7Pnnnx+YkZGhIXv+0qVLrf/3v/9lnT179oqNjU3F888/P7C4uLjVn+9lZWUCd3f30oMHD95ISUm5/Oabb9774IMPbH///XcDANiyZctdd3f3x6GhofkZGRlpGRkZafb29pWN73P79m2NF154YaCLi0tpfHz8lW+++ebO77//3nvevHlWsuf9/vvvvUUiET9z5sy1tWvXZm7btq3vDz/80Lu18beEEh9CCCGkk4iKitL9/fffe/v5+RXv3LnTbPny5dkvvfRSoaenZ/nOnTszTExMqtatW2cme83ChQtzp0yZUuTj41O+Z8+eOxUVFWzr1q2tThz69+9ftXLlynvDhw8vc3Jyqvzggw/yxo8f/2jXrl29AcDExKRGQ0OD6+joSGxsbKptbGyqRaInG4++/PLLPmZmZlU///xzpqenZ/n06dMLP/7446wdO3b0kU3M7O3ty9evX5/j6upa8a9//avA19e36PTp0watjb8llPgQQgghahQbG2ukq6vroaWl5fnUU08N8fHxKXnnnXfuV1dXs9GjR5fUnScSieDp6fn42rVrOrLXjxo1qv4cIyMjiaOjY9mVK1e0WxtPdXU1Fi1aZO7o6OjUq1cvd11dXY9jx471ysrK0lTmPtevX9f29PR8LBQK68uCg4NLqqqq2JUrV7TqypycnMpkrzM3N6968OBBg1at9kSDm7sxzjmORkYhNjYNgYHuGD8hCIyxli8khBDSYby9vYt/+OGHDE1NTW5ra1ulpaXF4+PjdQCAMfbEwojK/D8uEAjAecNbVFVVNXuD5cuXm3/33Xfmn332WaaHh0eZoaGhZOHChVZ5eXlKJSOcc7nxAw3fg0gk4o1faxxze6IW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\n", @@ -11267,19 +11378,10 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "id": "built-russia", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "48 75\n", - "7.9866888519134775\n" - ] - } - ], + "outputs": [], "source": [ "threshold = 1e-5\n", "long_branches = 0\n",