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 }