ml-finance-python

python scripts for finance machine learning

git clone https://9o.is/git/ml-finance-python.git

storage_benchmark.ipynb

(38024B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "code",
      5    "execution_count": 1,
      6    "metadata": {
      7     "ExecuteTime": {
      8      "end_time": "2018-12-25T19:27:23.438404Z",
      9      "start_time": "2018-12-25T19:27:23.433144Z"
     10     }
     11    },
     12    "outputs": [],
     13    "source": [
     14     "from pathlib import Path\n",
     15     "import pandas as pd\n",
     16     "import numpy as np\n",
     17     "import random\n",
     18     "import string"
     19    ]
     20   },
     21   {
     22    "cell_type": "code",
     23    "execution_count": 2,
     24    "metadata": {
     25     "ExecuteTime": {
     26      "end_time": "2018-12-25T19:27:25.704591Z",
     27      "start_time": "2018-12-25T19:27:25.700064Z"
     28     }
     29    },
     30    "outputs": [],
     31    "source": [
     32     "results = {}"
     33    ]
     34   },
     35   {
     36    "cell_type": "markdown",
     37    "metadata": {},
     38    "source": [
     39     "## Generate Test Data"
     40    ]
     41   },
     42   {
     43    "cell_type": "markdown",
     44    "metadata": {},
     45    "source": [
     46     "The test `DataFrame` that can be configured to contain numerical or text data, or both. For the HDF5 library, we test both the fixed and table format. "
     47    ]
     48   },
     49   {
     50    "cell_type": "code",
     51    "execution_count": 3,
     52    "metadata": {
     53     "ExecuteTime": {
     54      "end_time": "2018-12-25T19:27:29.681064Z",
     55      "start_time": "2018-12-25T19:27:29.673414Z"
     56     }
     57    },
     58    "outputs": [],
     59    "source": [
     60     "def generate_test_data(nrows=100000, numerical_cols=2000, text_cols=0, text_length=10):\n",
     61     "    ncols = numerical_cols + text_cols\n",
     62     "    s = \"\".join([random.choice(string.ascii_letters)\n",
     63     "                 for _ in range(text_length)])\n",
     64     "    data = pd.concat([pd.DataFrame(np.random.random(size=(nrows, numerical_cols))),\n",
     65     "                      pd.DataFrame(np.full(shape=(nrows, text_cols), fill_value=s))],\n",
     66     "                     axis=1, ignore_index=True)\n",
     67     "    data.columns = [str(i) for i in data.columns]\n",
     68     "    return data"
     69    ]
     70   },
     71   {
     72    "cell_type": "code",
     73    "execution_count": 4,
     74    "metadata": {
     75     "ExecuteTime": {
     76      "end_time": "2018-12-25T19:27:33.463405Z",
     77      "start_time": "2018-12-25T19:27:29.683069Z"
     78     }
     79    },
     80    "outputs": [
     81     {
     82      "name": "stdout",
     83      "output_type": "stream",
     84      "text": [
     85       "<class 'pandas.core.frame.DataFrame'>\n",
     86       "RangeIndex: 100000 entries, 0 to 99999\n",
     87       "Columns: 2000 entries, 0 to 1999\n",
     88       "dtypes: float64(2000)\n",
     89       "memory usage: 1.5 GB\n"
     90      ]
     91     }
     92    ],
     93    "source": [
     94     "df = generate_test_data()\n",
     95     "df.info()"
     96    ]
     97   },
     98   {
     99    "cell_type": "markdown",
    100    "metadata": {},
    101    "source": [
    102     "## Parquet"
    103    ]
    104   },
    105   {
    106    "cell_type": "markdown",
    107    "metadata": {},
    108    "source": [
    109     "### Size"
    110    ]
    111   },
    112   {
    113    "cell_type": "code",
    114    "execution_count": 7,
    115    "metadata": {
    116     "ExecuteTime": {
    117      "end_time": "2018-12-25T19:29:45.746202Z",
    118      "start_time": "2018-12-25T19:29:45.744438Z"
    119     }
    120    },
    121    "outputs": [],
    122    "source": [
    123     "parquet_file = Path('test.parquet')"
    124    ]
    125   },
    126   {
    127    "cell_type": "code",
    128    "execution_count": 8,
    129    "metadata": {
    130     "ExecuteTime": {
    131      "end_time": "2018-12-25T19:29:57.424957Z",
    132      "start_time": "2018-12-25T19:29:45.747437Z"
    133     }
    134    },
    135    "outputs": [],
    136    "source": [
    137     "df.to_parquet(parquet_file)\n",
    138     "size = parquet_file.stat().st_size"
    139    ]
    140   },
    141   {
    142    "cell_type": "markdown",
    143    "metadata": {},
    144    "source": [
    145     "### Read"
    146    ]
    147   },
    148   {
    149    "cell_type": "code",
    150    "execution_count": 9,
    151    "metadata": {
    152     "ExecuteTime": {
    153      "end_time": "2018-12-25T19:30:04.220835Z",
    154      "start_time": "2018-12-25T19:29:57.426230Z"
    155     }
    156    },
    157    "outputs": [
    158     {
    159      "name": "stdout",
    160      "output_type": "stream",
    161      "text": [
    162       "809 ms ± 14.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
    163      ]
    164     },
    165     {
    166      "data": {
    167       "text/plain": [
    168        "<TimeitResult : 809 ms ± 14.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)>"
    169       ]
    170      },
    171      "execution_count": 9,
    172      "metadata": {},
    173      "output_type": "execute_result"
    174     }
    175    ],
    176    "source": [
    177     "%%timeit -o\n",
    178     "df = pd.read_parquet(parquet_file)"
    179    ]
    180   },
    181   {
    182    "cell_type": "code",
    183    "execution_count": 10,
    184    "metadata": {
    185     "ExecuteTime": {
    186      "end_time": "2018-12-25T19:30:04.224309Z",
    187      "start_time": "2018-12-25T19:30:04.222682Z"
    188     },
    189     "scrolled": true
    190    },
    191    "outputs": [],
    192    "source": [
    193     "read = _"
    194    ]
    195   },
    196   {
    197    "cell_type": "code",
    198    "execution_count": 11,
    199    "metadata": {
    200     "ExecuteTime": {
    201      "end_time": "2018-12-25T19:30:04.416575Z",
    202      "start_time": "2018-12-25T19:30:04.225493Z"
    203     }
    204    },
    205    "outputs": [],
    206    "source": [
    207     "parquet_file.unlink()"
    208    ]
    209   },
    210   {
    211    "cell_type": "markdown",
    212    "metadata": {},
    213    "source": [
    214     "### Write"
    215    ]
    216   },
    217   {
    218    "cell_type": "code",
    219    "execution_count": 12,
    220    "metadata": {
    221     "ExecuteTime": {
    222      "end_time": "2018-12-25T19:31:40.446836Z",
    223      "start_time": "2018-12-25T19:30:04.417448Z"
    224     }
    225    },
    226    "outputs": [
    227     {
    228      "name": "stdout",
    229      "output_type": "stream",
    230      "text": [
    231       "12.1 s ± 32 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
    232      ]
    233     },
    234     {
    235      "data": {
    236       "text/plain": [
    237        "<TimeitResult : 12.1 s ± 32 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)>"
    238       ]
    239      },
    240      "execution_count": 12,
    241      "metadata": {},
    242      "output_type": "execute_result"
    243     }
    244    ],
    245    "source": [
    246     "%%timeit -o\n",
    247     "df.to_parquet(parquet_file)\n",
    248     "parquet_file.unlink()"
    249    ]
    250   },
    251   {
    252    "cell_type": "code",
    253    "execution_count": 13,
    254    "metadata": {
    255     "ExecuteTime": {
    256      "end_time": "2018-12-25T19:31:40.449564Z",
    257      "start_time": "2018-12-25T19:31:40.448011Z"
    258     }
    259    },
    260    "outputs": [],
    261    "source": [
    262     "write = _"
    263    ]
    264   },
    265   {
    266    "cell_type": "markdown",
    267    "metadata": {},
    268    "source": [
    269     "### Results"
    270    ]
    271   },
    272   {
    273    "cell_type": "code",
    274    "execution_count": 14,
    275    "metadata": {
    276     "ExecuteTime": {
    277      "end_time": "2018-12-25T19:31:40.557150Z",
    278      "start_time": "2018-12-25T19:31:40.451140Z"
    279     }
    280    },
    281    "outputs": [],
    282    "source": [
    283     "results['parquet'] = {'read': read.all_runs, 'write': write.all_runs, 'size': size}"
    284    ]
    285   },
    286   {
    287    "cell_type": "markdown",
    288    "metadata": {},
    289    "source": [
    290     "## HDF5"
    291    ]
    292   },
    293   {
    294    "cell_type": "code",
    295    "execution_count": 15,
    296    "metadata": {
    297     "ExecuteTime": {
    298      "end_time": "2018-12-25T19:31:40.621986Z",
    299      "start_time": "2018-12-25T19:31:40.559494Z"
    300     }
    301    },
    302    "outputs": [],
    303    "source": [
    304     "test_store = Path('index.h5')"
    305    ]
    306   },
    307   {
    308    "cell_type": "markdown",
    309    "metadata": {},
    310    "source": [
    311     "### Fixed Format"
    312    ]
    313   },
    314   {
    315    "cell_type": "markdown",
    316    "metadata": {},
    317    "source": [
    318     "#### Size"
    319    ]
    320   },
    321   {
    322    "cell_type": "code",
    323    "execution_count": 16,
    324    "metadata": {
    325     "ExecuteTime": {
    326      "end_time": "2018-12-25T19:31:44.809005Z",
    327      "start_time": "2018-12-25T19:31:40.635426Z"
    328     }
    329    },
    330    "outputs": [],
    331    "source": [
    332     "with pd.HDFStore(test_store) as store:\n",
    333     "    store.put('file', df)\n",
    334     "size = test_store.stat().st_size"
    335    ]
    336   },
    337   {
    338    "cell_type": "markdown",
    339    "metadata": {},
    340    "source": [
    341     "#### Read"
    342    ]
    343   },
    344   {
    345    "cell_type": "code",
    346    "execution_count": 17,
    347    "metadata": {
    348     "ExecuteTime": {
    349      "end_time": "2018-12-25T19:31:48.408215Z",
    350      "start_time": "2018-12-25T19:31:44.809934Z"
    351     }
    352    },
    353    "outputs": [
    354     {
    355      "name": "stdout",
    356      "output_type": "stream",
    357      "text": [
    358       "449 ms ± 9.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
    359      ]
    360     },
    361     {
    362      "data": {
    363       "text/plain": [
    364        "<TimeitResult : 449 ms ± 9.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)>"
    365       ]
    366      },
    367      "execution_count": 17,
    368      "metadata": {},
    369      "output_type": "execute_result"
    370     }
    371    ],
    372    "source": [
    373     "%%timeit -o\n",
    374     "with pd.HDFStore(test_store) as store:\n",
    375     "    store.get('file')"
    376    ]
    377   },
    378   {
    379    "cell_type": "code",
    380    "execution_count": 18,
    381    "metadata": {
    382     "ExecuteTime": {
    383      "end_time": "2018-12-25T19:31:48.410709Z",
    384      "start_time": "2018-12-25T19:31:48.409085Z"
    385     }
    386    },
    387    "outputs": [],
    388    "source": [
    389     "read = _"
    390    ]
    391   },
    392   {
    393    "cell_type": "code",
    394    "execution_count": 19,
    395    "metadata": {
    396     "ExecuteTime": {
    397      "end_time": "2018-12-25T19:31:48.556737Z",
    398      "start_time": "2018-12-25T19:31:48.411668Z"
    399     }
    400    },
    401    "outputs": [],
    402    "source": [
    403     "test_store.unlink()"
    404    ]
    405   },
    406   {
    407    "cell_type": "markdown",
    408    "metadata": {},
    409    "source": [
    410     "#### Write"
    411    ]
    412   },
    413   {
    414    "cell_type": "code",
    415    "execution_count": 20,
    416    "metadata": {
    417     "ExecuteTime": {
    418      "end_time": "2018-12-25T19:32:22.178194Z",
    419      "start_time": "2018-12-25T19:31:48.557651Z"
    420     }
    421    },
    422    "outputs": [
    423     {
    424      "name": "stdout",
    425      "output_type": "stream",
    426      "text": [
    427       "4.2 s ± 28.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
    428      ]
    429     },
    430     {
    431      "data": {
    432       "text/plain": [
    433        "<TimeitResult : 4.2 s ± 28.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)>"
    434       ]
    435      },
    436      "execution_count": 20,
    437      "metadata": {},
    438      "output_type": "execute_result"
    439     }
    440    ],
    441    "source": [
    442     "%%timeit -o\n",
    443     "with pd.HDFStore(test_store) as store:\n",
    444     "    store.put('file', df)\n",
    445     "test_store.unlink()"
    446    ]
    447   },
    448   {
    449    "cell_type": "code",
    450    "execution_count": 21,
    451    "metadata": {
    452     "ExecuteTime": {
    453      "end_time": "2018-12-25T19:32:22.180804Z",
    454      "start_time": "2018-12-25T19:32:22.179212Z"
    455     }
    456    },
    457    "outputs": [],
    458    "source": [
    459     "write = _"
    460    ]
    461   },
    462   {
    463    "cell_type": "markdown",
    464    "metadata": {},
    465    "source": [
    466     "#### Results"
    467    ]
    468   },
    469   {
    470    "cell_type": "code",
    471    "execution_count": 22,
    472    "metadata": {
    473     "ExecuteTime": {
    474      "end_time": "2018-12-25T19:32:22.195127Z",
    475      "start_time": "2018-12-25T19:32:22.181934Z"
    476     }
    477    },
    478    "outputs": [],
    479    "source": [
    480     "results['hdf_fixed'] = {'read': read.all_runs, 'write': write.all_runs, 'size': size}"
    481    ]
    482   },
    483   {
    484    "cell_type": "markdown",
    485    "metadata": {},
    486    "source": [
    487     "### Table Format"
    488    ]
    489   },
    490   {
    491    "cell_type": "markdown",
    492    "metadata": {},
    493    "source": [
    494     "#### Size"
    495    ]
    496   },
    497   {
    498    "cell_type": "code",
    499    "execution_count": 23,
    500    "metadata": {
    501     "ExecuteTime": {
    502      "end_time": "2018-12-25T19:32:25.050163Z",
    503      "start_time": "2018-12-25T19:32:22.196674Z"
    504     }
    505    },
    506    "outputs": [],
    507    "source": [
    508     "with pd.HDFStore(test_store) as store:\n",
    509     "    store.append('file', df, format='t')\n",
    510     "size = test_store.stat().st_size    "
    511    ]
    512   },
    513   {
    514    "cell_type": "markdown",
    515    "metadata": {},
    516    "source": [
    517     "#### Read"
    518    ]
    519   },
    520   {
    521    "cell_type": "code",
    522    "execution_count": 24,
    523    "metadata": {
    524     "ExecuteTime": {
    525      "end_time": "2018-12-25T19:32:29.430444Z",
    526      "start_time": "2018-12-25T19:32:25.051183Z"
    527     }
    528    },
    529    "outputs": [
    530     {
    531      "name": "stdout",
    532      "output_type": "stream",
    533      "text": [
    534       "508 ms ± 9.14 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
    535      ]
    536     },
    537     {
    538      "data": {
    539       "text/plain": [
    540        "<TimeitResult : 508 ms ± 9.14 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)>"
    541       ]
    542      },
    543      "execution_count": 24,
    544      "metadata": {},
    545      "output_type": "execute_result"
    546     }
    547    ],
    548    "source": [
    549     "%%timeit -o\n",
    550     "with pd.HDFStore(test_store) as store:\n",
    551     "    df = store.get('file')"
    552    ]
    553   },
    554   {
    555    "cell_type": "code",
    556    "execution_count": 25,
    557    "metadata": {
    558     "ExecuteTime": {
    559      "end_time": "2018-12-25T19:32:29.433656Z",
    560      "start_time": "2018-12-25T19:32:29.431766Z"
    561     }
    562    },
    563    "outputs": [],
    564    "source": [
    565     "read = _"
    566    ]
    567   },
    568   {
    569    "cell_type": "code",
    570    "execution_count": 26,
    571    "metadata": {
    572     "ExecuteTime": {
    573      "end_time": "2018-12-25T19:32:29.579892Z",
    574      "start_time": "2018-12-25T19:32:29.435654Z"
    575     }
    576    },
    577    "outputs": [],
    578    "source": [
    579     "test_store.unlink()"
    580    ]
    581   },
    582   {
    583    "cell_type": "markdown",
    584    "metadata": {},
    585    "source": [
    586     "#### Write"
    587    ]
    588   },
    589   {
    590    "cell_type": "markdown",
    591    "metadata": {},
    592    "source": [
    593     "Note that `write` in table format does not work with text data."
    594    ]
    595   },
    596   {
    597    "cell_type": "code",
    598    "execution_count": 27,
    599    "metadata": {
    600     "ExecuteTime": {
    601      "end_time": "2018-12-25T19:32:52.918475Z",
    602      "start_time": "2018-12-25T19:32:29.580905Z"
    603     }
    604    },
    605    "outputs": [
    606     {
    607      "name": "stdout",
    608      "output_type": "stream",
    609      "text": [
    610       "2.92 s ± 11.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
    611      ]
    612     },
    613     {
    614      "data": {
    615       "text/plain": [
    616        "<TimeitResult : 2.92 s ± 11.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)>"
    617       ]
    618      },
    619      "execution_count": 27,
    620      "metadata": {},
    621      "output_type": "execute_result"
    622     }
    623    ],
    624    "source": [
    625     "%%timeit -o\n",
    626     "with pd.HDFStore(test_store) as store:\n",
    627     "    store.append('file', df, format='t')\n",
    628     "test_store.unlink()    "
    629    ]
    630   },
    631   {
    632    "cell_type": "code",
    633    "execution_count": 28,
    634    "metadata": {
    635     "ExecuteTime": {
    636      "end_time": "2018-12-25T19:32:52.921247Z",
    637      "start_time": "2018-12-25T19:32:52.919473Z"
    638     }
    639    },
    640    "outputs": [],
    641    "source": [
    642     "write = _"
    643    ]
    644   },
    645   {
    646    "cell_type": "markdown",
    647    "metadata": {},
    648    "source": [
    649     "#### Results"
    650    ]
    651   },
    652   {
    653    "cell_type": "code",
    654    "execution_count": 29,
    655    "metadata": {
    656     "ExecuteTime": {
    657      "end_time": "2018-12-25T19:32:52.931028Z",
    658      "start_time": "2018-12-25T19:32:52.922631Z"
    659     }
    660    },
    661    "outputs": [],
    662    "source": [
    663     "results['hdf_table'] = {'read': read.all_runs, 'write': write.all_runs, 'size': size}"
    664    ]
    665   },
    666   {
    667    "cell_type": "markdown",
    668    "metadata": {},
    669    "source": [
    670     "### Table Select"
    671    ]
    672   },
    673   {
    674    "cell_type": "markdown",
    675    "metadata": {},
    676    "source": [
    677     "#### Size"
    678    ]
    679   },
    680   {
    681    "cell_type": "code",
    682    "execution_count": 30,
    683    "metadata": {
    684     "ExecuteTime": {
    685      "end_time": "2018-12-25T19:32:55.714668Z",
    686      "start_time": "2018-12-25T19:32:52.932594Z"
    687     }
    688    },
    689    "outputs": [],
    690    "source": [
    691     "with pd.HDFStore(test_store) as store:\n",
    692     "    store.append('file', df, format='t', data_columns=['company', 'form'])\n",
    693     "size = test_store.stat().st_size "
    694    ]
    695   },
    696   {
    697    "cell_type": "markdown",
    698    "metadata": {},
    699    "source": [
    700     "#### Read"
    701    ]
    702   },
    703   {
    704    "cell_type": "code",
    705    "execution_count": 31,
    706    "metadata": {
    707     "ExecuteTime": {
    708      "end_time": "2018-12-25T19:32:55.717273Z",
    709      "start_time": "2018-12-25T19:32:55.715537Z"
    710     }
    711    },
    712    "outputs": [],
    713    "source": [
    714     "company = 'APPLE INC'"
    715    ]
    716   },
    717   {
    718    "cell_type": "code",
    719    "execution_count": 32,
    720    "metadata": {
    721     "ExecuteTime": {
    722      "end_time": "2018-12-25T19:32:55.732020Z",
    723      "start_time": "2018-12-25T19:32:55.718471Z"
    724     }
    725    },
    726    "outputs": [],
    727    "source": [
    728     "# %%timeit\n",
    729     "# with pd.HDFStore(test_store) as store:\n",
    730     "#     s = store.select('file', 'company = company')"
    731    ]
    732   },
    733   {
    734    "cell_type": "code",
    735    "execution_count": 33,
    736    "metadata": {
    737     "ExecuteTime": {
    738      "end_time": "2018-12-25T19:32:55.739634Z",
    739      "start_time": "2018-12-25T19:32:55.732893Z"
    740     }
    741    },
    742    "outputs": [],
    743    "source": [
    744     "# read = _"
    745    ]
    746   },
    747   {
    748    "cell_type": "code",
    749    "execution_count": 34,
    750    "metadata": {
    751     "ExecuteTime": {
    752      "end_time": "2018-12-25T19:32:55.754609Z",
    753      "start_time": "2018-12-25T19:32:55.740609Z"
    754     }
    755    },
    756    "outputs": [],
    757    "source": [
    758     "# test_store.unlink()"
    759    ]
    760   },
    761   {
    762    "cell_type": "markdown",
    763    "metadata": {},
    764    "source": [
    765     "#### Write"
    766    ]
    767   },
    768   {
    769    "cell_type": "code",
    770    "execution_count": 35,
    771    "metadata": {
    772     "ExecuteTime": {
    773      "end_time": "2018-12-25T19:32:55.770611Z",
    774      "start_time": "2018-12-25T19:32:55.760229Z"
    775     }
    776    },
    777    "outputs": [],
    778    "source": [
    779     "# %%timeit\n",
    780     "# with pd.HDFStore(test_store) as store:\n",
    781     "#     store.append('file', df, format='t', data_columns=['company', 'form'])\n",
    782     "# test_store.unlink() "
    783    ]
    784   },
    785   {
    786    "cell_type": "code",
    787    "execution_count": 36,
    788    "metadata": {
    789     "ExecuteTime": {
    790      "end_time": "2018-12-25T19:32:55.780717Z",
    791      "start_time": "2018-12-25T19:32:55.775462Z"
    792     }
    793    },
    794    "outputs": [],
    795    "source": [
    796     "# write = _"
    797    ]
    798   },
    799   {
    800    "cell_type": "markdown",
    801    "metadata": {},
    802    "source": [
    803     "#### Results"
    804    ]
    805   },
    806   {
    807    "cell_type": "code",
    808    "execution_count": 37,
    809    "metadata": {
    810     "ExecuteTime": {
    811      "end_time": "2018-12-25T19:32:55.791169Z",
    812      "start_time": "2018-12-25T19:32:55.784143Z"
    813     }
    814    },
    815    "outputs": [],
    816    "source": [
    817     "# results['hdf_select'] = {'read': read.all_runs, 'write': write.all_runs, 'size': size}"
    818    ]
    819   },
    820   {
    821    "cell_type": "markdown",
    822    "metadata": {},
    823    "source": [
    824     "## CSV"
    825    ]
    826   },
    827   {
    828    "cell_type": "code",
    829    "execution_count": 38,
    830    "metadata": {
    831     "ExecuteTime": {
    832      "end_time": "2018-12-25T19:32:55.799134Z",
    833      "start_time": "2018-12-25T19:32:55.793931Z"
    834     }
    835    },
    836    "outputs": [],
    837    "source": [
    838     "test_csv = Path('test.csv')"
    839    ]
    840   },
    841   {
    842    "cell_type": "markdown",
    843    "metadata": {},
    844    "source": [
    845     "### Size"
    846    ]
    847   },
    848   {
    849    "cell_type": "code",
    850    "execution_count": 39,
    851    "metadata": {
    852     "ExecuteTime": {
    853      "end_time": "2018-12-25T19:35:58.303380Z",
    854      "start_time": "2018-12-25T19:32:55.800490Z"
    855     }
    856    },
    857    "outputs": [
    858     {
    859      "data": {
    860       "text/plain": [
    861        "3854558165"
    862       ]
    863      },
    864      "execution_count": 39,
    865      "metadata": {},
    866      "output_type": "execute_result"
    867     }
    868    ],
    869    "source": [
    870     "df.to_csv(test_csv)\n",
    871     "test_csv.stat().st_size"
    872    ]
    873   },
    874   {
    875    "cell_type": "markdown",
    876    "metadata": {},
    877    "source": [
    878     "### Read"
    879    ]
    880   },
    881   {
    882    "cell_type": "code",
    883    "execution_count": 40,
    884    "metadata": {
    885     "ExecuteTime": {
    886      "end_time": "2018-12-25T19:40:11.610187Z",
    887      "start_time": "2018-12-25T19:35:58.304356Z"
    888     }
    889    },
    890    "outputs": [
    891     {
    892      "name": "stdout",
    893      "output_type": "stream",
    894      "text": [
    895       "31.5 s ± 163 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
    896      ]
    897     },
    898     {
    899      "data": {
    900       "text/plain": [
    901        "<TimeitResult : 31.5 s ± 163 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)>"
    902       ]
    903      },
    904      "execution_count": 40,
    905      "metadata": {},
    906      "output_type": "execute_result"
    907     }
    908    ],
    909    "source": [
    910     "%%timeit -o\n",
    911     "df = pd.read_csv(test_csv)"
    912    ]
    913   },
    914   {
    915    "cell_type": "code",
    916    "execution_count": 41,
    917    "metadata": {
    918     "ExecuteTime": {
    919      "end_time": "2018-12-25T19:40:11.612572Z",
    920      "start_time": "2018-12-25T19:40:11.611076Z"
    921     }
    922    },
    923    "outputs": [],
    924    "source": [
    925     "read = _"
    926    ]
    927   },
    928   {
    929    "cell_type": "code",
    930    "execution_count": 42,
    931    "metadata": {
    932     "ExecuteTime": {
    933      "end_time": "2018-12-25T19:40:11.883110Z",
    934      "start_time": "2018-12-25T19:40:11.613329Z"
    935     }
    936    },
    937    "outputs": [],
    938    "source": [
    939     "test_csv.unlink()  "
    940    ]
    941   },
    942   {
    943    "cell_type": "markdown",
    944    "metadata": {},
    945    "source": [
    946     "### Write"
    947    ]
    948   },
    949   {
    950    "cell_type": "code",
    951    "execution_count": 43,
    952    "metadata": {
    953     "ExecuteTime": {
    954      "end_time": "2018-12-25T20:05:17.094885Z",
    955      "start_time": "2018-12-25T19:40:11.884098Z"
    956     }
    957    },
    958    "outputs": [
    959     {
    960      "name": "stdout",
    961      "output_type": "stream",
    962      "text": [
    963       "3min 7s ± 1.95 s per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
    964      ]
    965     },
    966     {
    967      "data": {
    968       "text/plain": [
    969        "<TimeitResult : 3min 7s ± 1.95 s per loop (mean ± std. dev. of 7 runs, 1 loop each)>"
    970       ]
    971      },
    972      "execution_count": 43,
    973      "metadata": {},
    974      "output_type": "execute_result"
    975     }
    976    ],
    977    "source": [
    978     "%%timeit -o\n",
    979     "df.to_csv(test_csv)\n",
    980     "test_csv.unlink()"
    981    ]
    982   },
    983   {
    984    "cell_type": "code",
    985    "execution_count": 44,
    986    "metadata": {
    987     "ExecuteTime": {
    988      "end_time": "2018-12-25T20:05:17.097605Z",
    989      "start_time": "2018-12-25T20:05:17.095959Z"
    990     }
    991    },
    992    "outputs": [],
    993    "source": [
    994     "write = _"
    995    ]
    996   },
    997   {
    998    "cell_type": "markdown",
    999    "metadata": {},
   1000    "source": [
   1001     "### Results"
   1002    ]
   1003   },
   1004   {
   1005    "cell_type": "code",
   1006    "execution_count": 45,
   1007    "metadata": {
   1008     "ExecuteTime": {
   1009      "end_time": "2018-12-25T20:05:17.113054Z",
   1010      "start_time": "2018-12-25T20:05:17.099971Z"
   1011     }
   1012    },
   1013    "outputs": [],
   1014    "source": [
   1015     "results['csv'] = {'read': read.all_runs, 'write': write.all_runs, 'size': size}"
   1016    ]
   1017   },
   1018   {
   1019    "cell_type": "markdown",
   1020    "metadata": {},
   1021    "source": [
   1022     "## Store Results"
   1023    ]
   1024   },
   1025   {
   1026    "cell_type": "code",
   1027    "execution_count": 47,
   1028    "metadata": {
   1029     "ExecuteTime": {
   1030      "end_time": "2018-12-25T20:06:46.934191Z",
   1031      "start_time": "2018-12-25T20:06:46.804080Z"
   1032     }
   1033    },
   1034    "outputs": [
   1035     {
   1036      "data": {
   1037       "image/png": "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\n",
   1038       "text/plain": [
   1039        "<Figure size 432x288 with 1 Axes>"
   1040       ]
   1041      },
   1042      "metadata": {
   1043       "needs_background": "light"
   1044      },
   1045      "output_type": "display_data"
   1046     }
   1047    ],
   1048    "source": [
   1049     "text_num = pd.concat([pd.DataFrame(data).mean().to_frame(f) for f, data in results.items()], axis=1).T\n",
   1050     "text_num[['read', 'write']].plot.barh();"
   1051    ]
   1052   },
   1053   {
   1054    "cell_type": "code",
   1055    "execution_count": 48,
   1056    "metadata": {
   1057     "ExecuteTime": {
   1058      "end_time": "2018-12-25T20:06:55.202262Z",
   1059      "start_time": "2018-12-25T20:06:55.084326Z"
   1060     }
   1061    },
   1062    "outputs": [
   1063     {
   1064      "data": {
   1065       "image/png": "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\n",
   1066       "text/plain": [
   1067        "<Figure size 432x288 with 1 Axes>"
   1068       ]
   1069      },
   1070      "metadata": {
   1071       "needs_background": "light"
   1072      },
   1073      "output_type": "display_data"
   1074     }
   1075    ],
   1076    "source": [
   1077     "df = pd.concat([pd.DataFrame(data).mean().to_frame(f) for f, data in results.items()], axis=1).T\n",
   1078     "# df.to_csv('num_only.csv')\n",
   1079     "df[['read', 'write']].plot.barh();"
   1080    ]
   1081   },
   1082   {
   1083    "cell_type": "code",
   1084    "execution_count": null,
   1085    "metadata": {
   1086     "ExecuteTime": {
   1087      "end_time": "2018-12-25T20:05:17.162332Z",
   1088      "start_time": "2018-12-25T19:29:45.832Z"
   1089     }
   1090    },
   1091    "outputs": [],
   1092    "source": [
   1093     "# for f, data in results.items():\n",
   1094     "#     pd.DataFrame(data).to_csv('{}.csv'.format(f))"
   1095    ]
   1096   }
   1097  ],
   1098  "metadata": {
   1099   "kernelspec": {
   1100    "display_name": "Python 3",
   1101    "language": "python",
   1102    "name": "python3"
   1103   },
   1104   "language_info": {
   1105    "codemirror_mode": {
   1106     "name": "ipython",
   1107     "version": 3
   1108    },
   1109    "file_extension": ".py",
   1110    "mimetype": "text/x-python",
   1111    "name": "python",
   1112    "nbconvert_exporter": "python",
   1113    "pygments_lexer": "ipython3",
   1114    "version": "3.7.0"
   1115   },
   1116   "toc": {
   1117    "base_numbering": 1,
   1118    "nav_menu": {},
   1119    "number_sections": true,
   1120    "sideBar": true,
   1121    "skip_h1_title": false,
   1122    "title_cell": "Table of Contents",
   1123    "title_sidebar": "Contents",
   1124    "toc_cell": false,
   1125    "toc_position": {},
   1126    "toc_section_display": true,
   1127    "toc_window_display": true
   1128   }
   1129  },
   1130  "nbformat": 4,
   1131  "nbformat_minor": 2
   1132 }