{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Preconditions\n",
    "In this analysis we use report by the python script `serde.py` (which is located in the repository) executed with such parameters:\n",
    "\n",
    "`python ./serde.py -n=1000 -r=10 --input_path=./data/data_1.json --output_path=./reports/report.csv`\n",
    "\n",
    "Incoming dataset: data_1.json - randomly generated JSON file with demographic data.\n",
    "\n",
    "Number of executions: 1000 - more on that [here](https://docs.python.org/3/library/timeit.html#timeit.Timer.timeit)\n",
    "\n",
    "Number of repeats: 10 - more on that [here](https://docs.python.org/3/library/timeit.html#timeit.Timer.repeat)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {},
   "outputs": [],
   "source": [
    "dt = pd.read_csv(\"./reports/report.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "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>protocol</th>\n",
       "      <th>compression</th>\n",
       "      <th>size</th>\n",
       "      <th>serialize</th>\n",
       "      <th>deserialize</th>\n",
       "      <th>compression rate</th>\n",
       "      <th>serialization_perf_rate</th>\n",
       "      <th>deserialization_perf_rate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>json</td>\n",
       "      <td>none</td>\n",
       "      <td>1847</td>\n",
       "      <td>0.007438</td>\n",
       "      <td>0.012850</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.397034</td>\n",
       "      <td>24.238534</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>json</td>\n",
       "      <td>bz2</td>\n",
       "      <td>443</td>\n",
       "      <td>0.223569</td>\n",
       "      <td>0.046816</td>\n",
       "      <td>76.015160</td>\n",
       "      <td>72.047666</td>\n",
       "      <td>88.308188</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>json</td>\n",
       "      <td>zlib</td>\n",
       "      <td>423</td>\n",
       "      <td>0.035219</td>\n",
       "      <td>0.018151</td>\n",
       "      <td>77.097997</td>\n",
       "      <td>11.349695</td>\n",
       "      <td>34.236843</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>json</td>\n",
       "      <td>snappy</td>\n",
       "      <td>708</td>\n",
       "      <td>0.010927</td>\n",
       "      <td>0.014115</td>\n",
       "      <td>61.667569</td>\n",
       "      <td>3.521453</td>\n",
       "      <td>26.624665</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>msgpack</td>\n",
       "      <td>none</td>\n",
       "      <td>1648</td>\n",
       "      <td>0.006349</td>\n",
       "      <td>0.006947</td>\n",
       "      <td>10.774228</td>\n",
       "      <td>2.046000</td>\n",
       "      <td>13.103128</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>msgpack</td>\n",
       "      <td>bz2</td>\n",
       "      <td>552</td>\n",
       "      <td>0.304665</td>\n",
       "      <td>0.048315</td>\n",
       "      <td>70.113698</td>\n",
       "      <td>98.181509</td>\n",
       "      <td>91.134417</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>msgpack</td>\n",
       "      <td>zlib</td>\n",
       "      <td>473</td>\n",
       "      <td>0.045302</td>\n",
       "      <td>0.012471</td>\n",
       "      <td>74.390904</td>\n",
       "      <td>14.598987</td>\n",
       "      <td>23.524499</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>msgpack</td>\n",
       "      <td>snappy</td>\n",
       "      <td>590</td>\n",
       "      <td>0.009955</td>\n",
       "      <td>0.008410</td>\n",
       "      <td>68.056308</td>\n",
       "      <td>3.208049</td>\n",
       "      <td>15.863047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>cbor</td>\n",
       "      <td>none</td>\n",
       "      <td>1694</td>\n",
       "      <td>0.006143</td>\n",
       "      <td>0.009993</td>\n",
       "      <td>8.283703</td>\n",
       "      <td>1.979558</td>\n",
       "      <td>18.850118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>cbor</td>\n",
       "      <td>bz2</td>\n",
       "      <td>537</td>\n",
       "      <td>0.310308</td>\n",
       "      <td>0.053015</td>\n",
       "      <td>70.925826</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>cbor</td>\n",
       "      <td>zlib</td>\n",
       "      <td>482</td>\n",
       "      <td>0.043570</td>\n",
       "      <td>0.015548</td>\n",
       "      <td>73.903628</td>\n",
       "      <td>14.040746</td>\n",
       "      <td>29.327289</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>cbor</td>\n",
       "      <td>snappy</td>\n",
       "      <td>607</td>\n",
       "      <td>0.008844</td>\n",
       "      <td>0.011480</td>\n",
       "      <td>67.135896</td>\n",
       "      <td>2.850100</td>\n",
       "      <td>21.654341</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>proto</td>\n",
       "      <td>none</td>\n",
       "      <td>234</td>\n",
       "      <td>0.008248</td>\n",
       "      <td>0.003437</td>\n",
       "      <td>87.330807</td>\n",
       "      <td>2.658142</td>\n",
       "      <td>6.484056</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>proto</td>\n",
       "      <td>bz2</td>\n",
       "      <td>337</td>\n",
       "      <td>0.095620</td>\n",
       "      <td>0.021414</td>\n",
       "      <td>81.754196</td>\n",
       "      <td>30.814634</td>\n",
       "      <td>40.392823</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>proto</td>\n",
       "      <td>zlib</td>\n",
       "      <td>245</td>\n",
       "      <td>0.026605</td>\n",
       "      <td>0.004238</td>\n",
       "      <td>86.735246</td>\n",
       "      <td>8.573606</td>\n",
       "      <td>7.994201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>proto</td>\n",
       "      <td>snappy</td>\n",
       "      <td>238</td>\n",
       "      <td>0.008849</td>\n",
       "      <td>0.004099</td>\n",
       "      <td>87.114239</td>\n",
       "      <td>2.851664</td>\n",
       "      <td>7.732734</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   protocol compression  size  serialize  deserialize  compression rate  \\\n",
       "0      json        none  1847   0.007438     0.012850          0.000000   \n",
       "1      json         bz2   443   0.223569     0.046816         76.015160   \n",
       "2      json        zlib   423   0.035219     0.018151         77.097997   \n",
       "3      json      snappy   708   0.010927     0.014115         61.667569   \n",
       "4   msgpack        none  1648   0.006349     0.006947         10.774228   \n",
       "5   msgpack         bz2   552   0.304665     0.048315         70.113698   \n",
       "6   msgpack        zlib   473   0.045302     0.012471         74.390904   \n",
       "7   msgpack      snappy   590   0.009955     0.008410         68.056308   \n",
       "8      cbor        none  1694   0.006143     0.009993          8.283703   \n",
       "9      cbor         bz2   537   0.310308     0.053015         70.925826   \n",
       "10     cbor        zlib   482   0.043570     0.015548         73.903628   \n",
       "11     cbor      snappy   607   0.008844     0.011480         67.135896   \n",
       "12    proto        none   234   0.008248     0.003437         87.330807   \n",
       "13    proto         bz2   337   0.095620     0.021414         81.754196   \n",
       "14    proto        zlib   245   0.026605     0.004238         86.735246   \n",
       "15    proto      snappy   238   0.008849     0.004099         87.114239   \n",
       "\n",
       "    serialization_perf_rate  deserialization_perf_rate  \n",
       "0                  2.397034                  24.238534  \n",
       "1                 72.047666                  88.308188  \n",
       "2                 11.349695                  34.236843  \n",
       "3                  3.521453                  26.624665  \n",
       "4                  2.046000                  13.103128  \n",
       "5                 98.181509                  91.134417  \n",
       "6                 14.598987                  23.524499  \n",
       "7                  3.208049                  15.863047  \n",
       "8                  1.979558                  18.850118  \n",
       "9                100.000000                 100.000000  \n",
       "10                14.040746                  29.327289  \n",
       "11                 2.850100                  21.654341  \n",
       "12                 2.658142                   6.484056  \n",
       "13                30.814634                  40.392823  \n",
       "14                 8.573606                   7.994201  \n",
       "15                 2.851664                   7.732734  "
      ]
     },
     "execution_count": 196,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt['compression rate'] = 100.0 - dt['size']/dt['size'].max() * 100\n",
    "dt['serialization_perf_rate'] = dt['serialize']/dt['serialize'].max() * 100\n",
    "dt['deserialization_perf_rate'] = dt['deserialize']/dt['deserialize'].max() * 100\n",
    "dt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Size and serialization time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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q65KsuqO3/nnn5/29vaMHTs2CxcuTLLqdxv33nvvjB49Ou973/vy2GOPJVn1ltWpU6emvb09o0aNytVXX73GGh9//PHsu++++fGPf9zr7z59+vSXXP/F79DR0ZHBgwfnlltuyX777ZehQ4cmSfbZZ58sWrSo9wUGAOBlcccRXsMWLlyYK6+8MhdddFH22muvXHrppZkzZ06uvfba/O3f/m1eeOGFnHfeedl///2zdOnSDBo0KN///vfT2dmZe++9N3/4wx+y66675oQTTuiZc8iQIVmwYEEuueSSfOYzn8mPfvSjvPe9781tt92WUkpmzJiR6dOn53/9r/+VL33pS9lyyy2zYMGCJKteqPOixx57LEceeWS+/OUv59BDD+31d3pxvtWv/+LPh/zwhz/M9OnTs99++60x5sILL8wRRxzx55QSAIAGgiO8Bi1eujz3/u6pvH3kyLS3tydJdttttxxyyCEppaS9vT2dnZ059thjc9ppp2Xy5Mk5+uijM2LEiMyZMycTJ05MW1tbtt5664wfP36NuQ8++OAkyaRJk3LqqacmSRYtWpSPfexjefTRR/P8889nhx12SJLceOONufzyy3vGvngHcMWKFTnkkENy3nnn5aCDDlq15sWLc8ghhyRZ9bMizz//fH7wgx8kSWbNmtXzPSZNmvSS6yfJr3/963zuc5/LzTffnAED/vdvW95888258MILM2fOnI1RWgAA1sFWVXiNuWbeI9n/azfl1Ct+mUeeWplr5z2SJGlra+v5+Y22trasXLkyn//85zNjxowsW7Ys+++/f+67774Nzl9KecnnT3/605k2bVoWLFiQb33rW3nuueca5+jfv3/23HPP3HDDDT1tw4YNy7x58zJv3ryce+65Oemkk3qOXwyN67v+0qVL89GPfjQXXHBBttlmm57z8+fPzyc+8Ylcc801GTZs2Aa/GwAAr4zgCK8hi5cuz+lXz89zK7ryzPMvpNaav7l6fhYvXb7O/g888EDa29tz+umnZ6+99sp9992X/fffP1dffXW6urry2GOPZfbs2WuMufnmm5MkV1xxRfbdd98kyZ/+9Kdsu+22SZLvfOc7PX0PPfTQnHfeeT3HL25VLaXkoosuyn333feSn/TYkCuuuOIl1z/hhBMyderUHHDAAT39Hn744Rx99NGZNWtWdtppp5d1DQAAXh5bVeE1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97vX3jHN6vyb7xvq3nfUvm+oe99R+76h7n1D3TeeVm5VfSTJdqsdj+hua/VYWqCzszO77LJLJk+enF133TUTJkzIs88+m5EjR+b000/Pe97znlx55ZWZN29e9tlnn4waNSof+chHsmTJklx11VWZO3duJk+enI6Ojixbtiw//elPM3r06LS3t+eEE07I8uXLe72Wu+66K/vuu2923HHHXHDBBUmSM888Mx0dHeno6Mi2226bqVOnZptttsl73vOeJMkWW2yRXXfdNY884p8RAAC8XK0Mjnck2bGUskMpZbMkxya5tpdjb0jy/lLK0O6X4ry/u40+9Ktf/Sonn3xy/uu//itvetOb8s1vfjNJMmzYsNx555059thj89/+23/L1772tcyfPz/t7e0555xzeu40fu9738u8efNSSsmUKVNyxRVXZMGCBVm5cmX++Z//udfrmD9/fm666ab8x3/8R84999z87ne/y7nnnpt58+Zl9uzZefOb35xp06atMaazszO//OUvs/fevd0tDQAAvKhlwbHWujLJtKwKfP+V5F9qrfeUUs4tpRyZJKWUvUopi5JMTPKtUso93WOfSPKlrAqfdyQ5t7uNV9nipctz12+fzJJnlme77bbL/vvvnyQ57rjjMmfOnCTped7wT3/6U5588skcdNBBSZLjjz8+t95660vm/NWvfpUddtghO+2000v6nXLKKT13DhcvXtzz+Stf+UrP+KOOOiqDBw/O8OHDM378+Nx+++1JklprjjvuuJx22mnZc889e/ovXbo0xxxzTL7xjW/kTW9608YuEQAAvO619BnHWut1Sa5bq+3M1T7fkVXbUNc19qIkF7VyfTS7Zt4jOf3q+RnQ1pZnn3g0z61Y8+W3pZQkyeabb77Rrnneeef1fN56660zb968l/R58bprH5999tkZMWJEpk6d2nNuxYoVOeaYYzJ58uQcffTRG22dAADwRtLKraq8hi1eujynXz0/z63oytPLV2b5yq788feP5F9/ekuS5NJLL8173/veNcZsueWWGTp0aH72s58lSWbNmtVz93GLLbbI008/nSTZeeed09nZmYULF76kX29cc801ee6557J48eLMnj07e+21V374wx/mxhtvzD/8wz/09Ku15uMf/3h23XXXnHbaaa+8GAAA8AYnOLJOi5Ysy4C2Nf95bDZsRP7xvPOy6667ZsmSJfnUpz71knHf+c538rnPfS6jRo3KvHnzcuaZq24wT5kyJSeddFI6OjpSa83FF1+ciRMnpr29PW1tbTnppJN6vbZRo0Zl/Pjx2WeffXLGGWfkbW97W/7+7/8+jzzySMaOHZuOjo6ceeaZ+fd///fMmjUrN910U8+W1+uuu27DFwAAANbwmv45DlpnxNDBWdG15tbUtPXLJZfMyrAhA3uaOjs71+jS0dGR22677SXzHXPMMTnmmGN6jg855JD88pe/bFzD5Zdf/pK2s88+e519b7755nW211obrwEAAGyYO46s07AhAzP9mFEZNKAtWwzsn4H927L1mwatERoBAIA3BnccWa8jO7bN/u8ankVLlmXE0MEZ9o9T+npJAABAHxAcaTRsyEB3GQEA4A3OVlUAAAAaCY4AAAA0EhwBAABoJDgCAADQSHAEAACgkeAIAABAI8ERAACARoIjAAAAjQRHAAAAGgmOAAAANBIcAQAAaCQ4AgAA0EhwBAAAoJHgCAAAQCPBEQAAgEaCIwAAAI0ERwAAABoJjgAAADQSHAEAAGgkOAIAANBIcAQAAKCR4AgAAEAjwREAAIBGgiMAAACNBEcAAAAaCY4AAAA0EhwBAABoJDgCAADQSHAEAACgkeAIAABAI8ERAACARoIjAAAAjQRHAAAAGgmOAAAANBIcAQAAaCQ4AgAA0EhwBAAAoJHgCAAAQCPBEQAAgEaCIwAAAI0ERwAAABoJjgAAADQSHAEAAGgkOAIAANBIcAQAAKCR4AgAAEAjwREAAIBGgiMAAACNBEcAAAAaCY4AAAA0EhwBAABoJDgCAADQSHAEAACgkeAIAABAI8ERAACARoIjAAAAjQRHAAAAGgmOAAAANBIcAQAAaCQ4AgAA0EhwBAAAoJHgCAAAQCPBEQAAgEaCIwAAAI1aGhxLKYeXUn5VSllYSvn8Os4PLKVc0X3+P0spI7vbR5ZSlpVS5nX/d34r1wkAAMD69W/VxKWUfknOS3JokkVJ7iilXFtrvXe1bh9PsqTW+q5SyrFJvpbkY93nHqi1drRqfQAAAPROK+84jk2ysNb6YK31+SSXJzlqrT5HJflO9+erkhxSSiktXBMAAAAvU6m1tmbiUiYkObzW+onu479Ksnetddpqfe7u7rOo+/iBJHsnGZLkniT3J3kqyRdrrT9bxzVOTHJikmy11VZ7Xn755Rv9eyxdujRDhgzZ6POyYWrfO0cccUSuv/76jTLXV7/61YwePTqHHXZY/u7v/i4TJ07MyJEjN+o1WDf/3vuO2vcNde87at831L1vvNHqPn78+F/UWse0Yu6WbVX9Mz2a5O211sWllD2T/KCUslut9anVO9Vav53k20kyZsyYOm7cuI2+kNmzZ6cV87Jhat87/fr1a6zTzJkz09nZmbPPPnuDc82cOTODBg3KuHHj1phzQ9fgz+ffe99R+76h7n1H7fuGuvcNdd94WrlV9ZEk2612PKK7bZ19Sin9k2yZZHGtdXmtdXGS1Fp/keSBJDu1cK3QqLOzM7vsskumTJmSnXbaKZMnT86NN96Y/fffPzvuuGNuv/323HLLLeno6EhHR0dGjx6dp59+Ol1dXTn55JOzyy675NBDD80HPvCBXHXVVUmSkSNH5m/+5m/S3t6esWPHZuHChUmSH/7wh9l7770zevTovO9978tjjz2WZNX/YzZ16tS0t7dn1KhRufrqq9dY4+OPP5599903P/7xjzf4febOnduz1vb29qxrh/i4ceMyd+7cnuNTTz01u+22Ww455JD88Y9/fMW1BADgtaeVwfGOJDuWUnYopWyW5Ngk167V59okx3d/npDkplprLaW8pfvlOimlvCPJjkkebOFaYYMWLlyYv/7rv859992X++67L5deemnmzJmTr3/96/nbv/3bHHfccZkwYULmzZuXn/3sZxk8eHC+//3vp7OzM/fee29mzZqV//iP/1hjzi233DILFizItGnT8pnPfCZJ8t73vje33XZbfvnLX+bYY4/N9OnTkyRf+tKXevrPnz8/Bx98cJJk+fLlmTFjRj74wQ/mL//yL7PDDjskSeO2jDFjxmTevHmZN29eDj/88Hz2s59t/O7PPPNMxowZk3vuuScHHXRQzjnnnFdcRwAAXntatlW11rqylDItyQ1J+iW5qNZ6Tynl3CRza63XJrkwyaxSysIkT2RVuEySA5OcW0pZkaQryUm11idatVbojR122CHt7e1J0nPnrZSS9vb2dHZ25q1vfWu+853v5E1velOOPvrojBgxInPmzMnEiRPT1taWrbfeOuPHj19jzkmTJiVJJk6cmFNPPTVJsmjRohxwwAH5wx/+kKFDh/YEwRtvvDGrP8c7dOjQJElXV1fOOeecfPe7381BBx2UJFm8eHGWLVuWjo6OPPHEE3n++efzgx/8IEkya9asnu9xxRVX5M4778y//du/NX73tra2fOxjq154fNxxx+Xoo49+5YUEAOA1p6XPONZar0ty3VptZ672+bkkE9cx7uokV6/dDq+2xUuXZ9GSZel6ZnkGDhzY097W1pbbbrstX/va17JixYo8+uij+fCHP5xnn30206dPz1//9V/nH/7hH5IkK1asyNSpUzN37tz89re/zahRozJhwoQsXbo0J554Yrq6urJy5cqe7aKf/vSnc8ghh2To0KEZN25cz7OJzzzzTI488sgMHDgwL7zwQu6+++7UWlNKyTvf+c7ccMMNOeuss/L1r389Y8aMyeDBgzN+/Pj8y7/8S/7iL/4iP/nJT/KWt7yl5zvcfffdOfvss3PrrbemX79+L6suXn4MAPDG0sqtqvCads28R7L/127KcTP+MxPO/488/dzKnnNLlizJ1VdfnZtuuinXX399tt566zz99NN56qmn8vDDD+fggw/OGWeckb322ivf+MY3kqy6Y1hrzT/90z/lueeeS5Lccccdueqqq3LiiSdm3333TZL86U9/6rmb+J3vfKfnmh/+8Idz2GGH9WwvnTZt1QuKSyk5+eSTc9999+Xhhx/u6f/i9tKvfOUr2X777dfYXvrkk09m0qRJueSSS9YIk+vT1dXV82zmpZdemve+972vqKYAALw2bapvVYU+tXjp8px+9fw8t6Irz6UrK1d25Y9PPZeFjz2dZ55/IYse+V322WefDB8+PEuXLk3//v1z77335qmnnkpHR0d222237LLLLtl1112zbNmy3HjjjTnuuOOy11575bHHHsv999+fJHn729+ecePGZeDAgfnmN7+Zjo6O/OlPf8qXv/zllFIydOjQPPvss1mwYEG++MUv5pRTTsl2222XJ598MhdddFHPetva2nLZZZdlm222yZVXXpkxY8b0bC/97ne/m1GjRuWWW27p6X/NNdfkoYceyic/+cmetnnz5q23Hptvvnluv/32fPnLX85b3/rWXHHFFS2oOgAAmyrBEdZh0ZJlGdDWlufSlSTpv+VWGfnJb+YD/zgnA/u15Q/Dx+Qdbx6QZNXbUe++++5MmTIlBx10UKZOnZokOfDAA9OvX7/svvvuOfXUU7PHHntk7NixGT58eM91xo4dmwsvvLDn+MXwtr6f0Pjc5z6X22+/PXfeeWfPncLJkycnSQYOHJhRo0Zl4sQ1d39PmTIlBx54YG699daetuOPPz7HH3981jZz5szMnj07SXr+Jqve6AoAwBuXraqwDiOGDs6Krq412pa/UPP8yq48vXxl+m3bnmv+v6vz64d+lyR54olV72668sor09XVlQceeCAPPvhgdt5559x7772ZOHFiDjjggHzyk5/M73//++y8884ve022lwIA0FfccYR1GDZkYKYfMyp/c/X8DGhry/KVL6StreS5FavC5GZv2T5vPWBSjnj/Idl80GYZPXp0klVbT8eOHZunnnoq559/fgYNGpR77rknn/rUpzJ37txcccUVmTlzZgYOHJivf/3ra/xO4obYXgoAQF8RHGE9juzYNvu/a3gWLVmWzTfrlw/905w1zg9pPyT//t2vZNiQgeuZYZVBgwbl4osvfkn7lClTMmXKlHWOWVd70/bSF9leCgBAK9iqCg2GDRmYPbb7y7xrqy0y/ZhRGTSgLVsM7J9BA9oy/ZhRGwyNAADweuCOI/TS6ncgRwwdLDQCAPCGITjCyzBsyECBEQCANxxbVQEAAGgkOPK6st9++/X1EjJkyJAkye9+97tMmDAhyaoX2EybNq0vlwUAAK+Y4Mjrys9//vOWzDtu3Lh0dna+rDFve9vben5HEQAAXssER15XhgwZkkcffTQHHnhgOjo6svvuu+dnP/tZkuSyyy5Le3t7dt9995x++ulrjPnCF76QPfbYI/vss08ee+yxXl3rzDPPTEdHRzo6OrLttttm6tSpa5zv7OzM7rvv3nP829/+NuPGjcuOO+6Yc845ZyN8WwAA/v/27jyuqmrv4/hnMcggDgjlVUjBQsUEj4am1wk1s9Sr5lB6NcVSM8sGnwyrWw9Z95bl0/XmdXiuJaipmZplatlgpDaIqMchh0SjR9FKcQIVZNjPHxxO4HDUAk7k9/16nRd7r73O3mv/WBzO7+y115GKocRR/nAWLFhAt27dsNvtbN26FZvNxqFDh4iPj2fNmjXY7XY2btzIe++9B8Dp06dp3bo1W7dupUOHDsyaNeuKjjNx4kTsdjvJycnUqlXrskNRU1JSWLp0Kdu2bWPx4sWkpqb+5nMVEREREakIShzlD6dly5YkJiaSkJDA9u3bqVatGhs3biQ2NpbrrrsOLy8vBg8ezNq1awGoUqUKPXv2BOCWW25xDklNTEx0XlFMTU2le/fu2Gw27rrrLuexLMtiyJAhjBs3jltuucVlu7p27UpQUBB+fn707duX9evXl08ARERERETKmBJHqfQys3PZeuAEmdm5AHTo0IG1a9cSEhJCXFwcc+fOdfl8b29vjDEAeHp6kp+fD8Dw4cOx2+3Y7XZiYmJYtWoVdrudZcuWOZ+bkJBAaGjoBcNUL6b4GJdaFxERERH5vdL3OEql9r49g/il2/D28CCvsJCCQosffviB0NBQRo4cSW5uLps3byY+Pp5HHnmEo0ePEhgYyMKFCxk7duxvOvYHH3zAp59+yueff35F9T/55BOOHTuGn58f7733HrNnz/5NxxcRERERqShKHKXSyszOJX7pNnLyCsmhEIDcAosVH33CjKlT8Pb2JiAggLlz51KnTh1efvllOnXqhGVZ9OjRg969e/+m47/22mtkZGTQqlUrAHr16sXEiRMvWb9Vq1b069ePgwcPMmTIEGJiYn7T8UVEREREKooSR6m0Dh4/i7eHhzNpLDh7Ci+/arTr3p+HHhhxQf1BgwYxaNCgC8qzs7Ody/3793d+92JJycnJF5Rd6kpj8f7CwsLYsWMHAHFxccTFxV32nEREREREfo90j6NUWqGBfuQVFiWN+VmZ/DjvCQJb9yU00M/NLRMRERER+WNR4iiVVlCAD6/0i8bX24PA4Nrc+NAbzHr5bwQF+Li7aSIiIiIifygaqiqVWi9bCG1vCubg8bOEBvopaRQRERERKQdKHKXSCwrwUcIoIiIiIlKONFRVREREREREXFLiWIklJSVx6NChctl3cnIyPXv2BGD58uW8/PLLQNHsoEuWLCmXY4qIiIiIyO+TEsffuYKCgktu+zWJY1hY2FW3oVevXkyYMOGqnyciIiIiIn8MShzdKD09ncaNGzN48GAiIyPp378/Z86cISwsjPj4eFq0aMHixYux2+20bt2a6Oho7rrrLo4fP86SJUtITU1l8ODB2Gw2zp49y2effUbz5s2JiorivvvuIzc394ra0b17d2w2GzabjRo1ajBnzpxS25OSknj44Yed659++ikxMTE0bNiQFStWlGlMRERERETk90eJo5vt2bOHMWPGsGvXLqpXr8706dMBCAoKYvPmzQwcOJChQ4cyadIktm3bRlRUFM8//zz9+/cnJiaG+fPnY7fbMcYQFxfH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BA888ACWZVG/fn1CQkK45557nN8GcLVKjirMz8rkx3lPENi6r/Nexz86XXEsR66u6IiIiIiI/FolkxivGrWpe/9052R3JecEcDX6BmDy5MkEBASQmZmJrUUMVVs0IMexrXqrvtTrNpK3RtxKsxtczxYeHBxc8h47p9zcX77u6/zhsZeaA6HkqKDg4GA2bdrkXL/YrSTR0dGl1kueb+fOnZk4caLLtl+pUqMKg2sT8NAb19TtPEocRUREREQqmctNdnelevbsyYkTJzh37hzxTz3NvzNqQt4vc3WUnHld/ji38/waShxFRERERCqhskhizr+Xrp49gyeXbiPysbnX3AR5V+paHVWoxFFEREREpJIq6yTmWr6iJq4pcRQREREREadr9YqauKZZVUVERERERMSlck0cjTF3GGP2GGPSjDETLrLdxxizyLF9gzEmrMS2pxzle4wx3cqznSIiIiIiInJp5ZY4GmM8gWnAnUATYJAxpsl51e4HjluWdRPwT2CS47lNgIHAzcAdwHTH/kRERERERKSClecVx1ZAmmVZ+y3LOge8DfQ+r05voPhbO5cAXYwxxlH+tmVZuZZlfQ+kOfYnIiIiIiIiFcxYllU+OzamP3CHZVkjHOv3ArdalvVwiTo7HHUOOtb3AbcCCcA3lmW95Sh/E/jQsqwl5x1jFDAKoHbt2re8/fbbZX4e2dnZBAQElPl+5fIUe/dQ3N1DcXcfxd49FHf3UezdQ3F3j2st7p06ddpkWVZMeey7Us+qalnWf4D/AMTExFixsbFlfozk5GTKY79yeYq9eyju7qG4u49i7x6Ku/so9u6huLuH4l52ynOoagZwQ4n1UEfZResYY7yAGkDmFT5XREREREREKkB5Jo4bgQhjTLgxpgpFk90sP6/OcmCYY7k/sMYqGju7HBjomHU1HIgAUsqxrSIiIiIiInIJ5TZU1bKsfGPMw8BqwBOYbVnWt8aYiUCqZVnLgTeBecaYNOAYRckljnrvADuBfOAhy7IKyqutIiIiIiIicmnleo+jZVmrgFXnlT1XYjkHGHCJ5/4d+Ht5tk9EREREREQurzyHqoqIiIiIiMgfgBJHERERERERcUmJo4iIiIiIiLikxFFERERERERcUuIoIiIiIiIiLilxFBEREREREZeUOIqIiIiIiIhLShxFRERERETEJSWOIiIiIiIi4pIS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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = dt.plot(x='size', y='serialize', kind='scatter', grid=True, figsize=(15,10))\n",
    "for line in range(0, dt.shape[0]):\n",
    "    ax.annotate(dt.loc[line]['protocol'] + \"+\" + dt.loc[line]['compression'],(dt.loc[line]['size'], dt.loc[line]['serialize']))\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The left down corner is an ideal combination. The protobuf without serialization is on the same level as protobuf + snappy compression."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Size and deserialization time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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fHw88fHxPP7447z00kve9e3btxMREUFYWBj33HMPS5cu5corr/S2684778RmsxEbG0tBQQEAlmXx+9//nri4OHr16sX+/fu9266//nqSk5MB9zMoc3JyvMeq/hzNDRs2ADB69Ghmz54NwOzZsxk5cqQfoisiIiJSv6jHUUTOstyxn8lL8gix2fjmk8+5JersHrczn+V4vmc7NmzY0Ltc9ZxJcA9jdblcZ93nmJubywcffMDixYv561//ypo1awC8z88Ed8IIMH/+fL799ls2b95MSEgI0dHR3udf+mpnbcvJycm4XC6ys7M5ffo07du393leIiIiIpcD9TiKSA2nK60az7AMamFn+bIlfLH3AACHDx8G4M0336SyspI9e/bw5Zdf0qZNG26++Wbmz58PwOeff85XX31FmzZtvnMbiouLOXr0KH369OGZZ55h27ZtPusfPXqUpvWLqYQAACAASURBVE2bEhISwtq1a9m7d69321dffeXtTTzzGZS1PUcTYPjw4fzqV79Sb6OIiIiIh3ocRaSGU6crazzD8oprb6DpzUO547ZUGoZdQUJCAgA//elPSUpK4tixY7z00kuEhYUxbtw4xo4di91uJzg4mKysrBo9hBfq+PHjDBgwgNLSUizL4s9//rPP+unp6fzXf/0XdrudxMRE2rZt693Wpk0bMjMzGTVqFLGxsYwdO9a7rbbnaFYd79FHH/UOZRURERG53ClxFJEargiy1XiGJUC4PZX18/5w3omCwsLCvPcHVpeRkVHr8ySrtp3puuuuIzc396zy6s/PhP88XzIyMtLbq1idy+UiODiYefPm1frZtT1HEyAnJ4e0tDSuvvrqWvcTERERudwocRSRGoJshpmD4njEc49jeWXlRT/Dsj6aMGEC7733Hu+++26gmyIiIiLyg6HEUUTO0j++Bck/j2RfUQlRjRvU26QxOjqaHTt21LrN5XLVWv6Xv/zFjy0SERERqZ+UOIpIrfQMSxERERGpollVRURERERExCcljiIiIiIickEyMjJYvHhxoJshAaDEUURERERE/K6ioqLGelZWFlOnTg1MY+Q7U+IoIiIiIiK1mjNnDnFxcXTo0IG7774bgNWrV5OYmEjr1q1ZsWIFAKWlpYwcORK73U5CQgJr164F3Mlh//796dmzJ6mpqRf0mdHR0TzxxBN07NgRu92O0+kE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sWPHAOjbty+hoaGEhobStGlTCgoK2LJlC5s3b6Zz584AlJSU0LRp07r5B7jMKHEUEREREalnljv2M3lJHiE2GycPH6TCCvJus9lshIaGepcrKiqYMmUKffv25d133yU5OZlVq1ad9zOMMWctT5gwgUmTJtG/f3+ys7PPe39icHAwnTp1YtWqVd7EsUmTJjgcDsB9j6PL5ar1OFXnEBQUREVFxXnbW1W/+j6WZTFixAj+93//97z7i28aqioiIiIiUo8UFpcxeUkepeWVHC+roKyikq+PlVJYXHbOffbs2YPdbmfy5Ml07twZp9NJcnIyS5YsobKykoKCArKzs2vss2jRIu97t27dADh69CgtWrQA4PXXX/fW7d27N5mZmd71oqIiwJ1wvvbaazidTmbMmPG9z/3mm2/2DjXNzs4mMjKSRo0anbN+x44dWbx4Md988w3g7uHcu3fv927H5UiJo4iIiIhIPbKvqIQQW80/442n/FyeffZZ2rdvT1xcHCEhIdxxxx0MGjSIqKgoYmNjGTZsGB07diQiIsK7T1FREXFxcTz33HM888wzgHsSmsGDB9OpUyciIyO9dR999FGKiopo3749HTp0YO3atd5tQUFBLFiwgDVr1vDCCy98r3OfOnUqmzdvJi4ujilTptRIXmsTHR3N008/zW233UZcXBy9e/fm4MGD36sNlytjWVag21AnEhMTrU2bNtX5cbOzs0lJSanz48r5KfaBobgHhuIeOIp9YCjugaG4B05dxr6wuIzkGWsoLa/0loWF2Fg/uSdNwkN97Hm24uJiwsPDKSwsJCkpifXr19O8eXOio6PZtGlTjeSwPrrcrnljzGbLshL9cWzd4ygiIiIiUo80CQ9l5qA4HvHc41heWcnMQXHfOWkE6NevH0eOHOHUqVM89thjNG/e3A8tlh8DJY4iIiIiIvVM//gWJP88kn1FJUQ1bnBRSSNw1n2NVVwu18U3Tn6UlDiKiIiIiNRDTcJDLzphFPmuNDmOiIiIiIiI+KTEUURERERERHxS4igiIiIiIiI+KXEUERERERERn5Q4ioiIiIiIiE9KHEVERERERMQnJY4iIiIiIiLikxJHERERERER8UmJo4iIiIiIiPikxFFERERERER8UuIoIiIiIiIiPilxrKeysrI4cOCAX46dnZ1Nv379AHj77bf54x//CEBGRgaL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IiLikxJHERERERER8UmJo4iIiIiIiPikxFFERERERER8UuIoIiIiIiIiPilxFBEREREREZ+UOIqIiIiIiIhPShxFRERERETEJyWOIiIiIiIi4pMSRxEREREREfFJiaOIiIiIiIj4pMRRREREREREfFLiKCIiIiIiIj75NXE0xtxujNltjMk3xkypZXuoMWaRZ/snxpjoatt+5ynfbYz5hT/bKSIiIiIiIufmt8TRGBMEZAJ3ALHAUGNM7BnV7gGKLMv6OfAMMMOzbywwBLgRuB14wXM8ERERERERucT82eOYBORblvWlZVmngIXAgDPqDABe9ywvBlKNMcZTvtCyrDLLsv4F5HuOJyIiIiIiIpeYsSzLPwc2Jg243bKs0Z71u4EulmWNr1Znh6fOPs/6HqALMBXYaFnWPE/5q8B7lmUtPuMzfgP8BqBZs2adFi5cWOfnUVxcTHh4eJ0fV85PsQ8MxT0wFPfAUewDQ3EPDMU9cBT7wLjc4t6jR4/NlmUl+uPYwf446KViWdb/Af8HkJiYaKWkpNT5Z2RnZ+OP48r5KfaBobgHhuIeOIp9YCjugaG4B45iHxiKe93x51DV9ZJE0gAACntJREFU/cD11dajPGW11jHGBAMRQOEF7isiIiIiIiKXgD8Tx0+BVsaYGGPMFbgnu3n7jDpvAyM8y2nAGss9dvZtYIhn1tUYoBWQ68e2ioiIiIiIyDn4baiqZVkVxpjxwCogCHjNsqydxpgngU2WZb0NvArMNcbkA4dxJ5d46v0d2AVUAPdZlnXaX20VERERERGRc/PrPY6WZb0LvHtG2ePVlkuBwefY9w/AH/zZPhERERERETk/fw5VFRERERERkR8BJY4iIiIiIiLikxJHERERERER8UmJo4iIiIiIiPikxFFERERERER8UuIoIiIiIiIiPilxFBEREREREZ+UOIqIiIiIiIhPShxFRERERETEJyWOIiIiIiIi4pMSRxEREREREfFJiaOIiIiIiIj4pMRRREREREREfFLiKCIiIiIiIj4pcRQRERERERGflDiKiIiIiIiIT0ocRURERERExCcljiIiIiIiIuKTEkcRERERERHxSYmjiIiIiIiI+KTEUURERERERHxS4igiIiIiIiI+KXEUERERERERn5Q4ioiIiIiIiE9KHEVERERERMQnY1lWoNtQJ4wx3wJ7/XDo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\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = dt.plot(x='size', y='deserialize', kind='scatter', grid=True, figsize=(15,10))\n",
    "for line in range(0, dt.shape[0]):\n",
    "    ax.annotate(dt.loc[line]['protocol'] + \"+\" + dt.loc[line]['compression'],(dt.loc[line]['size'], dt.loc[line]['deserialize']))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Again, protobuf without compression works best for our data record."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Results\n",
    "\n",
    "For our data struct, which is a map of counters, protobuf without additional compression is a winner.\n",
    "\n",
    "Protobuf effectively reduces messages which contain only integer values, but when values are strings it doesn't do anything with them. In this case combination of protobuf/msgpack with zlib/snappy may be a solution."
   ]
  }
 ],
 "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.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
