Skip to content

Instantly share code, notes, and snippets.

@yanofsky
Created August 11, 2022 21:46
Show Gist options
  • Save yanofsky/830b395bfc9e94bb0d91eb11a440b5ef to your computer and use it in GitHub Desktop.
Save yanofsky/830b395bfc9e94bb0d91eb11a440b5ef to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib\n",
"from scipy import stats as st\n",
"from scipy.stats import kruskal\n",
"from scipy.stats import mannwhitneyu\n",
"\n",
"from IPython.display import display, Markdown, Latex\n",
"import itertools\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load the story and traffic data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def words_in_str(word_list, string):\n",
" return list(filter(lambda word: word in string, word_list))\n",
"\n",
"df = (pd.read_json(\"h2-raw.json\")\n",
"\n",
" # combine h2 and h3 lists remove duplicates\n",
" .assign(header_words=lambda x: \n",
" x.apply(lambda row: list(\n",
" set(row.h2_words + row.h3_words)\n",
" ),\n",
" axis=1\n",
" )\n",
" )\n",
"\n",
" # list words from headers that are in the title\n",
" .assign(header_words_in_title=lambda x: \n",
" x.apply(lambda row: words_in_str(row.header_words, row.title), axis=1)\n",
" )\n",
"\n",
" # list words from headers in SEO title\n",
" .assign(header_words_in_seoTitle=lambda x: \n",
" x.apply(lambda row: words_in_str(row.header_words, row.seoTitle), axis=1)\n",
" )\n",
"\n",
" # count the number of title and SEO word matches\n",
" .assign(header_words_in_title_count=lambda x: x.header_words_in_title.str.len())\n",
" .assign(header_words_in_seoTitle_count=lambda x: x.header_words_in_seoTitle.str.len())\n",
"\n",
" .assign(pub_date=lambda x: pd.to_datetime(x.date))\n",
"\n",
" .set_index(\"link\")\n",
"\n",
" .join(\n",
" pd.read_csv(\"normalized_traffic_data.csv\")\n",
" .set_index(\"link\")\n",
" )\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Define the universe of stories to consider"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"column = \"one_month_views\"\n",
"date_limit = (df.pub_date.max() - pd.Timedelta(days=1))\n",
"min_date = pd.datetime(2020,1,1)\n",
"\n",
"universe = (\n",
" df\n",
" # only use stories that have traffic data\n",
" .query(\"one_day_views > 0\")\n",
"\n",
" # only use stories that are old enough for comparison\n",
" .query(\"pub_date < @date_limit\")\n",
"\n",
" # exclude items that are members-only\n",
" .query(\"paywalled != True\")\n",
" .query(\"guides == ''\")\n",
" .query(f\"date > @min_date\")\n",
")\n",
"\n",
"# mask = f\"topics == '{df.topics.unique()[5]}'\"\n",
"# mask = None\n",
"top_traffic_bound = universe[column].quantile(0.95)\n",
"\n",
"universe = (\n",
" universe\n",
" # exclude the top performing 5% of stories \n",
" .query(f\"{column} < {top_traffic_bound}\")\n",
" # .query(\"word_count < 300\")\n",
" # .query(mask)\n",
"\n",
"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4103"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(universe)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Timestamp('2020-01-01 06:00:36')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"universe.date.min()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Define the subsets to compare"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# test for the effect of the number of headers\n",
"num_headers = {\n",
" \"name\": \"Number of headers\",\n",
" \"data\" : pd.concat([\n",
" (\n",
" universe\n",
" .query(\"h2_count == 0 and h3_count == 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"No headers\"\n",
" })\n",
" ),\n",
" (\n",
" universe\n",
" .query(\"h2_count == 1 or h3_count == 1\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"1 header\"\n",
" })\n",
" \n",
" ),\n",
" (\n",
" universe\n",
" .query(\"h2_count == 2 or h3_count == 2\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"2 header\"\n",
" })\n",
" \n",
" ),\n",
" (\n",
" universe\n",
" .query(\"h2_count == 3 or h3_count == 3\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"3 header\"\n",
" })\n",
" \n",
" )\n",
" ])\n",
"}\n",
"\n",
"# test for the effect of just having headers\n",
"headers_exist = {\n",
" \"name\": \"Existence of headers\",\n",
" \"data\": pd.concat([(\n",
" universe\n",
" .query(\"h2_count == 0 and h3_count == 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"No headers\"\n",
" })\n",
" ),\n",
" (\n",
" universe\n",
" .query(\"h2_count > 0 or h3_count > 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"Has headers\"\n",
" })\n",
" )\n",
" ])\n",
"}\n",
"\n",
"headers_contain_keywords = {\n",
" \"name\": \"Headers exist, and contain keywords\",\n",
" \"data\": pd.concat([\n",
" (\n",
" universe\n",
" .query(\"h2_count > 0 or h3_count > 0\")\n",
" .query(\"header_words_in_title_count == 0\")\n",
" .query(\"header_words_in_seoTitle_count == 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"no keywords\"\n",
" })\n",
" ),\n",
" (\n",
" universe\n",
" .query(\"h2_count > 0 or h3_count > 0\")\n",
" .query(\"header_words_in_title_count > 0\")\n",
" .query(\"header_words_in_seoTitle_count == 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"only hed keywords\"\n",
" })\n",
" ),\n",
" (\n",
" universe\n",
" .query(\"h2_count > 0 or h3_count > 0\")\n",
" .query(\"header_words_in_title_count == 0\")\n",
" .query(\"header_words_in_seoTitle_count > 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"only seoHed keywords\"\n",
" })\n",
" ),\n",
" (\n",
" universe\n",
" .query(\"h2_count > 0 or h3_count > 0\")\n",
" .query(\"header_words_in_title_count > 0\")\n",
" .query(\"header_words_in_seoTitle_count > 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"Keywords in both\"\n",
" })\n",
" )\n",
" ])\n",
"}\n",
"\n",
"\n",
"\n",
"to_test = [\n",
" num_headers,\n",
" headers_exist,\n",
" headers_contain_keywords\n",
"]\n",
"\n",
"for i in range(len(to_test)):\n",
" data = to_test[i][\"data\"]\n",
" to_test[i][\"data_as_lists\"] = [data[col].dropna().to_list() for col in data]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Perform a kruskal wallace h test"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"**Number of headers**<br>Statistics=12.97, p=0.005\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"**Existence of headers**<br>Statistics=14.04, p=0.000\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"🚨 **Headers exist, and contain keywords**<br>Statistics=5.42, p=0.144\n"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for t in to_test:\n",
" stat, p = kruskal(*t[\"data_as_lists\"])\n",
" display(Markdown(f'{\"🚨 \" if p>0.05 else \"\"}**{t[\"name\"]}**<br>Statistics={stat:.2f}, p={p:.3f}\\n'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Perform mann whitney u test on each pair "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"## Number of headers"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>p-value</th>\n",
" <th>reject</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>No headers</td>\n",
" <td>1 header</td>\n",
" <td>0.07869</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>No headers</td>\n",
" <td>2 header</td>\n",
" <td>0.00489</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>No headers</td>\n",
" <td>3 header</td>\n",
" <td>0.01784</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1 header</td>\n",
" <td>2 header</td>\n",
" <td>0.69302</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1 header</td>\n",
" <td>3 header</td>\n",
" <td>0.78039</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2 header</td>\n",
" <td>3 header</td>\n",
" <td>0.89517</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B p-value reject\n",
"0 No headers 1 header 0.07869 False\n",
"1 No headers 2 header 0.00489 True\n",
"2 No headers 3 header 0.01784 True\n",
"3 1 header 2 header 0.69302 False\n",
"4 1 header 3 header 0.78039 False\n",
"5 2 header 3 header 0.89517 False"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"## Existence of headers"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>p-value</th>\n",
" <th>reject</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>No headers</td>\n",
" <td>Has headers</td>\n",
" <td>0.00018</td>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B p-value reject\n",
"0 No headers Has headers 0.00018 True"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"## Headers exist, and contain keywords"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"Kruskal p value is too high: 0.144"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def mannwhitneyu_table(group_names , *args ):\n",
" \"\"\"\n",
" Conduct a mann whitney u test on every pair of data subsets\n",
"\n",
" Parameters:\n",
" group_names (list): A list of the subsets' names\n",
" args: All of the subsets' data \n",
"\n",
" Returns:\n",
" (DataFrame): A table showing every permutation of the test, \n",
" the p-value, and a boolean specifying if the null \n",
" hypothesis should be rejected.\n",
" \"\"\"\n",
" results = []\n",
" pairs_list = list(itertools.combinations(args,2))\n",
" names_list = list(itertools.combinations(group_names,2))\n",
" for i in range(len(pairs_list)):\n",
" i_list, j_list = pairs_list[i]\n",
" i_group, j_group = names_list[i]\n",
" if i_group == j_group:\n",
" continue\n",
" stat, p = mannwhitneyu(i_list, j_list, alternative=\"two-sided\")\n",
" results.append({\n",
" \"A\": i_group,\n",
" \"B\": j_group,\n",
" \"p-value\": round(p,5),\n",
" \"reject\": p < 0.05\n",
" })\n",
" result_df = pd.DataFrame(results)\n",
" \n",
" return result_df#.style.apply(lambda x: [\"color: white; font-weight: bold\"] * len(x) if x.reject == True else \"\", axis=1)\n",
"\n",
"for t in to_test:\n",
" display(Markdown(f\"## {t['name']}\"))\n",
" stats, p = kruskal(*t[\"data_as_lists\"])\n",
" if p < 0.05:\n",
" display(mannwhitneyu_table(t[\"data\"].columns, *t[\"data_as_lists\"]))\n",
" else:\n",
" display(Markdown(f\"Kruskal p value is too high: {p:.3f}\"))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"## Number of headers"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.004700240273627675\n"
]
},
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"#T_9dadc_row1_col0,#T_9dadc_row1_col1,#T_9dadc_row1_col2,#T_9dadc_row1_col3{\n",
" background-color: #587800;\n",
" }</style><table id=\"T_9dadc_\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >mean</th> <th class=\"col_heading level0 col1\" >25%</th> <th class=\"col_heading level0 col2\" >50%</th> <th class=\"col_heading level0 col3\" >75%</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_9dadc_level0_row0\" class=\"row_heading level0 row0\" >No headers</th>\n",
" <td id=\"T_9dadc_row0_col0\" class=\"data row0 col0\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row0_col1\" class=\"data row0 col1\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row0_col2\" class=\"data row0 col2\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row0_col3\" class=\"data row0 col3\" >XXXXXX</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9dadc_level0_row1\" class=\"row_heading level0 row1\" >2 header</th>\n",
" <td id=\"T_9dadc_row1_col0\" class=\"data row1 col0\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row1_col1\" class=\"data row1 col1\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row1_col2\" class=\"data row1 col2\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row1_col3\" class=\"data row1 col3\" >XXXXXX</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9dadc_level0_row2\" class=\"row_heading level0 row2\" >change</th>\n",
" <td id=\"T_9dadc_row2_col0\" class=\"data row2 col0\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row2_col1\" class=\"data row2 col1\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row2_col2\" class=\"data row2 col2\" >XXXXXX</td>\n",
" <td id=\"T_9dadc_row2_col3\" class=\"data row2 col3\" >XXXXXX</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x14277f748>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"#T_89e89_row1_col0,#T_89e89_row1_col1,#T_89e89_row1_col2,#T_89e89_row1_col3{\n",
" background-color: #587800;\n",
" }</style><table id=\"T_89e89_\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >mean</th> <th class=\"col_heading level0 col1\" >25%</th> <th class=\"col_heading level0 col2\" >50%</th> <th class=\"col_heading level0 col3\" >75%</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_89e89_level0_row0\" class=\"row_heading level0 row0\" >No headers</th>\n",
" <td id=\"T_89e89_row0_col0\" class=\"data row0 col0\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row0_col1\" class=\"data row0 col1\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row0_col2\" class=\"data row0 col2\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row0_col3\" class=\"data row0 col3\" >XXXXXX</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_89e89_level0_row1\" class=\"row_heading level0 row1\" >3 header</th>\n",
" <td id=\"T_89e89_row1_col0\" class=\"data row1 col0\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row1_col1\" class=\"data row1 col1\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row1_col2\" class=\"data row1 col2\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row1_col3\" class=\"data row1 col3\" >XXXXXX</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_89e89_level0_row2\" class=\"row_heading level0 row2\" >change</th>\n",
" <td id=\"T_89e89_row2_col0\" class=\"data row2 col0\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row2_col1\" class=\"data row2 col1\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row2_col2\" class=\"data row2 col2\" >XXXXXX</td>\n",
" <td id=\"T_89e89_row2_col3\" class=\"data row2 col3\" >XXXXXX</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x141d007b8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"## Existence of headers"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.00017910862295345388\n"
]
},
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"#T_c5328_row1_col0,#T_c5328_row1_col1,#T_c5328_row1_col2,#T_c5328_row1_col3{\n",
" background-color: #587800;\n",
" }</style><table id=\"T_c5328_\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >mean</th> <th class=\"col_heading level0 col1\" >25%</th> <th class=\"col_heading level0 col2\" >50%</th> <th class=\"col_heading level0 col3\" >75%</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_c5328_level0_row0\" class=\"row_heading level0 row0\" >No headers</th>\n",
" <td id=\"T_c5328_row0_col0\" class=\"data row0 col0\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row0_col1\" class=\"data row0 col1\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row0_col2\" class=\"data row0 col2\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row0_col3\" class=\"data row0 col3\" >XXXXXX</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5328_level0_row1\" class=\"row_heading level0 row1\" >Has headers</th>\n",
" <td id=\"T_c5328_row1_col0\" class=\"data row1 col0\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row1_col1\" class=\"data row1 col1\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row1_col2\" class=\"data row1 col2\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row1_col3\" class=\"data row1 col3\" >XXXXXX</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5328_level0_row2\" class=\"row_heading level0 row2\" >change</th>\n",
" <td id=\"T_c5328_row2_col0\" class=\"data row2 col0\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row2_col1\" class=\"data row2 col1\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row2_col2\" class=\"data row2 col2\" >XXXXXX</td>\n",
" <td id=\"T_c5328_row2_col3\" class=\"data row2 col3\" >XXXXXX</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x141d00978>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"## Headers exist, and contain keywords"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"Kruskal p value is too high: 0.144"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def compareResults(t, row):\n",
" \"\"\"\n",
" Create a table for pairwise comparisons of quartiles and display it,\n",
" highlighting the max value in each row\n",
"\n",
" Parameters:\n",
" t (dict): A dictionary with the prepared subset information and data\n",
" row (Series): The row of a mannwhitneyu_table result\n",
"\n",
" Return:\n",
" None\n",
" \"\"\"\n",
" return (\n",
" pd.concat([\n",
" t[\"data\"][row.A].describe(),\n",
" t[\"data\"][row.B].describe(),\n",
" ], axis=1)\n",
" .transpose()\n",
" [[\"mean\", \"25%\", \"50%\", \"75%\"]]\n",
" .transpose()\n",
" .assign(change=lambda x: (x[row.B] - x[row.A]) / x[row.A] * 100)\n",
" .transpose()\n",
" .style.highlight_max(color=\"#587800\", axis=0)\n",
" )\n",
"\n",
"for t in to_test:\n",
" display(Markdown(f\"## {t['name']}\"))\n",
" stats, p = kruskal(*t[\"data_as_lists\"])\n",
" if p < 0.05:\n",
" print(p)\n",
" results = mannwhitneyu_table(t[\"data\"].columns, *t[\"data_as_lists\"])\n",
" results.apply(lambda x: display(compareResults(t, x)) if x.reject == True else None, axis=1)\n",
" else:\n",
" display(Markdown(f\"Kruskal p value is too high: {p:.3f}\"))\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create histograms of data"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def create_histogram(datalist, val):\n",
" return (\n",
" pd.DataFrame(\n",
" pd.np.histogram(\n",
" datalist, \n",
" bins=range(0,75000,5000)\n",
" )\n",
"\n",
" ).transpose()\n",
" .rename(columns={\n",
" 0:\"val\",\n",
" 1:\"bin\"\n",
" })\n",
" .assign(val=lambda x: x.val / len(datalist) * 100)\n",
" .rename(columns={\n",
" \"val\": val\n",
" })\n",
" .assign(bin=lambda x: x.bin.map(lambda n: f\"{round(n):,d}\"))\n",
" .set_index(\"bin\")\n",
" )\n",
"\n",
"for_chart = (\n",
" create_histogram(\n",
" to_test[1][\"data\"][\"No headers\"].dropna().to_list(), \"No headers\"\n",
" )\n",
" .join(create_histogram(\n",
" to_test[1][\"data\"][\"Has headers\"].dropna().to_list(), \"Has headers\"\n",
" ))\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Copy the dat for charting"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"# the difference between the curves\n",
"for_chart.assign(diff=lambda x: x[\"Has headers\"] - x[\"No headers\"])[[\"diff\"]].to_clipboard()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# the curves\n",
"for_chart.to_clipboard()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Randomize data to see range of effect"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"subset = pd.concat([(\n",
" universe\n",
" .query(\"h2_count == 0 and h3_count == 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"No headers\"\n",
" })\n",
" ),\n",
" (\n",
" universe\n",
" .query(\"h2_count > 0 or h3_count > 0\")\n",
" [[column]]\n",
" .rename(columns={\n",
" column: \"Has headers\"\n",
" })\n",
" )\n",
" ])\n",
"\n",
"def simulateRandomSampleRange(frame, data_col, analysis_col, sampleSize, numIterations):\n",
" raw_results = []\n",
"\n",
" # take a sample and describe the analysis column\n",
" for i in range(numIterations):\n",
" raw_results.append(\n",
" frame.sample(sampleSize)\n",
" [data_col]\n",
" .describe()\n",
" )\n",
"\n",
" # describe the joined analysis columns\n",
" summary = pd.concat(raw_results, axis=1).describe().transpose()\n",
" \n",
"\n",
" summaryLow = summary[analysis_col].quantile(0.025)\n",
" summaryHigh = summary[analysis_col].quantile(0.975)\n",
" return (\n",
" # remove the 5% most extreme outcomes\n",
" summary.query(f\"`{analysis_col}` > {summaryLow}\")\n",
" .query(f\"`{analysis_col}` < {summaryHigh}\")\n",
" # get the expected range of 95% of results\n",
" .describe()\n",
" [analysis_col]\n",
" .transpose()[[\"min\",\"max\"]]\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[<AxesSubplot:title={'center':'mean_diff'}>,\n",
" <AxesSubplot:title={'center':'median_diff'}>]], dtype=object)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"263.63625pt\" version=\"1.1\" viewBox=\"0 0 375.2875 263.63625\" width=\"375.2875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-02-19T07:48:24.655567</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 263.63625 \nL 375.2875 263.63625 \nL 375.2875 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 33.2875 239.758125 \nL 178.852717 239.758125 \nL 178.852717 22.318125 \nL 33.2875 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"patch_3\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 39.904101 239.758125 \nL 42.550741 239.758125 \nL 42.550741 239.092255 \nL 39.904101 239.092255 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_4\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 42.550741 239.758125 \nL 45.197381 239.758125 \nL 45.197381 239.758125 \nL 42.550741 239.758125 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_5\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 45.197381 239.758125 \nL 47.844022 239.758125 \nL 47.844022 238.426384 \nL 45.197381 238.426384 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_6\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 47.844022 239.758125 \nL 50.490662 239.758125 \nL 50.490662 237.094643 \nL 47.844022 237.094643 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_7\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 50.490662 239.758125 \nL 53.137302 239.758125 \nL 53.137302 236.428773 \nL 50.490662 236.428773 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_8\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 53.137302 239.758125 \nL 55.783943 239.758125 \nL 55.783943 234.431161 \nL 53.137302 234.431161 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_9\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 55.783943 239.758125 \nL 58.430583 239.758125 \nL 58.430583 231.101809 \nL 55.783943 231.101809 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_10\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 58.430583 239.758125 \nL 61.077223 239.758125 \nL 61.077223 215.786788 \nL 58.430583 215.786788 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_11\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 61.077223 239.758125 \nL 63.723864 239.758125 \nL 63.723864 211.125695 \nL 61.077223 211.125695 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_12\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 63.723864 239.758125 \nL 66.370504 239.758125 \nL 66.370504 196.476545 \nL 63.723864 196.476545 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_13\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 66.370504 239.758125 \nL 69.017144 239.758125 \nL 69.017144 184.490876 \nL 66.370504 184.490876 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_14\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 69.017144 239.758125 \nL 71.663785 239.758125 \nL 71.663785 165.846504 \nL 69.017144 165.846504 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_15\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 71.663785 239.758125 \nL 74.310425 239.758125 \nL 74.310425 140.543426 \nL 71.663785 140.543426 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_16\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 74.310425 239.758125 \nL 76.957065 239.758125 \nL 76.957065 131.88711 \nL 74.310425 131.88711 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_17\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 76.957065 239.758125 \nL 79.603706 239.758125 \nL 79.603706 115.906219 \nL 76.957065 115.906219 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_18\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 79.603706 239.758125 \nL 82.250346 239.758125 \nL 82.250346 77.285732 \nL 79.603706 77.285732 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_19\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 82.250346 239.758125 \nL 84.896986 239.758125 \nL 84.896986 81.280955 \nL 82.250346 81.280955 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_20\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 84.896986 239.758125 \nL 87.543626 239.758125 \nL 87.543626 59.9731 \nL 84.896986 59.9731 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_21\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 87.543626 239.758125 \nL 90.190267 239.758125 \nL 90.190267 46.65569 \nL 87.543626 46.65569 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_22\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 90.190267 239.758125 \nL 92.836907 239.758125 \nL 92.836907 49.985043 \nL 90.190267 49.985043 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_23\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 92.836907 239.758125 \nL 95.483547 239.758125 \nL 95.483547 32.672411 \nL 92.836907 32.672411 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_24\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 95.483547 239.758125 \nL 98.130188 239.758125 \nL 98.130188 37.333504 \nL 95.483547 37.333504 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_25\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 98.130188 239.758125 \nL 100.776828 239.758125 \nL 100.776828 54.646136 \nL 98.130188 54.646136 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_26\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 100.776828 239.758125 \nL 103.423468 239.758125 \nL 103.423468 38.665245 \nL 100.776828 38.665245 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_27\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 103.423468 239.758125 \nL 106.070109 239.758125 \nL 106.070109 81.946825 \nL 103.423468 81.946825 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_28\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 106.070109 239.758125 \nL 108.716749 239.758125 \nL 108.716749 93.932493 \nL 106.070109 93.932493 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_29\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 108.716749 239.758125 \nL 111.363389 239.758125 \nL 111.363389 104.586421 \nL 108.716749 104.586421 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_30\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 111.363389 239.758125 \nL 114.01003 239.758125 \nL 114.01003 121.899053 \nL 111.363389 121.899053 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_31\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 114.01003 239.758125 \nL 116.65667 239.758125 \nL 116.65667 140.543426 \nL 114.01003 140.543426 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_32\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 116.65667 239.758125 \nL 119.30331 239.758125 \nL 119.30331 151.197353 \nL 116.65667 151.197353 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_33\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 119.30331 239.758125 \nL 121.949951 239.758125 \nL 121.949951 157.856058 \nL 119.30331 157.856058 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_34\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 121.949951 239.758125 \nL 124.596591 239.758125 \nL 124.596591 174.50282 \nL 121.949951 174.50282 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_35\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 124.596591 239.758125 \nL 127.243231 239.758125 \nL 127.243231 196.476545 \nL 124.596591 196.476545 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_36\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 127.243231 239.758125 \nL 129.889872 239.758125 \nL 129.889872 201.137638 \nL 127.243231 201.137638 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_37\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 129.889872 239.758125 \nL 132.536512 239.758125 \nL 132.536512 211.125695 \nL 129.889872 211.125695 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_38\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 132.536512 239.758125 \nL 135.183152 239.758125 \nL 135.183152 221.779622 \nL 132.536512 221.779622 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_39\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 135.183152 239.758125 \nL 137.829792 239.758125 \nL 137.829792 223.111363 \nL 135.183152 223.111363 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_40\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 137.829792 239.758125 \nL 140.476433 239.758125 \nL 140.476433 230.435939 \nL 137.829792 230.435939 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_41\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 140.476433 239.758125 \nL 143.123073 239.758125 \nL 143.123073 229.104198 \nL 140.476433 229.104198 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_42\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 143.123073 239.758125 \nL 145.769713 239.758125 \nL 145.769713 239.758125 \nL 143.123073 239.758125 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_43\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 145.769713 239.758125 \nL 148.416354 239.758125 \nL 148.416354 237.760514 \nL 145.769713 237.760514 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_44\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 148.416354 239.758125 \nL 151.062994 239.758125 \nL 151.062994 236.428773 \nL 148.416354 236.428773 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_45\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 151.062994 239.758125 \nL 153.709634 239.758125 \nL 153.709634 235.097032 \nL 151.062994 235.097032 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_46\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 153.709634 239.758125 \nL 156.356275 239.758125 \nL 156.356275 237.760514 \nL 153.709634 237.760514 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_47\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 156.356275 239.758125 \nL 159.002915 239.758125 \nL 159.002915 239.092255 \nL 156.356275 239.092255 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_48\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 159.002915 239.758125 \nL 161.649555 239.758125 \nL 161.649555 238.426384 \nL 159.002915 238.426384 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_49\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 161.649555 239.758125 \nL 164.296196 239.758125 \nL 164.296196 239.758125 \nL 161.649555 239.758125 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_50\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 164.296196 239.758125 \nL 166.942836 239.758125 \nL 166.942836 239.092255 \nL 164.296196 239.092255 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_51\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 166.942836 239.758125 \nL 169.589476 239.758125 \nL 169.589476 239.758125 \nL 166.942836 239.758125 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_52\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 169.589476 239.758125 \nL 172.236117 239.758125 \nL 172.236117 239.092255 \nL 169.589476 239.092255 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 64.663139 239.758125 \nL 64.663139 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m006533ea4c\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"64.663139\" xlink:href=\"#m006533ea4c\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- 0 -->\n <g transform=\"translate(61.481889 254.356563)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 31.78125 66.40625 \nQ 24.171875 66.40625 20.328125 58.90625 \nQ 16.5 51.421875 16.5 36.375 \nQ 16.5 21.390625 20.328125 13.890625 \nQ 24.171875 6.390625 31.78125 6.390625 \nQ 39.453125 6.390625 43.28125 13.890625 \nQ 47.125 21.390625 47.125 36.375 \nQ 47.125 51.421875 43.28125 58.90625 \nQ 39.453125 66.40625 31.78125 66.40625 \nz\nM 31.78125 74.21875 \nQ 44.046875 74.21875 50.515625 64.515625 \nQ 56.984375 54.828125 56.984375 36.375 \nQ 56.984375 17.96875 50.515625 8.265625 \nQ 44.046875 -1.421875 31.78125 -1.421875 \nQ 19.53125 -1.421875 13.0625 8.265625 \nQ 6.59375 17.96875 6.59375 36.375 \nQ 6.59375 54.828125 13.0625 64.515625 \nQ 19.53125 74.21875 31.78125 74.21875 \nz\n\" id=\"DejaVuSans-48\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 104.31755 239.758125 \nL 104.31755 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"104.31755\" xlink:href=\"#m006533ea4c\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_2\">\n <!-- 20 -->\n <g transform=\"translate(97.95505 254.356563)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 19.1875 8.296875 \nL 53.609375 8.296875 \nL 53.609375 0 \nL 7.328125 0 \nL 7.328125 8.296875 \nQ 12.9375 14.109375 22.625 23.890625 \nQ 32.328125 33.6875 34.8125 36.53125 \nQ 39.546875 41.84375 41.421875 45.53125 \nQ 43.3125 49.21875 43.3125 52.78125 \nQ 43.3125 58.59375 39.234375 62.25 \nQ 35.15625 65.921875 28.609375 65.921875 \nQ 23.96875 65.921875 18.8125 64.3125 \nQ 13.671875 62.703125 7.8125 59.421875 \nL 7.8125 69.390625 \nQ 13.765625 71.78125 18.9375 73 \nQ 24.125 74.21875 28.421875 74.21875 \nQ 39.75 74.21875 46.484375 68.546875 \nQ 53.21875 62.890625 53.21875 53.421875 \nQ 53.21875 48.921875 51.53125 44.890625 \nQ 49.859375 40.875 45.40625 35.40625 \nQ 44.1875 33.984375 37.640625 27.21875 \nQ 31.109375 20.453125 19.1875 8.296875 \nz\n\" id=\"DejaVuSans-50\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_3\">\n <g id=\"line2d_5\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 143.971961 239.758125 \nL 143.971961 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_6\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"143.971961\" xlink:href=\"#m006533ea4c\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_3\">\n <!-- 40 -->\n <g transform=\"translate(137.609461 254.356563)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 37.796875 64.3125 \nL 12.890625 25.390625 \nL 37.796875 25.390625 \nz\nM 35.203125 72.90625 \nL 47.609375 72.90625 \nL 47.609375 25.390625 \nL 58.015625 25.390625 \nL 58.015625 17.1875 \nL 47.609375 17.1875 \nL 47.609375 0 \nL 37.796875 0 \nL 37.796875 17.1875 \nL 4.890625 17.1875 \nL 4.890625 26.703125 \nz\n\" id=\"DejaVuSans-52\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-52\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_2\">\n <g id=\"ytick_1\">\n <g id=\"line2d_7\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 33.2875 239.758125 \nL 178.852717 239.758125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_8\">\n <defs>\n <path d=\"M 0 0 \nL -3.5 0 \n\" id=\"m05027d1bcc\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m05027d1bcc\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_4\">\n <!-- 0 -->\n <g transform=\"translate(19.925 243.557344)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_2\">\n <g id=\"line2d_9\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 33.2875 206.464602 \nL 178.852717 206.464602 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_10\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m05027d1bcc\" y=\"206.464602\"/>\n </g>\n </g>\n <g id=\"text_5\">\n <!-- 50 -->\n <g transform=\"translate(13.5625 210.263821)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 10.796875 72.90625 \nL 49.515625 72.90625 \nL 49.515625 64.59375 \nL 19.828125 64.59375 \nL 19.828125 46.734375 \nQ 21.96875 47.46875 24.109375 47.828125 \nQ 26.265625 48.1875 28.421875 48.1875 \nQ 40.625 48.1875 47.75 41.5 \nQ 54.890625 34.8125 54.890625 23.390625 \nQ 54.890625 11.625 47.5625 5.09375 \nQ 40.234375 -1.421875 26.90625 -1.421875 \nQ 22.3125 -1.421875 17.546875 -0.640625 \nQ 12.796875 0.140625 7.71875 1.703125 \nL 7.71875 11.625 \nQ 12.109375 9.234375 16.796875 8.0625 \nQ 21.484375 6.890625 26.703125 6.890625 \nQ 35.15625 6.890625 40.078125 11.328125 \nQ 45.015625 15.765625 45.015625 23.390625 \nQ 45.015625 31 40.078125 35.4375 \nQ 35.15625 39.890625 26.703125 39.890625 \nQ 22.75 39.890625 18.8125 39.015625 \nQ 14.890625 38.140625 10.796875 36.28125 \nz\n\" id=\"DejaVuSans-53\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_3\">\n <g id=\"line2d_11\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 33.2875 173.171079 \nL 178.852717 173.171079 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_12\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m05027d1bcc\" y=\"173.171079\"/>\n </g>\n </g>\n <g id=\"text_6\">\n <!-- 100 -->\n <g transform=\"translate(7.2 176.970297)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 12.40625 8.296875 \nL 28.515625 8.296875 \nL 28.515625 63.921875 \nL 10.984375 60.40625 \nL 10.984375 69.390625 \nL 28.421875 72.90625 \nL 38.28125 72.90625 \nL 38.28125 8.296875 \nL 54.390625 8.296875 \nL 54.390625 0 \nL 12.40625 0 \nz\n\" id=\"DejaVuSans-49\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_4\">\n <g id=\"line2d_13\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 33.2875 139.877555 \nL 178.852717 139.877555 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_14\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m05027d1bcc\" y=\"139.877555\"/>\n </g>\n </g>\n <g id=\"text_7\">\n <!-- 150 -->\n <g transform=\"translate(7.2 143.676774)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_5\">\n <g id=\"line2d_15\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 33.2875 106.584032 \nL 178.852717 106.584032 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_16\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m05027d1bcc\" y=\"106.584032\"/>\n </g>\n </g>\n <g id=\"text_8\">\n <!-- 200 -->\n <g transform=\"translate(7.2 110.383251)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_6\">\n <g id=\"line2d_17\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 33.2875 73.290509 \nL 178.852717 73.290509 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_18\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m05027d1bcc\" y=\"73.290509\"/>\n </g>\n </g>\n <g id=\"text_9\">\n <!-- 250 -->\n <g transform=\"translate(7.2 77.089728)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_7\">\n <g id=\"line2d_19\">\n <path clip-path=\"url(#p8a96dbf6d4)\" d=\"M 33.2875 39.996986 \nL 178.852717 39.996986 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_20\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m05027d1bcc\" y=\"39.996986\"/>\n </g>\n </g>\n <g id=\"text_10\">\n <!-- 300 -->\n <g transform=\"translate(7.2 43.796205)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 40.578125 39.3125 \nQ 47.65625 37.796875 51.625 33 \nQ 55.609375 28.21875 55.609375 21.1875 \nQ 55.609375 10.40625 48.1875 4.484375 \nQ 40.765625 -1.421875 27.09375 -1.421875 \nQ 22.515625 -1.421875 17.65625 -0.515625 \nQ 12.796875 0.390625 7.625 2.203125 \nL 7.625 11.71875 \nQ 11.71875 9.328125 16.59375 8.109375 \nQ 21.484375 6.890625 26.8125 6.890625 \nQ 36.078125 6.890625 40.9375 10.546875 \nQ 45.796875 14.203125 45.796875 21.1875 \nQ 45.796875 27.640625 41.28125 31.265625 \nQ 36.765625 34.90625 28.71875 34.90625 \nL 20.21875 34.90625 \nL 20.21875 43.015625 \nL 29.109375 43.015625 \nQ 36.375 43.015625 40.234375 45.921875 \nQ 44.09375 48.828125 44.09375 54.296875 \nQ 44.09375 59.90625 40.109375 62.90625 \nQ 36.140625 65.921875 28.71875 65.921875 \nQ 24.65625 65.921875 20.015625 65.03125 \nQ 15.375 64.15625 9.8125 62.3125 \nL 9.8125 71.09375 \nQ 15.4375 72.65625 20.34375 73.4375 \nQ 25.25 74.21875 29.59375 74.21875 \nQ 40.828125 74.21875 47.359375 69.109375 \nQ 53.90625 64.015625 53.90625 55.328125 \nQ 53.90625 49.265625 50.4375 45.09375 \nQ 46.96875 40.921875 40.578125 39.3125 \nz\n\" id=\"DejaVuSans-51\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-51\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"patch_53\">\n <path d=\"M 33.2875 239.758125 \nL 33.2875 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"patch_54\">\n <path d=\"M 178.852717 239.758125 \nL 178.852717 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"patch_55\">\n <path d=\"M 33.2875 239.758125 \nL 178.852717 239.758125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"patch_56\">\n <path d=\"M 33.2875 22.318125 \nL 178.852717 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"text_11\">\n <!-- mean_diff -->\n <g transform=\"translate(76.354171 16.318125)scale(0.12 -0.12)\">\n <defs>\n <path d=\"M 52 44.1875 \nQ 55.375 50.25 60.0625 53.125 \nQ 64.75 56 71.09375 56 \nQ 79.640625 56 84.28125 50.015625 \nQ 88.921875 44.046875 88.921875 33.015625 \nL 88.921875 0 \nL 79.890625 0 \nL 79.890625 32.71875 \nQ 79.890625 40.578125 77.09375 44.375 \nQ 74.3125 48.1875 68.609375 48.1875 \nQ 61.625 48.1875 57.5625 43.546875 \nQ 53.515625 38.921875 53.515625 30.90625 \nL 53.515625 0 \nL 44.484375 0 \nL 44.484375 32.71875 \nQ 44.484375 40.625 41.703125 44.40625 \nQ 38.921875 48.1875 33.109375 48.1875 \nQ 26.21875 48.1875 22.15625 43.53125 \nQ 18.109375 38.875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 21.1875 51.21875 25.484375 53.609375 \nQ 29.78125 56 35.6875 56 \nQ 41.65625 56 45.828125 52.96875 \nQ 50 49.953125 52 44.1875 \nz\n\" id=\"DejaVuSans-109\"/>\n <path d=\"M 56.203125 29.59375 \nL 56.203125 25.203125 \nL 14.890625 25.203125 \nQ 15.484375 15.921875 20.484375 11.0625 \nQ 25.484375 6.203125 34.421875 6.203125 \nQ 39.59375 6.203125 44.453125 7.46875 \nQ 49.3125 8.734375 54.109375 11.28125 \nL 54.109375 2.78125 \nQ 49.265625 0.734375 44.1875 -0.34375 \nQ 39.109375 -1.421875 33.890625 -1.421875 \nQ 20.796875 -1.421875 13.15625 6.1875 \nQ 5.515625 13.8125 5.515625 26.8125 \nQ 5.515625 40.234375 12.765625 48.109375 \nQ 20.015625 56 32.328125 56 \nQ 43.359375 56 49.78125 48.890625 \nQ 56.203125 41.796875 56.203125 29.59375 \nz\nM 47.21875 32.234375 \nQ 47.125 39.59375 43.09375 43.984375 \nQ 39.0625 48.390625 32.421875 48.390625 \nQ 24.90625 48.390625 20.390625 44.140625 \nQ 15.875 39.890625 15.1875 32.171875 \nz\n\" id=\"DejaVuSans-101\"/>\n <path d=\"M 34.28125 27.484375 \nQ 23.390625 27.484375 19.1875 25 \nQ 14.984375 22.515625 14.984375 16.5 \nQ 14.984375 11.71875 18.140625 8.90625 \nQ 21.296875 6.109375 26.703125 6.109375 \nQ 34.1875 6.109375 38.703125 11.40625 \nQ 43.21875 16.703125 43.21875 25.484375 \nL 43.21875 27.484375 \nz\nM 52.203125 31.203125 \nL 52.203125 0 \nL 43.21875 0 \nL 43.21875 8.296875 \nQ 40.140625 3.328125 35.546875 0.953125 \nQ 30.953125 -1.421875 24.3125 -1.421875 \nQ 15.921875 -1.421875 10.953125 3.296875 \nQ 6 8.015625 6 15.921875 \nQ 6 25.140625 12.171875 29.828125 \nQ 18.359375 34.515625 30.609375 34.515625 \nL 43.21875 34.515625 \nL 43.21875 35.40625 \nQ 43.21875 41.609375 39.140625 45 \nQ 35.0625 48.390625 27.6875 48.390625 \nQ 23 48.390625 18.546875 47.265625 \nQ 14.109375 46.140625 10.015625 43.890625 \nL 10.015625 52.203125 \nQ 14.9375 54.109375 19.578125 55.046875 \nQ 24.21875 56 28.609375 56 \nQ 40.484375 56 46.34375 49.84375 \nQ 52.203125 43.703125 52.203125 31.203125 \nz\n\" id=\"DejaVuSans-97\"/>\n <path d=\"M 54.890625 33.015625 \nL 54.890625 0 \nL 45.90625 0 \nL 45.90625 32.71875 \nQ 45.90625 40.484375 42.875 44.328125 \nQ 39.84375 48.1875 33.796875 48.1875 \nQ 26.515625 48.1875 22.3125 43.546875 \nQ 18.109375 38.921875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 21.34375 51.125 25.703125 53.5625 \nQ 30.078125 56 35.796875 56 \nQ 45.21875 56 50.046875 50.171875 \nQ 54.890625 44.34375 54.890625 33.015625 \nz\n\" id=\"DejaVuSans-110\"/>\n <path d=\"M 50.984375 -16.609375 \nL 50.984375 -23.578125 \nL -0.984375 -23.578125 \nL -0.984375 -16.609375 \nz\n\" id=\"DejaVuSans-95\"/>\n <path d=\"M 45.40625 46.390625 \nL 45.40625 75.984375 \nL 54.390625 75.984375 \nL 54.390625 0 \nL 45.40625 0 \nL 45.40625 8.203125 \nQ 42.578125 3.328125 38.25 0.953125 \nQ 33.9375 -1.421875 27.875 -1.421875 \nQ 17.96875 -1.421875 11.734375 6.484375 \nQ 5.515625 14.40625 5.515625 27.296875 \nQ 5.515625 40.1875 11.734375 48.09375 \nQ 17.96875 56 27.875 56 \nQ 33.9375 56 38.25 53.625 \nQ 42.578125 51.265625 45.40625 46.390625 \nz\nM 14.796875 27.296875 \nQ 14.796875 17.390625 18.875 11.75 \nQ 22.953125 6.109375 30.078125 6.109375 \nQ 37.203125 6.109375 41.296875 11.75 \nQ 45.40625 17.390625 45.40625 27.296875 \nQ 45.40625 37.203125 41.296875 42.84375 \nQ 37.203125 48.484375 30.078125 48.484375 \nQ 22.953125 48.484375 18.875 42.84375 \nQ 14.796875 37.203125 14.796875 27.296875 \nz\n\" id=\"DejaVuSans-100\"/>\n <path d=\"M 9.421875 54.6875 \nL 18.40625 54.6875 \nL 18.40625 0 \nL 9.421875 0 \nz\nM 9.421875 75.984375 \nL 18.40625 75.984375 \nL 18.40625 64.59375 \nL 9.421875 64.59375 \nz\n\" id=\"DejaVuSans-105\"/>\n <path d=\"M 37.109375 75.984375 \nL 37.109375 68.5 \nL 28.515625 68.5 \nQ 23.6875 68.5 21.796875 66.546875 \nQ 19.921875 64.59375 19.921875 59.515625 \nL 19.921875 54.6875 \nL 34.71875 54.6875 \nL 34.71875 47.703125 \nL 19.921875 47.703125 \nL 19.921875 0 \nL 10.890625 0 \nL 10.890625 47.703125 \nL 2.296875 47.703125 \nL 2.296875 54.6875 \nL 10.890625 54.6875 \nL 10.890625 58.5 \nQ 10.890625 67.625 15.140625 71.796875 \nQ 19.390625 75.984375 28.609375 75.984375 \nz\n\" id=\"DejaVuSans-102\"/>\n </defs>\n <use xlink:href=\"#DejaVuSans-109\"/>\n <use x=\"97.412109\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"158.935547\" xlink:href=\"#DejaVuSans-97\"/>\n <use x=\"220.214844\" xlink:href=\"#DejaVuSans-110\"/>\n <use x=\"283.59375\" xlink:href=\"#DejaVuSans-95\"/>\n <use x=\"333.59375\" xlink:href=\"#DejaVuSans-100\"/>\n <use x=\"397.070312\" xlink:href=\"#DejaVuSans-105\"/>\n <use x=\"424.853516\" xlink:href=\"#DejaVuSans-102\"/>\n <use x=\"460.058594\" xlink:href=\"#DejaVuSans-102\"/>\n </g>\n </g>\n </g>\n <g id=\"axes_2\">\n <g id=\"patch_57\">\n <path d=\"M 222.522283 239.758125 \nL 368.0875 239.758125 \nL 368.0875 22.318125 \nL 222.522283 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"patch_58\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 229.138883 239.758125 \nL 231.785524 239.758125 \nL 231.785524 237.547245 \nL 229.138883 237.547245 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_59\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 231.785524 239.758125 \nL 234.432164 239.758125 \nL 234.432164 239.021165 \nL 231.785524 239.021165 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_60\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 234.432164 239.758125 \nL 237.078804 239.758125 \nL 237.078804 232.388527 \nL 234.432164 232.388527 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_61\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 237.078804 239.758125 \nL 239.725445 239.758125 \nL 239.725445 235.336366 \nL 237.078804 235.336366 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_62\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 239.725445 239.758125 \nL 242.372085 239.758125 \nL 242.372085 228.703727 \nL 239.725445 228.703727 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_63\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 242.372085 239.758125 \nL 245.018725 239.758125 \nL 245.018725 229.440687 \nL 242.372085 229.440687 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_64\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 245.018725 239.758125 \nL 247.665366 239.758125 \nL 247.665366 219.860209 \nL 245.018725 219.860209 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_65\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 247.665366 239.758125 \nL 250.312006 239.758125 \nL 250.312006 200.699254 \nL 247.665366 200.699254 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_66\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 250.312006 239.758125 \nL 252.958646 239.758125 \nL 252.958646 189.644856 \nL 250.312006 189.644856 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_67\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 252.958646 239.758125 \nL 255.605287 239.758125 \nL 255.605287 188.907896 \nL 252.958646 188.907896 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_68\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 255.605287 239.758125 \nL 258.251927 239.758125 \nL 258.251927 163.851262 \nL 255.605287 163.851262 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_69\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 258.251927 239.758125 \nL 260.898567 239.758125 \nL 260.898567 138.057667 \nL 258.251927 138.057667 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_70\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 260.898567 239.758125 \nL 263.545208 239.758125 \nL 263.545208 134.372868 \nL 260.898567 134.372868 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_71\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 263.545208 239.758125 \nL 266.191848 239.758125 \nL 266.191848 93.103117 \nL 263.545208 93.103117 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_72\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 266.191848 239.758125 \nL 268.838488 239.758125 \nL 268.838488 84.996559 \nL 266.191848 84.996559 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_73\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 268.838488 239.758125 \nL 271.485128 239.758125 \nL 271.485128 70.257362 \nL 268.838488 70.257362 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_74\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 271.485128 239.758125 \nL 274.131769 239.758125 \nL 274.131769 46.674648 \nL 271.485128 46.674648 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_75\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 274.131769 239.758125 \nL 276.778409 239.758125 \nL 276.778409 45.200728 \nL 274.131769 45.200728 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_76\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 276.778409 239.758125 \nL 279.425049 239.758125 \nL 279.425049 37.83113 \nL 276.778409 37.83113 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_77\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 279.425049 239.758125 \nL 282.07169 239.758125 \nL 282.07169 40.042009 \nL 279.425049 40.042009 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_78\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 282.07169 239.758125 \nL 284.71833 239.758125 \nL 284.71833 52.570326 \nL 282.07169 52.570326 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_79\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 284.71833 239.758125 \nL 287.36497 239.758125 \nL 287.36497 32.672411 \nL 284.71833 32.672411 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_80\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 287.36497 239.758125 \nL 290.011611 239.758125 \nL 290.011611 51.833366 \nL 287.36497 51.833366 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_81\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 290.011611 239.758125 \nL 292.658251 239.758125 \nL 292.658251 64.361684 \nL 290.011611 64.361684 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_82\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 292.658251 239.758125 \nL 295.304891 239.758125 \nL 295.304891 68.046483 \nL 292.658251 68.046483 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_83\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 295.304891 239.758125 \nL 297.951532 239.758125 \nL 297.951532 87.944399 \nL 295.304891 87.944399 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_84\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 297.951532 239.758125 \nL 300.598172 239.758125 \nL 300.598172 104.157515 \nL 297.951532 104.157515 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_85\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 300.598172 239.758125 \nL 303.244812 239.758125 \nL 303.244812 82.78568 \nL 300.598172 82.78568 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_86\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 303.244812 239.758125 \nL 305.891453 239.758125 \nL 305.891453 122.581511 \nL 303.244812 122.581511 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_87\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 305.891453 239.758125 \nL 308.538093 239.758125 \nL 308.538093 159.429503 \nL 305.891453 159.429503 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_88\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 308.538093 239.758125 \nL 311.184733 239.758125 \nL 311.184733 167.536061 \nL 308.538093 167.536061 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_89\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 311.184733 239.758125 \nL 313.831374 239.758125 \nL 313.831374 173.43174 \nL 311.184733 173.43174 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_90\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 313.831374 239.758125 \nL 316.478014 239.758125 \nL 316.478014 188.907896 \nL 313.831374 188.907896 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_91\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 316.478014 239.758125 \nL 319.124654 239.758125 \nL 319.124654 198.488374 \nL 316.478014 198.488374 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_92\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 319.124654 239.758125 \nL 321.771294 239.758125 \nL 321.771294 199.225334 \nL 319.124654 199.225334 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_93\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 321.771294 239.758125 \nL 324.417935 239.758125 \nL 324.417935 204.384053 \nL 321.771294 204.384053 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_94\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 324.417935 239.758125 \nL 327.064575 239.758125 \nL 327.064575 215.43845 \nL 324.417935 215.43845 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_95\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 327.064575 239.758125 \nL 329.711215 239.758125 \nL 329.711215 229.440687 \nL 327.064575 229.440687 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_96\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 329.711215 239.758125 \nL 332.357856 239.758125 \nL 332.357856 230.914607 \nL 329.711215 230.914607 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_97\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 332.357856 239.758125 \nL 335.004496 239.758125 \nL 335.004496 230.914607 \nL 332.357856 230.914607 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_98\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 335.004496 239.758125 \nL 337.651136 239.758125 \nL 337.651136 232.388527 \nL 335.004496 232.388527 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_99\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 337.651136 239.758125 \nL 340.297777 239.758125 \nL 340.297777 239.021165 \nL 337.651136 239.021165 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_100\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 340.297777 239.758125 \nL 342.944417 239.758125 \nL 342.944417 236.810286 \nL 340.297777 236.810286 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_101\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 342.944417 239.758125 \nL 345.591057 239.758125 \nL 345.591057 239.758125 \nL 342.944417 239.758125 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_102\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 345.591057 239.758125 \nL 348.237698 239.758125 \nL 348.237698 238.284205 \nL 345.591057 238.284205 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_103\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 348.237698 239.758125 \nL 350.884338 239.758125 \nL 350.884338 239.758125 \nL 348.237698 239.758125 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_104\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 350.884338 239.758125 \nL 353.530978 239.758125 \nL 353.530978 239.021165 \nL 350.884338 239.021165 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_105\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 353.530978 239.758125 \nL 356.177619 239.758125 \nL 356.177619 238.284205 \nL 353.530978 238.284205 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_106\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 356.177619 239.758125 \nL 358.824259 239.758125 \nL 358.824259 239.758125 \nL 356.177619 239.758125 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_107\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 358.824259 239.758125 \nL 361.470899 239.758125 \nL 361.470899 239.021165 \nL 358.824259 239.021165 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"matplotlib.axis_3\">\n <g id=\"xtick_4\">\n <g id=\"line2d_21\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 259.473001 239.758125 \nL 259.473001 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_22\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"259.473001\" xlink:href=\"#m006533ea4c\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_12\">\n <!-- 0 -->\n <g transform=\"translate(256.291751 254.356563)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_5\">\n <g id=\"line2d_23\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 298.047185 239.758125 \nL 298.047185 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_24\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"298.047185\" xlink:href=\"#m006533ea4c\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_13\">\n <!-- 25 -->\n <g transform=\"translate(291.684685 254.356563)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_6\">\n <g id=\"line2d_25\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 336.621369 239.758125 \nL 336.621369 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_26\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"336.621369\" xlink:href=\"#m006533ea4c\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_14\">\n <!-- 50 -->\n <g transform=\"translate(330.258869 254.356563)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"matplotlib.axis_4\">\n <g id=\"ytick_8\">\n <g id=\"line2d_27\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 222.522283 239.758125 \nL 368.0875 239.758125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_28\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"222.522283\" xlink:href=\"#m05027d1bcc\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_15\">\n <!-- 0 -->\n <g transform=\"translate(209.159783 243.557344)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_9\">\n <g id=\"line2d_29\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 222.522283 202.910133 \nL 368.0875 202.910133 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_30\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"222.522283\" xlink:href=\"#m05027d1bcc\" y=\"202.910133\"/>\n </g>\n </g>\n <g id=\"text_16\">\n <!-- 50 -->\n <g transform=\"translate(202.797283 206.709352)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_10\">\n <g id=\"line2d_31\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 222.522283 166.062141 \nL 368.0875 166.062141 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_32\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"222.522283\" xlink:href=\"#m05027d1bcc\" y=\"166.062141\"/>\n </g>\n </g>\n <g id=\"text_17\">\n <!-- 100 -->\n <g transform=\"translate(196.434783 169.86136)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_11\">\n <g id=\"line2d_33\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 222.522283 129.214149 \nL 368.0875 129.214149 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_34\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"222.522283\" xlink:href=\"#m05027d1bcc\" y=\"129.214149\"/>\n </g>\n </g>\n <g id=\"text_18\">\n <!-- 150 -->\n <g transform=\"translate(196.434783 133.013368)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-49\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_12\">\n <g id=\"line2d_35\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 222.522283 92.366158 \nL 368.0875 92.366158 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_36\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"222.522283\" xlink:href=\"#m05027d1bcc\" y=\"92.366158\"/>\n </g>\n </g>\n <g id=\"text_19\">\n <!-- 200 -->\n <g transform=\"translate(196.434783 96.165376)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n <g id=\"ytick_13\">\n <g id=\"line2d_37\">\n <path clip-path=\"url(#pa2840f6eb9)\" d=\"M 222.522283 55.518166 \nL 368.0875 55.518166 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_38\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"222.522283\" xlink:href=\"#m05027d1bcc\" y=\"55.518166\"/>\n </g>\n </g>\n <g id=\"text_20\">\n <!-- 250 -->\n <g transform=\"translate(196.434783 59.317384)scale(0.1 -0.1)\">\n <use xlink:href=\"#DejaVuSans-50\"/>\n <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\n <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\n </g>\n </g>\n </g>\n </g>\n <g id=\"patch_108\">\n <path d=\"M 222.522283 239.758125 \nL 222.522283 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"patch_109\">\n <path d=\"M 368.0875 239.758125 \nL 368.0875 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"patch_110\">\n <path d=\"M 222.522283 239.758125 \nL 368.0875 239.758125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"patch_111\">\n <path d=\"M 222.522283 22.318125 \nL 368.0875 22.318125 \n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n </g>\n <g id=\"text_21\">\n <!-- median_diff -->\n <g transform=\"translate(260.113016 16.318125)scale(0.12 -0.12)\">\n <use xlink:href=\"#DejaVuSans-109\"/>\n <use x=\"97.412109\" xlink:href=\"#DejaVuSans-101\"/>\n <use x=\"158.935547\" xlink:href=\"#DejaVuSans-100\"/>\n <use x=\"222.412109\" xlink:href=\"#DejaVuSans-105\"/>\n <use x=\"250.195312\" xlink:href=\"#DejaVuSans-97\"/>\n <use x=\"311.474609\" xlink:href=\"#DejaVuSans-110\"/>\n <use x=\"374.853516\" xlink:href=\"#DejaVuSans-95\"/>\n <use x=\"424.853516\" xlink:href=\"#DejaVuSans-100\"/>\n <use x=\"488.330078\" xlink:href=\"#DejaVuSans-105\"/>\n <use x=\"516.113281\" xlink:href=\"#DejaVuSans-102\"/>\n <use x=\"551.318359\" xlink:href=\"#DejaVuSans-102\"/>\n </g>\n </g>\n </g>\n </g>\n <defs>\n <clipPath id=\"p8a96dbf6d4\">\n <rect height=\"217.44\" width=\"145.565217\" x=\"33.2875\" y=\"22.318125\"/>\n </clipPath>\n <clipPath id=\"pa2840f6eb9\">\n <rect height=\"217.44\" width=\"145.565217\" x=\"222.522283\" y=\"22.318125\"/>\n </clipPath>\n </defs>\n</svg>\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"numIterations = 5000\n",
"sampleSize = 500\n",
"results = []\n",
"\n",
"def pct_change(then, now):\n",
" return (now - then) / then * 100\n",
"\n",
"for i in range(numIterations):\n",
" comp = {}\n",
" no_hed, yes_hed = (subset[col].dropna().sample(sampleSize).describe().to_dict() for col in subset)\n",
" results.append({\n",
" \"iteration\": i,\n",
" \"mean_diff\": pct_change(no_hed[\"mean\"], yes_hed[\"mean\"]),\n",
" \"median_diff\": pct_change(no_hed[\"50%\"], yes_hed[\"50%\"])\n",
"\n",
" })\n",
"\n",
"pd.DataFrame(results).drop(\"iteration\", axis=1).hist(bins=50)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.2-final"
},
"orig_nbformat": 2
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment