{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# This is a notebook where I show you what data is available for analysis, roughly how it is formatted, and how to make a few plots\n", "## It is meant to be a \"jump start\" for your own exploration of the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Resources\n", "### Figure80 article\n", "LINK TO BE ADDED\n", "### Paper\n", "https://science.sciencemag.org/content/366/6464/490\n", "### Preprint \n", "https://www.biorxiv.org/content/10.1101/675314v1\n", "### Github and archived Zenodo of the pipeline to get from raw reads to the processed data available here\n", "https://github.com/mjohnson11/TnSeq_Pipeline and https://zenodo.org/record/3402230#.Xc3brpNKhTY\n", "(this notebook is essentially a simplified version of the one in these repositories used to make the paper figures)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Requirements if using this locally:\n", "I think just a normal anaconda distribution of python should be fine for everything here, which you probably already have: https://www.anaconda.com/distribution/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Importing various useful libraries / setting up plotting" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "from matplotlib import pyplot as pl\n", "import seaborn as sns\n", "sns.set_style(\"white\")\n", "sns.set_style(\"ticks\")\n", "colors = ['#FFB000', '#648FFF']\n", "%matplotlib notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Reading data:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:26: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n" ] } ], "source": [ "## READING DATA\n", "def change_well_format(w):\n", " if '_' in w:\n", " plate = int(w[1:3])\n", " t = 'LK' + str(plate) + '-'\n", " n = int(w.split('_')[1])\n", " lets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']\n", " l = lets[int(np.floor((n-1)/12))]\n", " return t + l + str(((n-1) % 12) + 1).zfill(2)\n", " else:\n", " return w\n", "\n", "def get_geno_matrix(seg_names):\n", " # Data from https://www.nature.com/articles/nature11867, can also be dowloaded here http://genomics-pubs.princeton.edu/YeastCross_BYxRM/\n", " d = pd.read_csv('files/BYxRM_GenoData.csv') \n", " map_genos = {'B': 0, 'R': 1}\n", " for w in d.keys():\n", " if change_well_format(w) in seg_names:\n", " d[change_well_format(w)] = d[w].map(map_genos)\n", " assert len([s for s in seg_names if s in d.columns]) == len(seg_names)\n", " return d[['marker'] + seg_names]\n", "\n", "\n", "# Reading information of segregant fitness in our focal environment (from Jerison et al. 2017)\n", "x_info = pd.read_csv('files/Clones_For_Tn96_Experiment.csv')\n", "seg_to_fit = {i[0]: i[1] for i in x_info.as_matrix(['segregant', 'initial fitness, YPD 30C'])}\n", "# Reading data files containing fitness effect information from the small library experiment (few (~100) mutations in many genetic backgrounds)\n", "tp_all = pd.read_csv('files/TP_data_by_edge.csv')\n", "# This excludes the neutral controls, a few mutations that were unintentionally included in this library, and a few controls that didn't end up getting good enough coverage to really analyze\n", "tp = tp_all.loc[tp_all['Type']=='Experiment']\n", "# Reading same thing for large library experiment (many mutations in a few genetic backgrounds)\n", "bt = pd.read_csv('files/BT_data_by_edge.csv')\n", "# Reading aggregate data on DFE (distribution of fitness effect) data statistics for each segregant\n", "tp_dfe = pd.read_csv('files/TP_DFE_statistics.csv')\n", "bt_dfe = pd.read_csv('files/BT_DFE_statistics.csv')\n", "# For bioinformatic reasons, the BT (large library) data has a longer edge sequence, changing so the two exps are comparable\n", "bt['Long.Edge'] = bt['Edge']\n", "bt['Edge'] = bt['Long.Edge'].str[:15]\n", "# Making a few dictionaries that point from the names I am used to to the dataframes\n", "dats = {'BT': bt, 'TP': tp, 'BT.DFE': bt_dfe, 'TP.DFE': tp_dfe}\n", "exps = {'BT': 'E1', 'TP': 'E2'}\n", "# Getting a list of segregants in each experiment by looking for columns like segregant.mean.s in the dataframe\n", "segs_all = {exp: [i.split('.')[0] for i in dats[exp] if '.mean.s' in i] for exp in exps}\n", "# Getting genotype information on these segregants using data from Bloom et al. 2013\n", "gm = get_geno_matrix(segs_all['TP'])\n", "# Making restricted lists of segregants that have at least 50 mutations with s measured for DFE comparisons\n", "segs_use = {exp: [s for s in segs_all[exp] if len(dats[exp].loc[pd.notnull(dats[exp][s + '.mean.s'])])>=50] for exp in exps}\n", "# Making some \n", "sorted_segs = {exp: sorted(segs_use[exp], key=lambda x: seg_to_fit[x]) for exp in exps}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Let's just take a look at all this data, to see what's what\n", "for tp and bt, each row is a mutation\n", "for tp_dfe and bt_dfe, each row is a DFE statistic (or background fitness, which we can treat similarly)\n", "for gm, each row is a genotyped allele that is different between RM and BY (and takes each state in ~half the segregants)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EdgeTypeEdge.IDGene.UseGene_ORFGene_ORF.nearbybriefDescriptionbriefDescription.nearbychromosomedescription...full_model_pfull_model_aicfull_model_r2_95_conf_lowfull_model_r2_95_conf_highfull_model_p_valuesfull_model_paramsfull_model_coeffsqtlsresid.qtlsfull.model.qtls
0TGATCATCACGGGACExperiment888in FLC2FLC2FLC2Putative calcium channel involved in calcium r...Putative calcium channel involved in calcium r...chr01Putative calcium channel involved in calcium r......8.990535e-25-1049.3912000.4843130.6643023.3295688484889364e-32;1.8707009014831425e-05;...x;locus_9649106_chr14_401893_C_T;locus_9717516...-0.009667588479105496;-0.06737728192983725;0.3...chr14_401893;chr14_374661;chr14_402771chr14_470303;chr14_420065;chr14_492376chr14_401893;chr14_374661;chr14_402771|chr14_4...
1TCGAAAGCACAGTAGExperiment377nearby SRB2NaNSRB2NaNSubunit of the RNA polymerase II mediator complexchr08NaN...5.640931e-01-83.7963650.0000820.3969750.00020013790535836575;0.5640930907526316x-0.049382849134784586;-0.08592702839231847NaNNaNNaN
2GTTGAACTGGTTGTTExperiment197in STM1STM1STM1Protein required for optimal translation under...Protein required for optimal translation under...chr12Protein required for optimal translation under......2.500225e-07-803.5965640.1039690.3478601.4054000123711754e-50;0.9145877127045838;4.10...x;locus_9680363_chr14_433150_G_A-0.028546289780384954;-0.0024826738390553073;0...chr14_433150;chr14_420065;chr14_485550chr14_433150;chr14_420065;chr14_492376chr14_433150;chr14_420065;chr14_485550
\n", "

3 rows × 1696 columns

\n", "
" ], "text/plain": [ " Edge Type Edge.ID Gene.Use Gene_ORF Gene_ORF.nearby \\\n", "0 TGATCATCACGGGAC Experiment 888 in FLC2 FLC2 FLC2 \n", "1 TCGAAAGCACAGTAG Experiment 377 nearby SRB2 NaN SRB2 \n", "2 GTTGAACTGGTTGTT Experiment 197 in STM1 STM1 STM1 \n", "\n", " briefDescription \\\n", "0 Putative calcium channel involved in calcium r... \n", "1 NaN \n", "2 Protein required for optimal translation under... \n", "\n", " briefDescription.nearby chromosome \\\n", "0 Putative calcium channel involved in calcium r... chr01 \n", "1 Subunit of the RNA polymerase II mediator complex chr08 \n", "2 Protein required for optimal translation under... chr12 \n", "\n", " description \\\n", "0 Putative calcium channel involved in calcium r... \n", "1 NaN \n", "2 Protein required for optimal translation under... \n", "\n", " ... full_model_p \\\n", "0 ... 8.990535e-25 \n", "1 ... 5.640931e-01 \n", "2 ... 2.500225e-07 \n", "\n", " full_model_aic full_model_r2_95_conf_low full_model_r2_95_conf_high \\\n", "0 -1049.391200 0.484313 0.664302 \n", "1 -83.796365 0.000082 0.396975 \n", "2 -803.596564 0.103969 0.347860 \n", "\n", " full_model_p_values \\\n", "0 3.3295688484889364e-32;1.8707009014831425e-05;... \n", "1 0.00020013790535836575;0.5640930907526316 \n", "2 1.4054000123711754e-50;0.9145877127045838;4.10... \n", "\n", " full_model_params \\\n", "0 x;locus_9649106_chr14_401893_C_T;locus_9717516... \n", "1 x \n", "2 x;locus_9680363_chr14_433150_G_A \n", "\n", " full_model_coeffs \\\n", "0 -0.009667588479105496;-0.06737728192983725;0.3... \n", "1 -0.049382849134784586;-0.08592702839231847 \n", "2 -0.028546289780384954;-0.0024826738390553073;0... \n", "\n", " qtls \\\n", "0 chr14_401893;chr14_374661;chr14_402771 \n", "1 NaN \n", "2 chr14_433150;chr14_420065;chr14_485550 \n", "\n", " resid.qtls \\\n", "0 chr14_470303;chr14_420065;chr14_492376 \n", "1 NaN \n", "2 chr14_433150;chr14_420065;chr14_492376 \n", "\n", " full.model.qtls \n", "0 chr14_401893;chr14_374661;chr14_402771|chr14_4... \n", "1 NaN \n", "2 chr14_433150;chr14_420065;chr14_485550 \n", "\n", "[3 rows x 1696 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tp.iloc[:3]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Edge.IDEdgeGene.UseGene_ORFGene_ORF.nearbybriefDescriptionbriefDescription.nearbychromosomedescriptiondescription.nearby...full_model_r2full_model_pfull_model_aicfull_model_p_valuesfull_model_paramsfull_model_coeffsqtlsresid.qtlsfull.model.qtlsLong.Edge
00TCTCCAAGGGATACTin YMR085WYMR085WYMR085WPutative protein of unknown functionPutative protein of unknown functionchr13Putative protein of unknown function; YMR085W ...Putative protein of unknown function; YMR085W ......0.0102230.781072-80.5475530.26814250806982043;0.7810722126668491x0.001490528225059142;0.006953626038516742NaNNaNNaNTCTCCAAGGGATACTTAACGTTATTCCTTT
11TGTGTCGATTTAGTGin RKM3RKM3RKM3Ribosomal lysine methyltransferaseRibosomal lysine methyltransferasechr02Ribosomal lysine methyltransferase; specific f...Ribosomal lysine methyltransferase; specific f......0.0306250.567432-114.4469810.15944797128735522;0.5674322326468317x0.001162120166529229;-0.009006462611979207NaNNaNNaNTGTGTCGATTTAGTGTTAAAGAATGACGTC
22TATGGTGCAGAAAAGnearby YNL143CNaNMEP2|YNL143CNaNAmmonium permease involved in regulation of ps...chr14NaNAmmonium permease involved in regulation of ps......0.1441100.132863-171.8018740.10689612722798757;0.13286265303302433x0.0006108064927804045;0.012645873311052722NaNNaNNaNTATGGTGCAGAAAAGTGGCTCGGAATGAAC
\n", "

3 rows × 246 columns

\n", "
" ], "text/plain": [ " Edge.ID Edge Gene.Use Gene_ORF Gene_ORF.nearby \\\n", "0 0 TCTCCAAGGGATACT in YMR085W YMR085W YMR085W \n", "1 1 TGTGTCGATTTAGTG in RKM3 RKM3 RKM3 \n", "2 2 TATGGTGCAGAAAAG nearby YNL143C NaN MEP2|YNL143C \n", "\n", " briefDescription \\\n", "0 Putative protein of unknown function \n", "1 Ribosomal lysine methyltransferase \n", "2 NaN \n", "\n", " briefDescription.nearby chromosome \\\n", "0 Putative protein of unknown function chr13 \n", "1 Ribosomal lysine methyltransferase chr02 \n", "2 Ammonium permease involved in regulation of ps... chr14 \n", "\n", " description \\\n", "0 Putative protein of unknown function; YMR085W ... \n", "1 Ribosomal lysine methyltransferase; specific f... \n", "2 NaN \n", "\n", " description.nearby \\\n", "0 Putative protein of unknown function; YMR085W ... \n", "1 Ribosomal lysine methyltransferase; specific f... \n", "2 Ammonium permease involved in regulation of ps... \n", "\n", " ... full_model_r2 full_model_p full_model_aic \\\n", "0 ... 0.010223 0.781072 -80.547553 \n", "1 ... 0.030625 0.567432 -114.446981 \n", "2 ... 0.144110 0.132863 -171.801874 \n", "\n", " full_model_p_values full_model_params \\\n", "0 0.26814250806982043;0.7810722126668491 x \n", "1 0.15944797128735522;0.5674322326468317 x \n", "2 0.10689612722798757;0.13286265303302433 x \n", "\n", " full_model_coeffs qtls resid.qtls full.model.qtls \\\n", "0 0.001490528225059142;0.006953626038516742 NaN NaN NaN \n", "1 0.001162120166529229;-0.009006462611979207 NaN NaN NaN \n", "2 0.0006108064927804045;0.012645873311052722 NaN NaN NaN \n", "\n", " Long.Edge \n", "0 TCTCCAAGGGATACTTAACGTTATTCCTTT \n", "1 TGTGTCGATTTAGTGTTAAAGAATGACGTC \n", "2 TATGGTGCAGAAAAGTGGCTCGGAATGAAC \n", "\n", "[3 rows x 246 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bt.iloc[:3]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DFE.statisticLK4-G06LK3-G08LK2-G07LK4-H03LK4-D11LK3-E06LK1-D12LK6-C05LK4-C09...full_resid_seg_model_r2full_resid_seg_model_pfull_resid_seg_model_r2_95_conf_lowfull_resid_seg_model_r2_95_conf_highfull_resid_seg_model_p_valuesfull_resid_seg_model_paramsfull_resid_seg_model_coeffsqtlsresid.qtlsfull.model.qtls
0background.fitness0.0175360.093806-0.0191950.022961-0.0608290.032745-0.057404-0.059662-0.087799...NaNNaNNaNNaNNaNNaNNaNchr14_381891;chr14_368185;chr14_393024|chr15_1...NaNchr14_381891;chr14_368185;chr14_393024|chr15_1...
1mean-0.021606-0.038078-0.022692-0.033220-0.011229-0.026932-0.010239-0.010303-0.016691...NaNNaNNaNNaNNaNNaNNaNchr14_381891;chr14_371959;chr14_393024|chr04_4...chr14_459667;chr14_414983;chr14_481897chr14_381891;chr14_371959;chr14_393024|chr04_4...
2median-0.017210-0.022665-0.012889-0.025198-0.012115-0.016404-0.010974-0.009748-0.010328...NaNNaNNaNNaNNaNNaNNaNchr14_376315;chr14_368185;chr14_393024chr14_433150;chr14_414983;chr14_485550chr14_376315;chr14_368185;chr14_393024|chr14_4...
\n", "

3 rows × 213 columns

\n", "
" ], "text/plain": [ " DFE.statistic LK4-G06 LK3-G08 LK2-G07 LK4-H03 LK4-D11 \\\n", "0 background.fitness 0.017536 0.093806 -0.019195 0.022961 -0.060829 \n", "1 mean -0.021606 -0.038078 -0.022692 -0.033220 -0.011229 \n", "2 median -0.017210 -0.022665 -0.012889 -0.025198 -0.012115 \n", "\n", " LK3-E06 LK1-D12 LK6-C05 LK4-C09 \\\n", "0 0.032745 -0.057404 -0.059662 -0.087799 \n", "1 -0.026932 -0.010239 -0.010303 -0.016691 \n", "2 -0.016404 -0.010974 -0.009748 -0.010328 \n", "\n", " ... full_resid_seg_model_r2 \\\n", "0 ... NaN \n", "1 ... NaN \n", "2 ... NaN \n", "\n", " full_resid_seg_model_p full_resid_seg_model_r2_95_conf_low \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "\n", " full_resid_seg_model_r2_95_conf_high full_resid_seg_model_p_values \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "\n", " full_resid_seg_model_params full_resid_seg_model_coeffs \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "\n", " qtls \\\n", "0 chr14_381891;chr14_368185;chr14_393024|chr15_1... \n", "1 chr14_381891;chr14_371959;chr14_393024|chr04_4... \n", "2 chr14_376315;chr14_368185;chr14_393024 \n", "\n", " resid.qtls \\\n", "0 NaN \n", "1 chr14_459667;chr14_414983;chr14_481897 \n", "2 chr14_433150;chr14_414983;chr14_485550 \n", "\n", " full.model.qtls \n", "0 chr14_381891;chr14_368185;chr14_393024|chr15_1... \n", "1 chr14_381891;chr14_371959;chr14_393024|chr04_4... \n", "2 chr14_376315;chr14_368185;chr14_393024|chr14_4... \n", "\n", "[3 rows x 213 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tp_dfe.iloc[:3]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DFE.statisticLK4-A04LK3-D08LK3-G02LK2-F11LK1-E09LK4-E02LK1-C09LK2-A12LK4-H11...full_resid_seg_model_r2full_resid_seg_model_pfull_resid_seg_model_r2_95_conf_lowfull_resid_seg_model_r2_95_conf_highfull_resid_seg_model_p_valuesfull_resid_seg_model_paramsfull_resid_seg_model_coeffsqtlsresid.qtlsfull.model.qtls
0background.fitness0.0365590.023625-0.0212510.0353490.001306-0.0218380.097835-0.029612-0.043350...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1mean-0.005015-0.005416-0.003760-0.004865-0.002509-0.003774-0.003754-0.002583-0.003060...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2median0.0010860.0001730.0006020.0005040.0006460.0007130.0004390.0007870.000182...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

3 rows × 85 columns

\n", "
" ], "text/plain": [ " DFE.statistic LK4-A04 LK3-D08 LK3-G02 LK2-F11 LK1-E09 \\\n", "0 background.fitness 0.036559 0.023625 -0.021251 0.035349 0.001306 \n", "1 mean -0.005015 -0.005416 -0.003760 -0.004865 -0.002509 \n", "2 median 0.001086 0.000173 0.000602 0.000504 0.000646 \n", "\n", " LK4-E02 LK1-C09 LK2-A12 LK4-H11 ... \\\n", "0 -0.021838 0.097835 -0.029612 -0.043350 ... \n", "1 -0.003774 -0.003754 -0.002583 -0.003060 ... \n", "2 0.000713 0.000439 0.000787 0.000182 ... \n", "\n", " full_resid_seg_model_r2 full_resid_seg_model_p \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "\n", " full_resid_seg_model_r2_95_conf_low full_resid_seg_model_r2_95_conf_high \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "\n", " full_resid_seg_model_p_values full_resid_seg_model_params \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "\n", " full_resid_seg_model_coeffs qtls resid.qtls full.model.qtls \n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "\n", "[3 rows x 85 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bt_dfe.iloc[:3]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
markerLK4-G06LK3-G08LK2-G07LK4-A04LK4-H03LK4-D11LK3-E06LK1-D10LK1-D12...LK2-D09LK1-D06LK3-A01LK2-D05LK1-C11LK1-G03LK3-D04LK3-C06LK2-A01LK2-G10
027915_chr01_27915_T_C101100011...0010101111
128323_chr01_28323_G_A101100011...0010101111
228652_chr01_28652_G_T101100011...0010101111
\n", "

3 rows × 163 columns

\n", "
" ], "text/plain": [ " marker LK4-G06 LK3-G08 LK2-G07 LK4-A04 LK4-H03 \\\n", "0 27915_chr01_27915_T_C 1 0 1 1 0 \n", "1 28323_chr01_28323_G_A 1 0 1 1 0 \n", "2 28652_chr01_28652_G_T 1 0 1 1 0 \n", "\n", " LK4-D11 LK3-E06 LK1-D10 LK1-D12 ... LK2-D09 LK1-D06 LK3-A01 \\\n", "0 0 0 1 1 ... 0 0 1 \n", "1 0 0 1 1 ... 0 0 1 \n", "2 0 0 1 1 ... 0 0 1 \n", "\n", " LK2-D05 LK1-C11 LK1-G03 LK3-D04 LK3-C06 LK2-A01 LK2-G10 \n", "0 0 1 0 1 1 1 1 \n", "1 0 1 0 1 1 1 1 \n", "2 0 1 0 1 1 1 1 \n", "\n", "[3 rows x 163 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gm.iloc[:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Here are some basic statistics on the data from the two experiments:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "tp_seg_edges_measured = [len(tp.loc[pd.notnull(tp[s+'.mean.s'])]) for s in segs_all['TP']]\n", "bt_seg_edges_measured = [len(bt.loc[pd.notnull(bt[s+'.mean.s'])]) for s in segs_all['BT']]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BT. Tried 20 segregants.\n", "18 segregants included. 413.8888888888889 mutations measured on average, min: 180 max: 614\n", "996 mutations. 710 measured in at least one seg. of those, they are measured in 10.492957746478874 on average.\n", "Measured in 10.492957746478874 segs on average\n", "253 significant in at least one seg, 457 in none, 0.643661971830986 percent\n" ] } ], "source": [ "print('BT. Tried 20 segregants.')\n", "print(len(segs_all['BT']), ' segregants included.', np.mean(bt_seg_edges_measured), 'mutations measured on average,', 'min:', np.min(bt_seg_edges_measured), 'max:', np.max(bt_seg_edges_measured))\n", "print(len(bt), 'mutations.', len(bt.loc[bt['num.measured']>0]), 'measured in at least one seg.', 'of those, they are measured in', np.mean(bt.loc[bt['num.measured']>0]['num.measured']), 'on average.')\n", "print('Measured in', np.nanmean(bt.loc[bt['num.measured']>0]['num.measured']), 'segs on average')\n", "print(len(bt.loc[bt['num.sig']>0]), 'significant in at least one seg,', len(bt.loc[bt['num.measured']>0].loc[bt['num.sig']==0]), 'in none,', \n", " len(bt.loc[bt['num.measured']>0].loc[bt['num.sig']==0])/len(bt.loc[bt['num.measured']>0]), 'percent')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TP. Tried 176 segregants.\n", "162 segregants included. 65.70987654320987 mutations measured on average, min: 1 max: 82\n", "91 mutations. Measured in 116.97802197802197 segs on average\n", "9 is the minimum # segs w measurements for one mutation, and the min # sig effects is: 0\n" ] } ], "source": [ "print('TP. Tried 176 segregants.')\n", "print(len(segs_all['TP']), ' segregants included.', np.mean(tp_seg_edges_measured), 'mutations measured on average,', 'min:', np.min(tp_seg_edges_measured), 'max:', np.max(tp_seg_edges_measured))\n", "print(len(tp), 'mutations.', 'Measured in', np.nanmean(tp['num.measured']), 'segs on average')\n", "print(np.min(tp['num.measured']),'is the minimum # segs w measurements for one mutation, and the min # sig effects is:', np.min(tp['num.sig']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Additional columns in these datasets describe the results of the modeling described in the paper, in terms of the R^2, AIC, etc. for various models of epistasis, the models are background fitness (x), QTLs (qtl), full (both), or resid versions (resid_qtl is the qtl model after regressing out x effects), and the columns like:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['x_model_r2', 'x_model_p', 'x_model_aic', 'qtl_model_r2', 'qtl_model_p', 'qtl_model_aic', 'resid_qtl_model_r2', 'resid_qtl_model_p', 'resid_qtl_model_aic', 'resid_x_model_r2', 'resid_x_model_p', 'resid_x_model_aic', 'full_model_r2', 'full_model_p', 'full_model_aic']\n" ] } ], "source": [ "print([i for i in tp if 'aic' in i or i[-2:] in ['r2', '_p']])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plot fitness effect vs. background fitness for a particular mutation" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plot_simple(sub, df_row, segs):\n", " measured = [seg for seg in segs if pd.notnull(df_row[seg + '.mean.s'])]\n", " xs = [seg_to_fit[measured[s]] for s in range(len(measured))]\n", " ys = [df_row[measured[s] + '.mean.s'] for s in range(len(measured))]\n", " ye = [df_row[measured[s] + '.stderr.s'] for s in range(len(measured))]\n", " sub.axhline(y=0, xmin=0, xmax=1, color='#333333', linestyle='dashed', alpha=0.5, lw=1)\n", " sub.errorbar(x=xs, y=ys, yerr=ye, marker='o', c='k', linestyle='') \n", " sub.set_xlim([-0.16, 0.12])\n", " sub.set_ylim([-0.2, 0.08])\n", " sub.set_xlabel('X')\n", " sub.set_ylabel('S')\n", " sns.despine()\n", "\n", "f, sub = pl.subplots(1,1)\n", "dataframe_row = tp[tp['Gene.Use']=='in RPL16A'].iloc[0]\n", "plot_simple(sub, dataframe_row, segs_use['TP'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plot a couple DFEs\n", "Note in the paper we plot combined DFEs by background fitness quartiles to make them less noisey, which is why this is different:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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diPQ4O6rzew7QL2ZtQKvAM/3tKgsX6SRV199lSuuuIL7779/vyNEJk2axMknn8xPfvKTbr3er371qwO+oKyrq+OBBx5g6NCh7c9Nnz6dpqYmBg4cyPjx4zvt19zcTE1NDR9++CGRSIT+/ftTU1OD/uIRkc4kDXV3bwVmdXj67YT2O4A70lxX1h1//PGsWbOmPdTdnc8//zylbS1ZsqTTo04uvPBC5syZ061+v/71rxk8eHD7PyyPPvooP//5z7n11ltTqk1Ewi0/zyjNga9+9ats3ryZXbt2MWDAAFavXs2kSZN47733AFi9ejXLli2jb9++lJeXM3/+fLZt28bNN99Mnz59KCws5L777qOuro6mpiZqamqoqalJ+rqLFi1i8ODBfPzxx532GzJkCCtXrmT06NGcccYZVFVVtV9X5tlnn+XRRx+loKCA008/nTlz5rBz507mzJnDF198wfDhw6mvr+f553v8x5OI9BL5eeejHJkwYQLPP/880WiUjRs3ctpppwHQ2NjIokWLWLZsGcuXL6e4uJgVK1awfv16Tj75ZH75y18ya9YsmpqauOaaaxg4cGCngb5mzRqqqqqoqqri+uuv36+tq35nn30211xzDStXrmT8+PFMnz6dTZs28fHHH7No0SIeffRRli9fzgcffMC6det48MEH26dyzjvvPFpaWjK1u0QkD2mknmDSpEnU1NQwdOhQKiq+PBx/69atnHjiifTv3x+Ab3zjG7zyyivccsstPPTQQ8ycOZPi4mJuuOGGg24/2fRLZzZs2MDYsWM599xzaWlp4ZlnnuHmm2+mpqaGnTt3Ul1dDcBnn33G1q1b2bRpE9/73vcA9nsPInJo0Eg9wdChQ9m9ezePP/44F110UfvzZWVlbNq0id27dwOxm2cMHz6cF154gdNPP51ly5Zx3nnn8fDDDwMkvexuVzrr97vf/a59u4WFhZgZffv2paysjOOOO46lS5fy+OOPM23aNEaOHMmIESPYsGEDAG+88UZKdYhI75WXod52kcZ0/XTn4oQTJ07kvffeY/jw4e3PDRo0iOuuu44rrriCyy67jMbGRr7//e9zyimnsHDhQqZOncpTTz3V/iXnCSec0O0ReVf9Zs+ezfvvv8/FF1/M5ZdfzoIFC/jxj3/MoEGDmD59OlVVVUyZMoWXX36Z8vJyrr76al588UWqqqp4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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXsAAAD7CAYAAACL+TRnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAGmdJREFUeJzt3Xt0lPW97/H3JIixEmgQK3I5BHHxrbWKAlXY4rEVsYqiNBaXTYmFFlOpRxdauhDBGjnWW8uRLbtgUalRFLE0KMXq1q0eK1D06KbK7qrfFiwUVr1xRzHcMuePmbAHSMyTySQzk9/ntVaWPJffzPeZGT958nue329i8XgcERFp3wqyXYCIiLQ+hb2ISAAU9iIiAVDYi4gEQGEvIhIAhb2ISAA6NLWDmRUAc4ABwB5ggruvTdl+HTAOiAMz3H2ZmR0DLAC+BOwCvufuH2e+fBERiSLKmf1ooMjdhwI3AzPrN5hZN+BHwL8Aw4G5ZhYDJgJr3P1c4FFgeqYLFxGR6KKE/TDgeQB3XwUMrt/g7puBAe6+D+gObHf3eGob4DnggkwWLSIizdNkNw7QGdiRsnzAzDq4+34Ad99vZv8LuB24v4E2u4AuDT2wmVUClQAnn3zyoGeffbb5RyAiEq5Y1B2jnNnvBIpT29QHfT13/zfgROB/mtk3DmtTDGxv6IHdfZ67D3b3wUcffXTUmkVEpJmihP0KYCSAmQ0B1tRvsISaZD/9PhIXcOtS2wAXA69lsmgREWmeKN04S4ARZraSxJ8M483sJmCtuy81s7eBP5K4G+c5d3/VzP4fUG1my4G9QHkr1S8iIhHEcmXWy7KysnhNTU22yxARySeR++yjnNlnzb59+9i0aRO1tbXZLiUoRUVF9OrVi6OOOirbpYhIhuR02G/atIni4mJKS0uJxSL/ApMWiMfjbNmyhU2bNtG3b99slyMiGZLT0yXU1tZy3HHHKejbUCwW47jjjtNfUyLtTE6HPaCgzwK95iLtT86H/SFKSyEWy9xPaWm2j0hEpE3kdJ/9ETZsgEzePdTEGezrr7/Ok08+yX333Ze55wT++c9/8u6773L++ecfsr6iooLPPvuMY4455uC6hx9+mClTpnDPPfewefPmBtu98847zJo1i3g8Tl1dHeeddx7f//73M1qziOS3/Ar7dmLVqlW89957R4Q2wD333EO/fv0OWVf/y6axdjNmzDjYbt++fVx11VUMGTKEr3zlK613ECIRlZYmztOaq08fWL8+09WES2GfhjfeeIP77ruPwsJCevfuzYwZM9izZw/Tpk1j165dbNu2jTFjxlBeXs7jjz/O008/TUFBAQMHDmTy5MnMmzeP2tpazjzzTIYPH97k851//vksW7as0XY9evTg8ccfp6ysjFNOOYWFCxfSsWNH9u3bx2233caGDRuoq6tj0qRJnH322bzyyivcf//9dOrUiS5dumBmXH/99a35kknA0v2DXJeOMkth30zxeJxbb72VJ554guOOO45Zs2axZMkSTj31VC655BIuvPBCPvzwQyoqKigvL6empoZbb72VM844gyeeeIJ4PE5lZSXvvfdeg0E/ZcqUg904l112GWPGjAGgsLCw0XZ33nkn1dXVVFVVsXHjRi699FKmTJnC4sWLKSkp4c4772Tbtm2MHTuWpUuXcscdd7Bo0SK6devGj3/849Z/0UQk6xT2zbR161Y++ugjJk2aBCRuDz3nnHM477zzqK6u5oUXXqBTp07s35+YK+6uu+5i/vz5/OIXv+CMM86gqRHLDXXjfJ49e/bw5z//meuuu47rrruObdu2ccstt7Bo0SLWrVvHW2+9xTvvvAPA/v372bx5M506daJbt24ADB48mM2bN6fzUohIHlHYN1NJSQndu3dnzpw5FBcX89JLL/GFL3yB+fPnc8YZZ1BeXs6qVat49dVXAXjqqae4/fbbOfroo/nBD37A6tWrKSgooK6urtnP3VC7WCzGT37yEx566CH69+9PSUkJPXv2pGPHjpx00kl0796da6+9ltraWubOncvxxx/Pp59+ytatW+natStvv/02PXv2zMhrIyK5K7/Cvk+fzHbk9enT5C4rVqygrKzs4PLMmTOZNm0alZWVxONxjj32WO69915isRhVVVX87ne/44tf/CKFhYXs3bsXM+Pb3/42JSUlnHDCCQwYMIBOnToxd+7cg10/UfXv3/+Idh07dmTWrFn89Kc/5cCBA8RiMU477TSuuOIK6urqmD59OmPHjuWTTz6hvLycgoICbr31Vq655hqKi4upq6ujT4TXQUTyW05PhPaXv/yFU045JUsVtV+/+tWvGD9+PB07dmTy5MkMGzaM0aNHH7KPXnvJlFgs/Qu0ORJPuax9TIQmrePYY4/lyiuvpKioiJ49ezJy5MimG4lIXlPYB2js2LGMHTs222WISBvKr+kSREQkLQp7EZEAKOxFRAKQV2GvSS9FsqQl//NJTsirC7RtPOklr7/+OldffTX33XffIXesjBo1ilNPPZW77767Wc+3YMGCIy6M1tTUcP/999O7d++D68aNG8eOHTvo0qULw4cPb7BdbW0tVVVVfPTRR8RiMTp16kRVVRUlJSXNqkkkkpb8z6e8zwl5FfbZcNJJJ7Fs2bKDYe/ufPbZZ2k91ty5cxu8C+bSSy9l8uTJzWr329/+lm7duh38hfPII4/wy1/+kunTp6dVm4i0bwr7Jnz5y19m/fr17Ny5k86dO7N06VJGjRrF+++/D8DSpUuprq6mY8eOlJaWMmPGDDZt2sTUqVPp0KEDhYWF3HvvvdTU1LBjxw6qqqqoqqpq8nlnz55Nt27d2L59e4PtevbsyeLFixk4cCBnnXUWFRUVB+fdee6553jkkUcoKChg0KBBTJ48ma1btzJ58mT27t1L3759WbVqFS+++GJrvGQikoPyqs8+W0aMGMGLL75IPB7nnXfe4cwzzwRg27ZtzJ49m+rqahYuXEhxcTGLFi1i5cqVnHrqqfz617/m2muvZceOHUycOJEuXbo0GPTLli2joqKCiooKbrjhhkO2Ndbu61//OhMnTmTx4sUMHz6ccePGsW7dOrZv387s2bN55JFHWLhwIR9++CErVqzggQceONgldNFFF3HgwIHWerlEJAfpzD6CUaNGUVVVRe/evRk8ePDB9Rs3buTkk0+mU6dOAHzta19j+fLl3HLLLTz44INMmDCB4uJibrzxxs99/Ka6cRqyevVqhg4dyoUXXsiBAwd45plnmDp1KlVVVWzdupXKykoAPv30UzZu3Mi6dev41re+BXDIMYhIGHRmH0Hv3r3ZvXs3jz32GJdddtnB9b169WLdunXs3r0bSHypSd++fXnppZcYNGgQ1dXVXHTRRTz00EMATU5v3JiG2j377LMHH7ewsBAzo2PHjvTq1YsTTzyR+fPn89hjjzF27FgGDBhA//79Wb16NQB/+tOf0qpDRPJXXoV9/aSXmfppzmSPI0eO5P3336dv374H13Xt2pXrr7+eq6++miuvvJJt27bxne98h69+9avMmjWL8vJynnzyyYMXV/v169fsM/jG2k2aNIkP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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def get_dfe(df, segname):\n", " use_df = df.loc[pd.notnull(df[segname + '.mean.s'])]\n", " return list(use_df[segname + '.mean.s'])\n", "\n", "def simple_plot_dfe_compare(exp):\n", " f, sub = pl.subplots(1, 1, figsize=(6, 4))\n", " lowest_fit_dfe = get_dfe(dats[exp], sorted_segs[exp][0])\n", " highest_fit_dfe = get_dfe(dats[exp], sorted_segs[exp][-1])\n", " bin_lefts = [(-16.15+i)*0.015-0.005 for i in range(22)]\n", " sub.hist(lowest_fit_dfe, bins=bin_lefts, label='Least Fit Seg', histtype=\"step\", color=\"r\", weights=np.ones_like(lowest_fit_dfe)/float(len(lowest_fit_dfe)))\n", " sub.hist(highest_fit_dfe, bins=bin_lefts, label='Most Fit Seg', histtype=\"step\", color=\"b\", weights=np.ones_like(highest_fit_dfe)/float(len(highest_fit_dfe)))\n", " sub.legend(loc='upper left')\n", " sns.despine()\n", " \n", "simple_plot_dfe_compare('BT')\n", "simple_plot_dfe_compare('TP')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# OK that concludes the jump-start! \n", "\n", "If you want to get deeper into the plotting / data exploration you can also check out the (much longer but less well commented) jupyter notebook on https://github.com/mjohnson11/TnSeq_Pipeline\n", "\n", "Please email me if you have questions: milo.s.johnson.13@gmail.com\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }