Skip to content

Instantly share code, notes, and snippets.

@krassowski
Created January 22, 2019 23:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krassowski/0259a2cd2ba774ccd9f69bbcc3187fbf to your computer and use it in GitHub Desktop.
Save krassowski/0259a2cd2ba774ccd9f69bbcc3187fbf to your computer and use it in GitHub Desktop.
Performance and peak-memory evaluation of some explode implementations, see https://stackoverflow.com/q/12680754
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 numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def generate_df(rows_before=5, list_size=10):\n",
" rows = range(rows_before)\n",
" return pd.DataFrame({\n",
" 'var1': rows,\n",
" 'var2': [list(range(list_size)) for _ in rows]\n",
" })"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def explode_concatenate(df, col, fill_value=''):\n",
" \"\"\"CC-BY-SA 3.0 MaxU, https://stackoverflow.com/a/40449726, adapted\"\"\"\n",
" lst_cols = [col]\n",
" \n",
" # all columns except `lst_cols`\n",
" idx_cols = df.columns.difference(lst_cols)\n",
"\n",
" # calculate lengths of lists\n",
" lens = df[lst_cols[0]].str.len()\n",
"\n",
" res = pd.DataFrame({\n",
" col:np.repeat(df[col].values, lens)\n",
" for col in idx_cols\n",
" }).assign(**{col:np.concatenate(df[col].values) for col in lst_cols}) \\\n",
" .loc[:, df.columns]\n",
"\n",
" return res\n",
" \n",
"def explode_dict(df, column: str):\n",
" data = []\n",
" for row in df.itertuples(index=False):\n",
" base = row._asdict()\n",
" for entry in base.pop(column):\n",
" data.append({column: entry, **base})\n",
" res = pd.DataFrame(data)\n",
" return res\n",
"\n",
"def explode_list(df, column: str):\n",
" data = []\n",
" columns = list(df.columns)\n",
" to_explode_index = columns.index(column)\n",
" columns.remove(column)\n",
" columns = [column, *columns]\n",
" for row in df.itertuples(index=False):\n",
" base = [*row[:to_explode_index], *row[to_explode_index + 1:]]\n",
" for entry in row[to_explode_index]:\n",
" data.append([entry, *base])\n",
" res = pd.DataFrame(data, columns=columns)[df.columns]\n",
" return res\n",
"\n",
"def explode_stack(df, column):\n",
" \"\"\"CC-BY-SA 3.0 DMulligan, https://stackoverflow.com/a/28182629, adapted\"\"\"\n",
" other = df.columns.difference([column])[0]\n",
" index = df[other]\n",
" res = pd.DataFrame(df[column].tolist(), index=index).stack().reset_index()[[0, other]]\n",
" res.columns = [column, other]\n",
" return res\n",
"\n",
"def explode_accepted(df, column):\n",
" \"\"\"CC-BY-SA 3.0 Chang She, https://stackoverflow.com/a/12681217, adapted\"\"\"\n",
" other = df.columns.difference([column])[0]\n",
" res = pd.concat([\n",
" pd.Series(row[other], row[column]) \n",
" for _, row in df.iterrows()\n",
" ]).reset_index()\n",
" res.columns = [column, other]\n",
" return res\n",
"\n",
"def tidy_split(df, column, keep=False):\n",
" \"\"\"CC-BY-SA 3.0, Daniel Himmelstein, https://stackoverflow.com/a/39946744, adapted\"\"\"\n",
" indexes = list()\n",
" new_values = list()\n",
" df = df.dropna(subset=[column])\n",
" for i, presplit in enumerate(df[column]):\n",
" values = presplit\n",
" if keep and len(values) > 1:\n",
" indexes.append(i)\n",
" new_values.append(presplit)\n",
" for value in values:\n",
" indexes.append(i)\n",
" new_values.append(value)\n",
" new_df = df.iloc[indexes, :].copy()\n",
" new_df[column] = new_values\n",
" return new_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Small demo:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"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>c</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>[1, 2, 3]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>[1, 2]</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b c\n",
"0 1 3 [1, 2, 3]\n",
"1 2 4 [1, 2]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = pd.DataFrame({\"a\": [1, 2], \"b\": [3, 4], 'c': [[1, 2, 3], [1, 2]]})\n",
"d"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"functions = [explode_concatenate, tidy_split, explode_accepted, explode_stack, explode_dict, explode_list]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<function explode_concatenate at 0x7fd6dc26f840>\n"
]
},
{
"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>c</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b c\n",
"0 1 3 1\n",
"1 1 3 2\n",
"2 1 3 3\n",
"3 2 4 1\n",
"4 2 4 2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"<function tidy_split at 0x7fd6dc2700d0>\n"
]
},
{
"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>c</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b c\n",
"0 1 3 1\n",
"0 1 3 2\n",
"0 1 3 3\n",
"1 2 4 1\n",
"1 2 4 2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"<function explode_accepted at 0x7fd6dc26f620>\n"
]
},
{
"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>c</th>\n",
" <th>a</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" c a\n",
"0 1 1\n",
"1 2 1\n",
"2 3 1\n",
"3 1 2\n",
"4 2 2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"<function explode_stack at 0x7fd6dc26fae8>\n"
]
},
{
"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>c</th>\n",
" <th>a</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" c a\n",
"0 1.0 1\n",
"1 2.0 1\n",
"2 3.0 1\n",
"3 1.0 2\n",
"4 2.0 2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"<function explode_dict at 0x7fd6dc26f6a8>\n"
]
},
{
"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>c</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b c\n",
"0 1 3 1\n",
"1 1 3 2\n",
"2 1 3 3\n",
"3 2 4 1\n",
"4 2 4 2"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"<function explode_list at 0x7fd6dc26f7b8>\n"
]
},
{
"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>c</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" a b c\n",
"0 1 3 1\n",
"1 1 3 2\n",
"2 1 3 3\n",
"3 2 4 1\n",
"4 2 4 2"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for func in functions:\n",
" print(func)\n",
" display(func(d, 'c'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Two of the functions (`stack` and `accepted`) do not support data frames with additional columns. Moreover, `stack` changes type (floats instead of integers)."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"not_multi_column = ['stack', 'accepted']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Benchmarking"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I will run the functions in with varying sizes of lists and dataframes:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"cases = {\n",
" # case name: (data frame length, list size)\n",
" 'list_much_smaller': (50000, 5),\n",
" 'list_smaller': (5000, 50),\n",
" 'balanced': (500, 500),\n",
" 'list_bigger': (50, 5000),\n",
" 'list_much_bigger': (5, 50000)\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I will also record memory usage aiming to get 500 reads per function run."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"from memory_profiler import memory_usage"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from copy import copy\n",
"\n",
"\n",
"def benchmark(functions, cases, memory_record_frequency=150):\n",
" measurments = []\n",
" for case, (n_rows, list_len) in cases.items():\n",
" df = generate_df(n_rows, list_len)\n",
" for function in functions:\n",
" time_result = %timeit -o -r 50 function(copy(df), 'var2') \n",
" for run in time_result.all_runs:\n",
" memory = memory_usage((function, [copy(df), 'var2']), interval=time_result.average / memory_record_frequency)\n",
" measurments.append({\n",
" 'case': case,\n",
" 'time': run / time_result.loops,\n",
" 'function': function.__name__.replace('explode_', ''),\n",
" 'peak_memory': max(memory)\n",
" })\n",
" return measurments"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"75.8 ms ± 2.39 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"128 ms ± 14.8 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"15.3 s ± 1.66 s per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"59.9 ms ± 4.84 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"415 ms ± 36.3 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"166 ms ± 12.7 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"25.4 ms ± 2.44 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"111 ms ± 6.39 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"1.51 s ± 116 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"54.2 ms ± 2.98 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"301 ms ± 7.06 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"129 ms ± 15.4 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"18.2 ms ± 245 µs per loop (mean ± std. dev. of 50 runs, 100 loops each)\n",
"169 ms ± 83.5 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"446 ms ± 56 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"239 ms ± 38.6 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"938 ms ± 137 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"391 ms ± 64.7 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"41.3 ms ± 6.51 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"371 ms ± 81.4 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"128 ms ± 22.3 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"915 ms ± 197 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"1 s ± 151 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"414 ms ± 58.1 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"57.4 ms ± 8.79 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"375 ms ± 73.7 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"70.1 ms ± 12.8 ms per loop (mean ± std. dev. of 50 runs, 10 loops each)\n",
"7.48 s ± 626 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"1.08 s ± 169 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n",
"416 ms ± 66.5 ms per loop (mean ± std. dev. of 50 runs, 1 loop each)\n"
]
}
],
"source": [
"m = pd.DataFrame(benchmark(functions, cases))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"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>case</th>\n",
" <th>function</th>\n",
" <th>peak_memory</th>\n",
" <th>time</th>\n",
" <th>multi_column</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>list_much_smaller</td>\n",
" <td>concatenate</td>\n",
" <td>122.898438</td>\n",
" <td>0.088612</td>\n",
" <td>Supports multiple columns</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>list_much_smaller</td>\n",
" <td>concatenate</td>\n",
" <td>122.835938</td>\n",
" <td>0.085024</td>\n",
" <td>Supports multiple columns</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>list_much_smaller</td>\n",
" <td>concatenate</td>\n",
" <td>121.078125</td>\n",
" <td>0.075090</td>\n",
" <td>Supports multiple columns</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>list_much_smaller</td>\n",
" <td>concatenate</td>\n",
" <td>122.957031</td>\n",
" <td>0.075017</td>\n",
" <td>Supports multiple columns</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>list_much_smaller</td>\n",
" <td>concatenate</td>\n",
" <td>121.414062</td>\n",
" <td>0.076088</td>\n",
" <td>Supports multiple columns</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" case function peak_memory time \\\n",
"0 list_much_smaller concatenate 122.898438 0.088612 \n",
"1 list_much_smaller concatenate 122.835938 0.085024 \n",
"2 list_much_smaller concatenate 121.078125 0.075090 \n",
"3 list_much_smaller concatenate 122.957031 0.075017 \n",
"4 list_much_smaller concatenate 121.414062 0.076088 \n",
"\n",
" multi_column \n",
"0 Supports multiple columns \n",
"1 Supports multiple columns \n",
"2 Supports multiple columns \n",
"3 Supports multiple columns \n",
"4 Supports multiple columns "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m['multi_column'] = m.function.apply(\n",
" lambda f: (\n",
" 'Supports multiple columns'\n",
" if f not in not_multi_column else\n",
" 'Only one column suppported'\n",
" )\n",
")\n",
"m.case = pd.Categorical(m.case, categories=cases.keys(), ordered=True)\n",
"m.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"from plotnine import *"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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u+vRRx9VUFCQXn75ZQ0aNEg7duywvQcZGRn65Zdf1Lx5cwUEBKhSpUp68MEHi3ytBb9PS5YsUY0aNRQQEKDJkyfrn3/+0e23366AgABFR0frzJkzkv53/TjXbbfdVuTw3hYtWkiSmjRpIj8/P73zzju24xW07Yudi3Pl5ORo9OjRqlmzpkJCQtS3b98L/u5s3LhRTZs2VWBgoKpWrWqLMScnRyNGjFBkZKTCwsLUv39/paamFllHq1atNH/+fNvjTZs2qUaNGrbHNWrU0MyZM9W4cWP5+vqqe/fuSk5O1sMPP6yAgADVr1/frn3VqFFDs2fPVpMmTWzntuA1ZGdnq3///qpYsaICAwPVoEED7d27t9jXBwBAaSLBBgC44uQmJlz2vwvZtm2bsrKy1KNHD7vnjUajevbsqS+//NL2XEJCgo4dO6YjR45ow4YNGjNmjP76q/CQuUceeUTLli2zPY6Li9M333yjmJiYQmWTk5PVsWNHPfroo0pMTNTs2bPVu3dvW8JFkjZs2KDo6GglJSVp8ODBevTRR+2OlZ2drb1792rfvn06ePCgJk+eXORr/eSTT/TCCy/onXfe0ZkzZ/TNN9+oevXqkqSnn35asbGx2rdvn3755Rf9+OOPmjRp0gXP3YV8+umn2rZtm/bu3as1a9aoQ4cOmjBhgpKSkhQaGlqo7g8//FA//vijDh48qG3btmn58uVF1jtmzBjVqVNHCQkJiouL09SpU0sU18aNG7V371799NNPWrVqlV2C45dfflFISIhOnz6t//znP+rXr58OHjxo275s2TINHz5cSUlJ6tKli7p166a8vDzl5ubq3nvvVVRUlOLj4/X+++9r5MiRdonQgrpjY2M1b948bdy4UaGhoUpPT1d6erpuuOEGrV+/XmPHjtXKlSuVmJiomJgYde7cWTk5OcrNzVXXrl113333KSkpSc8884zd71hJJOTkXva/C6lTp468vLzUt29fbdiwQadPny5xbOvWrVOHDh2UnJysF154QV27drVLBi1atEhvvvmmTp8+rdq1a9va1KW0o/Xr16t9+/ZKSkrS888/r/nz5+vWW2+1vQe+vr4aOnSounTpopSUFB07dkxPPfXUBeP97rvvtHfvXn333XeaNGmSHnvsMb333ns6efKkEhMT9eabb5b4HGzdulWStHPnTqWnp2vgwIFFlivuXJzvxRdf1K+//qqff/5Zx44dk4eHh4YMGVJk2Z07d+r+++/XxIkTlZSUpN9++00NGjSQJE2bNk2bN2/W9u3bdeDAASUlJV30/FzIqlWrtH79eh09elR//PGHmjdvbkv+tW7dWsOHD7crv3z5cq1du1YnTpxQSkqK7cuPJUuWaM+ePfr777+VkpKiVatWqUKFCpcdFwAAJcEcbACAK86R54q+IXRUQkKCQkJC5O7uXmhb5cqVlZDwvwSd0WjUlClT5OHhoWbNmqlevXratWuXate2n9Oqc+fOeuKJJ/Trr7+qcePGWrFihdq2bVuoB4skffbZZ6pevboGDMhfyKF9+/bq3Lmz3n//fVuiLCoqSvfdd58kqV+/fho+fLgSEhJksVi0bt06JSUl2SacHzt2rPr161dk4mn+/Pl6/vnnbT1kqlatKkkym81auXKltm/frqCgIEnSxIkTNWDAgBInsAqMHDlSwcHBCg4O1u23364qVaro1ltvlSTdf//9evXVV+3Kjx49WhUrVpQkderUSb/++qtdIrGAh4eHTp48qSNHjqh27dq64447ShTXhAkT5O/vL39/fz3zzDN6//33bcepUKGCRo0aJaPRqPbt26tjx45avXq1xo4dKym/F2K7du0k5Sct5syZY5u/Kzk5WePHj5fJZFLTpk31+OOPa8mSJbbyoaGhev7552UwGIr8XZOk//znPxo5cqTq168vSXriiSc0Y8YM2zEyMjLs4uvQoUOJXnuBIQeOXNZ+FxMQEKCtW7dqxowZGjx4sI4fP64777xTCxYsKNRGitOgQQM99NBDkvJ/119//XV99tlntuRRTEyMGjduLEl65ZVXVKFCBR0/flzffvvtRdtRkyZN1KdP/nyM3t7eRR7fw8NDR44c0YkTJxQZGamWLVteMN5x48bJx8dHjRo10g033KD27dvr+uuvlyR17dpVv/766yW97stR3LmIjIy0lbFarZo/f75++eUXhYaGSpImT56sWrVqaenSpTKZTHZ1LliwQP369VOnTp0kSSEhIQoJCZGUn+CaPXu2qlSpIkmaMWOGbr75Zr333nvy8PAocfxDhw5VRESEJKljx446cOCAOnbsKEnq06ePunTpYlf+mWeeUbVq1SRJPXv21JYtWyTlv2dpaWnat2+fmjVrphtuuKHEsQAAcLlIsAEArjjVZ5e8J0iBCyXnQkJClJCQoNzc3EKJj5MnT9puLqX8BMy5N5I+Pj5FTjzu7u6uBx98UEuXLlXjxo21dOlSjRkzpsjjx8bG2g2dkvKHQ8XGxtoen5uY8/HxkZS/yuqpU6dkNpttiTIp/4babDYXeayjR48WmehISEhQTk5OoSFcJ0+e1OUuPH5+zOc/Pv+8nb+9uMn/Z86cqfHjx6t169Zyd3fXwIEDNWrUqEuOq+AGXZKqV69ud54jIiJkNBqL3X7uviaTSREREbbtkZGRdsmKGjVqaPv27bbHVatWlcFguGBshw8f1ogRI/Tiiy/ansvJyVFsbKwMBkOR8V3OHIFv1qle4n0KXCw5V6dOHS1cuFCSdOTIEQ0cOFAPPfSQtm3bdkn1n3uOpQu/B0FBQQoICFBsbOwltaOC3poXsmjRIo0fP16NGzdWpUqV9NxzzxWZ6C1Q0t/z0lTcuTg3wXb69GllZmYqKirKbl+j0ai4uDhbgqvA0aNH1b59+yKPd/45rlGjhsxms+Li4gq9b5fC0WtEwfaHHnpIJ06c0MCBA3XixAl1795ds2bNcsm5/wAAVx+GiAIArjjuFUMu+9+FREVFycvLSx999JHd8xaLRR9++KGtB1JJPfLII1q5cqV27typo0ePqmvXrkWWi4iI0OHDh+2eO3z4cKEb36JUq1ZNbm5uOnXqlFJSUpSSkqLU1NRib+qrVatW5JDWkJAQeXh42MVx+PBhVa5cucikkJ+fnzIzM22Py3MlzNDQUP3nP//RsWPH9PHHH2vmzJnavHmzJMnX1/eicR09etTu53PPc2xsrG1OtqK2n7uv2WxWbGysIiIiFBERoePHj9slNs9/D88/j0Wd12rVqunNN9+0vZcpKSnKzMzUAw88oCpVqhQZ3+UI8XC/7H8lUb16dQ0dOtQ2l9b5vze5ublKSkqy2+f813Sh9yAlJUVnzpyxvQcXa0eX8h7UqlVLy5cvV3x8vN566y0NGjSoyDZTUue/dsnxdlPcuThXSEiIvL29tWvXLrvfq+zs7CKvMcVdI6TC16rDhw/LaDQW2TO3PK8Rbm5uGjNmjH7//Xft2bNHe/fuLXZ+TAAAShsJNgAA/hUQEKBJkyZp6NCh2rBhg3JycnTixAn169dPmZmZevbZZy+r3gYNGigiIkKPPvqo+vTpI09PzyLLRUdH6/Dhw1q0aJHy8vL09ddfa/369erbt+9FjxEeHq5OnTrpmWeeUXJysqxWq44dO2a3AMG5Bg4cqNmzZ+unn36S1WrV8ePHtW/fPplMJvXp00cvvviiUlJSFB8fr4kTJ9qG6p2vUaNGev/995WTk6O9e/cWOVF7WVmzZo1tMvegoCCZTCZbz7FGjRpp2bJlMpvN2rp1qz799NNC+0+cOFFpaWk6dOiQ5syZowceeMC2LSkpSTNmzFBubq6+/vprbdy4Ub169bJt37Rpk7Zs2aLc3Fy98sor8vf3V/PmzdW8eXMFBQVp8uTJysnJ0a+//qp333232PMnSWFhYUpOTrabX+zJJ5/U9OnTtXv3blmtVqWnp2v9+vVKS0tTVFSUvL297eIr7n12ln379mnmzJk6evSorFarTp06pYULF9p6TzVo0ED79u3T9u3blZOTo3HjxtklDCVp9+7dev/995WXl6dly5bp77//VnR0tG37ihUrtGvXLmVnZ+vFF19Uy5YtFRkZeVntKCwsTLGxsXaLeSxdulSnTp2SwWBQUFCQDAZDoWGUl6NOnToym836+OOPlZeXp7feesuud11Rsf39998XrLO4c3Euo9GoJ554Qs8++6xOnjwpSTp16lSRbUOSHn/8cS1dulQbN26U2WxWQkKCdu3aJUl68MEHNXnyZJ08eVJnzpzRqFGj1Lt37yKHhzZq1Egffvih0tPTdezYMc2dO/eCr8UR33zzjXbv3i2z2Sw/Pz95enqWynsGAMClIMEGAMA5hg8frlmzZmnMmDEKCgrSLbfcIkn68ccfHZos+5FHHtHvv/+ufv36FVumQoUK+vzzz/X222+rYsWKGjZsmN5///1LnkdoyZIlcnd3V8OGDRUYGKgOHTrowIEDRZbt3r27pkyZokcffVQBAQFq3bq1jhzJH/L3xhtvKCwsTHXr1lWjRo3UrFkzjRs3rsh6Jk+erBMnTqhChQoaMmSIHn744UuKtTTs3LlTUVFR8vX11Z133qlhw4bZVjB94403tHnzZgUFBWn27Nl2ybMCHTt21I033qjmzZurV69eeuSRR2zbmjZtqlOnTqlSpUoaOHCgFi1apLp169q2x8TEaNasWQoODtbatWu1du1aubu7y93dXevXr9f333+v0NBQ9e7dW1OnTi12qJ0k1atXTzExMapdu7aCgoL0559/qmvXrho/frz69eunoKAgXX/99baFDNzd3fXpp5/qww8/VHBwsF577bULJvCcwd/fX7/88otatGghPz8/NWzYUH5+flqyZIkk6frrr9eUKVPUqVMnVa9eXVWrVrUbgi1JXbp00eeff67g4GC9/PLLWrt2rV0b7N+/v5566ilVqlRJ+/fv14oVKyRdXjtq06aNGjZsqMqVKysoKEgZGRn66quvVL9+ffn5+alXr16aN2+eatas6fC5CQgI0Pz58zV06FCFhYUpLi5OTZo0Kbb8xIkT9fjjjysoKEgLFiwoskxx5+J806dPV4MGDXTHHXfYVvE9d/jyuZo2baoVK1Zo9OjRCgoKUuPGjbV7925J+fMk3nXXXWratKlq166tgIAAzZs3r8h6nn32WQUGBqpy5cq67777il2NtTTExcWpd+/eCgwMVK1atRQREaERI0aU2fEAADiXwXq5E6oAAFBO0tPTbfN/xQ8doNqLV112XX/176Owufk3qQWLAZSHdevWacSIEdq/f3+5HRNFO3z4sGrWrKmsrCx5eXkV2r548WLNnz/ftqDA+fr376/w8HBNnz69rEMtdWlpabafBxyJ16qbL23BgaL0+eMvLageJqn029KECRO0b98+rVpVdFtv1aqV+vTpo0GDBpXqca9EnAsAAFwDixwAAK44f/Xv4+wQSiQ7O1tz587lBhgup88fjs8pBgAAABJsAIArTEHvs6KYkxKVMH6UQiZOl6lCxXKMqnibN29Wly5dFBUVpSeffNLZ4QA2Bb3PipKYZ9ao2ARNjwhRRTfmsAIAALgYhogCAFzeuUNEL6SkCbbyHCIKuIJzh4heSEkTbLQlAABwrWORAwDAVcPg7S3fezrL4O3t7FCAK5q30aDOgb7yNhqcHQoAAMAVgR5sAACXd6k92EqKXje41lxqD7aSoi0BAIBrHQk2AAAAAAAAwAEMEQUAAAAAAAAcQIINAAAAAAAAcAAJNgAAAAAAAMABJNgAAAAAAAAAB5BgAwAAAAAAABxAgg0AAAAAAABwAAk2AAAAAAAAwAEk2AAAAAAAAAAHkGADAAAAAAAAHECCDQAAAAAAAHAACTYAAAAAAADAASTYAAAAAAAAAAeQYAMAAAAAAAAcQIINAAAAAAAAcAAJNgAAAAAAAMABJNgAAAAAAAAAB5BgAwAAAAAAABxAgg0AAAAAAABwAAk2AAAAAAAAwAEk2AAAAAAAAAAHkGADAAAAAAAAHECCDQAAAAAAAHAACTYAAAAAAADAASTYAAAAAAAAAAeQYAMAAAAAAAAcQIINAAAAAAAAcICbswNwBQcOHHB2CAAk1alTp9httFPANdBOAddHOwVcH+0UcH0XaqdFoQcbAAAAAAAA4AASbAAAAAAAAIADSLABAAAAAAAADiDBBgAAAAAAADiABBsAAICL69Onj7Zv317i/aZPn6533nmnDCK6fOvWrdOwYcOcHQbgsIJ2uXz5ck2fPr1U675Y2+3fv7927txZqscEnK0s21R5iYuLU+vWrZWTk1Oi/Xbt2qXu3bsXu/1KPifXEhJs16Br+cJVXs6/QF7ujRFQWq6Gdn/uzcbF/ggBAKC8xMTEaNSoURctV5oJ78WLF6tJkyalUhfgapzRplzdpZ4TOJebswOA88TExFxSuenTp6tChQoaOHBgGUcEoKzR7gEAwOUym80ymUzODgNAOaHNlwwJNsCFcUEDSh/tCleqgwcPav78+Tp16pQaN26sF154QX5+fpo8ebJ27dqls2fP6rrrrtOwYcN03XXXFdo/IyNDU6dO1Z9//qm8vDzddNNNevbZZxUWFiZJGjZsmG655Rbt2bNH+/fv13XXXaexY8cqPDxcknT06FHNmzdPf/75pySpTZs2euaZZyRJ27dv17vvvqvY2FhVqVJFQ4YM0S233CJJio+P1yuvvKJ9+/bpuuuuU4MGDcrjdAHlZvHixTp69KjGjRunnJwcvfrqq9q2bZvMZrPCwsL00ksvadeuXfr6669lMBi0du1a1alTR3PmzLlgvWlpaRo1apR+//13Va9eXS+88IJq1qwpKb9n+vDhw9WsWTPl5ORozpw5+v777xUQEKAePXrojTfe0DfffCPJvg3WqlVLt9xyi/773//q9ddflyQdP35cc+fO1b59++Tn56devXqpW7duttd26NAh+fr66vvvv9cDDzygBx98sAzPJlA2bWr69Ony9PRUYmKidu7cqcjISE2YMEH/93//pw8++EAGg0GDBw9WmzZtJOV/JrZp00ZdunSRlP859+qrr2rVqlWSpISEBM2bN0+7du1Sbm6uGjRooClTptiO9+233+q9995Tenq6OnbsqMGDB1/Sa1+1apVWr14tNzc39e7dWz179ix0TiRp8+bNevfdd5WWlqbo6Gjt2bNHXbp0UceOHWWxWLRw4UJ9/vnn8vT0VL9+/TRz5kytXLlS4eHhys3N1eLFi7VlyxZlZmaqadOmGjZsmPz9/RUXF6cHHnhAI0eO1JIlS+Tp6anFixeX+D28VpFgu4Zdixeu1NRUzZgxQ7///rskKTIyUtOnT1dgYKCGDRumm2++WXv27NGBAwdUt25djR8/XitXrtSmTZvk5+enF154QQ0bNpQkffHFF1q5cqVOnTqloKAg9erVS/fdd99Fz7vVatUHH3yg9evXKzU1VTfeeKOee+45VapUSZLUunVrPfPMM/r44491+vRpbdy48aJ1ApeqLNr99u3bNX/+fMXFxcnLy0vt27fXoEGD7D6gFy9erLS0NPXu3Vt33323pk2bpkOHDql+/fp66aWX5OvrK0mXnCg4X1JSkubOnavdu3fLzc1N0dHRevjhh2U0GrVp0yatW7dODRo00KZNm3T77bfrueeeK7VzCpSXL774QtOnT1dQUJAmT56sN954Q6NHj1bTpk01fPhwubu7a+HChZo8ebLee++9QvtbrVZ16NBB48aNk9Vq1cyZM/X666/r5ZdftpX58ssv9fLLLysyMlJTpkzRokWLNHr0aGVlZen5559Xly5dNHHiREnSgQMHJEl//fWXpk6dqilTpuimm27Szz//rJdeeklLly5VYGCgJk+erFq1amn69On6559/NGrUKFWvXr18ThpQzjZt2qRDhw5pxYoV8vX11dGjR+Xv769u3bpp3759Jeod/tVXX9na1sqVKzV27FgtXbq00JdES5cu1eHDh7V06VJJ0vjx4+22T548Wddff72mT5+uo0ePauTIkapataokKTs7W88995z69u2rqVOn6sSJExoxYoQiIyPVtGlTSdLWrVs1evRojRgxQrm5uY6eIqBESrNNbdmyRa+88oomTJigqVOnasSIEerQoYPWrFmjH374QbNmzVLLli3l6el5wXrMZrNGjx6tG264QcuWLZOnp6f++OMPuzI7d+7UokWLlJycrIEDByoqKkqNGze+YL2pqak6efKkVq9erX/++UcjRozQddddV2i/o0ePaubMmZo2bZpuueUWffDBB7bPZEn6/PPP9X//93+aP3++AgMD9corr9jtv2DBAh0+fFjz5s2Tj4+PXnvtNc2ZM0djx461ldm+fbsWLlwoNzdSRiXBHGyQZH/hWr9+vcaNG6eAgAB169ZN7dq1U69evbRx48aLftMm5V+4+vbtq/Xr1ysyMlIjRoxQTk6O1qxZo6FDh+rVV1/V2bNnL1pPwYXL399fy5Yt09q1a20Z/AIFF663335bGzdu1K+//nrBOtesWWNLcH3yyScaNmyYPDw8bNu//vprPffcc1q7dq0sFosGDx6sGjVqaO3ateratatmz55tKxsYGKipU6fqs88+06hRo/T2229r3759F31da9eu1ddff62ZM2fq448/1vXXX69JkybZlfn22281Z84cffLJJxetD7hcpdXuX3nlFfXp00eff/65VqxYoTvvvNNu++6mQAfAAAAgAElEQVTdu7V48WK9/vrrWrp0qWbOnKmRI0fqww8/VGpqqtauXWsr27RpUy1dulQff/yx6tWrp8mTJ1/0dVgsFo0ZM0YRERFatWqV5s2bpx9//FGff/65rcz+/fsVGBioDz74QEOGDCnhmQJcQ7du3VSlShX5+Pjoscce07fffiuLxaJ77rlHvr6+8vDw0MMPP6zDhw8rNTW10P5+fn6666675OXlJW9vb/Xt21e7d++2K9OxY0fVrFlT7u7uatu2rQ4ePChJ2rZtm3x9fRUTEyNPT095enqqfv36kqT169crOjpa9evXl9FoVFRUlGrVqqWffvpJ8fHx2rt3rwYMGCAPDw/VrVtX7dq1K/uTBTiJu7u7srKydPToUVmtVlWvXl0VKlS4rLqaNWumJk2ayM3NTX379lVGRob27t1bqNyWLVsUExOjoKAgBQUFqU+fPrZtBW3w8ccfl4eHh2rXrm3XBrdt26YKFSqoa9eucnNzU7Vq1dSpUydt3rzZVqZOnTpq06aNjEbjRRMPQGkrzTbVsmVL3XjjjXJzc1Pr1q2VnJysmJgYubm5qVWrVsrJydGJEycuWs/+/fsVFxenIUOGyNfXV25ubrZOGAUeeeQReXt7q0qVKmrQoIHt8/RCrFar3edlhw4d7NpigW+++UbNmzdX48aNbT3d/P39bdu3bNmiHj16KDw8XN7e3urXr5/dMdavX6/BgwcrODhYnp6eevTRR/Xdd9/JbDbbyvXv31++vr60+RIiHQlJ9heuevXqOfTNcsGFS8rvjfXTTz8pJiZGJpNJrVq10rRp03TixAlbF/fiFFy43nrrLbm7u0tSsRcub29v24XrQt8MuLm56cyZM4qNjVWtWrVU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UlFRQU1NDaGhoc3W4nA4eO6557Bardx8883NNuUsFguGceqI1ZiYmCbzthUXF3useeF0Ok3TGGlktprMVg+Yryaz1QPmrElERERaT9dqiYiIeEFAQAAjR45k0aJF1NTUcPDgQVavXs255557yrYjRozg6NGjfP755zgcDj766CMABg4cCMDatWspKirCMAyOHTvGG2+8QWpqqru55nK5qK+vx+l0YhgGDQ0NOBwO4ERzbdasWTgcDm655Rbs9qbftRUUFLB//36cTid1dXW888471NfX069fP0++PCIiIiIiXZpGsImIiHjJr371K+bMmcNdd91FYGAgP/jBD9wriN5yyy1MnjyZ9PR0QkNDuf3225k3bx5z5swhMTGR3//+9/j5+QFw9OhRFixYQFVVFUFBQWRkZHDbbbe5j/PZZ5/x0ksvuW/ffPPNDBgwgKlTp5Kfn8/mzZvx9/fn97//vXub66+/npycHCoqKnjttdcoLS3F39+f3r17c9dddxEcHOylV0lEREREpOtRg01ERMRLgoODmTRp0ml/NmvWrCa3MzIyeOSRR0677ZVXXsmVV155xuOMGzeOH/3oR6edK3HAgAHMnj37jPtmZmYyY8aMM/5cREREREROpQabiIiIiIiISBfhOl4F9fWt26mq8sS+x8qhtfM++vtjDWl+jleR7k4NNhEREREREZEuwHW8iopp98JpFh9qiYqnH2/9ThYLYdMe7dAmW43LxX+OlpBrB/8Oe1SRzqUGm4iIiIiIiEhXUF8PhkHi/Q9jj4zy+OEcZaUU/PnBE8cN6bjHrXEZLCwqZ3hcBP6Wjntckc6kBpuIiIiIiIhIF2KPjMIvOqazyxCRk1g7uwAREREREREREZGuTA02ERERERERERGRdlCDTUREREREREREpB3UYBMREREREREREWkHNdhERERERERERETaQauIdhN5tQ3scdQS2WCQZXERrqWQRUREREREuqTavfk4Sks8fhzHsXKPH0PEV6jB1g28X1nDh8frsAKW47W8h4V7okOJt9s6uzQRERERERFppaP/mNnZJYjI9+gSUR9X7HCy7HgdBuAEHAbUGwbzK2o6uzQREREREREREZ+gEWw+rsTpOuU+F1DY4PB+MSLSrBqXi/8cLSHXDv6dXYyIiIgJVLlc1Bst377y/7Ytd7pwtnJaFH8LhFo1BkHM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sJ1BY0fX4XC4P3w9evTg66+/xjAM4uLiCAwMxGazUVJSwoABAzjvvPM89iY///zzrF69muzsbCZPnkxYWBgZGRk0NDTw7rvvUlBQwKxZs7DZbCxZsoSlS5fy4x//2CPBrKqqwt/fv8l9r732GjabjXvvvZfw8HD3kNzIyEhGjx7NF198QVVVFbfeeitJSUkdXhOc+GVjGIb7/br77rupqKggOzub4OBgkpKSsNvtfPXVV+Tn55OXl8eCBQu46KKLPHYCc7lc7nr+93//l9LSUvr160dCQgIpKSkUFBQQHR3N9OnTmThxIhdffDGXXnopYWFhHV6L1Wqlf//+1NfXM2/ePPr3709aWhrZ2dm899577N+/n4yMDNLT0wkLC6Ouro66ujoefvhh7Ha7KYfgKqdnppy2nHLqWcrpmSmnLaecepZyembKacspp56lnJ6eWTMKymlzfDGnarCdRuOH7sCBA8yZM4cvvviCr7/+mqFDh+Lv78/q1avZs2cPVVVVLFiwgMLCQu644w6sVqvHrp3u168f//rXv3j//ffp27cvv/71rwEIDAyksLCQsLAwdu3axVdffcX777/PfffdR0pKSofXUVVVxc0338yoUaMIDQ11P9d169bRq1cvBg0aRENDAzabDavVSnV1NTExMWRnZzN27FiPrNpSVFREZWUlPXr0aHLtf8+ePZk6dSrBwcEcPHiQhoYG0tPTiYqKoqysjP379zN58mSPvE6NLBYLhmHwwAMPEBsby6233oq/vz9Wq5XIyEhSUlJYtWoV69evd/8CtNvtHqsnICCAtLQ0qqqqeOONN9wnsaysLBYvXsyBAwdIT0+nT58+DBkyxD3ZZeO3HGainJ6Zcto6yqnnKKdnppy2jnLqOcrpmSmnraOceo5yenpmzCgop63hSzkFNdhOy2KxcOjQIf73f/+X4cOHk5aWxt69e3nllVe44447CAgIoKysjK1btxIcHMyUKVOw2WzulVM6WkNDAyEhIWzatIlDhw6RmZnJqFGjcDqdREVFkZycTFxcHPv27SMuLo7rrruO3r17d3gdJSUllJSUcOWVV5KQkACceK2cTicff/wxx44dY+zYse6OuMViYdGiRYSFhREdHe2RAFRXV/PGG28QGhrqrqmuro5PPvmE7Oxs+vTpw9NPP82HH37IZ599RklJCRdeeCFZWVmce+65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c+ZMjhw5whNPPIHdbue9997jiy++oK6ursOOL55VVFTEK6+8wptvvsm0adNISkryyHEaP8uNwsPDmThxIvPnz2ffvn2nfJvV+O0AwOLFi3niiScIDQ31SG1toZyKNymnbaOcijcpp22jnIo3Kadto5yKNymnnc9nLhF1uVzYbDb27t3LjBkziIuLIyEhgYSEBN5//31qamqYPn06AH/72984cOAAkyZNwmq1YrFYiIuLY8SIER027HXHjh288847HDlyhJdeeomIiAjGjRtHv3792LlzJ6tXr+bJJ58kNDSUpUuX8tZbb3H77bfTs2fPDjm+eJ6/vz8Wi4Uf//jHHb6yz/r169m7d6972eKioiI2bNhA7969AUhOTubbb78FoF+/fu55GU4+eS1ZsoTXX3+dadOmkZyc3KH1tZVyKt6mnLaecireppy2nnIq3qactp5yKt6mnHY+n2mwWSwWDh06xP3338+ll17KuHHjsNls9OjRg7i4OHbt2sWKFStYu3YtFRUVzJgxw71qReNJrCMn2OvZsycWi4V58+YRGhrK1KlT8ff3x+VyMXDgQEpKSnj77bfZsGED33zzDVOmTKFPnz4ddnzxPJvNRq9evTp8KWGHw8Hnn3/OvHnziI+PJzk5mWXLlvHvf/+bnTt34nK5SEhIoLKykg8++IBLLrkEm83W5OS1dOlS5s2bxyOPPEK/fv06tL72UE7F25TT1lNOxduU09ZTTsXblNPWU07F25TTzmcxmrtAtgtofOPeeOMNKisr+c1vfnPKNvX19ezYsYPw8HB319VTS8I2Pu7mzZtZsWIFTqeThIQELrjggibXrhcUFODv709AQIAmjJQmKioqWLFiBUuWLOGWW25hxIgRVFVV8frrr1NcXMzRo0f51a9+xd///nd+/vOfc8UVV7j3Xb58ObNnz2b69On07du3E59FU8qp+BrlVDkV81NOlVMxP+VUORXz88WcekKXHsHWeOJq7Ipu3LiRmpoasrOzcTqdGIaB1WqluLiYHj16EB8fT0REBBaLxT1ktyM1ftvQOGFkr169GDt2LE6nky1btlBSUkJ8fDyhoaGsX7+emJgYevbsSUBAQIfWIV2by+UiMDCQ8PBwHA4Hb775JomJifTp04ehQ4eSnZ1NdXU1Gzdu5MiRI9TW1jJhwgT3/oWFhfz4xz8mLS2tE5/Fd5RT8UXKqXIq5qecKqdifsqpcirm52s59aQu22BrPFmUlpZSXFxMeHg4+fn5bNiwwT0ksfFE8txzz2G325t05zt6mePGbwVcLhcvvvgiX3zxBXl5eQwbNozevXtjGAbbtm1j7969bNu2jTfffJMLLrigw4dvStfW+Et33759zJgxg/DwcAoKCti4cSPR0dH07t0bu93OoEGDOOeccxg8eDDvvPMO0dHR7iHcycnJREZGdvIzOUE5FV+knCqnYn7KqXIq5qecKqdifr6WU0/rkg22kyeMvP/++4mPjycxMZEhQ4bwn//8h48++ojk5GSOHz/Oa6+9xr59+/j1r3/tkeWNG1mtVlwuF5MnT6a+vp6+ffvy8ccfs23bNkaMGEH//v2x2+0cO3aM/Px87r77bp+d2E9ap6SkhODgYODEL9bq6moeffRRLrroIq6//npGjhxJQEAACxcuJD4+3r0ajN1up1evXu5JJocOHdqZT+MUyqn4EuVUORXzU06VUzE/5VQ5FfPz1Zx6Q5dssFksFoqKinjggQe48sorufzyy7FYLFitVi666CI2b97MmjVr+PLLLzEMg4cffrjJhJGeMmvWLAICAnjggQcYOHAge/fu5ZNPPmHnzp3k5ubSp08fhg0bxrhx44iJifFYHdI1GIZBfn4+9957LxMnTsTf39/9s88++4zc3Fzi4+MJDw8nKSmJb7/9lqVLlxITE+OepwFg2bJllJaWMnbsWI9+vltLORVfoJwqp2J+yqlyKuannCqnYn6+nlNv6JINNoDt27dz/PhxbrzxRuC7IbVWq5Vx48YxevRocnNzufjii7HZbB6ZMPL7J8T6+noyMzOJj4/niSee4ODBg8ycOZO5c+eSl5fHmDFj8Pf398jEldL1WCwWoqKiGDt2LFFRUdTV1WG326mpqWHFihWEhIQwcOBAXC4XQUFBHD16lMOHD1NWVsa5556L0+nE5XKxZMkSrrvuOlP+UlROpatTTpVTMT/lVDkV81NOlVMxv+6QU0/rMu3E7y92WlNTw759+ygrKwNODMtt/OZg//79hIWFeXzCyMZr2j/55BMAcnNzGTJkCGvXruXw4cP89a9/JTIykpycHMrLy6muru7QGqRrcrlcAO4TUHx8PIcPH+b2229n/fr1hIaG8otf/IJXX32V//znP9TX1wMnVvWZOHEiU6dOBXAv3f3n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\n",
"text/plain": [
"<Figure size 1500x500 with 5 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<ggplot: (8785082253786)>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g = (\n",
" ggplot(m, aes('function', y='time', color='multi_column'))\n",
" + facet_wrap(' ~ case', scales='free', ncol=5)\n",
" + geom_boxplot()\n",
" + theme(axis_text_x=element_text(angle=45, hjust=1), figure_size=(15, 5), legend_position='top')\n",
" + scale_y_continuous(trans='log2')\n",
" + labs(color='')\n",
")\n",
"g"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABNwAAAJaCAYAAAD09VrvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzs3XucjPX///HnzOz5vKxd7DpF6IAcIh1RIXLIIdKGCil8SOQYskQtSeSzlcQ6pqJQ1CcdPhVFRPrIKa3Dstjzwa7ZndnfH/vb+Rq7yw6zJx73283NzlzX9X6/5pp5XzPX63q/35chNzc3VwAAAAAAAACcwljWAQAAAAAAAADXExJuAAAAAAAAgBORcAMAAAAAAACciIQbAAAAAAAA4EQk3AAAAAAAAAAnIuEGAAAAAAAAOBEJNwAAAAAAAMCJSLgBAAAAAAAATkTCDQAAAAAAAHAiEm4AAAAAAACAE5FwAwAAAAAAAJyIhBsAAAAAAADgRCTcAAAAAAAAACci4QYAAAAAAAA4EQk3AAAAAAAAwIlIuAEAAAAAAABORMINAAAAAAAAcCISbgAAAAAAAIATkXADAAAAAAAAnIiEGwAAAAAAAOBEJNwAAAAAAAAAJyLhBgAAAAAAADgRCTcAAAAAAADAiUi4AQAAAAAAAE5Ewg0AAAAAAABwIhJuAAAAAAAAgBORcAMAAAAAAACciIQbAAAAAAAA4EQk3AAAAAAAAAAnIuEGAAAAAAAAOBEJNwAAAAAAAMCJSLgBAAAAAAAATkTCDQAAAAAAAHAiEm4AAAAAAACAE5FwAwAAAAAAAJyIhBsAAAAAAADgRCTcAAAAAAAAACci4QYAAAAAAAA4EQk3AAAAAAAAwIlIuAEAAAAAAABORMINAAAAAAAAcCISbgAAAAAAAIATkXADAAAAAAAAnIiEGwAAAAAAAOBEJNwAAAAAAAAAJyLhBgAAAAAAADiRS1kHAACAo9LT051eptFolJeXl9PLBcqzkmhLJpNJnp6eTi8XAACgIiHhBgCocHJzc51eptVqdXqZQHlXEm2pJMoEAACoaBhSCgC4blkzzyv9yw2yZp4v61CACu281aoNyek6T2IaAACgWEi4AQCuW7mZmcrYvFG5mZllHQpQoWVac7UxJUOZVnqvAQAAFAcJNwAAAAAAAMCJSLgBAAAAAAAATmTIZWZbAEAFk5aWZvv7zIjB11xeyIL3ZTAY5OPjc81lFWbatGk6cOCA1qxZUyLll6WYmBjVqVNHmZmZ8vDwKOtw8P+NHz9ecXFxWrp06WXXy29Lg4+dcUq979cKkclk4o6/TrR06VJFRUXpl19+KXT58ePHdeuttyohIUHu7u5XLM9gMOivv/5Sw4YNnR1quaoTAICyxl1KAQAVXr2lV5/IOjKw7xXXWbFihebMmaNDhw7J29tbnTp10uzZs1WtWrWrrhcoyvfff6++ffsqLi6uVOtdc3u9a9q+759HLrt827ZtGjdunPbt2ydJqlevnqZPn65OnTpdU70l4UpJrrJ0afKqZs2aSk9PL+OoAADApRhSCgDAZcyfP18vvviiIiIilJycrL1798pqteqee+5RcnJyWYeH60xOTk5Zh1AiUlNT1blzZw0aNEjx8fE6c+aM5s2bJz8/v7IOrYDr9T0AAACli4QbAABFSE1N1eTJk7VgwQJ16dJFbm5uql69upYtWyYPDw/NmzdPUl6PpKpVq2rBggWqVq2agoODFRkZWWiZXbp00RtvvGH33COPPKI5c+YUuv6OHTvUunVr+fv7q1GjRtq0aZNt2bRp09SzZ08NHjxY/v7+qlevnr755hu7+IcOHaqwsDBVrVpVw4cPV1ZWVpGvNzo6Wrfffrt8fX1Vr149bdmyxVbOs88+q6pVqyosLEyjR4/WhQsXCi2jdu3atu0kKSoqSm3atLE9NhgMioqKUsOGDeXt7a2hQ4fq3Llz6ty5s3x9fXX33Xfr5MmTduu/9957atiwofz9/RUeHi6z2Vxo3UePHlW7du3k7++vypUr6/7777cr58CBA7bH48eP18CBAyXlDYs1GAxavHixatSooSpVqmjixImyWq2S8no73XXXXRo9erQCAgJUt25drV271lbWwIED9dxzz6lTp07y9fVVy5Yt9eeff9qWHzp0SA8//LACAwNVv359ffDBB7Zl+WWPGzdOwcHBGjx4sB555BGdPXtWPj4+8vHx0V9//SUpr6fl7bffroCAAN1333363//+Zyvnjz/+0J133ilfX1917txZSUlJhe6jsnLo0CFlZ2drwIABcnFxkbu7u+677z7de++9kv5vP1ysatWq+v777yXlfdZ79Oih8PBw+fr66rbbbtMPP/xgW7dNmzaaMGGC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Q6EuPpBt3LhRU6ZMkZ+fn7p3766HHnpIvXv31ubNm694JU7KO5D169dPGzduVFhYmMaOHSuz2ay1a9dqxIgRevPNN3XhwoUrlpN/IPP19dXy5cu1fv16W4Y/X/6B7N1339XmzZu1e/fuy5a5du1aW8Lrs88+06hRo+Tm5mZb/s033+ill17S+vXrZbVaNWzYMNWuXVvr169Xt27dNHfuXNu6/v7+mjlzpr744guNHz9e7777rg4cOHDF17V+/Xp98803ioyM1Lp163TzzTdr+vTpdut8//33mj9/vj777LMrlgdcLWe1+9dff119+/aOH91qAAAgAElEQVTVl19+qZUrV+r++++3W753714tXbpUb731lqKjoxUZGalx48bpk08+UUpKitavX29bt0WLFoqOjta6devUsGFDRUREXPF1WK1WTZo0SaGhoVqzZo0WLVqkn3/+WV9++aVtnYMHD8rf318ff/yxhg8f7uCeAspe9+7dVb16dXl5eenZZ5/V999/L6vVqkceeUTe3t5yc3NT//79FRMTo5SUlALb+/j46IEHHpCHh4c8PT3Vr18/7d27126djh07qk6dOnJ1ddWDDz6ow4cPS5K2b98ub29vhYeHy93dXe7u7mrUqJEkaePGjerUqZMaNWoko9Go1q1bq27duvrll1905swZ7d+/X4MHD5abm5saNGighx56qOR3FlCGXF1dlZmZqePHjys3N1e1atVSpUqVrqqsli1bqnnz5nJxcVG/fv2UkZGh/fv3F1jv22+/VXh4uAICAhQQEKC+ffvaluW3w0GDBsnNzU316tWza4fbt29XpUqV1K1bN7m4uKhmzZrq3Lmztm7dalunfv36ateunYxG4xUTEYCzObNN3XPPPbr11lvl4uKitm3bKikpSeHh4XJxcVGbNm1kNpt16tSpK5Zz8OBBxcXFafjw4fL29paLi4utU0a+p59+Wp6enqpevbqaNGli+069nNzcXLvvzA4dOti1xXzfffedWrVqpWbNmtl6wvn6+tqWf/vtt+rZs6eqVq0qT09PDRgwwK6OjRs3atiwYQoMDJS7u7ueeeYZ/fDDD7JYLLb1Bg4cKG9vb9q8g0hPolAXH8gaNmx4TVef8w9kUl5vrV9++UXh4eEymUxq06aNXnvtNZ06dcrWJb4o+Qeyd955R66urpJU5IHM09PTdiC73JUDFxcXpaamKjY2VnXr1lWDBg3slnfs2FE1a9aUJN17773atGmTOnXqJEl68MEHFRUVpczMTHl6euquu+6ybde4cWPdeeed+uOPP9SwYcPLvq4NGzbo+eeftw3TGThwoB555BGdOXPGNrSnX79+CgwMvGw5wLVyVrt3dXVVbGysUlJS5O/vb2v/+QYMGCAPDw/dfPPNqlWrllq0aKGwsDBJeceLi3+APPLII7a/+/fvr48//thWblEOHjyos2fP6tlnn5XBYFBQUJB69+6tLVu26NFHH5UkBQYGqk+fPjIYDFypQ4UUHBxs+zt/OEhycrI++eQT/fDDD0pOTpbBYJCkQttMVlaW3nnnHe3cuVNpaWmSpMzMTJnNZtuFp4tPYDw8PJSZmSkp74Q9NDS00LjOnDmjPXv2aOPGjbbnLBaLWrRooYSEBHl7e8vHx8e2LCQkpFgnHUBF1b59eyUkJGju3LmKj4/Xfffdp+eff97Wk9sR+b8LJclkMikoKEjnzp0rsF58fLxtpIQku7/z2+HF9VepUkUHDx6UlHcjsiNHjti+L6W8C1n5w8IvjQMobc5sU5d+z/n7+9v1GHVzc7N9913OmTNnFBwcbDtHvVJd7u7uxSq3sO/MnTt3FlgvISHB7neB0WhUUFCQ7fHljgnJycnKysoqMDLMYDAoMTHRrm44jrMMFOpGOZD17dtXFy5c0NSpU5WVlaWHHnpIgwYNsp2AXxr7pY8l2RJuv/76q5YtW6aTJ0/KarXqwoULtmTd5cTFxWn69Om2EyMp7wB37tw524GNAxxKg7Pa/fTp07VixQqFh4crNDRUAwYMUOvWrW3LL22nRZ3UWywWffDBB8VKHlwsLi5OycnJ6tKli+253NzcAj80Lm5zQEVz9uxZ299nzpyRi4uLduzYoR9//FGRkZGqVq2aMjIy7NrBxdauXatjx47pnXfeUeXKlXXkyBENHjy4WHWHhIToP//5T6HLgoOD1bdvXw0cOLDAsjNnzigjI0MZGRm248qZM2eKVSdQUZlMJoWHhys8PFwJCQmaNm2aPvroIz3zzDMOfw9d3F4sFkuBk+h8+Ym4evXqSZJdUq5y5crKyMjQ+fPn5eXlVWB5SEiIbrvtNtt8boXh+xNlyZltyhGenp7KysqyPb40GXX27Fnl5OQ49UJuYd+ZFyfS8lWuXFlHjx61PbZarYqPj7c9vjQ5f/Hf/v7+cnd31+LFi20dQC4WFxcniXZ/tRhSikLlH8g++OADLVmyRMeOHdNHH30kqWQbW3EPZM6sb+jQoVqxYoXmz5+vn3/+WV999ZXD5ZjNZk2dOlW9evXSunXrtGnTJt11113Kzc294rbBwcGaOXOmNm3aZPv31Vdf6fbbb7etwwEOpcFZ7b5+/fqaPn26PvvsM/Xq1UtTp04tVlL9Ulu3brUlDzZt2mSby/FKQkJCVKVKFbs29cUXX9hN8EqbQkX3+eef6/Tp0zp//ryWLFmitm3bKisrS66urvLz89OFCxe0ZMmSIrc/f/683N3d5ePjo7S0NC1fvrzYdd91111KS0vTqlWrdOHCBV24cEH79u2TJD366KPatGmT9u3bZ7v49Pvvv9suIt16661avHixzGazDh8+XOjQGOB68vvvv+vIkSOyWCzy9PSUq6urjMa8U7DAwMBiDVfLt3PnTu3evVs5OTlavXq1vLy8dMsttxRYr23btlq5cqVSUlKUkpJi+y6XVKAd/v3333btsHXr1oqLi9MXX3whs9ksi8Wio0ePFmuaFKA0OLNNOeLmm2/Wf//7X2VmZurs2bNat26dbVmDBg0UEhKiRYsW6fz588rJydGePXuuuU6DwWD3nfn111/b5j6/WJs2bfTrr79qz549slgsWrt2ra33ev7y9evXKy4uTpmZmbb5HaW83nBdunTRO++8o4SEBElSUlKSfvrpp2uOHyTcUIQb5UC2fft2nThxQlarVd7e3jKZTFd1t8KcnBxlZ2fbeu/t3LlTv/32W7G27dq1qxYvXqzY2FhJeXegyr+LFFCanNHus7Oz9fXXXystLU0mk0k+Pj4yGAxX1a7Onz9f7OTBxRo0aKCAgABFR0crMzNTVqtVJ0+edMoPH6C8aN++vSZNmqTHH39cRqNRw4cPV4cOHVStWjX17t1bAwcOLDBNwsV69eql7Oxsde/eXS+88IKaN29e7Lq9vLwUGRmp33//Xb1791afPn1s31v169fX+PHjFRUVpW7duqlv375au3atrFarJGny5MmKiYlR9+7dNX/+fLth48D1KDExUdOnT9ejjz6qJ598UkFBQerTp48kqVOnToqNjVWXLl304osvXrGshx56SGvXrlWXLl30008/afr06YX2punfv79q1Kih8PBwDRs2TPfee6/d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KCIiokryAQAAAAAAoHYxXbjVr19fW7du9RZdv/bTTz/p4osvtiTYry1btkzLli1TXFycbrzxRvXu3btSj7N582ZFR0eXKdsyMjKUkZHhve1wOErtRWcFp9NZ6r92YLdMdssj2S+T3fJI9swEAAAAAEB1Ml243XHHHUpNTVXz5s119dVXS5IMw9DmzZv10ksv6S9/+YulAW+88Ubdc889Cg0N1c8//6xJkyYpNDRUXbt2NfU4R44c0cyZM3X//feXWfbJJ59o1qxZ3ttDhgzRiBEjLjh7eey4Z53dMtktj2S/THbLI9kzEwAAAAAA1cF04Zaamqqff/5ZvXv3VmxsrCTp97//vdLT09W3b189/vjjlgZMSkry/n+bNm30hz/8QatXrzZVuKWnp2vcuHEaMGCAunfvXmb5gAED1KNHD+9th8Oh7OzsCwv+G06nUxEREcrJyZHL5bL0sSvLbpnslkeyXya75ZF8myk6OtrSxwMAAAAAoCqYLtyCgoL02Wef6ZtvvtGXX36pjIwMxcTEqFevXurVq5cvMpZiGIY8Hk+F18/IyNBTTz2l66+/Xv379y93nbi4OMXFxZXaxldlhsvlsk1RcobdMtktj2S/THbLI9kzEwAAAAAA1cF04XbGNddco2uuucbKLOVatWqV2rVrp+DgYG3dulVffPFFqcNCS0pK5Ha7vX+KiorkdDrldDqVmZmpsWPH6uqrr9att97q86wAAAAAAACA6cJt//79Z13mcDgUGRmp8PDwCwr1a59//rmmTZsmt9utuLg4DR48WFdddZV3+dSpU/X11197by9cuFCDBg3SHXfcoeXLl+vw4cNauHChFi5c6F1n2rRpll8UAQAAAAAAAJAqUbhdcsklMgzjvOuMHDlSDz74YKWDnfHiiy+ec/nIkSM1cuTIcpfdfvvtuv322y84AwAAAAAAQE1Wkp1Vo56nupku3N5//3098cQTSklJUb9+/RQfH69jx45p4cKF2rFjhx5//HGtWbNGo0aNkiRLSjcAAAAAAAD4QFCQZBhKmzC+6p7TME4/bw1munBbuXKlbrjhBs2cObPU/SNGjND999+vDRs26L333lNERITeeOMNCjcAAAAAAACbcoSGKSJ1olRUZG7DvFzlvDZZEQ89KoWZPLVYUJAcoWHmtvEzpgu3efPmaf78+eUuu+222zRw4EC9+eab6tu3r958880LDggAAAAAAADfcYSGSaEmN3I6T28bGSVFRFofys85TG/gcGjjxo3lLvvxxx/lcJx+SKfTqbp1615YOgAAAAAAAMDPmN7D7c4779S4ceNUVFSkG2+8UfXq1VN6ero+++wzTZgwQcOGDZMkbdiwQS1btrQ8MAAAAAAAAGBnpgu3KVOmKCAgQBMmTNC4ceO899epU0fDhw/XpEmTJEndunXT9ddfb11SAAAAAAAAwA+YLtwCAwP18ssva9y4cdq0aZMOHz6sBg0aqHXr1oqJifGud9VVV1kaFAAAAAAAAPAHpgu3M6KjoynVAAAAAAAAgN+odOG2c+dObd++XQUFBWWW3XLLLRcUCgAAAAAAAPBXpgu3nJwc3Xzzzfr2228lSR6PR5JkGIZ3HZfLZU06AAAAAAAAwM84zG4wZswYHTlyRCtXrpTH49HChQv17bffaujQoWrSpInWrl3ri5wAAAAAAACAXzBduC1dulRjx45Vp06dJEkNGzbUVVddpX/84x/q16+fpkyZYnlIAAAAAAAAwF+YLtyOHTumxMREOZ1OhYaGKjMz07usT58+Wrp0qaUBAQAAAAAAAH9iunBLTExURkaGJCk5OVmLFi3yLluzZo2Cg4OtSwcAAAAAAAD4GdMXTejdu7f+9a9/6eabb9aoUaN09913a926dQoKCtL333+vhx9+2Bc5AQAAAAAAAL9gunCbNGmSTp48KUm66667FBYWpo8//linTp3S1KlTNWzYMMtDAgAAAAAAAP7CdOEWEhKikJAQ7+2bb75ZN998s6WhAAAAAAAAAH9lunDLzc1VYWGh4uLivPd98MEH2rJli3r27KlrrrnG0oAAAAAAAACAPzFduA0ePFgNGzbU9OnTJUnPPvusUlNTFRMToxdffFFz5szRwIEDLQ8KAAAAAPBPJdlZNep5AOB8TBdu69ev17Rp0yRJHo9H06ZN05NPPqkJEyZo9OjRmjx5MoUbAAAAAEAKCpIMQ2kTxlfdcxrG6ecFgGpkunDLysryHk66YcMGZWRk6J577pEk3XTTTfrnP/9pbUIAAAAAgF9yhIYpInWiVFRkbsO8XOW8NlkRDz0qhYWb2zYoSI7QMHPbAIDFTBduCQkJ+uWXX9S9e3d98cUXuuSSS9S0aVNJUn5+vgICTD8kAAAAAKCGcoSGSaEmN3I6T28bGSVFRFofCgB8zHQ7NnDgQD322GP617/+pSVLlmjMmDHeZf/7v/+r5ORkSwMCAAAAAAAA/sR04TZx4kSFh4dr/fr1euSRR/TEE094l23YsIHztwEAAAAAAKBWM124BQQEaPz48k94uXDhwgsOBAAAAAAAAPgzR3UHAAAAAAAAAGoS03u4ORwOGYZxznVcLlelAwEAAAAAAAD+zHTh9vLLL5cp3LKzs7V8+XIdOnRII0eOtCwcAAAAAAAA4G9MF25nK9RSU1P1pz/9SVlZWRccCgAAAAAAAPBXlp7DbfDgwZo5c6aVDwkAAAAAAAD4FUsLt23btsntdlv5kAAAAAAAAIBfqdQ53H6rqKhIW7Zs0UcffaQ77rjDkmAAAAAAAACAPzJduD3yyCNl7qtTp44aNWqkhx56SOPGjbMkGAAAAAAAAOCPTBduHDIKAAAAAABQuxnBdRXdb4AUXFee6g5jQ5aeww0AAAAAAAA1n6NuXcXefJscdetWdxRbonADAAAAAAAALEThBgAAAAAAAFiIwg0AAAAAAACwEIUbAAAAAAAAYCHThdvSpUvl8XD9CQAAAAAAAKA8pgu3Pn366OKLL9b48eO1Z88eX2QCAAAAAAAA/Jbpwu3nn3/WH//4R82aNUvJycm69tprNWfOHBUWFvoiHwAAAAAAAOBXTBduLVq00OTJk3Xw4EEtWLBAERERGjJkiOrXr6/hw4drw4YNvsgJAAAAAAAA+IVKXzTB6XTqpptu0qeffqo9e/aobdu2mj59ujp27Ki2bdvq7bfftjInAAAAAAAA4Bcu6CqlW7Zs0SOPPKL27dtr7dq1uu222/TBBx+obdu2euCBB/TAAw9YlRMAAAAAAADwCwFmN8jLy9PcuXP11ltv6fvvv1dKSooeffRR3X333YqLi5MkDRo0SL1799Zf//pXzZgxw/LQAAAAAAAAgF2ZLtwSEhLk8Xh066236qWXXlL37t3LXe/yyy/3FnAAAAAAAABAbWG6cJs0aZIGDx6sqKioc67XunVr7dmzp9LBAAAAAAAAAH9k6hxuBQUFmjVrlr7//ntf5QEAAAAAAAD8mqnCLTg4WGlpaXI4LuhaCwAAAAAAAECNZbo5u+WWWzR//nxfZAEAAAAAAAD8nulzuHXr1k1PPvmk+vbtqz59+ighIUGGYZRa55ZbbrEsIAAAAAAAAOBPTBduf/7znyVJhw8f1pIlS8osNwxDLpfrwpMBAAAAAAAAfsh04caVRwEAAAAAAICzM124XXzxxb7IAQAAAAAAANQIpgs3SfJ4PFqyZIlWrVqlrKwsxcTEqHv37vr9739f5nxuAAAAAAAAQG1iunDLzs5Wnz59tG7dOkVFRSkhIUFHjx7VpEmT1LlzZy1ZskRRUVG+yAoAAAAAAADYnsPsBo888oh27dqlZcuWKSsrS1u2bFFWVpaWLVumXbt26ZFHHvFFTgAAAABALWEE11V0vwEygutWdxQAqBTThduiRYs0adIk9e7du9T9vXv31sSJE/XZZ59ZFg4AAAAAUPs46tZV7M23yVGXwg2AfzJduOXn5yshIaHcZfXr11d+fv4FhwIAAAAAAAD8lenC7fLLL9fUqVPlcrlK3e92u/X666+rXbt2loUDAAAAAAAA/I3piyZMnDhR1113nS699FL169dPCQkJOnbsmD799FMdOXJEy5cv90VOAAAAAAAAwC+YLtyuuuoqrV69Ws8//7zmzJmj7OxsxcTE6Morr9TYsWPZww0AAAAAAAC1munCTZLat2+vBQsWWJ0FAAAAAAAA8Humz+EGAAAAAAAA4OwqtYfbvHnz9NFHH+nAgQMqKCgotcwwDG3cuNGScAAAAAAAAIC/MV24Pfnkk3rxxRfVvn17paSkKCgoyBe5AAAAAAAAAL9kunB766239Oyzz+qpp57yRR4AAAAAAADAr1XqHG6dOnWyOgcAAAAAAABQI5gu3O69917NmTPHF1kAAAAAAAAAv2f6kNLnnntODz30kLp166aePXsqKiqq1HLDMDRq1CjLAgIAAAAAAAD+xHTh9vXXX+udd95Rbm6u1qxZU2Y5hRsAAAAAAABqM9OHlA4fPlwdOnTQpk2bVFhYKLfbXeqPy+XyRU4AAAAAAADAL5jew+3AgQN6/fXX1apVK1/kAQAAAAAAAPya6T3crrzySm3bts0XWQAAAAAAAAC/Z3oPtxdeeEF33323goKC1KtXrzIXTZCkmJgYS8IBAAAAAAAA/sZ04XbFFVdIkh544AEZhlHuOpzHDQAAAAAAALWV6cLtrbfeOmvRBgAAAAAAANR2pgu3IUOG+CAGAAAAAAAAUDOYvmjCGdnZ2Vq5cqXmzJmj7OxsSVJBQYHcbrdl4QAAAAAAAAB/Y7pwc7vdevLJJ5WYmKgePXrorrvu0p49eyRJt9xyi5577jnLQwIAAAAAAAD+wnThNn78eE2dOlVTpkzR9u3b5fF4vMtuuukmLV682NKAAAAAAAAAgD8xfQ632bNn64UXXtCwYcPKXI00KSlJu3btsiwcAAAAAAAA4G9M7+GWmZmpFi1alLvM5XKpuLj4gkMBAAAAAAAA/sp04ZaSkqIvv/yy3GXffvutWrdufcGhAAAAAAAAAH9l+pDSUaNG6b777lNgYKBuvfVWSdLBgwe1Zs0a/f3vf9fs2bOtzggAAAAAAAD4DdOF25AhQ5SVlaXU1FS98MILkqT+/fsrNDRUEyZM0MCBAy0PCQAAAAAAAPgL04WbJI0ePVr333+/Vq9erczMTMXExKhLly6KjIy0Oh8AAAAAAADgVypVuElSWFiYrr/+eiuzAAAAAAAAAH6vUoXbyZMn9dVXX+nAgQMqKCgotcwwDI0aNcqScAAAAAAAAIC/MV24fffddxowYICysrLKXU7hBgAAAAAAgNrMYXaD4cOHq02bNtq0aZMKCwvldrtL/XG5XL7ICQAAAAAAAPgF03u47du3T6+++qpatWrlizwAAAAAAACAXzO9h1u3bt20bds2X2QBAAAAAAAA/J7pPdxmzpyp2267TUFBQerZs6eioqLKrBMTE2NJOAAAAAAAAMDfmC7coqKidPHFF2vYsGEyDKPcdTiPGwAAAAAAAGor04XbXXfdpVWrVunhhx9WSkqKgoKCfJELAAAAAAAA8EumC7evvvpKM2fO1ODBg32RBwAAAAAAAPBrpi+acNFFFykyMtIXWQAAAAAAAAC/Z7pwe/bZZzVx4kRlZ2f7Ig8AAAAAAADg10wfUvrBBx9o//79uvjii3XZZZeVuUqpYRj67LPPLAsIAAAAAAAA+BPThVteXp6Sk5O9t3Nzcy0NBAAAAAAAAPgz04XbN99844scAAAAAAAAQI1g+hxuAAAAAAAAAM6Owg0AAAAAAACwEIUbAAAAAAAAYCEKNwAAAAAAAMBCFG4AAAAAAACAhUwXbkuXLj3n8ueff77SYQAAAAAAAAB/F2B2gwEDBmjp0qXq3r17mWVjx47V3/72N40dO9aScJJUXFysGTNmaOPGjcrNzVVcXJwGDhyoHj16SJLuvfdeHT9+XA7H6e6wXr16mjZtmnf7oqIivfPOO1qxYoWKiorUsGFDPf/88woJCbEsI1DTffXVV1q1apXS0tLUrl07PfDAA95lBw8e1PPPP6+9e/cqNjZWgwcPVosWLSRJGzdu1JIlS3Tw4EEFBASoRYsWuv322xUZGVnmOV566SVt3bpVM2fOVGBgYJW9NgAAAAAArGa6cBszZoz69u2rr776Sh06dPDeP2rUKM2YMUPz58+3NKDL5VJMTIwmTJighIQEbdmyRc8++6wSEhLUvHlzSdITTzyh9u3bl7v9G2+8oYKCAv39739XZGSk9u3bx5t5wKSoqCjdeOON+uWXX5SXl+e9v6SkRK+88opuuOEGPfbYY/rPf/6jqVOnauLEiYqIiNCpU6fUp08fNW/eXB6PR++++67efPNNjR49utTjr169Wm63u6pfFgAAAAAAPmH6kNLx48fr/vvv1w033KDNmzdLkh544AHNnDlTCxcuVL9+/SwNGBwcrDvvvFP169eXYRhq2bKlWrRooS1btpx324MHD2rNmjUaMWKEoqOj5XA41KRJEwo3wKT27durXbt2CgsLK3X/tm3bVFRUpFtvvVWBgYHq2LGjLrroIq1fv16S1LlzZ7Vt21Z16tRRcHCwevXqpR07dpR6jLy8PC1evFi33XZblb0eAAAAAAB8yfQebpI0efJk5eXlqXfv3rryyiu1dOlSffHFF7rmmmuszldGQUGBdu7cqRtvvNF736uvviqPx6PGjRtr8ODBatmypSRpx44dio+P14cffqhvvvlGERER6t+/v6677jqf5wRqg7S0NDVq1Mh7SLckJSYmKi0trdz1t23bpkaNGpW6b/78+erdu3e5h5n+WkZGhjIyMry3AwICFBsbewHpy3I6naX+W93slkciU0XYLY9kz0wAAABATVapwk2Spk+frvz8fC1evFjLli1T165drcxVLrfbrVdffVXJycm6/PLLJUmjR49WUlKSpNPnmXrmmWf0+uuvKz4+Xunp6dq3b586duyot99+W3v37tX48ePVsGFDtW7d2vu4v30j73A4VK9ePUuz2/HNjt0y2S2PZL9M1Z3H4XDIMAzv8xcVFSk0NLRUprCwMGVkZJTJuGvXLn3++ecaPXq0d9nWrVuVlpamoUOHKjMz0/sc5b2+Tz75RLNmzfLevu+++zRs2DDrX6SkiIgInzxuZdktj0SmirBbHsmemQAAAICaqEKFW3h4uAzDKHO/x+NRYWGhbrjhBu99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P/j4pEmTCAoKqtexiIiIiNxPTDabzdbQgxARERHxRPv376dFixaMHTuWRx55hIiICNLS0urt+SdNmsS0adM4f/78dR8/cuQIx48fp0uXLvU2FhEREZH7ibmhByAiIiLiqQoLC7HZbDz77LOkpqY29HAcEhISSEhIaOhhiIiIiHgs3VIqIiIi4gK//vWveeSRRwBo2rQpJpOJuXPnYjKZOHXq1HWPbd++Pb/+9a+v+9zWrVuzbt06OnToQGBgIF27dmX79u3XfZ7VauXNN98kPT0dPz8/YmJiGDRoEGfPnmXSpElMnjyZCxcuYDKZMJlM9O7dG7j5LaWHDh3iF7/4BaGhoQQGBjJgwADy8vKue0xycjIvvfQS77zzDklJSYSGhvLoo49SXl7upJ+aiIiIiGfQhJuIiIiIC0ycOJHXX38dgCVLlrB58+Y7mpg6ceIE//Ef/8F//ud/8sknn3Dp0iUee+wxrly54njM8OHDGTNmDAMHDmTFihW88847BAcHc/78eZ555hl+85vfEBAQwObNm9m8eTOzZs266XNVVVXRu3dvdu7cyf/8z/8wb948Tp8+Ta9evTh8+PB1j12+fDnLly/nnXfeYebMmaxfv57hw4ffxU9IRERExHPpllIRERERF2jatKljv7YOHTqQnJzM3r17b/vzKyoqWL9+Pa1atQIgMDCQPn36sGXLFnr06MG+fft49913mTJlCuPGjXN83uOPP+7474SEBLy8vOjevfuPPtecOXM4dOgQe/bsIT09HYAHHniAJk2a8NZbbzF9+nTHY202G8uXL8fPzw+AkpISpk6ditVqxctL7+WKiIiIgFa4iYiIiBhSXFycY7INICMjA7h64AHA2rVrsdls/OY3v7nn59q4cSOtW7d2TLYBWCwW+vXrxz/+8Y/rHvvAAw84Jtvs47py5QplZWX3PA4RERERT6EJNxEREREDCgsLu+7/fX19Abh06RIAp0+fxmw2ExUVdc/PVVlZSXR09A8+Hh0dTUVFxR2NS0REREQ04SYiIiJSb/z9/QG4fPnydR+vrKy846/VuHFjamtrnbKyzGKx3PTrnDx5EovFcs9fX0REROR+owk3ERERkXqSkJAAQEFBgeNjBQUFPziY4Hb07dsXk8nEnDlz/uVjfH19qampueXX6tGjB3l5eRQWFjo+VllZyVdffUWPHj3ueGwiIiIi9ztNuImIiIjUk27dupGYmMjIkSNZuXIlCxYsYPDgwTRu3PiOv1ZaWhovvPACEyZMYOzYsaxZs4Zly5bx7LPPcvToUQDS09Opra1l5syZbN269boJtWs9/fTTJCUl8fDDD/PRRx+xbNky+vfvj9lsZsSIEff0PYuIiIjcjzThJiIiIlJPfHx8WLp0Kf7+/gwaNIjXXnuNN998k/j4+Lv6em+//TZTp05l6dKlDBw4kBdffJGqqiqCg4MBeOSRRxg2bBivvfYa3bp14/nnn7/p1wkODmbdunW0a9eO5557jiFDhhAeHs6GDRtITEy86+9XRERE5H5lstlstoYehIiIiIiIiIiIiKfQCjcREREREREREREn0oSbiIiIiIiIiIiIE2nCTURERERERERExIk04SYiIiIiIiIiIuJEmnATERERERERERFxIk24iYiIiIiIiIiIOJEm3ERERERERERERJxIE24iIiIiIiIiIiJOpAk3ERERERERERERJ9KEm4iIiIiIiIiIiBNpwk1ERERERERERMSJ/h8KTd2FqTmJygAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 1500x500 with 5 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<ggplot: (8785046244970)>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g = (\n",
" ggplot(m, aes('function', y='peak_memory', color='multi_column'))\n",
" + facet_wrap(' ~ case', scales='free', ncol=5)\n",
" + geom_boxplot()\n",
" + theme(axis_text_x=element_text(angle=45, hjust=1), figure_size=(15, 5), legend_position='top')\n",
" + scale_y_continuous(trans='log2')\n",
" + labs(color='')\n",
" + ylab('Peak memory usage')\n",
")\n",
"g"
]
}
],
"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.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment