{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Use Case 3: Associating Clinical Variables with Acetylation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this use case, we aim to analyze acetylation data with a clinical attribute, specifically \"histologic_type\". Our goal is to identify acetylation sites that differ significantly in frequency between non-tumor, serous and endometrial cells." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 1: Import Packages and Load Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we'll import the necessary packages, including the cptac package, and load the Endometrial dataset. Make sure to run pip install (package name) in your terminal to make sure the all of the dependencies you are trying to import are installed." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import scipy.stats\n", "import statsmodels.stats.multitest\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import math\n", "import cptac\n", "import cptac.utils as ut\n", "\n", "en = cptac.Ucec()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 2: Understanding the Acetylproteomic Dataframe\n", "\n", "The Endometrial acetylproteomic dataframe has a multiindex. The 'Name' index lists the gene of interest, 'Site' index shows the site of acetylation, and 'Peptide' index shows the peptide sequence where the modification took place. 'Database_ID' differentiates entries with the same gene name. After joining with other dataframes, we typically drop 'Database_ID' for easier data manipulation." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "cptac warning: Your version of cptac (1.5.1) is out-of-date. Latest is 1.5.0. Please run 'pip install --upgrade cptac' to update it. (C:\\Users\\sabme\\anaconda3\\lib\\threading.py, line 910)\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameARF5FKBP4ZNF195...PDIA4AC004706.3NaNWIZNaN
SiteK109K181K213K234K266K294K35K354K76K497...K570K611K637K21K102K105K105K16K638K228K304
PeptideVQESADELQKMLQEDELRDKLFDQRMEKGEHSIVYLKEKFQIPPNAELKESWEMNSEEKLEQSTIVKQALLQYKK;QALLQYKQDEGVLKALELDSNNEKGLFRDKFSFDLGKTHTGEKPYK...QLEPVYNSLAKKVEGFPTIYFAPSGDK;VEGFPTIYFAPSGDKKFIEEHATKRGEQAAKMPGR;GEQAAKMPGRSLQKTAKTAKIMVHSPTKAESKAAAGPRPSATGYLGSVAAKRPLQEDRLRCASIQKFGERLKECCDKPLLEK;ECCDKPLLEK
Database_IDENSP00000000233.5ENSP00000001008.4ENSP00000001008.4ENSP00000001008.4ENSP00000001008.4ENSP00000001008.4ENSP00000001008.4ENSP00000001008.4ENSP00000001008.4ENSP00000005082.9...ENSP00000499129.1ENSP00000499129.1ENSP00000499129.1ENSP00000499350.1ENSP00000499373.1ENSP00000499373.1ENSP00000501256.3ENSP00000501256.3P02769P02769
Patient_ID
C3L-00006NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN15.945484NaNNaNNaNNaNNaN22.290219
C3L-00008NaN13.420601NaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN16.790586NaNNaN14.14755512.664316NaN22.236406
C3L-00032NaNNaN15.060923NaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN15.952557NaNNaNNaNNaN14.35119221.437865
C3L-00084NaNNaNNaNNaNNaN12.336663NaNNaNNaNNaN...NaNNaN12.25137614.506364NaNNaNNaNNaNNaN25.212475
C3L-00090NaNNaNNaNNaNNaNNaNNaN16.483674NaNNaN...NaNNaNNaN16.11683713.641868NaNNaN11.869961NaN21.68762
..................................................................
NX5.N14.617941NaN15.496429NaNNaN12.90388511.666652NaNNaNNaN...NaNNaNNaN17.23143NaNNaNNaNNaNNaN23.490334
NX6.N14.533201NaN15.618387NaNNaN12.99464512.320025NaNNaNNaN...NaNNaNNaN17.188642NaNNaNNaNNaNNaN23.308924
NX7.N14.289658NaN15.657418NaNNaN13.01821912.048218NaNNaNNaN...NaNNaNNaN17.511215NaNNaNNaNNaNNaN23.759263
NX8.NNaN13.118452NaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN16.718777NaNNaN12.58271811.997747NaN24.135771
NX9.NNaN12.792899NaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN15.237764NaNNaNNaN11.802954NaN23.547796
\n", "

160 rows × 11790 columns

\n", "
" ], "text/plain": [ "Name ARF5 FKBP4 \\\n", "Site K109 K181 K213 \n", "Peptide VQESADELQKMLQEDELR DKLFDQR MEKGEHSIVYLK \n", "Database_ID ENSP00000000233.5 ENSP00000001008.4 ENSP00000001008.4 \n", "Patient_ID \n", "C3L-00006 NaN NaN NaN \n", "C3L-00008 NaN 13.420601 NaN \n", "C3L-00032 NaN NaN 15.060923 \n", "C3L-00084 NaN NaN NaN \n", "C3L-00090 NaN NaN NaN \n", "... ... ... ... \n", "NX5.N 14.617941 NaN 15.496429 \n", "NX6.N 14.533201 NaN 15.618387 \n", "NX7.N 14.289658 NaN 15.657418 \n", "NX8.N NaN 13.118452 NaN \n", "NX9.N NaN 12.792899 NaN \n", "\n", "Name \\\n", "Site K234 K266 K294 \n", "Peptide EKFQIPPNAELK ESWEMNSEEKLEQSTIVK QALLQYKK;QALLQYK \n", "Database_ID ENSP00000001008.4 ENSP00000001008.4 ENSP00000001008.4 \n", "Patient_ID \n", "C3L-00006 NaN NaN NaN \n", "C3L-00008 NaN NaN NaN \n", "C3L-00032 NaN NaN NaN \n", "C3L-00084 NaN NaN 12.336663 \n", "C3L-00090 NaN NaN NaN \n", "... ... ... ... \n", "NX5.N NaN NaN 12.903885 \n", "NX6.N NaN NaN 12.994645 \n", "NX7.N NaN NaN 13.018219 \n", "NX8.N NaN NaN NaN \n", "NX9.N NaN NaN NaN \n", "\n", "Name \\\n", "Site K35 K354 K76 \n", "Peptide QDEGVLK ALELDSNNEKGLFR DKFSFDLGK \n", "Database_ID ENSP00000001008.4 ENSP00000001008.4 ENSP00000001008.4 \n", "Patient_ID \n", "C3L-00006 NaN NaN NaN \n", "C3L-00008 NaN NaN NaN \n", "C3L-00032 NaN NaN NaN \n", "C3L-00084 NaN NaN NaN \n", "C3L-00090 NaN 16.483674 NaN \n", "... ... ... ... \n", "NX5.N 11.666652 NaN NaN \n", "NX6.N 12.320025 NaN NaN \n", "NX7.N 12.048218 NaN NaN \n", "NX8.N NaN NaN NaN \n", "NX9.N NaN NaN NaN \n", "\n", "Name ZNF195 ... PDIA4 \\\n", "Site K497 ... K570 \n", "Peptide THTGEKPYK ... QLEPVYNSLAKK \n", "Database_ID ENSP00000005082.9 ... ENSP00000499129.1 \n", "Patient_ID ... \n", "C3L-00006 NaN ... NaN \n", "C3L-00008 NaN ... NaN \n", "C3L-00032 NaN ... NaN \n", "C3L-00084 NaN ... NaN \n", "C3L-00090 NaN ... NaN \n", "... ... ... ... \n", "NX5.N NaN ... NaN \n", "NX6.N NaN ... NaN \n", "NX7.N NaN ... NaN \n", "NX8.N NaN ... NaN \n", "NX9.N NaN ... NaN \n", "\n", "Name \\\n", "Site K611 K637 \n", "Peptide VEGFPTIYFAPSGDK;VEGFPTIYFAPSGDKK FIEEHATK \n", "Database_ID ENSP00000499129.1 ENSP00000499129.1 \n", "Patient_ID \n", "C3L-00006 NaN NaN \n", "C3L-00008 NaN NaN \n", "C3L-00032 NaN NaN \n", "C3L-00084 NaN 12.251376 \n", "C3L-00090 NaN NaN \n", "... ... ... \n", "NX5.N NaN NaN \n", "NX6.N NaN NaN \n", "NX7.N NaN NaN \n", "NX8.N NaN NaN \n", "NX9.N NaN NaN \n", "\n", "Name AC004706.3 NaN \\\n", "Site K21 K102K105 K105 \n", "Peptide RGEQAAKMPGR;GEQAAKMPGR SLQKTAK TAKIMVHSPTK \n", "Database_ID ENSP00000499350.1 ENSP00000499373.1 ENSP00000499373.1 \n", "Patient_ID \n", "C3L-00006 15.945484 NaN NaN \n", "C3L-00008 16.790586 NaN NaN \n", "C3L-00032 15.952557 NaN NaN \n", "C3L-00084 14.506364 NaN NaN \n", "C3L-00090 16.116837 13.641868 NaN \n", "... ... ... ... \n", "NX5.N 17.23143 NaN NaN \n", "NX6.N 17.188642 NaN NaN \n", "NX7.N 17.511215 NaN NaN \n", "NX8.N 16.718777 NaN NaN \n", "NX9.N 15.237764 NaN NaN \n", "\n", "Name WIZ NaN \\\n", "Site K16 K638 K228 \n", "Peptide AESKAAAGPR PSATGYLGSVAAKRPLQEDR LRCASIQKFGER \n", "Database_ID ENSP00000501256.3 ENSP00000501256.3 P02769 \n", "Patient_ID \n", "C3L-00006 NaN NaN NaN \n", "C3L-00008 14.147555 12.664316 NaN \n", "C3L-00032 NaN NaN 14.351192 \n", "C3L-00084 NaN NaN NaN \n", "C3L-00090 NaN 11.869961 NaN \n", "... ... ... ... \n", "NX5.N NaN NaN NaN \n", "NX6.N NaN NaN NaN \n", "NX7.N NaN NaN NaN \n", "NX8.N 12.582718 11.997747 NaN \n", "NX9.N NaN 11.802954 NaN \n", "\n", "Name \n", "Site K304 \n", "Peptide LKECCDKPLLEK;ECCDKPLLEK \n", "Database_ID P02769 \n", "Patient_ID \n", "C3L-00006 22.290219 \n", "C3L-00008 22.236406 \n", "C3L-00032 21.437865 \n", "C3L-00084 25.212475 \n", "C3L-00090 21.68762 \n", "... ... \n", "NX5.N 23.490334 \n", "NX6.N 23.308924 \n", "NX7.N 23.759263 \n", "NX8.N 24.135771 \n", "NX9.N 23.547796 \n", "\n", "[160 rows x 11790 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "en.get_acetylproteomics('umich')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 3: Choose Clinical Attribute and Join Dataframes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this use case, we'll use the 'histologic_type' clinical attribute to identify differences in acetylation sites between \"endometrioid\" and \"serous\" cancer cells. We'll join this clinical attribute with our acetylation dataframe using the en.join_metadata_to_omics method" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Namehistologic_typeARF5_umich_acetylproteomicsFKBP4_umich_acetylproteomics...PDIA4_umich_acetylproteomicsAC004706.3_umich_acetylproteomicsNaNWIZ_umich_acetylproteomicsNaN
SiteK109K181K213K234K266K294K35K354K76...K570K611K637K21K102K105K105K16K638K228K304
PeptideVQESADELQKMLQEDELRDKLFDQRMEKGEHSIVYLKEKFQIPPNAELKESWEMNSEEKLEQSTIVKQALLQYKK;QALLQYKQDEGVLKALELDSNNEKGLFRDKFSFDLGK...QLEPVYNSLAKKVEGFPTIYFAPSGDK;VEGFPTIYFAPSGDKKFIEEHATKRGEQAAKMPGR;GEQAAKMPGRSLQKTAKTAKIMVHSPTKAESKAAAGPRPSATGYLGSVAAKRPLQEDRLRCASIQKFGERLKECCDKPLLEK;ECCDKPLLEK
Patient_ID
C3L-00006Endometrioid carcinomaNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN15.945484NaNNaNNaNNaNNaN22.290219
C3L-00008Endometrioid carcinomaNaN13.420601NaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN16.790586NaNNaN14.14755512.664316NaN22.236406
C3L-00032Endometrioid carcinomaNaNNaN15.060923NaNNaNNaNNaNNaNNaN...NaNNaNNaN15.952557NaNNaNNaNNaN14.35119221.437865
C3L-00084Endometrioid carcinomaNaNNaNNaNNaNNaN12.336663NaNNaNNaN...NaNNaN12.25137614.506364NaNNaNNaNNaNNaN25.212475
C3L-00090Endometrioid carcinomaNaNNaNNaNNaNNaNNaNNaN16.483674NaN...NaNNaNNaN16.11683713.641868NaNNaN11.869961NaN21.68762
..................................................................
NX5.NNaN14.617941NaN15.496429NaNNaN12.90388511.666652NaNNaN...NaNNaNNaN17.23143NaNNaNNaNNaNNaN23.490334
NX6.NNaN14.533201NaN15.618387NaNNaN12.99464512.320025NaNNaN...NaNNaNNaN17.188642NaNNaNNaNNaNNaN23.308924
NX7.NNaN14.289658NaN15.657418NaNNaN13.01821912.048218NaNNaN...NaNNaNNaN17.511215NaNNaNNaNNaNNaN23.759263
NX8.NNaNNaN13.118452NaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN16.718777NaNNaN12.58271811.997747NaN24.135771
NX9.NNaNNaN12.792899NaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN15.237764NaNNaNNaN11.802954NaN23.547796
\n", "

160 rows × 11791 columns

\n", "
" ], "text/plain": [ "Name histologic_type ARF5_umich_acetylproteomics \\\n", "Site K109 \n", "Peptide VQESADELQKMLQEDELR \n", "Patient_ID \n", "C3L-00006 Endometrioid carcinoma NaN \n", "C3L-00008 Endometrioid carcinoma NaN \n", "C3L-00032 Endometrioid carcinoma NaN \n", "C3L-00084 Endometrioid carcinoma NaN \n", "C3L-00090 Endometrioid carcinoma NaN \n", "... ... ... \n", "NX5.N NaN 14.617941 \n", "NX6.N NaN 14.533201 \n", "NX7.N NaN 14.289658 \n", "NX8.N NaN NaN \n", "NX9.N NaN NaN \n", "\n", "Name FKBP4_umich_acetylproteomics \\\n", "Site K181 K213 K234 \n", "Peptide DKLFDQR MEKGEHSIVYLK EKFQIPPNAELK \n", "Patient_ID \n", "C3L-00006 NaN NaN NaN \n", "C3L-00008 13.420601 NaN NaN \n", "C3L-00032 NaN 15.060923 NaN \n", "C3L-00084 NaN NaN NaN \n", "C3L-00090 NaN NaN NaN \n", "... ... ... ... \n", "NX5.N NaN 15.496429 NaN \n", "NX6.N NaN 15.618387 NaN \n", "NX7.N NaN 15.657418 NaN \n", "NX8.N 13.118452 NaN NaN \n", "NX9.N 12.792899 NaN NaN \n", "\n", "Name \\\n", "Site K266 K294 K35 K354 \n", "Peptide ESWEMNSEEKLEQSTIVK QALLQYKK;QALLQYK QDEGVLK ALELDSNNEKGLFR \n", "Patient_ID \n", "C3L-00006 NaN NaN NaN NaN \n", "C3L-00008 NaN NaN NaN NaN \n", "C3L-00032 NaN NaN NaN NaN \n", "C3L-00084 NaN 12.336663 NaN NaN \n", "C3L-00090 NaN NaN NaN 16.483674 \n", "... ... ... ... ... \n", "NX5.N NaN 12.903885 11.666652 NaN \n", "NX6.N NaN 12.994645 12.320025 NaN \n", "NX7.N NaN 13.018219 12.048218 NaN \n", "NX8.N NaN NaN NaN NaN \n", "NX9.N NaN NaN NaN NaN \n", "\n", "Name ... PDIA4_umich_acetylproteomics \\\n", "Site K76 ... K570 \n", "Peptide DKFSFDLGK ... QLEPVYNSLAKK \n", "Patient_ID ... \n", "C3L-00006 NaN ... NaN \n", "C3L-00008 NaN ... NaN \n", "C3L-00032 NaN ... NaN \n", "C3L-00084 NaN ... NaN \n", "C3L-00090 NaN ... NaN \n", "... ... ... ... \n", "NX5.N NaN ... NaN \n", "NX6.N NaN ... NaN \n", "NX7.N NaN ... NaN \n", "NX8.N NaN ... NaN \n", "NX9.N NaN ... NaN \n", "\n", "Name \\\n", "Site K611 K637 \n", "Peptide VEGFPTIYFAPSGDK;VEGFPTIYFAPSGDKK FIEEHATK \n", "Patient_ID \n", "C3L-00006 NaN NaN \n", "C3L-00008 NaN NaN \n", "C3L-00032 NaN NaN \n", "C3L-00084 NaN 12.251376 \n", "C3L-00090 NaN NaN \n", "... ... ... \n", "NX5.N NaN NaN \n", "NX6.N NaN NaN \n", "NX7.N NaN NaN \n", "NX8.N NaN NaN \n", "NX9.N NaN NaN \n", "\n", "Name AC004706.3_umich_acetylproteomics NaN \\\n", "Site K21 K102K105 K105 \n", "Peptide RGEQAAKMPGR;GEQAAKMPGR SLQKTAK TAKIMVHSPTK \n", "Patient_ID \n", "C3L-00006 15.945484 NaN NaN \n", "C3L-00008 16.790586 NaN NaN \n", "C3L-00032 15.952557 NaN NaN \n", "C3L-00084 14.506364 NaN NaN \n", "C3L-00090 16.116837 13.641868 NaN \n", "... ... ... ... \n", "NX5.N 17.23143 NaN NaN \n", "NX6.N 17.188642 NaN NaN \n", "NX7.N 17.511215 NaN NaN \n", "NX8.N 16.718777 NaN NaN \n", "NX9.N 15.237764 NaN NaN \n", "\n", "Name WIZ_umich_acetylproteomics NaN \\\n", "Site K16 K638 K228 \n", "Peptide AESKAAAGPR PSATGYLGSVAAKRPLQEDR LRCASIQKFGER \n", "Patient_ID \n", "C3L-00006 NaN NaN NaN \n", "C3L-00008 14.147555 12.664316 NaN \n", "C3L-00032 NaN NaN 14.351192 \n", "C3L-00084 NaN NaN NaN \n", "C3L-00090 NaN 11.869961 NaN \n", "... ... ... ... \n", "NX5.N NaN NaN NaN \n", "NX6.N NaN NaN NaN \n", "NX7.N NaN NaN NaN \n", "NX8.N 12.582718 11.997747 NaN \n", "NX9.N NaN 11.802954 NaN \n", "\n", "Name \n", "Site K304 \n", "Peptide LKECCDKPLLEK;ECCDKPLLEK \n", "Patient_ID \n", "C3L-00006 22.290219 \n", "C3L-00008 22.236406 \n", "C3L-00032 21.437865 \n", "C3L-00084 25.212475 \n", "C3L-00090 21.68762 \n", "... ... \n", "NX5.N 23.490334 \n", "NX6.N 23.308924 \n", "NX7.N 23.759263 \n", "NX8.N 24.135771 \n", "NX9.N 23.547796 \n", "\n", "[160 rows x 11791 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Set desired attribute to variable 'clinical_attribute'\n", "clinical_attribute = \"histologic_type\"\n", "\n", "#Join attribute with acetylation dataframe\n", "clinical_and_acetylation = en.join_metadata_to_omics(metadata_name='clinical',\n", " omics_name='acetylproteomics',\n", " omics_source='umich',\n", " metadata_source='mssm',\n", " metadata_cols=clinical_attribute)\n", "clinical_and_acetylation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Now, we'll drop the 'Peptide' level and flatten the 'Site' level, appending the 'Site' to the column names." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "cptac warning: Due to dropping the specified levels, dataframe now has 587 duplicated column headers. (C:\\Users\\sabme\\AppData\\Local\\Temp\\ipykernel_28116\\1181336117.py, line 2)\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Namehistologic_typeARF5_umich_acetylproteomics_K109FKBP4_umich_acetylproteomics_K181FKBP4_umich_acetylproteomics_K213FKBP4_umich_acetylproteomics_K234FKBP4_umich_acetylproteomics_K266FKBP4_umich_acetylproteomics_K294FKBP4_umich_acetylproteomics_K35FKBP4_umich_acetylproteomics_K354FKBP4_umich_acetylproteomics_K76...PDIA4_umich_acetylproteomics_K570PDIA4_umich_acetylproteomics_K611PDIA4_umich_acetylproteomics_K637AC004706.3_umich_acetylproteomics_K21K102K105K105WIZ_umich_acetylproteomics_K16WIZ_umich_acetylproteomics_K638K228K304
Patient_ID
C3L-00006Endometrioid carcinomaNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN15.945484NaNNaNNaNNaNNaN22.290219
C3L-00008Endometrioid carcinomaNaN13.420601NaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN16.790586NaNNaN14.14755512.664316NaN22.236406
C3L-00032Endometrioid carcinomaNaNNaN15.060923NaNNaNNaNNaNNaNNaN...NaNNaNNaN15.952557NaNNaNNaNNaN14.35119221.437865
C3L-00084Endometrioid carcinomaNaNNaNNaNNaNNaN12.336663NaNNaNNaN...NaNNaN12.25137614.506364NaNNaNNaNNaNNaN25.212475
C3L-00090Endometrioid carcinomaNaNNaNNaNNaNNaNNaNNaN16.483674NaN...NaNNaNNaN16.11683713.641868NaNNaN11.869961NaN21.68762
..................................................................
NX5.NNaN14.617941NaN15.496429NaNNaN12.90388511.666652NaNNaN...NaNNaNNaN17.23143NaNNaNNaNNaNNaN23.490334
NX6.NNaN14.533201NaN15.618387NaNNaN12.99464512.320025NaNNaN...NaNNaNNaN17.188642NaNNaNNaNNaNNaN23.308924
NX7.NNaN14.289658NaN15.657418NaNNaN13.01821912.048218NaNNaN...NaNNaNNaN17.511215NaNNaNNaNNaNNaN23.759263
NX8.NNaNNaN13.118452NaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN16.718777NaNNaN12.58271811.997747NaN24.135771
NX9.NNaNNaN12.792899NaNNaNNaNNaNNaNNaNNaN...NaNNaNNaN15.237764NaNNaNNaN11.802954NaN23.547796
\n", "

160 rows × 11791 columns

\n", "
" ], "text/plain": [ "Name histologic_type ARF5_umich_acetylproteomics_K109 \\\n", "Patient_ID \n", "C3L-00006 Endometrioid carcinoma NaN \n", "C3L-00008 Endometrioid carcinoma NaN \n", "C3L-00032 Endometrioid carcinoma NaN \n", "C3L-00084 Endometrioid carcinoma NaN \n", "C3L-00090 Endometrioid carcinoma NaN \n", "... ... ... \n", "NX5.N NaN 14.617941 \n", "NX6.N NaN 14.533201 \n", "NX7.N NaN 14.289658 \n", "NX8.N NaN NaN \n", "NX9.N NaN NaN \n", "\n", "Name FKBP4_umich_acetylproteomics_K181 \\\n", "Patient_ID \n", "C3L-00006 NaN \n", "C3L-00008 13.420601 \n", "C3L-00032 NaN \n", "C3L-00084 NaN \n", "C3L-00090 NaN \n", "... ... \n", "NX5.N NaN \n", "NX6.N NaN \n", "NX7.N NaN \n", "NX8.N 13.118452 \n", "NX9.N 12.792899 \n", "\n", "Name FKBP4_umich_acetylproteomics_K213 \\\n", "Patient_ID \n", "C3L-00006 NaN \n", "C3L-00008 NaN \n", "C3L-00032 15.060923 \n", "C3L-00084 NaN \n", "C3L-00090 NaN \n", "... ... \n", "NX5.N 15.496429 \n", "NX6.N 15.618387 \n", "NX7.N 15.657418 \n", "NX8.N NaN \n", "NX9.N NaN \n", "\n", "Name FKBP4_umich_acetylproteomics_K234 \\\n", "Patient_ID \n", "C3L-00006 NaN \n", "C3L-00008 NaN \n", "C3L-00032 NaN \n", "C3L-00084 NaN \n", "C3L-00090 NaN \n", "... ... \n", "NX5.N NaN \n", "NX6.N NaN \n", "NX7.N NaN \n", "NX8.N NaN \n", "NX9.N NaN \n", "\n", "Name FKBP4_umich_acetylproteomics_K266 \\\n", "Patient_ID \n", "C3L-00006 NaN \n", "C3L-00008 NaN \n", "C3L-00032 NaN \n", "C3L-00084 NaN \n", "C3L-00090 NaN \n", "... ... \n", "NX5.N NaN \n", "NX6.N NaN \n", "NX7.N NaN \n", "NX8.N NaN \n", "NX9.N NaN \n", "\n", "Name FKBP4_umich_acetylproteomics_K294 FKBP4_umich_acetylproteomics_K35 \\\n", "Patient_ID \n", "C3L-00006 NaN NaN \n", "C3L-00008 NaN NaN \n", "C3L-00032 NaN NaN \n", "C3L-00084 12.336663 NaN \n", "C3L-00090 NaN NaN \n", "... ... ... \n", "NX5.N 12.903885 11.666652 \n", "NX6.N 12.994645 12.320025 \n", "NX7.N 13.018219 12.048218 \n", "NX8.N NaN NaN \n", "NX9.N NaN NaN \n", "\n", "Name FKBP4_umich_acetylproteomics_K354 FKBP4_umich_acetylproteomics_K76 \\\n", "Patient_ID \n", "C3L-00006 NaN NaN \n", "C3L-00008 NaN NaN \n", "C3L-00032 NaN NaN \n", "C3L-00084 NaN NaN \n", "C3L-00090 16.483674 NaN \n", "... ... ... \n", "NX5.N NaN NaN \n", "NX6.N NaN NaN \n", "NX7.N NaN NaN \n", "NX8.N NaN NaN \n", "NX9.N NaN NaN \n", "\n", "Name ... PDIA4_umich_acetylproteomics_K570 \\\n", "Patient_ID ... \n", "C3L-00006 ... NaN \n", "C3L-00008 ... NaN \n", "C3L-00032 ... NaN \n", "C3L-00084 ... NaN \n", "C3L-00090 ... NaN \n", "... ... ... \n", "NX5.N ... NaN \n", "NX6.N ... NaN \n", "NX7.N ... NaN \n", "NX8.N ... NaN \n", "NX9.N ... NaN \n", "\n", "Name PDIA4_umich_acetylproteomics_K611 \\\n", "Patient_ID \n", "C3L-00006 NaN \n", "C3L-00008 NaN \n", "C3L-00032 NaN \n", "C3L-00084 NaN \n", "C3L-00090 NaN \n", "... ... \n", "NX5.N NaN \n", "NX6.N NaN \n", "NX7.N NaN \n", "NX8.N NaN \n", "NX9.N NaN \n", "\n", "Name PDIA4_umich_acetylproteomics_K637 \\\n", "Patient_ID \n", "C3L-00006 NaN \n", "C3L-00008 NaN \n", "C3L-00032 NaN \n", "C3L-00084 12.251376 \n", "C3L-00090 NaN \n", "... ... \n", "NX5.N NaN \n", "NX6.N NaN \n", "NX7.N NaN \n", "NX8.N NaN \n", "NX9.N NaN \n", "\n", "Name AC004706.3_umich_acetylproteomics_K21 K102K105 K105 \\\n", "Patient_ID \n", "C3L-00006 15.945484 NaN NaN \n", "C3L-00008 16.790586 NaN NaN \n", "C3L-00032 15.952557 NaN NaN \n", "C3L-00084 14.506364 NaN NaN \n", "C3L-00090 16.116837 13.641868 NaN \n", "... ... ... ... \n", "NX5.N 17.23143 NaN NaN \n", "NX6.N 17.188642 NaN NaN \n", "NX7.N 17.511215 NaN NaN \n", "NX8.N 16.718777 NaN NaN \n", "NX9.N 15.237764 NaN NaN \n", "\n", "Name WIZ_umich_acetylproteomics_K16 WIZ_umich_acetylproteomics_K638 \\\n", "Patient_ID \n", "C3L-00006 NaN NaN \n", "C3L-00008 14.147555 12.664316 \n", "C3L-00032 NaN NaN \n", "C3L-00084 NaN NaN \n", "C3L-00090 NaN 11.869961 \n", "... ... ... \n", "NX5.N NaN NaN \n", "NX6.N NaN NaN \n", "NX7.N NaN NaN \n", "NX8.N 12.582718 11.997747 \n", "NX9.N NaN 11.802954 \n", "\n", "Name K228 K304 \n", "Patient_ID \n", "C3L-00006 NaN 22.290219 \n", "C3L-00008 NaN 22.236406 \n", "C3L-00032 14.351192 21.437865 \n", "C3L-00084 NaN 25.212475 \n", "C3L-00090 NaN 21.68762 \n", "... ... ... \n", "NX5.N NaN 23.490334 \n", "NX6.N NaN 23.308924 \n", "NX7.N NaN 23.759263 \n", "NX8.N NaN 24.135771 \n", "NX9.N NaN 23.547796 \n", "\n", "[160 rows x 11791 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Use the cptac.utils.reduce_multiindex function to combine the multiple column levels\n", "clinical_and_acetylation = ut.reduce_multiindex(clinical_and_acetylation, levels_to_drop=\"Peptide\")\n", "clinical_and_acetylation = ut.reduce_multiindex(clinical_and_acetylation, flatten=True)\n", "\n", "clinical_and_acetylation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 4: Format Dataframe to Compare Acetylproteomic Sites Between Histologic Types" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['Endometrioid carcinoma', 'Serous carcinoma',\n", " 'Clear cell carcinoma', 'Mixed cell adenocarcinoma', nan],\n", " dtype=object)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clinical_attribute = \"histologic_type\"\n", "#Show possible variations of histologic_type\n", "clinical_and_acetylation[clinical_attribute].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this step, we will make two different dataframes for \"Endometrioid\" and \"Serous\" cancer types, as well as fill the NaN columns with \"Non-Tumor.\"" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#Make dataframes with only endometrioid and only serous data in order to compare \n", "endom = clinical_and_acetylation.loc[clinical_and_acetylation[clinical_attribute] == \"Endometrioid carcinoma\"]\n", "serous = clinical_and_acetylation.loc[clinical_and_acetylation[clinical_attribute] == \"Serous carcinoma\"]\n", "#Here is where we set the NaN values to \"Non_Tumor\"\n", "clinical_and_acetylation[[clinical_attribute]] = clinical_and_acetylation[[clinical_attribute]].fillna(\n", " value=\"Non_Tumor\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have our different dataframes, we want to make sure that the amount of data we are using for each site is significant. Since there are fewer patients with \"serous\" tumors than with \"endometrioid,\" we will check to make sure that we have at least five values for each acetylation site that we are comparing that have a measurement of intensity for serous patients. We will remove every acetylation site from our dataframe that doesn't have at least five values among the serous patients." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total Sites: 11790\n", "Removed: 5442\n", "Remaining Sites: 6348\n", "Adjusted p-value cutoff will be: 7.876496534341525e-06\n" ] } ], "source": [ "#Remove every column that doesn't have at least 5 values among the serous patients\n", "print(\"Total Sites: \", len(serous.columns) - 1)\n", "sites_to_remove = []\n", "for num in range(1, len(serous.columns)):\n", " serous_site = serous.columns[num]\n", " one_site = serous[serous_site]\n", " num_datapoints_ser = one_site.count()\n", " if num_datapoints_ser.mean() < 5:\n", " sites_to_remove.append(serous_site)\n", "\n", "clinical_and_acetylation = clinical_and_acetylation.drop(sites_to_remove, axis = 1)\n", "\n", "#Also remove non-tumor patients from our dataframe to use in comparison, as we want to compare only endometrioid and serous types\n", "clinical_and_acetylation_comparison = clinical_and_acetylation.loc[clinical_and_acetylation['histologic_type'] != 'Non_Tumor']\n", "clinical_and_acetylation_comparison = clinical_and_acetylation_comparison.loc[clinical_and_acetylation_comparison['histologic_type'] != 'Mixed cell adenocarcinoma']\n", "clinical_and_acetylation_comparison = clinical_and_acetylation_comparison.loc[clinical_and_acetylation_comparison['histologic_type'] != 'Clear cell carcinoma']\n", "\n", "\n", "print(\"Removed: \", len(sites_to_remove))\n", "print(\"Remaining Sites: \", len(clinical_and_acetylation_comparison.columns) - 1)\n", "print(\"Adjusted p-value cutoff will be: \", .05/(len(clinical_and_acetylation_comparison.columns)-1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 5: Compare Endometrioid and Serous Values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will now call the wrap_ttest method, which will loop through the data and compare endometrioid versus serous data for each acetylation site. If we find a site that is significantly different, we will add it to a dataframe, with its p-value. The default alpha used is .05, which will be adjusted to account for multiple testing using a bonferroni correction, dividing alpha by the number of comparisons that will occur (the number of comparison columns)." ] }, { "cell_type": "code", "execution_count": 8, "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", "
ComparisonP_Value
0PCBP1_umich_acetylproteomics_K310.000398
1FOXA2_umich_acetylproteomics_K2740.000951
2TBL1XR1_umich_acetylproteomics_K1020.001964
3CNBP_umich_acetylproteomics_K850.004430
4JADE3_umich_acetylproteomics_K7350.007308
5EYA2_umich_acetylproteomics_K2480.009880
6RAB1A_umich_acetylproteomics_K1310.012228
7DYNC1H1_umich_acetylproteomics_K16490.014876
8VDAC1_umich_acetylproteomics_K2240.022864
\n", "
" ], "text/plain": [ " Comparison P_Value\n", "0 PCBP1_umich_acetylproteomics_K31 0.000398\n", "1 FOXA2_umich_acetylproteomics_K274 0.000951\n", "2 TBL1XR1_umich_acetylproteomics_K102 0.001964\n", "3 CNBP_umich_acetylproteomics_K85 0.004430\n", "4 JADE3_umich_acetylproteomics_K735 0.007308\n", "5 EYA2_umich_acetylproteomics_K248 0.009880\n", "6 RAB1A_umich_acetylproteomics_K131 0.012228\n", "7 DYNC1H1_umich_acetylproteomics_K1649 0.014876\n", "8 VDAC1_umich_acetylproteomics_K224 0.022864" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Make list of all remaining sites in dataframe to pass to wrap_ttest function\n", "columns_to_compare = list(clinical_and_acetylation_comparison.columns)\n", "\n", "#Remove the \"Histologic_type\" column (at index 0) from this list\n", "columns_to_compare = columns_to_compare[1:]\n", "# print(columns_to_compare)\n", "\n", "clinical_and_acetylation_comparison = clinical_and_acetylation_comparison.loc[:,~clinical_and_acetylation_comparison.columns.duplicated()]\n", "#Perform ttest on each column in dataframe\n", "significant_sites_df = ut.wrap_ttest(df=clinical_and_acetylation_comparison, label_column=\"histologic_type\", comparison_columns=columns_to_compare)\n", "\n", "#List significant results\n", "significant_sites_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 6: Graph Results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have eight acetylation sites that differ significantly between endometrioid and serous intensities, we will graph a couple of them using a boxplot and a stripplot in order to visually see the difference, as well as compare with normal cells. First we'll remove some extreme outliers." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Define a function to calculate IQR and lower and upper bounds for extreme outliers\n", "def calculate_iqr_and_bounds_extreme(data):\n", " Q1 = data.quantile(0.25)\n", " Q3 = data.quantile(0.75)\n", " IQR = Q3 - Q1\n", "\n", " # Define bounds for extreme outliers\n", " lower_bound = Q1 - 3.0 * IQR\n", " upper_bound = Q3 + 3.0 * IQR\n", "\n", " return lower_bound, upper_bound" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will visualize the data while considering extreme outliers. Extreme outliers are calculated by expanding the IQR range to 3 times instead of the usual 1.5 times." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TtestResult(statistic=5.653510545875068, pvalue=1.520752350373057e-07, df=99.0)\n" ] }, { "data": { "image/png": "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CNC7PfDAA7V+fHBwMLZs2YLt27cjIiIC77//PpYtW6Z3TH29P7p27Yrvv/8e586dw4MPPoju3bvjtddeQ2BgoO6YxYsX48KFC2jbtq3ZNTKWL1+O0aNH48knn0SPHj1w/vx5JCcnm6y1FBUVhY8++girVq1CREQEUlJS8Morr1R7DRcXF6SkpMDPzw9Dhw5Fly5dsHz5cl1CvnLlSvj4+KB379549NFHMXjwYPTo0aPG2MPDw5GSkoL09HTcd9996NWrF3bs2AFnZ8t69N3c3JCcnIybN28iMjISY8aMwcCBA7F69WqLzqc1bNgw/POf/8TMmTPRrVs3HD58GK+++mqdzmmMh4cH7r//frzzzjvo27cvOnfujFdffRVTp07VPQdJkrBr1y707dsXTz31FMLDw/HYY4/h4sWL1SZskiRhx44d8PHxQd++ffHQQw+hTZs22LRpk+6YwYMH49VXX8WLL76IyMhIFBQUYMKECbr9Xl5eOHDgAIYOHYrw8HC88sorWLFiBR555BGj12zevDm+++47FBYWIjo6Gj179sRHH32k65pZt24dcnNz0aNHDzz55JO6EgM16devH5KSkrBz505069YNAwYMMGh5Ncfdd9+NXbt24aeffkJERASee+45TJkypca/i5o8++yzGDVqFMaNG4f7778ff/75J6ZPn16nc1oLV80mIiIih8aWGSIiInJoTGaasGXLlulNhax8M9XMSkREZG/YzdSE3bx50+RsDldXV9x9990NHBEREZH5mMwQERGRQ2M3ExERETk0JjNERETk0JjMEBERkUNjMkNEREQOjckMURPUr18/zJkzx+R+SZKwffv2eo2hPq5R0/MiosaJq2YTkYGcnByTywdUJUkStm3bhhEjRtRvULWwdetWg5WALbF//370798fubm5eis3E5F9YjJDRAZatmxp6xAs4uvra+sQiMgG2M1E1ERVVFTgxRdfhK+vL1q2bIlFixbp9lXuArp9+zZmzpyJgIAAKJVKhISEID4+HsCd1bEBYOTIkZAkSXcfANauXYu2bdvCxcUF7du3x2effVZtPCdOnMCAAQPg6uqK5s2b45lnnkFhYaFuf3l5OWbPno1mzZqhefPmmD9/PiZOnKjXIlS1m0mtVmP+/PkICgqCQqFAu3btsG7dumrjuHDhAvr37w8A8PHxgSRJmDRpEj799FM0b94carVa7/gRI0bgySefBAAsWrQI3bp1wwcffICgoCC4ublh7NixyMvL03vMxx9/jI4dO0KpVKJDhw7497//XW1MRFQDQURNTnR0tPDy8hKLFi0S586dExs2bBCSJImUlBQhhBAAxLZt24QQQrz99tsiKChIHDhwQFy4cEEcPHhQfPHFF0IIIa5fvy4AiPXr14ucnBxx/fp1IYQQW7duFXK5XKxZs0acPXtWrFixQshkMvHdd9/pYqh8jcLCQhEQECBGjRolTpw4Ifbu3StCQ0PFxIkTdce/8cYbwtfXV2zdulWcPn1aPPfcc8LLy0sMHz5c73k9//zzuvtjx44VQUFBYuvWrSIzM1N8++23YuPGjdW+NuXl5WLLli0CgDh79qzIyckRt27dEsXFxcLb21t89dVXumOvXbsmnJ2ddc9r4cKFwt3dXQwYMED88ssv4vvvvxft2rUTjz/+uO4xn3/+uQgICBBbtmwRv/32m9iyZYvw9fUViYmJtfvlEZEBJjNETVB0dLR44IEH9LZFRkaK+fPnCyH0E41Zs2aJAQMGiIqKCqPnqnysVu/evcXUqVP1tsXExIihQ4cafdyHH34ofHx8RGFhoW7///73P+Hk5CSuXr0qhBDC399fvP3227r95eXlIjg42GQyc/bsWQFA7Nmzp/oXw4h9+/YJACI3N1dv+7Rp08Qjjzyiu79ixQrRpk0b3WuzcOFCIZPJxOXLl3XHfPPNN8LJyUnk5OQIIYRo27atLhnUWrJkiejVq5fZcRLRHexmImqiunbtqnc/ICAA169fNzhu0qRJSEtLQ/v27TF79mykpKTUeO7Tp0+jT58+etv69OmD06dPmzw+IiIC7u7uesdXVFTg7NmzyMvLw7Vr13Dffffp9stkMvTs2dNkDGlpaZDJZIiOjq4x3tqaOnUqUlJS8PvvvwMAEhMTMWnSJEiSpDsmODhYb12zXr166Z5HUVERMjMzMWXKFL2FXd944w1kZmZaLU6ipoYDgImaqKqzfiRJQkVFhcFxPXr0QFZWFr755ht8++23GDt2LB566CFs3ry5oUK1iKurq9XP2b17d0RERODTTz/FoEGD8Ouvv+J///tfrR+vHQP00Ucf4f7779fbJ5PJrBorUVPClhkiqpGXlxfGjRuHjz76CJs2bcKWLVt0K67L5XJoNBq94zt27IhDhw7pbTt06BA6depk9PwdO3ZEeno6ioqK9I53cnJC+/bt4e3tDX9/f6Smpur2azQaHDt2zGTMXbp0QUVFBb7//nuzn6+Li4vuGlU9/fTTSExMxPr16/HQQw8hKChIb392djauXLmiu69SqXTPw9/fH4GBgfjtt9/Qrl07vVtoaKjZcRLRHUxmiKhaK1euxJdffokzZ87g3LlzSEpKQsuWLXX1V1q3bo29e/fi6tWryM3NBQC88MILSExMxNq1a5GRkYGVK1di69atmDdvntFrPPHEE1AqlZg4cSJOnjyJffv2YdasWXjyySfh7+8PAJg1axbi4+OxY8cOnD17Fs8//zxyc3P1ungqa926NSZOnIjJkydj+/btyMrKwv79+/HVV1/V+JxDQkIgSRK+/vpr3LhxQ29W1eOPP47Lly/jo48+wuTJkw0eq30e6enpOHjwIGbPno2xY8fqpru//vrriI+Px7vvvotz587hxIkTWL9+PVauXFljXERkHJMZIqqWp6cn3nrrLdx7772IjIzEhQsXsGvXLjg53fn4WLFiBfbs2YOgoCB0794dwJ3pyqtWrUJCQgLuuecefPDBB1i/fj369etn9Bpubm5ITk7GzZs3ERkZiTFjxmDgwIFYvXq17pj58+dj/PjxmDBhAnr16gUPDw8MHjwYSqXSZOxr167FmDFjMH36dHTo0AFTp07Va/0x5e6778brr7+Ol156Cf7+/pg5c6Zun7e3N0aPHg0PDw+jhQLbtWuHUaNGYejQoRg0aBC6du2qN/X66aefxscff4z169ejS5cuiI6ORmJiIltmiOpAEkIIWwdBRGSuiooKdOzYEWPHjsWSJUsa9NoDBw7EPffcg3fffVdv+6JFi7B9+3akpaU1aDxETR0HABORQ7h48SJSUlIQHR0NtVqN1atXIysrC48//niDxZCbm4v9+/dj//79LHRHZEfYzUREDsHJyQmJiYmIjIxEnz59cOLECXz77bfo2LGj2ed67rnn9KZGV74999xzJh/XvXt3TJo0CW+++Sbat29fl6dDRFbEbiYianKuX7+O/Px8o/u8vLzg5+fXwBERUV0wmSEiIiKHxm4mIiIicmhMZoiIiMihMZkhIiIih8ZkhoiIiBwakxkiIiJyaExmiIiIyKExmSEiIiKHxmSGiIiIHNr/ATaxbOAioyKxAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "TtestResult(statistic=-5.487492982044729, pvalue=3.1403534632193126e-07, df=99.0)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAG2CAYAAACKxwc0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABp/0lEQVR4nO3deVxU9f4/8NdhGGZYRzBZTEFTcUklNRK13FOzcgXN+qam1bVcMtEKW0xN0VL7aXnNrKDlVubu9XaFMrfMKdREzQ1JRROXYpN9gM/vD+5MDDMDc2CGYeD17DGPnHPOnPNmGGbe81neH0kIIUBERETkpFwcHQARERFRbTCZISIiIqfGZIaIiIicGpMZIiIicmpMZoiIiMipMZkhIiIip8ZkhoiIiJwakxkiIiJyakxmiIiIyKkxmSEiIiKn5tBkJjY2FuHh4fD29oa/vz9GjRqFc+fOGfZnZGRg5syZaN++Pdzd3REcHIxZs2YhOzvbgVETERFRfeLQZGb//v2YPn06tFotvvvuO+h0OgwZMgR5eXkAgGvXruHatWtYsWIFTp06hfj4eOzevRtTp051ZNhERERUj0j1aaHJW7duwd/fH/v370ffvn3NHrNp0yb83//9H/Ly8uDq6lrHERIREVF9U6+yAX33kZ+fX5XH+Pj4WExkioqKUFRUZLhfVlaGjIwMNG3aFJIk2TZgIiIisgshBG7fvo3mzZvDxaWajiRRT5SWloqHH35Y9OnTx+Ixt27dEsHBwWL+/PkWj1mwYIEAwBtvvPHGG2+8NYDblStXqs0h6k0303PPPYf//ve/+PHHH9GiRQuT/Tk5OXjwwQfh5+eHnTt3QqlUmj1P5ZaZ7OxsBAcH48qVK/Dx8bFb/ERERGQ7OTk5aNmyJbKysqDRaKo8tl50M82YMQO7du3CgQMHzCYyt2/fxrBhw+Dt7Y1t27ZZTGQAQKVSQaVSmWz38fFhMkNERORkrBki4tDZTEIIzJgxA9u2bcMPP/yA1q1bmxyTk5ODIUOGwM3NDTt37oRarXZApERERFRfObRlZvr06fjyyy+xY8cOeHt74/r16wAAjUYDd3d3QyKTn5+PL774Ajk5OcjJyQEANGvWDAqFwpHhExERUT3g0DEzlpqO4uLiMHnyZOzbtw8DBgwwe8zFixfRqlWraq+Rk5MDjUZjmAVFRERE9Z+cz2+HtsxUl0f179+/2mOIiIiocePaTEREROTUmMwQERGRU2MyQ0RERE6NyQwRERE5NSYzRERE5NSYzBAREZFTYzJDRERETq1erM1ERETUkGi1WmzatAlpaWkIDg5GVFQUIiIiHB1Wg8WWGSIiIhvSarVYunQpUlJSUFRUhJSUFMTGxkKr1To6tAaLyQwREZENbdq0yWSbEAKbN292QDSNA5MZIiIiG0pLS5O1nWqPyQwREZENBQcHy9pOtcdkhoiIyIaioqIgSZLRNkmSEBkZ6aCIGj4mM0RERDYUERGBmJgYhIaGQq1WIzQ0FDExMZzNZEecmk1ERGRjERERTF7qEFtmiIiIyKkxmSEiIiKnxmSGiIiInBqTGSIiInJqTGaIiIjIqTGZISIiIqfGZIaIiIicGpMZIiIicmpMZoiIiMipMZkhIiIip8ZkhoiIiJwakxkiIiJyakxmiIiIyKlx1WwiIqJa0Gq12LRpE9LS0hAcHIyoqCiumF3HJCGEcHQQ9pSTkwONRoPs7Gz4+Pg4OhwiIrIDIQQKCwvr/LpJSUlYsWKF0TZJkjBz5kz07t0bkiTVeUwVqdVqh8dQU3I+v5nMEBGR0ysoKMDQoUPr/LpeXl5wdTXt5CgpKUFubm6dx1NZQkIC3N3dHR1Gjcj5/OaYGSIiohpSKBQWt3t5eUGpVNZxRI0Tx8wQEZHTU6vVSEhIqPPrzp8/H6mpqSbbJUmCq6srlEoloqOjER4eXuexAeXPS2PAZIaIiJyeJEkO6U4ZP348YmNjYWnEhhACO3fuRN++fes4ssaF3UxEREQ1FBERgZiYGISGhlo8Ji0trQ4japyYzBAREdVCREQEVqxYgXbt2pndHxwcXMcRNT5MZoiIiGwgKirKZBq0JEmIjIx0UESNB5MZIiIiG4iIiEB0dDRKSkoghEDbtm0RExPDAnp1gAOAiYiIbCQ8PNxQX2bJkiVOW+PF2chumSkrK7O4nYOciIiIqK5Znczk5ORg3Lhx8PT0REBAAN544w2UlpYa9t+6dQutW7e2S5BERERElljdzfT6668jOTkZn3/+ObKysvDWW2/h2LFj2Lp1K9zc3ADA4jx7IiIiInuxumVm+/btWL9+PSIjI/H000/jyJEjuHXrFh599FEUFRUBgNMuZkVERETOy+pk5tatWwgJCTHcv+OOO/D999/j9u3bGD58OPLz8+0SIBEREVFVrE5mgoODcebMGaNt3t7eSExMREFBAUaPHm3z4IiIiIiqY3UyM2TIEMTFxZls9/LyQkJCQqNZzIqIiIjqF6sHAC9cuBDXrl0zu8/b2xvfffcdjh07ZrPAiIiIiKxhdTLj6+sLX19fi/u9vb3Rr18/mwRFREREZC1ZFYD//PNPfPLJJzh8+DCuX78OAAgMDETv3r0xefJkNGvWzC5BEhEREVli9ZiZpKQkhIaGYs2aNdBoNOjbty/69u0LjUaDNWvWoEOHDjhy5Ig9YyUiIiIyYXXLzMyZMxEVFYUPPvjApJ6MEALTpk3DzJkzcfjwYZsHSURERGSJ1clMcnIy4uPjzRbGkyQJL774Irp162bT4IiIiIiqY3U3U2BgIH755ReL+3/55RcEBATYJCgiIiIia1ndMjN37lw8++yzOHr0KAYNGmRIXG7cuIE9e/Zgw4YNWLFihd0CJSIiIjLH6mRm+vTpuOOOO/Duu+/in//8p2HFbIVCgR49eiA+Ph7jxo2zW6BERERE5siamj1+/HiMHz8eOp0Of/75J4DyNZqUSqVdgiMishetVotNmzYhLS0NwcHBiIqKQkREhKPDIqIakJXM6CmVSgQFBdk6FiIiu9InMJcuXYJOpzNsT0lJQWxsLGJiYpjQEDkhqwcAVyc1NRUDBw601emIiGxKq9Vi6dKlSElJMUpk9IQQ2Lx5swMiI6Laslkyk5ubi/3799vqdERENrVp06Zqj0lLS6uDSIjI1qzuZlqzZk2V+//4449aB0NEZC/WJCrBwcF1EAkR2ZrVyczs2bMRFBQENzc3s/uLi4ttFhQRka0FBwcjJSXF4n5JkhAZGVmHERGRrVidzISEhGD58uUWp18fP34cPXr0sFlgRES2FBUVhdjYWAghjLYrlUq0bt0akZGRHPxL5KSsTmZ69OiBo0ePWkxmJEkyeZMgIqovIiIiEBMTg82bNxumYzOBIWoYrE5mFi1ahPz8fIv7O3XqhIsXL9okKCIie4iIiGDyQtQAWZ3MdOrUqcr9SqXS4ngaIiIiInuxemr2nDlzqtyfnp6O/v371zYeIiIiIlmsTmbi4uKwZMkSs/v0iUyzZs1sFhgRERGRNazuZtq5cyeGDRsGPz8/PPfcc4bt169fx4ABA+Dn54fdu3fbJUgiIiIiS6xOZh544AF88803GDt2LHx9ffHYY48ZEhmNRoPExER4eXnZM1YiIiIiE7IWmnz44YfxySef4KmnnkJhYSHefvtteHl5ITExEd7e3vaKkYiIiMgi2atmP/7448jKysLUqVPRvXt3fP/999BoNPaIjYiIiKhaVicz3bp1gyRJhvtKpRJZWVkYMGCA0XHHjh2z+uKxsbHYunUrzp49C3d3d/Tu3RvLly9H+/btDcd8+OGH+PLLL3Hs2DHcvn0bmZmZaNKkidXXICIioobN6mRm1KhRRvdHjhxZ64vv378f06dPR3h4OEpKSjB//nwMGTIEp0+fhqenJwAgPz8fw4YNw7BhwxATE1PraxIREVHDYnUys2DBAlknPnToEO69916oVCqLx1Se/RQfHw9/f38cPXoUffv2BVC+wCUA7Nu3T9b1iYiIqHGwus6MXA899BD++OMPWY/Jzs4GAPj5+dX4ukVFRcjJyTG6ERERUcNlt2RG7qKTZWVlmD17Nvr06YPOnTvX+LqxsbHQaDSGW8uWLWt8LiIiIqr/7JbMyDV9+nScOnUKX3/9da3OExMTg+zsbMPtypUrNoqQiIiI6iPZU7PtYcaMGdi1axcOHDiAFi1a1OpcKpWqynE6RERE1LA4NJkRQmDmzJnYtm0b9u3bh9atWzsyHCIiInJCdktmKtaksWT69On48ssvsWPHDnh7e+P69esAAI1GA3d3dwDlaz9dv34dFy5cAACcPHkS3t7eCA4OrtVAYSIiImoYHDoAeN26dcjOzkb//v0RFBRkuG3cuNFwzAcffIBu3brhmWeeAQD07dsX3bp1w86dO+0VOhERETkRScicdlRQUAAhBDw8PAAAly9fxrZt29CpUycMGTLELkHWRk5ODjQaDbKzs+Hj4+PocIiIqAErKCjA0KFDoVQq0bVrV1y9ehXBwcGIiopCRESEo8NzKnI+v2W3zIwcORKfffYZACArKws9e/bEypUrMXLkSKxbt65mERMRETUQSqUSnp6eSE1NRVFREVJSUhAbGwutVuvo0Bos2cnMsWPH8MADDwAANm/ejICAAFy+fBmfffYZ1qxZY/MAiYgq0mq1iI6ORlRUFKKjo/kBQfWOuRm1Qghs3rzZAdE0DrKTmfz8fHh7ewMAEhMTMWbMGLi4uCAiIgKXL1+2eYBERHparRZLly5FSkoKv/FSvaVQKMxuT0tLq+NIGg/ZyUzbtm2xfft2XLlyBQkJCYZxMjdv3uSYFCKyq02bNpls4zdeqm9KS0vNbg8ODq7jSBoP2cnMG2+8gblz56JVq1bo2bMnevXqBaC8laZbt242D5CISM/SN1t+46X6pKioyGRGryRJiIyMdFBEDZ/sOjORkZG4//77kZ6ejrCwMMP2QYMGYfTo0TYNjoioouDgYKSkpJjdTlRf6HQ65OfnIywszDCbKTIykrOZ7Eh2MpOdnQ03NzeTVpi2bdvC1bVerI5ARA1UVFQUYmNjjb718hsv1Uc6nQ5LliwxFIAl+5LdzfTYY4+ZXQzym2++wWOPPWaToIiIzImIiEBMTAxCQ0OhVqsRGhqKmJgYfuMlauRkN6X8/PPPWLVqlcn2/v3749VXX7VJUERElkRERDB5ISIjsltmioqKUFJSYrJdp9OhoKDAJkERERERWUt2MnPffffhww8/NNn+wQcfoEePHjYJioiIiMhasruZ3nrrLQwePBjJyckYNGgQAGDPnj1ISkpCYmKizQMkIiIiqorslpk+ffrg8OHDaNmyJb755hv8+9//Rtu2bXHixAnDMgdEREREdaVGc6nvuece/Otf/7J1LERERESyWZXM5OTkGJYqyMnJqfJYLmlAREREdcmqZMbX1xfp6enw9/dHkyZNIEmSyTFCCEiSZHFNCiIiImei1WqxadMmpKWlITg4GFFRUSwLUE9Zlcz88MMP8PPzAwDs3bvXrgEREdUGP4DIFvQrtOvpV2hnkcb6yapkpl+/fmb/TUSNkxAChYWFDo+hqKgIAKBSqSBJEpKSkrBixQrDMfoPoOjoaISHh9s1HrVabbbVmpxTVSu0M5mpf2o0ALiwsBAnTpzAzZs3UVZWZrRvxIgRNgmMiOqvwsJCDB061NFhmPDy8jJZI04IgWXLliE3N9eu105ISOA6PA0IV2h3LrKTmd27d2PixIn4888/TfZxzAwROZJCoZC1ncgSrtDuXGQnMzNnzkRUVBTeeOMNBAQE2CMmIqrn1Go1EhISHBpDYWEhRo4cCQDYsWMH1Go15s+fj9TUVJNj27VrhyVLltg1HrVabdfzU93iCu3ORXYyc+PGDcyZM4eJDFEjJklSvepSUavVcHd3x/jx481+AI0bN65exUv1n36F9s2bNxsGk0dGRnK8TD0lO5mJjIzEvn370KZNG3vEQ0RUY/wAIlviCu3OQ3Yy8/777yMqKgoHDx5Ely5doFQqjfbPmjXLZsEREcnFDyCixkd2MvPVV18hMTERarUa+/btM5qKKEkSkxkiIiKqU7KTmVdffRULFy7EK6+8AhcX2etUEhFRA1Mf6g7VFxWfBz4n5eqiBpPsZKa4uBjjx49nIkNERADqb90hR9PPtmvs6qIGk+yMZNKkSdi4caM9YiEiInJqSqUSXl5e0Gg08PLyMhlXSvYhu2WmtLQUb7/9NhISEtC1a1eTX9SqVatsFhwRETmX0kdLa1hb3vkpbynhecrTcN/V1RUKVwVud74NXTOdAyNzgBJA8e+6K1Yp+yV38uRJdOvWDQBw6tQpo31cl4SIrMUFIRsoVzTaZMYjzcNkmwQJ7mnu0AU1smSmjsl+yXHVbCKqLa5ITA2RItd8S4RrXiPN7upQrUbxXr16FVevXrVVLETUSFS1IjGRsyr1Mr82YYlnSR1H0vjITmbKysqwaNEiaDQahISEICQkBE2aNMHixYtNVtAmIjKHKxJTQ5TfOh8CwmibgEBB6wLDfeVNJTQ/a+C3xw+anzVQ3uQAYVuoUZ2Zjz/+GMuWLUOfPn0AAD/++CPefPNNFBYW2n0xNyJyflyRmBoinb8Ot8Nuw/2iO1zzXFHiWYKC1gXQ+ZePl1HeVMIn2cdwvGuOK7yTvXE77LbhGKoZ2cnMp59+io8++ggjRowwbOvatSvuvPNOPP/880xmiKhaXJGYGiqdv85iYuJx0cIA4Yvu0PnroLyphMdFDyhyFSj1KkV+63wmOVaS3c2UkZGBDh06mGzv0KEDMjIybBIUETVs+gUhQ0NDoVarERoaysG/1OBVNUBY32rjmuMKqUwytNqwG8o6sltmwsLC8P7772PNmjVG299//32EhYXZLDAiati4ICQ1NqVepXDNMf3YLfEsqbbVhqomO5l5++238fDDD+P7779Hr169AACHDx/GlStX8O2339o8QCIiooYgv3U+vJO9IeHvmmz6AcLeJ73NPobTuq0j+1nq168fzp8/j7Vr1+Ls2bMAgDFjxuD5559H8+bNbR4gETVc1RXOY2E9akiqGiBcVasNVa9GKV/z5s050JeIaqW6wnksrEcNkaUBwlW12lD1alQ07+DBg/i///s/9O7dG3/88QcA4PPPP8ePP/5o0+CIqOGqrnBeVfu1Wi3mz59vWMwvKSnJ7vES2ZO+1Ubno4NQCOh8dJyyLYPsZGbLli0YOnQo3N3dcezYMRQVFQEAsrOzjb5FERFVpbrCeZb2X7x4EUuXLkVqaiokSYKrqytWrlwJrVZrt1iJrFWbong6fx1yeuYgY2AGcnrmMJGRQXYy89Zbb+GDDz7Ahg0bjFbM7tOnD44dO2bT4Iio4bJUIE+/3dJ+FxfTty0uhUD1AadXO47sZObcuXPo27evyXaNRoOsrCxbxEREjUBUVBQkSTLaVrFwnqX9lpZN4VII5GhVTa8m+5KdzAQGBuLChQsm23/88UfcddddNgmKiBq+iIgIjBkzBiqVCgCgUqkwduxYw+BeS4X1WrVqZfZ8XAqBHI2rZjuO7Gf4mWeewQsvvIBPPvkEkiTh2rVrOHz4MObOnYvXX3/dHjESUQOk1WqxZcsWw/2ioiJs2bIFoaGhRgmNuZlLXAqB6iNOr3Yc2cnMK6+8grKyMgwaNAj5+fno27cvVCoV5s6di5kzZ9ojRiJqgKqarWRp6rW+7oxCoYBCoUBhYSFKS0vxyiuvcLo22YWc9ZI4vdpxZCczkiTh1Vdfxbx583DhwgXk5uaiU6dO8PLyskd8RNRAVTebqbLKdWdKSsq/7RYVFSE8PNz2AVKjJ3eV6+pWzSb7kZ3MTJkyBatXr4a3tzc6depk2J6Xl4eZM2fik08+sWmARNQwBQcHIyUlxex2c8y15EiSZBhzYy1WFba9il1+aEA9Kh6/WxjQ+7s7dH7mExSdn850n4znRHlLCY/LHlDkKVDqWYr8kHzomjlhMlThZzZ6fdiJJGReRaFQID09Hf7+/kbb//zzTwQGBhq+LdUXOTk50Gg0yM7Oho+PT/UPIKI6odVqzY59sVThNyoqylDXqiIhBL755hu4u1c/Y6Ry60511yTrZGZmYuTIkY4Ow+Y0Go3JjDqg/DWXnZ1t8+splUp4enqaXCs/Px86nRMmNP+zY8cO+Pr6yn6cnM9vq2cz5eTkIDs7G0II3L59Gzk5OYZbZmYmvv32W5MEh4jIEkuzlSwlFZZabMrKyjB//nxERUUhOjq6yuJ51VUdJqqotLRU1vbaMtfKWJPWx8bI6m6mJk2aQJIkSJKE0NBQk/2SJGHhwoU2DY6IGraKs5X03T8rV6402/0TFRVl0pIjhIBCoUBqaiqA6tdvkjtOh6xT8cO29NHSGq76V//k38qH9ynTAb359+SjtJntExrFfgVgpoySQqVA6YP2SaDspgRQ/Lt8qnpdJGNWv+T27t0LIQQGDhyILVu2wM/Pz7DPzc0NISEhXDWbiGrEmkUl9S05mzdvRlpaGlq0aIFz585BoTCu7VHVjCi543TIOkZdMa5oMMmMLkiH24q6G9Bb5dRuJ35OzXXV2ZrVT0+/fv0AlK+L0rJlS7MlxYmIasLaadoVW3IKCgowbtw4s+ez1NJirnWHNWqoKpZWubYHTu2uOdm5XkhICLKysvDxxx/jzJkzAIC7774bU6ZMgUajsXmAVH9xVgjZSk27f0pLS+Hqavo2ZqmlpXLrTnBwMCIjI/m6pXqBU7trTnYyc+TIEcOq2ffddx8AYNWqVViyZAkSExPRvXt3mwfZ2AkhUFhY6PAY9DNJVCoVjhw5ghUrVhj267sFoqOj66Tmh1qtrpOmS6obNe3+KSoqgkKhMHotVNfSYqmqMFF9UJctQQ2J7GTmxRdfxIgRI7BhwwbDN6KSkhI8/fTTmD17Ng4cOGDzIBu7wsJCDB061NFhGPHy8jL5RiyEwLJly5Cbm2v36yckJFg1FZecQ027f3Q6HfLz8xEWFobLly/DxcUFpaWlhm4rJi1EjYPsgS9HjhzByy+/bPRB5urqipdeeglHjhyxaXBUf1UedFnddqKqVDdNW6vVIjo62uz0a51Oh1GjRkGn06GoqAglJSWGlsKqpmkTUcMhu2XGx8cHaWlp6NChg9H2K1euwNvb22aB0d/UajUSEhIcGkNhYaGhKNaOHTuwaNEiw3TYitq1a4clS5bYPR61Wm33a1DdstT9Y2mmU3R0tGHbtm3bTB5X3TpPRNRwyE5mxo8fj6lTp2LFihXo3bs3AODQoUOYN28eJkyYYPMAqby5vT51qajVaowfP95st8C4cePqVazk/CzNdNq+fbvh/tWrV80+lvVjiBoH2cnMihUrIEkSJk6caFi6QKlU4rnnnsOyZctsHiDVT5wVQnXFUkJy5coVw79btGhhtqWwqgHEnI1H1HDISmZKS0uh1Wrx5ptvIjY21vDm0aZNG3h4mC7IRQ0bZ4VQXbA006lly5a4ceMGAGD06NFYuXKl1QOIrSnSR2Qt5U0lPC56QJGrQKlXKfJb53NGUh2TNQBYoVBgyJAhyMrKgoeHB7p06YIuXbowkSEiu4mKijKZhi9JEkaNGmW4Hx4eLmudJ67RRLaivKmET7IPXHNcIZVJcM1xhXeyN5Q3lY4OrVGR3c3UuXNn/P7772jdurU94iEiMmKpSzMsLMzkOGtbVbhGE9mKx0XTL/MSJLhfdGfrTB2Sncy89dZbmDt3LhYvXowePXqYLFde3TLdRERymUtUCgpqXuKdazSRrShyzZejcM1z4sWUnJDsZ3v48OEAgBEjRhg1/QohIEmS3ZZGJ+fDAZZUX3GNJrKVKheHpDojO5nZu3evPeKgBoYDLKk+42w8shUuDlk/yE5m9KtnE1XF2lWQiRyFs/HIFrg4ZP1Qo069zMxMo1WzO3XqhKeeegp+fn42DY6cFwdYElFjwcUhHU/22kwHDhxAq1atsGbNGmRmZiIzMxNr1qxB69atucgkGVgaSMkBlkREZGuyW2amT5+O8ePHY926dYZFBUtLS/H8889j+vTpOHnypM2DJOfDAZZE1Fgpbyrhed4TLgXl7QVl7mXIC81j640dyW6ZuXDhAqKjo41WR1YoFJgzZw4uXLgg61yxsbEIDw+Ht7c3/P39MWrUKJw7d87omMLCQkyfPh1NmzaFl5cXxo4da6j6SfVXdasgExE1RPoieooCBaT//acoULCQnp3Jbpnp3r07zpw5g/bt2xttP3PmjEkRq+rs378f06dPR3h4OEpKSjB//nwMGTIEp0+fNtSvefHFF/Gf//wHmzZtgkajwYwZMzBmzBgcOnRIbuhUxzjAkuoblgsgezNXRA9gIT17k53MzJo1Cy+88AIuXLhgeBPQarVYu3Ytli1bhhMnThiO7dq1a5Xn2r17t9H9+Ph4+Pv74+jRo+jbty+ys7Px8ccf48svv8TAgQMBAHFxcejYsSO0Wi3fhIjIaiwXQHXBUhE9gIX07En2MzthwgQAwEsvvWR2nyRJNS6gl52dDQCGWVFHjx6FTqfD4MGDDcd06NABwcHBOHz4sNk3oKKiIhQVFRnu5+TkyIqBiBomS+UCVq5cCQBsqSGbsFRED2AhPXuSncxcvHjRHnGgrKwMs2fPRp8+fdC5c2cAwPXr1+Hm5oYmTZoYHRsQEIDr16+bPU9sbCwWLlxolxiJyHlZKgug//LDlhqyBXNF9AAW0rM32clMSEiIPeLA9OnTcerUKfz444+1Ok9MTAzmzJljuJ+Tk4OWLVvWNjwicnKW1mOqiIUdqbb0RfQ8zntAUVDe5VTmVgYoAO+T3ij1KkV+63yOnbExq5KZnTt3Wn3CESNGyA5ixowZ2LVrFw4cOIAWLVoYtgcGBqK4uBhZWVlGrTM3btxAYGCg2XOpVCqoVCrZMRBRw2auXIA5LOxItaXz1yHbv3zYhH52k55rjiu8k71xO+w2ExobsiqZGTVqlFUnkztORgiBmTNnYtu2bdi3bx9at25ttL9Hjx5QKpXYs2cPxo4dCwA4d+4c0tLS0KtXL6uvQ0QNT1JSEry8vKBQKDB//nyMHz++yhaVyusxCSGMxtfpsbBjLTX2YSECgP5jUAF4/G46u0mCBPff3aHza8DJTB2/DqxKZsrKyuxy8enTp+PLL7/Ejh074O3tbRgHo9Fo4O7uDo1Gg6lTp2LOnDnw8/ODj48PZs6ciV69erEZmKgBsnbqtFarxYoVK+DqWv4WlpqaatV4l4rlArRaLQs72oHi35Zn8zRkSqUSKpUKCoUCpaWlKCoqgk6ng0KjQKXhMwDKW2gU2xrnc2UPsovm/f777za7+Lp165CdnY3+/fsjKCjIcNu4caPhmHfffRePPPIIxo4di759+yIwMBBbt261WQxEVD/op06npKSgqKjIMCBXq9WaHFvVQqbWYmFHshWlUglPT0+4urpCkiS4urrCw8MDSqXSYm+F3Nm+VDXZA4Dbtm2Lfv36YerUqYiMjIRara7xxavruwYAtVqNtWvXYu3atTW+DhHVf3JWWrfVQqYs7GgbarUaCQkJjg7DYebPn4/U1FSjbZIkoUuXLhgzZgxWrlxp0gL4yiuvIDw8vK5DdYja5AnWkp3MHDt2DHFxcZgzZw5mzJiB8ePHY+rUqbjvvvvsER85OVZcJWvJSVAszUzieBfHkCQJ7u7ujg7DYa5evWp2+x9//IG+ffvCzc3NMFYrODgYkZGRJu+DfK+sHUlY0zxiRklJCXbu3In4+Hjs3r0boaGhmDJlCp588kk0a9bM1nHWWE5ODjQaDbKzs+Hj41P9A8isgoICDB06FACQkJBg1RtX5YqrQPmbHpvya0cIgcLCQkeHYXPmvt0CMMxObNGiBUaPHo3w8HAkJSWZ/bYbHR3daL7tmqNWqyFJZgZokF1FR0ebTa7btm2LVatWVft4vleaJ+fzu8bJjF5RURH++c9/IiYmBsXFxXBzc8O4ceOwfPlyBAUF1ebUNsFkxjZqksxY+gMPDQ3FihUrbB5jY1Hxd9GQKJVKeHh4VPlhrJ+BVFhYaDLgsrCwECUljXsqjbV/m2Rb5gaTCyEwb9489O3bt9rH873SPDmf37IHAOsdOXIEzz//PIKCgrBq1SrMnTsXqamp+O6773Dt2jWMHDmypqemBuLSpUtmt9urijQ5N51Oh/z8fJSUlEAIYXZMnSRJUKlUUCqV0Ol0yM3NRXZ2NnJzcxt9IkOOU3EwuUqlQklJCfLy8qptJdRqtRYTGYA1j+SQPWZm1apViIuLw7lz5zB8+HB89tlnGD58OFxcyvOi1q1bIz4+Hq1atbJ1rORk9K+JyhQKTke0lbV9s6BS1KpxtV46leWBTy/6w9xPJkkSOjRTYFboTRT/r2qEmwvQWHtXikolTD/QxNFhNHr6weTWtpya61qqjGPArCc7mVm3bh2mTJmCyZMnW+xG8vf3x8cff1zr4Mi5cUqi/akUAuoGlhsmZ3og/mJAlcfcKHSDuytgrkMlOdMDielNkF6oRJBahyFBWQjzzbdPsPVCw0tmGwNzs/cqYs0jeWQnM9999x2Cg4NNvnULIXDlyhUEBwfDzc0NkyZNslmQZB/2Hj3funVrs82nlSs9E1WUmN6k2mOC3IsN/66YvGhcS3GrWGnYdzlfhQ2p/nimzc0GntCQs6mqCyk0NNTsjCeyTPaYmTZt2uDPP/802Z6RkcEPKSdSXYEyfV9uVFQUoqOjkZSUJPsaUVFRJoM5+W2DqpNeqKxyvwSBoYHl694kZ3pgQ2oALuerUFzmYpTIVHzE9qt+doiUqOYsdSHpB/0ykZFHdjJjafJTbm5unRTGIduoqkCZuURn5cqVUCqr/pCpjBVWqSaC1ObXq5EgEOJZiGfa3ETX/7WyWNOKAwB/FsluhCayK37Zsy2r/8LnzJkDoPzJfuONN+Dh8ffiWaWlpfj5559xzz332DxAso+qCpRZSnT09T7mz5+Pq1evWtU1xQqrJNeQoCx8lOoPYbSgjcAdqhIMCcw2JDJA9a04RPVV5YVPLRXTI+tYncz8+uuvAMo/1E6ePAk3NzfDPjc3N4SFhWHu3Lm2j5DsoqoKqpcvXzb7GIVCAU9PT0NhM33XFFtbyJbCfPPxdJub2H7VF7eK9O8zEm4VKfFRqj+erjD+JUitw+V8VbXnvEPVgFcnJqfFL3u2Y3Uys3fvXgDAU089hdWrV7MAnZOLioqyuGLwpk2bLNY9qMzS2jlEtRHmm2+2C0lAQuJ1jSGZMd+KY/qo0S0y7RMoEdULssfMxMXFwcfHBxcuXEBCQgIKCgoAWLdoJNUfVY1nsdSXawkLO1FNJWd64J3TzTHnWAjeOd0cyZl/d19b6kJKL/i7VVjfihPiWQjJwhTlZiqdUdcUETU8skfFZWRkICoqCnv37oUkSUhJScFdd92FqVOnwtfXFytXrrRHnGQHlpo4zfXlduzYETt27DB7HhZ2oprQz0TS00+jbuZWglEtMyx2IVmalm1Jto6Df4kaOtl/5bNnz4ZSqURaWho6duxo2D5+/HjMmTOHyUwDUTnRmThxosVjOfqeasL8TCQJt4rLx8YMDsxGWr6bUReSuWnZ1amY/BDVB1wh2/ZkJzOJiYlISEhAixYtjLa3a9fO4sBRck6ffvopdu3ahaKiIovHKJVK/hFSjVTVmiIg4fxtNZ5ucxOJ1zVIL3BDkHsxhlaYzWTNtOyKyQ9RfVB5GQNOpLAN2clMXl6e0bRsvYyMDMPUXap/5H4T+PTTT7Fly5Zqz8tCiVRT1c1ESi9wQ5hvvsXKvZaSIQkCShdhSH4EgHdON29EyxtQfVZVjS8mMzUnO5l54IEH8Nlnn2Hx4sUAygeGlpWV4e2338aAAQNsHqCjCSFQWFjo6DBqJSkpyWgZef03gejoaIuruu7atcuqc+fk5CAqKgotWrTA6NGjq10ltiFRq9VVDoymqlU3E6m67qGqkqEyAUBIuJinwnfXmxi268flPBiYjZGc4UQOUFWNL6o52cnM22+/jUGDBuHIkSMoLi7GSy+9hN9++w0ZGRk4dOiQPWJ0qMLCQqtWQK3PvLy84Opq/KsWQmDZsmXIzc01+xiNRmPVB/X169cBAKmpqXjnnXeQn58Pna5x1PRISEiAu7u5pQ7JGn/Xk/HDrSJXwMLYGEssJUMCEkqEhMv5KlzOdzPzSAnfXdeglWcRW2iozlVV44tqTvbU7M6dO+P8+fO4//77MXLkSOTl5WHMmDH49ddf0aZNG3vESLWkUJhfVtnSdmuYm4ovSRK7Gkk2D0UZXCUBN5cyuEplhiUL9N1D5qZtA38nQ24uZVWc3VJCXl6vhqiucRkD+6jRnEWNRoNXX33V1rHUe3ndnwBcnG+ap8eV/XAryjLZrlP7Iq/dKLOPcfnzNLyzUioVlP/f/yUFgDKzdT1clCrk3Tu2tiHXX2Ul8Dz2L0dH0SCYzEYS5S0yod6F2HbFz+zq1/pp2/oWlTDffOBiza5fsV4NUV3hMgb2IfuTOS4uDl5eXoiKijLavmnTJuTn52PSpEk2C67ecXEFFM63Fsztph3hd+2wSWJyu2knqPNvwjvjLFyLclCi8sFtvw4o9L4TtwPCAMkFXlkXIIlSCEmB3CbtcNu/MwCg2eU9cCs0HXNQovJxyufImVRsFSsqdWAgtbTbQoXfimNcjP09bXtS65vo3KQ8oQlQ63DFiiUNKgtQF6PQiZ8/vYqvARYvdQ5cxsD2ZCczsbGxWL9+vcl2f39/PPvssw07mXFShd53IqN5r0pJS0cAAk2vHTYc51aYCb9rh5HRvFd5QuPfBbf9u5g9522/DuYTJL+OZo8n26k4VX76AV8HRlI7Go0bajJ+WkDCRylNkZtbnsAolSXw8HCTNRhbCIELmRKe3uu8z585RUVFZmebEjV0spOZtLQ0s9NxQ0JCOBq7Hiv0vhOF3ncCANS3/4B3xhkozbSsSAC8M84ajq3qfOYSpELv5vYInxqg0tJSk4Hp1qo43kun0yE/Px8qlcpoe1XJjSRJcHNzMyzHQkTOTfY7ib+/P06cOIFWrVoZbU9OTkbTpk1tFRfZifr2H0atMea4FuVYda6KCRLVnYqDrNf2zYSq5uO4HepUVhE+vVh5NpKA5UG7fwv2LMIL3S1PrT6V5WHm3MYkCfhogPNPzy4q/buFjgPwqbGSncxMmDABs2bNgre3N/r27QsA2L9/P1544QU89thjNg+QbMvn1olqjylR1XxF9PJWH9MxOGQ7FVscVApA7aTJzL1N86F0Ma7weyXPDWXVJjMCHX0Kq/y5K577cp4K5hIkV0k47XNnCeseUWMlO5lZvHgxLl26hEGDBhmaiMvKyjBx4kSjEs1UP7nq8qrcX5txL5VbfSqPwSGqrHKF34UnWuBWcXUVI8rrxIRUUydGf+4dV33x3XUNKic0JUJCcqYHa80QNQCykxk3Nzds3LgRixcvRnJyMtzd3dGlSxeEhITYIz6qIwLlU7VrM+7FO+OsyTZrx+AQAbCmhwlA+SDgxOsaqxKRkS0y8fOfXsgpqfx2Z/05iKh+q3HRlNDQUISGhtoyFqoDpUpPs60zJUov3AoZVKtzWxprY+0YHKLMYuv7feTUiSksM9/aw1ozRA1DjZKZq1evYufOnUhLS0NxsfH6KatWrbJJYGQf2c26mp1SndOsa63PXaLysVx7hsgKLhJgphajWdWt3QSUF+ZLTG8CXVnN1n8iIucgO5nZs2cPRowYgbvuugtnz55F586dcenSJQgh0L17d3vESDYkZ0q13MG8rD1DtVUmrB3AWv3aTeVjZZpY3G/N+k9E5BxkJzMxMTGYO3cuFi5cCG9vb2zZsgX+/v544oknMGzYMHvESDZmzZTqmgzmZe0Zqq073YstroRdUTOVDl2rGOuSnOlhMZGRIBDsWYShgdlVnoOInIfsZObMmTP46quvyh/s6oqCggJ4eXlh0aJFGDlyJJ577jmbB0l1r6aDefX79AmNd8YZAIIDgKlayZkeyC9xQXW1ZiQIjG5h3J2p705KL1QiSK1DfqnlGVFKF4F5HdNtFDUR1QeyV8329PQ0jJMJCgpCamqqYd+ff/5pu8jIoWo6mFffouNWmAkXUWpo0VHf/sMeYVIDoV90snxxSX0iU3nwjEAzVTGeaXPTqEVF/9jL+SoUl7ngcr4Kt4osf0/jOBmihkd2y0xERAR+/PFHdOzYEcOHD0d0dDROnjyJrVu3cuGsBqSmg3k5PZtqItHMopOABDeXMgDlCYi+Wyg50wPvnG7+dytMibnvZJZadjhOhqghkp3MrFq1Crm5uQCAhQsXIjc3Fxs3bkS7du04k6kBqelgXk7PpppIL7S80vqq7pcN/9a3wuiVj6+xNP2pcneVwBCOkyFqkGQnM3fddZfh356envjggw/MHvfVV19hxIgR8PT0rHl05DA1HczL6dlUE0FqndmBv5W7hCy14JjTTKWDh2uZYakEDvglarhqXDSvOv/4xz/Qs2dPo+SHnEtNFpLk9GyqiSFBWfgo1XhhSHNTpy234Bi3wugHCTN5IWocZA8AtpYQVla+ogZF36JTrPZFmaRAsdoXGc17c3o2VSnMNx9Pt7mJEM9CuLmUIcSz0GSgL1DegmNOM1VJtY8loobLbi0z1HiZa9HhatpUncqLTppjqQVndIsMJi9EjRiTGaq16hIVrqZNtqJvwUm8rql2LEzl2jNDgrK4qCRRA8VkhmrF++ZJ+GSeM9w3l6hwujZZy5oExJoWHHOznj5K9cfTbW4yoSFqgJjMUI2pb/9hlMjoVU5UOF2brCEnAaku6TE360lAQuJ1DZMZogbIbslMSEgIlErLtSOoblXuCip094e64KasMSyVzyGVWq6kWjFR4XRtsoa1CYg1SY+lWU/pBW62DZqI6oUaJzPFxcW4efMmysrKjLYHBwcDAE6dOlW7yOoJo1lZpeZnUtR36tx0NL3+i+G+W2GmUXJh6BoKvA+FXkFWn6Oq+Wolbt5AqQ7q3HS4lBabKV8G3G7Szvme0wrxcsaebVmbgGy/6mdyTOWkx9q6NUTUMMhOZlJSUjBlyhT89NNPRtuFEJAkCaWlpTYLrj4oKioy/Nvz1y8dGEnNeXl5Aa5V/6olAJqrP0Hxv+rO1pzDYsF4IVD811U0yfjSpGiiEAJlZWUoKCiA4mwinLmkYlFRETw8PBwdRoNhTQKSnOmBW0XVJz3W1q0hooZBdjIzefJkuLq6YteuXQgKCoIkWV7dluoHhUJR6+Ms7dMnsRXvFxYWoqSkpDwBqkSSJAghUFJSYlVM1HhYk4CYrwBcrmLSI2fWExE5P9nJzPHjx3H06FF06NDBHvHUOyrV398U87o9DiicbxyQ1+Xv4arLq/Y4ndoXee1Gmd3ncWU/3IqyTLaXuHlBuCjhWnwbJW7euO0bauiq8kndBQjTljoXpQp5946V9TPUG6U6QwtdxdcG1Z41CUhVFYArt7pYM+uJiBoG2clMp06d8Oeff9ojlnrJqOVJoXTKZMaakR0CQKFHgMnPV3HQr7lxLznNwixW961y4K8TPo+VsVXS9iomIMmZHkhIb4L4i80MM5YsdUU1U+nY6kLUiFmVzOTk/D0zZfny5XjppZewdOlSdOnSxWTGko8PZ6jUN4qSwmqPkQB4Z56Dzt3PMKupcrE74H+JkeQCnUpT7cKThe7+UBZmcp0mOyoqlWBduupcTmV5IP6i8YylDan+8HYthbl1mIY3z0RhwxquZ7Xy1wBR42ZVMtOkSROTcRGDBg0yOqahDgBuCCy1kFQmAfC7dhg6tS9u+3WwWOyuWKXBrZBBJvsqMleDRgC47due6zTZ0PQDTRwdgl14eXmZGbMu4XaJ6/8GkZfCxcUFpaWlKCwsxOpfVQDY7UfUWFmVzOzdu9fecZAdmVvJ2hIJf0/VFhbWIbWm2J2lREhdcBO3rYiDGreqBqPrB5FnZ3NmEhGVsyqZ6devn73jIDvSr2TtnXEWroXZcEFZtY+RAAhJMtuDUaLyKW95uXXCMLC4VOmJ7GZdWfW3DqjVaiQkJDg6DJtISkrCtm3bcPXqVbRo0QKjR49GeHg4XnjhBVy/ft3i4zw9PfGvf/0LI0eOBADs2LEDJ0+eNHuuxkStVjs6BCKHkD0AOC4uDl5eXoiKijLavmnTJuTn52PSpEk2C45sR7+SdbPLe6zqcgLKxyKYG/Rb6O5vMpbGVZdntCYTq/7ajyRJcHd3d3QYtabVarFixQrD/dTUVKxcuRJjxoypMpEBgKZNmxp9cJ88edLkXCtWrEBQUBAyMjIQHByMqKgoRERE2P4HISKHM9+PUIXY2FjccccdJtv9/f2xdOlSmwRF9iOnZUSn0iCjeS8Uq31RJilQrPZFRvPeUBfcNHu8fk0moLxrq3KjDgf/UkWbNm0y2SaEwK5du2Sfa9u2bWa3p6eno6ioCCkpKYiNjYVWq5V9biKq/2S3zKSlpaF169Ym20NCQpCWlmaToMh+rB0MrE88Cr2bm6zZ5Jv+s8XH6ZMlo64tw/pPVc9+osbF0vtFxarblmRkZBjdv3r1arWPEUJg8+bNbJ0haoBkt8z4+/vjxIkTJtuTk5PRtGlTmwRF9mOuxaSyMkmBjOa9q6wfY0nFfYXed+JWyCCkh47GrZBBTGTIiH4dt8qsKUZY+bEtWrSw6pr8wkXUMMlOZiZMmIBZs2Zh7969KC0tRWlpKX744Qe88MILeOyxx+wRI9mQvsWkWO1bZVJTVeJhKSFiNxLJERUVZVJ4UJIkPPLII1UWJJQkCZGRkUbbRo8ebVURQ0sJFBE5N9ndTIsXL8alS5cwaNAguP6vEERZWRkmTpzIMTNOorrBwNUN0tUnRBVnM5UovZDTrCtbX8hqERERiImJwebNm5GWlobg4GBERkYiIiIC7du3N2z38ytfJVs/kFd/TEFBgeFc4eHhRufy8/PDtWvXjK5nLgkicjStVotNmzYZ/gY4UL1mJCFEjcqHnj9/HsnJyXB3d0eXLl0QEhJi69hsIicnBxqNBtnZ2TWqTlxQUIChQ4cCAPK6PwG4yM7/6i11bjr8rv9iMlspI/A+w/pKf+8QQNn/Fod0cQUaayn/shJ4HvsXACAhIaFBzCpyVhX/Ns39LrRardlEiRom/SK3jlZYWGhUMqCq6fJJSUlGs/CA8qQ7OjraZmUF1Gq10y69Iufzu8bJjLOwZTLTECmVSqhUKigUCkM11ZqsaF35PEVFRdDpdHaIuP5gMlM7Nf1GWvFxeXl5KCoqwq5du/i7aOSc8b26vNK16RfkkpIS5Obm2uQazvw+Jefz26pmhjlz5mDx4sXw9PTEnDlzqjx21apV1kdKDqfT6WqddCiVSnh6ehruu7q6QqFQID8/v8EnNFQzWq3WqFtaP3U6JiamyoSm8uP0r7WkpCT07dvXrjET2ZqlStdVVcAm86xKZn799VfDh9Kvv/5q8ThnbcqqSkOqtlobVTWdmqvWKkkS2rRpg9WrV9dpnHWJ1VZrzlKNmeqmTpt7nCRJ2L59O5OZRq6+vFcLIQzlBVQqVZWfi/Pnz0dqaqrJ9nbt2mHJkiU2iaexvE/JXpupsa3T1FCqrdqSWq02ek5u3Lhh9rgbN27wuSOzLE2Rrm7qtKX9V65cqXVM5Nzq03u1h4eHVceNHz8esbGxqDjaQ5IkjBs3rt78LM6i4YxmJSKnERwcjJSUFJPt+plLch/XsmVLaLVaxMXFGVoJAwMD8dRTT3HQL9VbVc3oI3lkJzOFhYV47733sHfvXty8eRNlZcaLFh47dsxmwZFzCAwMRHp6usn2oKAgM0cTldeYMVfK4dq1a9BqtRbfzKOioky+yQoh0LlzZ5PzpaenY+nSpZg/fz4/HKjeioiI4OvTBmQnM1OnTkViYiIiIyNx3333NchxMmS9qta6mTx5ct0FQk4lIiICQUFBZpPgqsbNVPwme/nyZeTl5aGwsBAnT560eC0uYUDU8MlOZnbt2oVvv/0Wffr0sUc85EQqzyzRa968OSZPnswPEKpS5fWV9KobN6P/JltxKm5VazNxCQOihk/2cgZ33nknvL297RELORlzM0uA8toJTGSoOpaWFhBCyF7duqq1mbiEAVHDJzuZWblyJV5++WVcvnzZHvGQE6npjBQiwPzaTED5qtmxsbGyEprRo0db3MclDIgaPtnJzL333ovCwkLcdddd8Pb2hp+fn9GNGg9L33j5TZisoR//Ym6VbH3NGWuFh4dj/vz5aN68OSRJgiRJaN68OQf/EjUSssfMTJgwAX/88QeWLl2KgICAWg0APnDgAN555x0cPXoU6enp2LZtG0aNGmXYf+PGDbz88stITExEVlYW+vbti/feew/t2rWr8TXJdszNLOFifiRHVYmG3Ba+yrNC9MserFy5kgv4ETVwspOZn376CYcPH0ZYWFitL56Xl4ewsDBMmTIFY8aMMdonhMCoUaOgVCqxY8cO+Pj4YNWqVRg8eDBOnz5tVD6fHIM1EsgWLNWOqU0LX02XSyAi5yQ7menQoQMKCgpscvGHHnoIDz30kNl9KSkp0Gq1OHXqFO6++24AwLp16xAYGIivvvoKTz/9tE1ioNphjQSqLXu08NV0uQQick6yk5lly5YhOjoaS5YsQZcuXaBUKo3212RlanP0a1tUXFfCxcUFKpUKP/74o8VkpqioyPBYoHzVTSpX01WKieyh4usxMDAQhYWFyMrKAlBeiLE2ODidqHGRPQB42LBhOHz4MAYNGgR/f3/4+vrC19cXTZo0ga+vr80C69ChA4KDgxETE4PMzEwUFxdj+fLluHr1qtlCW3qxsbHQaDSGW8uWLW0WkzPTN7unpKSgqKjI0OwudwoskS1Ufj2mp6cjMzMTQggIIZCenm7x9anVahEdHY2JEyfCy8vL5AsVwMHpRI2N7JaZulpoUqlUYuvWrZg6dSr8/PygUCgwePBgPPTQQ0bN0ZXFxMRgzpw5hvs5OTlMaGC7ZnelUon58+fj6tWrRq07bPUhOSzVKKrI3Ouz8lgYV1dXKBQKJCUlGa2azcHpRI2L7GSmX79+9ojDrB49euD48ePIzs5GcXExmjVrhp49e+Lee++1+BiVSmV2qmdjZ4tmd6VSCU9PT8OS9frWnTFjxmDLli2G4zjYkqpj7euu8nHmkiBJkrB9+3ajZIaD04kaF9nJzIEDB6rcX/ENxVY0Gg2A8g/JI0eOYPHixTa/RkNnixkjluqB7Nq1y+x2DrYkSyy9Hs0dV5GlJOjKlSsm2zg4najxkJ3M9O/f32RbxVozpaWlVp8rNzcXFy5cMNy/ePEijh8/Dj8/PwQHB2PTpk1o1qwZgoODcfLkSbzwwgsYNWoUhgwZIjfsRs8Wze4KhcLs9ooDriviYEuyxNzrsTJzr09LSRC7kokaN9kDgDMzM41uN2/exO7duxEeHo7ExERZ5zpy5Ai6deuGbt26AQDmzJmDbt264Y033gAApKen48knn0SHDh0wa9YsPPnkk/jqq6/khkwo/5Y6ZswYQ+uKSqXCmDFjZH1ztZSoWurW42BLskTfDdS8eXOz+5s3b262m9LcEgj6mlRE1HhJoqqvRjLs378fc+bMwdGjR21xOpvJycmBRqNBdna2zaaNOyNzK1xLkmT1uJaCggI88sgj8PDwMPowkSQJY8eOxZYtW0xaffTn5uBgqopWq5U1tkV//OXLl5GXl4fCwkL85z//gbu7ex1GTUT2JufzW3Y3kyUBAQE4d+6crU5HNmaL2Uw6nQ75+fkICwszzGbSf/CEhoaa/UBiJVaqjtyxLfrjCwoKMHToUDtGRkTOQnYyc+LECaP7+poQy5Ytwz333GOruMjGbFVETKfTYcmSJSbfgi19ILESKxER2ZvsZOaee+6BJEkmA/ciIiLwySef2Cwwsi17rH9jDVZiJSIie5OdzFy8eNHovouLC5o1a2a07ADVP9bOZqrJ+JaqHuOoJIqIiBoP2bOZQkJCjG4tW7Y0m8h06dLFbO0Hcgz97JHQ0FCo1WqEhoaajFupyZIH1T3G3OwTVmIlIiJbstkA4MouXboEnU5nr9NTDVQ30LKq8S1hYWGyH6O/HiuxEhGRPdktmSHnU5PxLdY8hpVYiYjInmR3M1HDJWelYf3KxcXFxbLORUREZGtMZsjA2vEtSUlJhnEy5mouckwMERHVJXYzkUHl8S1+fn4QQmDlypVo0aIFlEoldDodtm3bZvbxkiShXbt2HBNDNsUK0kRUHSYzZEQ/vqVy5d7U1FR4eHggPz8fV69eNftYlUqFFStW1FWo1AhUVUHa0qB0Imp87NbNtH79egQEBNjr9GRn5mYpSZIElUqFFi1amH0Mx8mQrVU1W46ISM9mycyNGzewaNEiw/3HH38cnp6etjo91TFLs5QUCgVGjx7N2jFUJ1hBmoisYbNk5vr161i4cKGtTkcOZqmVpbS0FOHh4dUW4COyBTkz7Iio8bJ6zEzlBSYr44rZDYu55Q+EECgsLATA2jFUN6xdhoOIGjerkxlLC0wCMGyv3PVAzqvyzKYWLVrg+PHjKCkpcXRo1IhUVUG6oKDA0eERUT1hdTLj5+eHt99+G4MGDTK7/7fffsOjjz5qs8DI8Sq2vhQUFGDo0KEOjogaI7YCElF1rE5mevTogWvXriEkJMTs/qysLLOtNkRERET2ZHUyM23aNOTl5VncHxwcjLi4OJsERY7B4mREROSMrE5mRo8eXeV+X19fTJo0qdYBkamKA2/tJSkpyajgnb44WXR0NMLDw42ub+9YrKFWqzlGi4iIANi4AvCRI0dw77332vKUhPLkwd7jVby8vODqavxyEEJg2bJlyM3NNdo+cuRIu8ZijYSEBLi7uzs6DCIiqgdk15nJzc01mUVw/PhxPProo+jZs6fNAqO6pVAoZG0nIiKqL6xumbly5QrGjRuHX375BQqFAjNmzMBbb72FadOmYePGjRg9ejR++ukne8baaKnVaiQkJNj1GvPnz0dqaqrJ9nbt2mHJkiUQQqCoqAhA+RpMju7iUavVDr0+ERHVH1YnM/PmzUNhYSFWr16NrVu3YvXq1Th48CB69uyJ1NRUi+v1UO1JkmT3LpXx48ebLU42btw4w7U9PDzsGgMREVFNWJ3MHDhwAFu3bkVERATGjRuHwMBAPPHEE5g9e7Ydw6O6UlVxMiIiovrM6mTmxo0baN26NQDA398fHh4eeOihh+wWGNU9FicjIiJnJGsAsIuLi9G/3dzcbB4QERERkRxWt8wIIRAaGmoY+Jmbm4tu3boZJTgAkJGRYdsIiYiIiKpgdTLD6r5ERERUH1mdzLC6LxEREdVHVo+Z+f7776vcX1ZWhrfeeqvWARERERHJYXUyM3z4cMyYMQP5+fkm+06dOoXw8HCsW7fOpsERERERVcfqZObgwYPYs2cPwsLCcOjQIQB/t8b06NED7du3x6lTp+wWKBEREZE5Vo+Z6dmzJ3799Ve88sorGDBgAJ599llotVpcuXIFX331FcaMGWPPOImIiIjMkrVqtlqtxrvvvoubN2/in//8Jzw9PXHkyBG0b9/eXvERERERVUlW0bzU1FT07dsXP/zwAz744AN07twZ/fv3x44dO+wVHxEREVGVrE5m3n//fYSFhcHf3x8nT57Es88+i0OHDmH27Nl47LHH8OSTTyIrK8uOoRJRY6XVahEdHY2oqChER0dDq9U6OiQiqkckUXGZ5Cr4+fnhvffewxNPPGGy77fffsOkSZOQnp6OP/74w+ZB1kZOTg40Gg2ys7Ph4+Pj6HCIGgQhBAoLC+vkWklJSVixYoXRNkmSMHPmTCxatAgAsGPHDqjV6jqJxxK1Wm2okE5EtSfn89vqZCY9PR1BQUEW95eWlmLp0qV4/fXX5UVrZ0xmiGyvoKAAQ4cOrZNreXl5wdXVdHhfSUkJcnNz6yQGayQkJMDd3d3RYRA1GHI+v63uZqoqkQEAhUJR7xIZInJ+CoVC1nYianxkzWaqyo0bN7B+/Xq88cYbtjolEdVTarUaCQkJdXKt+fPnIzU11WR727ZtDe83KpXK4V08ju7mImrMrO5mqk5ycjK6d++O0tJSW5zOZtjNROTctFotYmNjUfGtSpIkxMTEICIiwoGREZE9yfn8trpl5sSJE1XuP3funLWnIiKyWkREBGJiYrB582akpaUhODgYkZGRTGSIyMDqlhkXFxdIkgRzh+u3S5LElhkiIiKqNbu0zPj5+eHtt9/GoEGDzO7/7bff8Oijj8qLlIiIiKiWrE5mevTogWvXriEkJMTs/qysLLOtNkRERET2ZHUyM23aNOTl5VncHxwcjLi4OJsERURERGQtm81mqq84ZoaIiMj52KVoXnV+//13DBkyxFanIyIiIrKKzZKZ27dvY8+ePbY6HREREZFVbJbMEBERETkCkxkiIiJyakxmiIiIyKlZPTW7W7duVS7klp+fb5OAiIiIiOSwOpkZNWqUHcMgIiIiqhnWmSEiIqJ6p07rzBQXFyM3N7e2pyEiIiKqEVnJTFxcHGbOnIl//etfAICYmBh4e3tDo9HgwQcfxF9//WWXIImIiIgssTqZWbJkCaZPn46zZ89i1qxZeO655xAfH49FixZh2bJlOHv2LF577TV7xkpERERkwuoBwPHx8fj4448xYcIEHDlyBD179sQ333yDsWPHAgA6d+6MadOm2S1QIiIiInOsbplJS0vD/fffDwC499574erqis6dOxv2d+3aFenp6baPkIiIiKgKViczOp0OKpXKcN/NzQ1KpdJw39XVFaWlpbaNjoiIiKgaVnczAcDp06dx/fp1AIAQAmfPnjXMZPrzzz9tHx0RERFRNayuM+Pi4gJJkmDucP12SZLqXesM68wQERE5Hzmf31a3zFy8eLHWgRERERHZmtXJzKeffoq5c+fCw8PDnvEQERERyWL1AOCFCxey0i8RERHVO1YnMw18CSciIiJyUrKWM5AkyV5xEBEREdWIrKnZoaGh1SY0GRkZtQqIiIiISA5ZyczChQuh0WhsdvEDBw7gnXfewdGjR5Geno5t27Zh1KhRhv25ubl45ZVXsH37dvz1119o3bo1Zs2axWUTiIiIyEBWMvPYY4/B39/fZhfPy8tDWFgYpkyZgjFjxpjsnzNnDn744Qd88cUXaNWqFRITE/H888+jefPmGDFihM3iICIiIudldTJjj/EyDz30EB566CGL+3/66SdMmjQJ/fv3BwA8++yzWL9+PX755RcmM0RERASgns9m6t27N3bu3Ik//vgDQgjs3bsX58+fx5AhQyw+pqioCDk5OUY3IiIiarisTmbKysps2sVkjffeew+dOnVCixYt4ObmhmHDhmHt2rXo27evxcfExsZCo9EYbi1btqzDiImIiKiuyZqaXdfee+89aLVa7Ny5E0ePHsXKlSsxffp0fP/99xYfExMTg+zsbMPtypUrdRgxERER1TVZA4DrUkFBAebPn49t27bh4YcfBgB07doVx48fx4oVKzB48GCzj1OpVFCpVHUZKhERETlQvW2Z0el00Ol0cHExDlGhUKCsrMxBUREREVF949CWmdzcXFy4cMFw/+LFizh+/Dj8/PwQHByMfv36Yd68eXB3d0dISAj279+Pzz77DKtWrXJg1ERERFSfSMKBiy7t27cPAwYMMNk+adIkxMfH4/r164iJiUFiYiIyMjIQEhKCZ599Fi+++KLVU8VzcnKg0WiQnZ0NHx8fW/8IREREZAdyPr8dmszUBSYzREREzkfO53e9HTNDREREZA0mM0REROTUmMwQERGRU2MyQ0RERE6NyQwRERE5NSYzRERE5NSYzBAREZFTYzJDRERETo3JDBERETk1JjNERETk1JjMEBERkVNjMkNEREROjckMEREROTUmM0REROTUmMwQERGRU2MyQ0RERE7N1dEBEBHVllarxaZNm5CWlobg4GBERUUhIiLC0WERUR1hywwROTWtVoulS5ciJSUFRUVFSElJQWxsLLRaraNDI6I6wmSGiJzapk2bTLYJIbB582YHRENEjsBkhoicWlpamqztRNTwMJkhIqcWHBwsazsRNTxMZojIqUVFRUGSJKNtkiQhMjLSQRERUV1jMkNETi0iIgIxMTEIDQ2FWq1GaGgoYmJiOJuJqBHh1GwicnoRERFMXogaMbbMEBERkVNjMkNEREROjckMEREROTUmM0REROTUmMwQERGRU2MyQ0RERE6NyQwRERE5NSYzRERE5NSYzBAREZFTYzJDRERETo3JDBERETm1Br82kxACAJCTk+PgSIiIiMha+s9t/ed4VRp8MnP79m0AQMuWLR0cCREREcl1+/ZtaDSaKo+RhDUpjxMrKyvDtWvX4O3tDUmSHB2OU8vJyUHLli1x5coV+Pj4ODocIr4mqV7i69I2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OBH9+vUzdOMMHDgQR44cwWeffYaUlBQsWLAAp06dMpzj559/xtKlS3HkyBGkpaVh69atuHXrFjp27Gj2mjNmzEBOTg4ee+wxHDlyBCkpKfj8888NXX7t2rXD559/jjNnzuDnn3/GE088YVWry4IFC/DVV19hwYIFOHPmDE6ePInly5db/TxX9vzzz+PKlSuYOXMmzp49ix07dmDBggWYM2eOUXekXO3atcORI0eQkJCA8+fP4/XXXzeaaehITGacyKJFi4zeULt3745vvvkGX3/9NTp37ow33ngDixYtqlFXlFwxMTHo168fHnnkETz88MMYNWoU2rRpU+vzjho1CqtXr8aKFStw9913Y/369YiLizOaStkQ7N69G0FBQUa3+++/3+rHBwcHY8uWLdi+fTvCwsLwwQcfYOnSpUbH2Ov10bVrV+zfvx/nz5/HAw88gG7duuGNN95A8+bNDccsWrQIly5dQps2bWTXyFi2bBnGjh2LJ598Et27d8eFCxeQkJBgsdZSREQENmzYgNWrVyMsLAyJiYl47bXXqryGm5sbEhMT4e/vj+HDh6NLly5YtmyZISFftWoVfH190bt3bzz66KMYOnQounfvXm3soaGhSExMRHJyMu677z706tULO3bsgKtrzXr0PTw8kJCQgIyMDISHhyMyMhKDBg3C+++/X6Pz6Y0YMQIvvvgiZsyYgXvuuQc//fQTXn/99Vqd0xwvLy/07NkT7777Lvr27YvOnTvj9ddfxzPPPGP4GSRJwrfffou+ffviqaeeQmhoKB577DFcvny5yoRNkiTs2LEDvr6+6Nu3LwYPHoy77roLGzduNBwzdOhQvP7663jppZcQHh6O27dvY+LEiYb9Pj4+OHDgAIYPH47Q0FC89tprWLlyJR566CGz12zatCl++OEH5Obmol+/fujRowc2bNhg6Jr5+OOPkZmZie7du+PJJ580lBioTv/+/bFp0ybs3LkT99xzDwYOHGjS8irHnXfeiW+//Ra//PILwsLCMG3aNEydOrXav4vq/OMf/8CYMWMwfvx49OzZE3/99Reef/75Wp3TViRRuUORiIiIyImwZYaIiIicGpOZRmzp0qVGUyEr3iw1sxIREdU37GZqxDIyMizO5nB3d8edd95ZxxERERHJx2SGiIiInBq7mYiIiMipMZkhIiIip8ZkhoiIiJwakxmi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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Now we will visualize the data while considering extreme outliers.\n", "# Extreme outliers are calculated by expanding the IQR range to 3 times instead of the usual 1.5 times.\n", "for site in ['FOXA2_umich_acetylproteomics_K274', 'TBL1XR1_umich_acetylproteomics_K102']:\n", " # Convert to numeric and drop NA\n", " clinical_and_acetylation[site] = pd.to_numeric(clinical_and_acetylation[site], errors='coerce')\n", "\n", " # Calculate lower and upper bounds for the specific column\n", " lower_bound, upper_bound = calculate_iqr_and_bounds_extreme(clinical_and_acetylation[site])\n", "\n", " # Create a new dataframe without extreme outliers\n", " clinical_and_acetylation_no_extreme_outliers = clinical_and_acetylation[(clinical_and_acetylation[site] >= lower_bound) & \n", " (clinical_and_acetylation[site] <= upper_bound)]\n", " \n", " # Convert data to list format to make it compatible with t-test\n", " endomList = endom[site].tolist()\n", " serousList = serous[site].tolist()\n", " \n", " # Perform t-test and print results\n", " print(scipy.stats.ttest_ind(endomList, serousList))\n", "\n", " # Create boxplot and stripplot\n", " sns.boxplot(x=clinical_attribute, y=site, data=clinical_and_acetylation_no_extreme_outliers, showfliers=False, \n", " order=[\"Non_Tumor\", \"Endometrioid carcinoma\", \"Serous carcinoma\"])\n", " sns.stripplot(x=clinical_attribute, y=site, data=clinical_and_acetylation_no_extreme_outliers, color='.3', \n", " order=[\"Non_Tumor\", \"Endometrioid carcinoma\", \"Serous carcinoma\"])\n", " plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" } }, "nbformat": 4, "nbformat_minor": 4 }