1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from plotnine import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# results_df = pd.read_csv('structures_experiment_results_1.csv')\n",
"results_df = pd.read_csv('./experiment_results/long_chain_results_sin1.csv')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"results_df['cat_retries'] = pd.Categorical(results_df['retries']).rename_categories({100: 'Fail'})\n",
"# results_df['fraction'] = results_df['reqs'] / (365*24*60*60)\n",
"results_df['fraction'] = results_df['reqs'] / (365*24*60*60/2) # For sin stuff\n",
"min_max_per_exp = results_df.groupby(['vendor', 'experiment', 'cat_retries'])['fraction'].agg(['min', 'max', 'mean']).reset_index().fillna(0)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/sacheendra/miniconda3/envs/thesis/lib/python3.8/site-packages/plotnine/ggplot.py:719: PlotnineWarning: Saving 6.4 x 4.8 in image.\n",
"/home/sacheendra/miniconda3/envs/thesis/lib/python3.8/site-packages/plotnine/ggplot.py:722: PlotnineWarning: Filename: deep chain comparison.png\n",
"/home/sacheendra/miniconda3/envs/thesis/lib/python3.8/site-packages/pandas/core/series.py:726: RuntimeWarning: divide by zero encountered in log10\n",
"/home/sacheendra/miniconda3/envs/thesis/lib/python3.8/site-packages/plotnine/ggplot.py:719: PlotnineWarning: Saving 6.4 x 4.8 in image.\n",
"/home/sacheendra/miniconda3/envs/thesis/lib/python3.8/site-packages/plotnine/ggplot.py:722: PlotnineWarning: Filename: deep chain comparison.pdf\n",
"/home/sacheendra/miniconda3/envs/thesis/lib/python3.8/site-packages/pandas/core/series.py:726: RuntimeWarning: divide by zero encountered in log10\n",
"/home/sacheendra/miniconda3/envs/thesis/lib/python3.8/site-packages/pandas/core/series.py:726: RuntimeWarning: divide by zero encountered in log10\n"
]
},
{
"data": {
"image/png": "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GzeuhMMtuzhnq3RiTsSYEzHmRIw5EWNOxKSeE23nbOl0N+J3332HJUuWYOLEifjtt980TmZnZ4fevXtjx44duhyaiIiIqEzRaWRrzZo1GDJkCL799lvEx8eL9jds2BAHDx585eCMCedslU7MiRhzIsaciDEnYsyJmNRzotd1th49egRvb+8i91tZWSElJUWXQxMRERGVKToVWy4uLnj06FGR+y9cuIBq1arpHBQRERFRWaHT2Fzv3r2xcuVKDB06FHZ2dgD+P5R2+PBhBAcH44svvii5KI0AJ8iXTsyJGHMixpyIMSdizImY1HOi1wnyM2fORKVKlfDmm29iyJAhkMlkCAoKQqtWrdClSxc0bNgQkydP1uXQRERERGWKzivI//7771i4cCG2b98Oc3NznDx5EjVr1sT06dPx+eefw8LCoqRjLdM4Qb50Yk7EmBMx5kSMORFjTsSknhO9LWqalZWF1atX480338SUKVMwZcqUYgdHREREZCyKfRnR3NwcX375JSIjI/URDxEREVGZotOcLS8vL9y/f7+EQyEiIiIqe3QqtubMmYNVq1bhyJEjJR0PERERUZmi06yzpUuXwtHREZ06dYK7uzvc3d1FE+JlMhn27NlTIkEaAy79UDoxJ2LMiRhzIsaciDEnYlLPibZLP+hUbF25cgUymQzVqlWDUqnEnTt3RH20naFPREREVJbpVGxxvlbJ49IPpRNzIsaciDEnYsyJGHMiJvWc6PXZiERERESkHemWiwaQm5uL5cuX4/Lly0hPT0fVqlUxbNgw1K1b19ChERERUSnFYutflEolKlSogKCgIDg5OeHMmTOYPXs21q5dyxXxiYqgTE2BKidHva1KSkSuuZl6W25qCoWNrSFCIyKSBBZb/2Jubo7+/furt99++2389NNPiI2NRa1atQwYGZE0KVNTED1mBPCfO3Ie/HtDJoP7D6tYcBGR0ZJksZWZmYldu3YhMjISUVFRSEtLw9ixY9G+fXtR39zcXGzevBknTpxAWloa3NzcMHDgQDRq1OiV4/j777+RmpqKSpUqAQDi4+OxbNkyXL9+HeXLl0dAQACaN2+u8ZqzZ89ixYoVWLlyJaysrF45BiIpU+XkiAotEUGAKicHitcTEhGR5Gg1Qb537944ffq0evvUqVN49uyZ3oJKSUlBWFgYYmJi4O7u/sK+ixcvxp49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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<ggplot: (8762072340285)>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"experiment = 'deep chain'\n",
"specific_min_max = min_max_per_exp[(min_max_per_exp['experiment'] == experiment)]\n",
"plt = ggplot(specific_min_max) +\\\n",
" theme_light(base_size=12, base_family='sans-serif') +\\\n",
" theme(text=element_text(size=12), legend_position=(0.3, 0.25)) +\\\n",
" geom_point(aes(x='cat_retries', y='mean', color='vendor', group='vendor'), size=3, shape='s') +\\\n",
" scale_y_log10(limits=[1, 1e-8], breaks = [0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001, 0.4e-8],\n",
" labels=['10%', '1%', '0.1%', '$10^{-2}$%', '$10^{-3}$%', '$10^{-4}$%', '$10^{-5}$%', '0']) +\\\n",
" guides(color=guide_legend(title='Workload'), fill=guide_legend(title='Workload')) +\\\n",
" scale_color_discrete(labels=['Instagram trace', 'Constant']) +\\\n",
" xlab('Number of retries')+\\\n",
" ylab('Fraction of requests')\n",
"\n",
"plt.save(f'{experiment} comparison.png', dpi=300)\n",
"plt.save(f'{experiment} comparison.pdf')\n",
"plt"
]
}
],
"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.8.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
|