{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Benchmark for querying the MovieLens dataset using pandas and bcolz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This benchmark has been run on a Xeon E3-1245 v5 @ 3.50GHz (Skylake, 4 physical cores) with Ubuntu Linux 16.04. The virtual machine for bcolz is numexpr." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import os.path\n", "import numpy as np\n", "import pandas as pd\n", "import bcolz\n", "from time import time" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n", "bcolz version: 1.1.1.dev16\n", "NumPy version: 1.11.1\n", "Blosc version: 1.9.3 ($Date:: 2016-07-06 #$)\n", "Blosc compressors: ['blosclz', 'lz4', 'lz4hc', 'snappy', 'zlib']\n", "Numexpr version: 2.6.1\n", "Dask version: 0.10.1\n", "Python version: 2.7.12 |Continuum Analytics, Inc.| (default, Jul 2 2016, 17:42:40) \n", "[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]\n", "Platform: linux2-x86_64\n", "Byte-ordering: little\n", "Detected cores: 8\n", "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n" ] } ], "source": [ "bcolz.print_versions()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Import the CSV files in a pandas dataframe" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Files where the data is (using the 10M dataset here)\n", "dset = 'ml-10m'\n", "ftags = os.path.join(dset, 'tags.dat')\n", "fdata = os.path.join(dset, 'ratings.dat.gz')\n", "fitem = os.path.join(dset, 'movies.dat')\n", "\n", "zdset = 'ml-10m.blz'\n", "pdset = 'ml-10m.h5'" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Global settings for bcolz and pandas (for experimenting, modify some of the lines below)\n", "bcolz.defaults.cparams['cname'] = 'blosclz'\n", "bcolz.defaults.cparams['clevel'] = 1\n", "bcolz.defaults.eval_vm = \"numexpr\"\n", "#bcolz.blosc_set_nthreads(4)\n", "#bcolz.numexpr.set_num_threads(4)\n", "# from pandas.computation import expressions as expr\n", "# expr.set_use_numexpr(True)\n", "# expr.set_numexpr_threads(1)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time for parsing the data: 2.94\n", "Time for dataframe merges: 0.68\n", "\n", "Int64Index: 10000054 entries, 0 to 10000053\n", "Data columns (total 6 columns):\n", "movie_id int64\n", "title object\n", "genres object\n", "user_id int64\n", "rating float64\n", "unix_timestamp int64\n", "dtypes: float64(1), int64(3), object(2)\n", "memory usage: 534.1+ MB\n", "('Info for movie_ratings:', None)\n", "\n", "Int64Index: 10000054 entries, 0 to 10000053\n", "Data columns (total 6 columns):\n", "movie_id int64\n", "title object\n", "genres object\n", "user_id int64\n", "rating float64\n", "unix_timestamp int64\n", "dtypes: float64(1), int64(3), object(2)\n", "memory usage: 534.1+ MB\n", "('Info for lens:', None)\n" ] } ], "source": [ "# Load the ratings in a pandas dataframe\n", "t0 = time()\n", "# pass in column names for each CSV\n", "t_cols = ['user_id', 'movie_id', 'tag', 'unix_timestamp']\n", "tags = pd.read_csv(ftags, sep=';', names=t_cols)\n", "#print(\"Info for tags:\", tags.info())\n", "\n", "r_cols = ['user_id', 'movie_id', 'rating', 'unix_timestamp']\n", "ratings = pd.read_csv(fdata, sep=';', names=r_cols, compression='gzip')\n", "\n", "m_cols = ['movie_id', 'title', 'genres']\n", "movies = pd.read_csv(fitem, sep=';', names=m_cols,\n", " dtype={'title': \"S100\", 'genres': \"S100\"})\n", "print(\"Time for parsing the data: %.2f\" % (time()-t0,)) \n", "\n", "t0 = time()\n", "# create one merged DataFrame\n", "movie_ratings = pd.merge(movies, ratings)\n", "# You probably need more than 8 GB in RAM for the next merge\n", "#lens = pd.merge(movie_ratings, tags, on='user_id')\n", "lens = movie_ratings\n", "print(\"Time for dataframe merges: %.2f\" % (time()-t0,)) \n", "print(\"Info for movie_ratings:\", movie_ratings.info())\n", "print(\"Info for lens:\", lens.info())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compute the size of the dataframe, taking in account the true object overhead" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Size for regular values in lens dataframe: 457.8 MB\n" ] } ], "source": [ "# Size of the dataframe in-memory\n", "rsize = lens.values.nbytes / 2**20.\n", "print(\"Size for regular values in lens dataframe: %.1f MB\" % (rsize,))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Overhead of objects: 1115.1 MB\n" ] } ], "source": [ "# Compute the overhead of the objects in dataframe\n", "dfo = lens.blocks['object']\n", "import sys\n", "overhead = sum(sys.getsizeof(o) for o in dfo.values.flat) / 2**20.\n", "print(\"Overhead of objects: %.1f MB\" % (overhead ,))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total size for the dataframe: 1572.8 MB\n" ] } ], "source": [ "# Total size:\n", "dfsize = rsize + overhead\n", "print(\"Total size for the dataframe: %.1f MB\" % (dfsize,))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Querying with pandas" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time (and length) for simple query with pandas: 0.16 (899)\n" ] } ], "source": [ "# Simple query\n", "t0 = time()\n", "result = lens[lens['title'] == b'Tom and Huck (1995)']\n", "#result = lens.query(\"title == 'Tom and Huck (1995)'\")\n", "dfsmplqtime = time() - t0\n", "print(\"time (and length) for simple query with pandas: %.2f (%d)\" %\n", " (dfsmplqtime, len(result)))\n", "#print repr(result)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time (and length) for complex query with pandas: 0.18 (74)\n" ] } ], "source": [ "# Complex query\n", "t0 = time()\n", "result = lens[(lens['title'] == b'Tom and Huck (1995)') & (lens['rating'] == 5)]['user_id']\n", "#result = lens.query(\"(title == 'Tom and Huck (1995)') & (rating == 5)\")['user_id']\n", "dfcmplxqtime = time() - t0\n", "print(\"time (and length) for complex query with pandas: %.2f (%d)\" %\n", " (dfcmplxqtime, len(result)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Build a ctable out of the dataframe" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time for ctable conversion: 0.94\n" ] } ], "source": [ "# Get a bcolz ctable out of the lens dataframe (using compression by default)\n", "t0 = time()\n", "zlens = bcolz.ctable.fromdataframe(lens)\n", "print(\"time for ctable conversion: %.2f\" % (time()-t0))\n", "#print repr(zlens)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Get rid of the dataframe to cleanup memory\n", "del lens" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total size for the ctable: 92.7 MB\n", "Compression ratio the ctable: 19.8x\n", "Storage savings compared with a dataframe: 17.0x\n" ] } ], "source": [ "# Size for the compressed ctable\n", "zsize = zlens.cbytes / 2**20.\n", "print(\"Total size for the ctable: %.1f MB\" % (zsize,))\n", "# Compression ratio\n", "print(\"Compression ratio the ctable: %.1fx\" % (zlens.nbytes / float(zlens.cbytes),))\n", "# Reduction in size compared with the dataframe\n", "print(\"Storage savings compared with a dataframe: %.1fx\" % (dfsize / zsize,))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Query the ctable" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time (and length) for simple query with bcolz: 0.08 (899)\n" ] } ], "source": [ "# Simple query\n", "t0 = time()\n", "result = zlens[\"title == 'Tom and Huck (1995)'\"]\n", "zsmplqtime = time() - t0\n", "print(\"time (and length) for simple query with bcolz: %.2f (%d)\" %\n", " (zsmplqtime, len(result)))\n", "#print repr(result)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time (and length) for complex query with bcolz: 0.09 (74)\n" ] } ], "source": [ "# Complex query\n", "t0 = time()\n", "#result = zlens[\"(title == 'Tom and Huck (1995)') & (rating == 5)\"]['user_id']\n", "result = [r.user_id for r in zlens.where(\n", " \"(title == 'Tom and Huck (1995)') & (rating == 5)\", outcols=['user_id'])]\n", "zcmplxqtime = time() - t0\n", "print(\"time (and length) for complex query with bcolz: %.2f (%d)\" %\n", " (zcmplxqtime, len(result)))\n", "#print(repr(result))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Testing an uncompressed ctable" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total size for the ctable: 1833.0 MB\n", "Compression ratio the ctable: 1.0x\n", "Storage savings compared with a dataframe: 0.9x\n" ] } ], "source": [ "# Size for the uncompressed ctable\n", "nzlens = zlens.copy(cparams=bcolz.cparams(clevel=0))\n", "nzsize = nzlens.cbytes / 2**20.\n", "print(\"Total size for the ctable: %.1f MB\" % (nzsize,))\n", "# Compression ratio\n", "print(\"Compression ratio the ctable: %.1fx\" % (nzlens.nbytes / float(nzlens.cbytes),))\n", "# Reduction in size compared with the dataframe\n", "print(\"Storage savings compared with a dataframe: %.1fx\" % (dfsize / nzsize,))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time (and length) for simple query with bcolz: 0.14 (899)\n" ] } ], "source": [ "# Time for a simple query with the uncompressed ctable\n", "t0 = time()\n", "result = nzlens[\"title == 'Tom and Huck (1995)'\"]\n", "nzsmplqtime = time() - t0\n", "print(\"time (and length) for simple query with bcolz: %.2f (%d)\" %\n", " (nzsmplqtime, len(result)))\n", "#print repr(result)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time (and length) for complex query with bcolz: 0.14 (74)\n" ] } ], "source": [ "# Time for a complex query with the uncompressed ctable\n", "t0 = time()\n", "#result = zlens[\"(title == 'Tom and Huck (1995)') & (rating == 5)\"]['user_id']\n", "result = [r.user_id for r in nzlens.where(\n", " \"(title == 'Tom and Huck (1995)') & (rating == 5)\", outcols=['user_id'])]\n", "nzcmplxqtime = time() - t0\n", "print(\"time (and length) for complex query with bcolz: %.2f (%d)\" %\n", " (nzcmplxqtime, len(result)))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Get rid of previous dataset to clean up memory\n", "del nzlens" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Testing a disk-based ctable" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total size for the ctable: 92.7 MB\n", "Compression ratio for the ctable: 19.8x\n", "Storage savings compared with a dataframe: 17.0x\n" ] } ], "source": [ "# Size for a disk-based ctable\n", "fname = \"ctable-10m.bcolz\"\n", "import shutil\n", "if os.path.exists(fname):\n", " shutil.rmtree(fname)\n", "dblens = zlens.copy(rootdir=fname)\n", "# \"du -sh \"ctable-10m.bcolz\"\n", "dbsize = dblens.cbytes / 2**20.\n", "print(\"Total size for the ctable: %.1f MB\" % (dbsize,))\n", "# Compression ratio\n", "print(\"Compression ratio for the ctable: %.1fx\" % (dblens.nbytes / float(dblens.cbytes),))\n", "# Reduction in size compared with the dataframe\n", "print(\"Storage savings compared with a dataframe: %.1fx\" % (dfsize / dbsize,))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "95M\tctable-10m.bcolz\r\n" ] } ], "source": [ "!du -sh \"ctable-10m.bcolz\"" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time (and length) for simple query with on-disk bcolz: 0.11 (899)\n" ] } ], "source": [ "# Time for a simple query with the on-disk ctable\n", "t0 = time()\n", "result = dblens[\"title == 'Tom and Huck (1995)'\"]\n", "dbsmplqtime = time() - t0\n", "print(\"time (and length) for simple query with on-disk bcolz: %.2f (%d)\" %\n", " (dbsmplqtime, len(result)))\n", "#print repr(result)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "time (and length) for complex query with on-disk bcolz: 0.12 (74)\n" ] } ], "source": [ "# Time for a complex query with the uncompressed ctable\n", "t0 = time()\n", "#result = dblens[\"(title == 'Tom and Huck (1995)') & (rating == 5)\"]['user_id']\n", "result = [r.user_id for r in dblens.where(\n", " \"(title == 'Tom and Huck (1995)') & (rating == 5)\", outcols=['user_id'])]\n", "dbcmplxqtime = time() - t0\n", "print(\"time (and length) for complex query with on-disk bcolz: %.2f (%d)\" %\n", " (dbcmplxqtime, len(result)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/francesc/miniconda3/envs/py27/lib/python2.7/site-packages/IPython/core/interactiveshell.py:2869: FutureWarning: \n", "mpl_style had been deprecated and will be removed in a future version.\n", "Use `matplotlib.pyplot.style.use` instead.\n", "\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/francesc/miniconda3/envs/py27/lib/python2.7/site-packages/matplotlib/font_manager.py:1288: UserWarning: findfont: Font family [u'monospace'] not found. Falling back to Bitstream Vera Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5YAAAG5CAYAAAD1bqu0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVXX+x/E3iIgguIOiKbKYQu42uWSaqKmR5oqNpTmT\nuZYto2WiQk6NZpOZWtOUo1OWG+YwLi1IbqjliOASKiAomruoiLGInN8f98H9eWURuybHfD0fDx/j\nOfec8/3ew+fR+OaczzkOhmEYAgAAAADgV3Is7wkAAAAAAO5uBEsAAAAAgF0IlgAAAAAAuxAsAQAA\nAAB2IVgCAAAAAOxCsAQAAAAA2IVgCQDAXSQiIkKNGzcu72lIkiZPnqw6deqoQoUK+uyzz8q83+LF\ni1WxYsXfcGa2IiIiFBAQcMfGA4B7EcESAACTyMnJ0dSpU9W4cWO5urqqZs2a+sMf/qD58+dbt5k4\ncaJ++OGHcpylxc6dOzVr1ix9+umnOnXqlEJDQ4vdrmLFikVCp4ODgxwcHO7ENG3GvBUBAQF68803\nf6PZlK64cwYAZudU3hMAAAAWo0eP1ubNm/XBBx+oefPmyszMVHx8vNLT063buLq6ytXVtRxnaZGU\nlKQKFSooJCSkvKcCADABrlgCAGASUVFRmjhxop544gk1bNhQzZo107BhwxQWFmbd5sbbOh0dHVWh\nQgWb/3V0dLSG0StXrmjChAmqX7++3Nzc1KZNG61evfqmc/n3v/+toKAgVapUSffdd5+mTp2qgoIC\nSdKIESM0bNgwFRQUWMctTqNGjVRQUKARI0YUu9327dvVpk0bubm5qW3bttq1a5fN54cPH9bAgQNV\nvXp11ahRQ4899pj2799f6rxzc3M1ZswYVatWTTVr1tTYsWOVm5trs018fLx69+4tLy8vubu76w9/\n+IO+/fZb6+ePPvqoDh8+rIiICOu8C8/n888/L39/f7m6usrPz09TpkzR1atXrfv+/PPPGjhwoGrX\nrq3KlSvL399ff//7362f5+fnKzw8XL6+vqpcubKaNWumf/7znzc9Z5cvX9aIESNUt25dubi4qGHD\nhvrLX/5S6rkAgDuJYAkAgEnUrVtX33zzjS5cuFDqdtff1nnq1CmdPHlSp06d0okTJ9StWzcFBQXJ\ny8tLkhQSEqJ9+/Zp5cqV+umnnzRmzBg99dRT2rhxY4nHX7dunf785z9r+PDh+umnn/Tee+9pwYIF\nioiIkCR98MEHev/991WhQgWdPn1aJ0+eLPY4//vf/+To6Ki5c+da51no2rVreuONNzRv3jzFx8fL\n09NToaGh1vB65swZPfzww6pTp462bdumH3/8UU2aNNGjjz6q8+fPlzj3119/XatXr9aSJUu0Y8cO\nubm5acGCBTbbZGZmasiQIdq8ebPi4+PVs2dP9e3bVykpKZKkr776Sj4+Pnr11Vet877vvvtkGIa8\nvLy0bNkyHTx4UHPnztXixYv19ttvW489ZswYZWZm6vvvv9ehQ4e0cOFC1a9f3/r5c889p//85z/6\n5JNPdPDgQU2bNk2vv/66Fi1aVOo5mzJlihISErRmzRqlpKRo+fLlatq0aYnnAQDuOAMAAJjCtm3b\nDB8fH6NChQpG8+bNjeeff974z3/+Y7NNeHi4ERAQUOz+b7zxhlGnTh3j6NGjhmEYxsaNG43KlSsb\nmZmZNtv96U9/Mvr161fiPDp16mQMGTLEZt3cuXMNV1dX4+rVq4ZhGMbixYuNihUr3vQ7OTk5Gf/+\n979t1i1evNhwdHQ0EhISrOt+/PFHw9HR0UhKSjIMwzCmT59utG/f3ma/goICw8/Pz5g7d26xY125\ncsVwcXExFi5caLO+bdu2JZ6zQi1atDDefvtt67K/v78RERFx0+83Z84co3HjxjbHKWm/tLQ0w9HR\n0Th06JDN+jfffNNo2bKldbm4c9a3b19jxIgRN50PAJQXeiwBADCJDh066PDhw9q5c6d27NihLVu2\naODAgerdu7eioqJK3ffzzz/X+++/r02bNqlBgwaSpF27dik3N1fe3t422169erXUJ8v+9NNPGjJk\niM26zp07KycnR4cPH9b999//K7/h/3NwcFDz5s2ty97e3jIMQ6dPn1ZAQIB27dqlXbt2yd3d3Wa/\nnJwcJScnF3vMw4cPKy8vT+3bt7dZ//DDD2vdunXW5XPnzmnatGnauHGjTp06pfz8fOXm5uro0aM3\nnfcnn3yihQsX6siRI7py5Yry8/NlGIb185deekmjRo3S+vXr1aVLFz3++OPq1KmTJMvPwzAMtW3b\n1maf/Pz8mz4ld+zYsRowYIB27dqlrl27qmfPnnrsscfu+EOQAKAkBEsAAEzE0dFR7dq1U7t27fTy\nyy/riy++0DPPPKOtW7daA8qNYmNjNWrUKH3++ed68MEHresLCgpUrVo1a6C5nrOz8y3P7cZj2MPR\n0dEmFBX+vfBW2IKCAnXr1k0LFiwoMm7VqlXtmuPw4cN1/Phxvfvuu/Lx8VHlypUVGhqqvLy8Uvdb\nuXKlxo8fr3feeUePPPKIPDw8tGLFCpse2GeffVa9evXSN998o40bN6pXr17q37+/PvvsMxUUFMjB\nwUE7duxQ5cqVbY59s4DYo0cPHTt2TN9++602bdqkp59+Ws2bN1dMTAzhEoApECwBADCxJk2aSLL0\nHBYnNTVV/fv317Rp0zRgwACbz9q2bauLFy8qOztbgYGBZR4zKChIW7Zs0dixY63rNm3aZH1gza1w\ndnbWtWvXbmkfyTL3f//736pXr16ZQ7Cfn5+cnZ21fft2m/7Dbdu22Wy3detWzZ49W48//rgkywOO\nUlNT1axZs1LnvXXrVrVu3VoTJkywrktLSysyDy8vLw0fPlzDhw9Xr1699Mc//lEffvih2rRpI0k6\nevSoevfuXeL3KOmcVatWTaGhoQoNDdWzzz6r9u3bKzExUUFBQaWdFgC4I3h4DwAAJtGlSxd9/PHH\niouLU3p6umJiYjRu3DhVr15djz76aJHtc3JyFBISog4dOmjEiBE6ffq09Y9hGOratau6deum/v37\nKyoqSmlpadq9e7fmz5+vhQsXljiPyZMna9WqVZo1a5aSk5O1YsUKRURE6C9/+YucnG7td9KNGjXS\nxo0bdfLkyVIfunOj8ePH69q1a+rTp49iY2N19OhRxcbGKiwsrMT3eLq6umr06NEKCwvTmjVrlJSU\npNdee02HDh2y2e7+++/XF198of379yshIUF//OMfrVdKr5/3tm3bdOzYMZ0/f16GYej+++/Xvn37\n9N///lepqamaO3dukSfsvvDCC/r666+Vmpqqn376SatWrVKDBg1UpUoV+fn5acSIERo5cqSWLFmi\nw4cPa+/evVq0aJHeeeedUs9ZWFiYVq9eraSkJCUnJ2vJkiVyd3e33vYMAOWuvJo7AQCArVmzZhmP\nPPKI4eXlZVSuXNlo2LCh8cwzzxgHDhywbnP9w3uOHDliODo62vxxcHAwHB0drQ/wycnJMSZPnmz4\n+voalSpVMurWrWv06tXL2LhxY6lz+eyzz4zAwECjUqVKRv369Y2pU6ca165ds35e1of3fPPNN0Zg\nYKDh7OxsODo6lrjv8ePHDUdHR2Pz5s3Wdenp6cbTTz9teHp6Gi4uLoaPj4/xzDPPGEeOHClxvOzs\n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\n3t66du2aLly4YLN/q1atbPpma9eurcaNGyspKclmu9q1a5f4y4XC2rjx2MDdgj4hmBn1CbOiNgGL\ncrtiWa1aNZvl628nlKSsrKwSQ6VkuVVWslyZulHVqlV17ty5m85h2bJliouLU1hYmPWW0dJcvXq1\n1Ns93dzcbJadnJyKhNXC/a9evSrJ0kcqSS+88EKxx8zKyrrpGCWtLxyj8Dg3nnPJ8nMoPJeFPDw8\nin2SbteuXbV8+XJt2bJFjz32mKKjo+Xv71/qz6kkWVlZNrfUlrRNWefs6upqs1zaeZFkc26k/6+/\nG9cdP37cZl1x9VaoMJjm5eWVuI0ZFP4fYOFt3yyzzDLLLLPM8q9fLmSW+bDM8vXLN/4b+bfkYBiG\nccdGk7Ry5UpFRkZq3rx58vT0tK7fv3+/ZsyYoRkzZqhx48YKCwuTg4ODZsyYUexxcnNzNWzYMA0Y\nMKDIQ38iIiKUk5Ojv/3tb9ZlSZo+fbp1m9jYWM2bN0/jxo3TI488Uqa5T506VS4uLpoyZUqx32np\n0qU2VxPHjRunpk2b2txim5iYqIiICE2dOlUPPPCAoqOj9emnn2rq1KnF/uDd3d1Vu3ZtSZaHzPTv\n39/m4UObNm3SRx99pA8++MDmgUAREREqKCiwfveRI0eqRYsWRW73/fDDDxUXF6eFCxdal/ft26eP\nPvqo2HMwf/58HT16VK+++qomTJigMWPGWHtXb8XcuXOVmJiojz/+uMRt7J1zWc9XaGioHnnkkSIP\nZZo+fboqVqyosLAwSUXP6Y1SUlI0ZcoUTZ482ebq9Y1iYmL0+u7y6bGc3dtfLbzdb74hAAAA7nq7\nd++2ebbLb6ncboXdsWOHzXJsbKxcXFx03333SbLc8pmSkqL09PRi969UqZJ8fX21Y8cOXZ+Nz549\nq0OHDikoKKjEsZOSkvTRRx+pX79+ZQ6VkuU2yjNnzpR5+7IovLX17Nmz8vX1LfKnMFTaq2nTpoqP\nj1dOTo51XXZ2tuLi4ko9Vzd67LHHlJ6ern/84x9yc3Oz6Xm9FS1atNDFixe1e/fu33zOZREfH29z\npfHMmTNKSkq6pV7Jwtoo7YnEAAAAwO+RU3kNHBMTY+0lTEhI0MaNGzV48GBrP11ISIi2bdumGTNm\nqF+/fmrQoIEyMzO1a9cuPf/883JxcVFoaKhmzZqlmTNnqkePHsrOztbKlSvl5uamkJCQYsfNzs7W\n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\n0tGjRzVt2jS5urpq+PDheuihh7Rv3z7997//Vdu2bVW1alVJ0q5du3TkyBHFx8erW7duCgkJUaNG\njXTfffdp7dq1at26tU3oi4qK0tGjRzVu3Dhr2C+LX375RevXr9exY8dUqVIlDRw4UIGBgfr+++91\n6NAh689KkubNm6eYmBj16tVLTz75pDw8PLR69WqdPHlSDz30kCTLlb4333xTu3fvVq9evdS3b181\na9ZMFy5ckI+Pj9zd3W/5HPz000/q2bOngoODlZaWpnXr1unKlStKS0vToEGD1LRpU3333Xc6efKk\nTfiLjIzUmTNndPnyZT311FNq06aN4uLiFB0drW7dulmvdm/evFknTpzQ/v371adPH/Xq1Uv169e3\nziMjI0MbN25U37595ehY8s0AaWlp2nDyzt9iDgAAAFs9Amqojnul8p7Gb+bkyZPy9fW9I2OVOVl0\n69ZNffr0kSQ1b95cv/zyi9asWaPevXvL1dVVa9eu1dmzZzVz5kw1bNjQul+HDh2sf1+2bJm8vLw0\nefJk6z+8AwICNGHCBK1Zs0bDhg0rduzrr07l5eVp4cKFqlmzpsaPH1/qnFNSUtSgQYMSP+/Tp486\ndeokSfL19VVcXJw2bNigBQsWyMXFRZJ04cIFLV68WOfOnVOtWrV09uxZrVmzRoMHD1b//v2tx/L2\n9tbUqVMVFxentm3bWtdXrFhRkyZNsn7f9PR0rVu3TkOGDFG/fv0kSYGBgdq5c6d27Nihli1bSrKE\nnYoVK2ratGnWwN2sWTONGzdOK1eu1KuvvmodIycnRy+++KLatGljXWcYhjw9PRUdHS0/Pz9JliuJ\nmzZtUqdOnazf71Z5enrqxRdftC5funRJS5Ys0cWLF1WtWjUdO3ZM27dv16BBgzRw4EBJlnpxdHTU\n8uXL9eSTT6pBgwbasmWLkpOT9dprr6l169bW4xUGz19zDkaOHKkmTZpIkqpXr66JEycqPj5e7733\nnjXsp6en65tvvpFhGDa9vFevXlVYWJg1RPr7++vFF1/UunXrbK7MX758WVOnTi22rho1aqT8/Hyl\npqaqcePGv+r8AgAAAHejMvdY3nh7X8eOHZWTk6Njx45Jkvbu3Ss/Pz+bUHm93NxcpaWlqUOHDjZX\nczw9PdWkSRMdOHCgTPOYP3++zpw5o9dff93mttPiZGRkWG+pLE5hiJMkNzc3eXh4KCAgwCZ01atX\nT5J0/vx5SdKePXtkGIYefvhhFRQUWP/4+fnJxcVFiYmJNmMUhqpChbf8tmjRwrrO0dFRderUsY4h\nSQcPHlSbNm2sgUqSKleurLZt2xYZw8nJySacSZYHIHXv3l3bt29Xdna2JGnnzp26dOmSunfvXuI5\nuZnrz5kka8A6d+6cJFl/joWBvVDhcuHc9+7dq2rVqhWZ9/Vu5Ry4uLhYQ6X0/+e5WbNmNgHS29tb\n165d04ULF2z2b9WqlU0fbu3atdW4cWMlJSXZbFe7du0Sf1lRWGs3HhsAAADmFhsbq9jY2N/t8p1Q\n5iuW1apVs1m+/vY/ScrKyioxVEqWW2Uly5WkG1WtWtUaTEqzbNkyxcXFKSwszHrLaGmuXr1a6u2e\nbm5uNstOTk5Fwmrh/levXpVk6SOVpBdeeKHYY2ZlZd10jJLWF45ReJwbz7lk+TkUnstCHh4exT5J\nt2vXrlq+fLm2bNmixx57TNHR0fL39y/153QzN56fihUrSrJcSS6ct1T051z4XQo/z8rKsrlFtzi3\ncg5cXV1tlks7z5JszrX0//V847rjx4/brCuufgsVBtPCcwEAAIC7w43tdb+X5d27d+tOKXOwvHjx\nojw9Pa3Lly5dkiTVrFlTkuTu7l7qlZrCf+BfvHixyGeXLl266dXH2NhYrV69WuPGjVPTpk3LNGd3\nd/ciAcRehQ99mTp1apEwc/3n9qpSpUqx5+rixYtFwlJpx2jfvr02bNigFi1a6KefftKYMWNuy/xK\nG1MqWi+F36Xw/Li7u1uvdpd2LHvPQVkV1vON624Mv6W9CqcwNN+uGgAAAADuFmW+FXbHjh02y7Gx\nsXJxcdF9990nyXLLZ0pKitLT04vdv1KlSvL19dWOHTtkGIZ1/dmzZ3Xo0CEFBQWVOHZSUpI++ugj\n9evXT4888khZpyxvb2+dOXOmzNuXReGtrWfPnpWvr2+RP7Vr174t4zRt2lTx8fHKycmxrsvOzlZc\nXFyp5+pGjz32mNLT0/WPf/xDbm5uNj2vv4XC0L9t2zab9Vu3bpUk68OeWrRooYsXL5b6W5TbdQ7K\nIj4+3uZK45kzZ5SUlHRLvZKFtVbaE44BAACA36MyX7GMiYmx9hImJCRo48aNGjx4sLX/LSQkRNu2\nbdOMGTPUr18/NWjQQJmZmdq1a5eef/55ubi4KDQ0VLNmzdLMmTPVo0cPZWdna+XKlXJzc1NISEix\n42ZnZ2v27Nn/197dx1R1H2Acf5AX8YKAiKgEKY34grGC9aV1anXDbSmmNSKg7erqui6pc82SpnXd\nLP1kje8AABd0SURBVKvWNo0vTbVd260tuuo2nfiCc+0mSMGBb7Mw0foSVJyKRAHxDVAv4NkfN571\nFq3Uc/Ee4PtJTHrOPZz7OzdPT3i453eOoqOj9eCDD+ro0aPma/7+/m6Pg/i6+Ph4FRQUqK6u7o7f\niLZW79699fjjj2vFihU6c+aMhgwZooCAANXU1Gj//v2aNGmSWZ6sSE1N1X/+8x+99tpr5mNINm/e\nLKfTad4UpzUGDBig2NhYHT58WI8++ugtn+c5ffp0TZgwwXwMihX9+vXT2LFjlZWVpebmZnOe4oYN\nGzRu3DjzDxHjx49XXl6eli9frilTpmjAgAG6evWqSktLNXnyZEVFRXnsM2iNgIAAvf7663rsscfU\n2NiodevWKSgoSJMnT271Po4eParw8HC3b2oBAACAzqBVxdLHx0dz585VZmamNm7cKIfDoWnTpmna\ntGnmNg6HQwsXLtTatWu1efNm1dXVKTQ0VEOHDjXntSUmJurll1/W+vXrtWzZMrfnWH59Lt3NSw7r\n6up0+fJlXb58WRkZGW7b3Ok5lqNGjdLHH3+skpKSFt903uqSxm+6zPGrnnjiCUVHR2vr1q3KycmR\nj4+PevbsqaFDh7aY+9nafX5dTEyMXn31Va1du1bvv/+++QzHBQsWtLh5zJ3eY8yYMfrvf/97y+dW\nXr9+XdI3zx38tubMmaPevXsrPz9fGzduVI8ePTR16lS3Mujr66tXXnlFWVlZysvL04YNGxQcHKxB\ngwaZfwTwxGfQ2s//kUceUWBgoFasWKErV64oLi5OL7zwwre65LakpERjx45t9fYAAABAR+FjfPW6\n1A7o/fffV21trV555RVvD8VrMjIy1KVLFy1YsKDFa6WlpVq8eLHefffdO95Mp6OaPn26UlJSNH36\n9Lvex9GjR/Xb3/5Wb7/99h1vLJWXl6eXS3iOJQAAgLctSY5TQlTHvT9GSUmJkpKS7sl7tXqOZXuV\nmpqqI0eOqLy83NtDuaeamppUVlam9evXq6yszLyU9OsOHz6siRMndtpS6SmbN2/WhAkTWnW3YgAA\nAKCjafUcy/YqMjJSP//5z83HhHQWFy5cUEZGhoKCgpSSknLb50XOmDHjHo/Mnu72kmXJ9XiR2NjY\nW15qDAAAAHQGHb5YSmrzO6HaUa9evfTXv/7V28NoF6x+TgEBAR6/mRAAAADQnnT4S2EBAAAAAG2L\nYgkAAAAAsIRiCQAAAACwhGIJAAAAALCEYgkAAAAAsIRiCQAAAACwhGIJAAAAALCEYgkAAAAAsIRi\nCQAAAACwhGIJAAAAALCEYgkAAAAAsIRiCQAAAACwhGIJAAAAALCEYgkAAAAAsIRiCQAAAACwxM/b\nAwA6oyXJcd4eAgAAQKcXGRzg7SF0GBRLwAsSorp7ewhAC0VFRRo3bpy3hwHcEvmEXZFNwIVLYQEA\nAAAAllAsAQCSxF/cYWvkE3ZFNgEXiiUAAAAAwBKKJQBAkmueEGBX5BN2RTYBF4olAAAAAMASiiUA\nQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2\nRTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAA\nAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLz\nhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYB\nF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMAS\niiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv\n5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4ol\nAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASiiUA\nQBLzhGBv5BN2RTYBF4olAAAAAMASiiUAQBLzhGBv5BN2RTYBF4olAAAAAMASP28PAOiMSiuveHsI\nQAuXLl1SaGiot4cB3BL5hF3di2xGBgeob0jXNn0PwCqKJeAFL312zNtDAG6j2tsDAL4B+YRdtW02\nlyTHUSxhe1wKCwAAAACwhGIJAAAAALCEYgkAAAAAsIRiCQAAAACwhGIJAAAAALCEYgkAAAAAsIRi\nCQAAAACwhGIJAAAAALCEYgkAAAAAsIRiCQAAAACwhGIJAAAAALCEYgkAAAAAsIRiCQAAAACwhGIJ\nAAAAALCEYgkAAAAAsIRiiU6voKBA06dPV01NjbeHAgAAALRLFEsAAAAAgCUUSwAAAACAJX7eHgA6\np3Xr1mnDhg1asmSJVq5cqWPHjsnhcCgpKUnp6emSpMbGRv3lL3/R/v37VV1drcDAQPXv318zZ85U\nVFSUua+CggJ98MEHev311/WPf/xDxcXFCgwM1MMPP6yZM2fKz+//Ma+qqlJmZqYOHTqkwMBAjR07\nVtHR0S3Gt3PnTm3btk2nTp2S0+lU3759lZycrAkTJrht99lnnyk3N1fV1dXy9/dXnz59lJKSolGj\nRrXRJwcAAADYD8USXuHj4yNJWrp0qb773e9q6tSpKi0t1YYNG9SlSxelpqaqsbFRV69eVUpKinr0\n6KH6+nrl5ORo3rx5WrZsmUJDQ932+bvf/U5jx47VSy+9pLKyMq1bt07BwcFKS0uTJDU1NWnhwoVq\nbGzUs88+q5CQEOXm5mrPnj0txnf27FmNHj1aU6ZMka+vrw4dOqQ//OEPamxs1KRJkyRJhYWFWr16\ntdLS0jR48GA5nU6dPHlSdXV1bfzpAQAAAPZCsYRXTZo0SY8//rgkadiwYWpoaNCWLVuUnJwsh8Oh\n5557ztz2xo0bSkhI0M9+9jPt2LFDycnJbvsaP368UlNTJUlDhw5VWVmZduzYYRbLgoICVVVV6Y03\n3lBcXJwkKTExUS+++KJqa2vd9pWSkmL+t2EYGjJkiC5cuKCcnByzWB49elT33Xef27aJiYme+mgA\nAACAdoNiCa96+OGH3ZbHjh2rzz//XKdPn9agQYO0c+dOffrpp6qsrFRDQ4O5XWVlZYt9DR8+3G05\nJiZGX375pbl89OhRRUREmKVScn1zOmbMGGVlZbn97NmzZ7V27VodOXJEFy9elGEYkiR/f39zm/79\n+ysnJ0crVqzQqFGjNGjQIAUEBNzFpwAAAAC0bxRLeFVYWJjb8s3LW2tra1VcXKzly5dr4sSJSktL\nU/fu3eXj46M333xTTqezxb6Cg4Pdlv39/dXY2GguX7x4scXls199z5uuXbumhQsXKjAwUE899ZQi\nIyPl5+ennJwc5efnm9tNmDBBjY2Nys/PV25urrp06aLhw4fr6aefVq9evb79hwEAAHAbRUVFkqRx\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "# Sizes\n", "index = [\"pandas\", \"bcolz (memory, nocompr)\", \"bcolz (memory, compr)\", \"bcolz (disk, compr)\"]\n", "#index = [\"bcolz (disk)\", \"bcolz (compr)\", \"bcolz (nocompr)\", \"pandas\"]\n", "df = pd.DataFrame({'size (MB)': [dfsize, nzsize, zsize, dbsize]}, index=index)\n", "pd.options.display.mpl_style = 'default'\n", "df.plot(kind='barh', figsize=(12,7), fontsize=16, title=\"Size of the datasets\")" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nIiIiojfAdVvSMCfpmJU0zElzsJgkIiIiIiKicmMxSURERPQGuG5LGuYkHbOShjlpDhaTRERERERE\nVG5a6u4A0ftoaQ97dXdB42VlZcHExETd3agWmJU0zEm6olmZGeqosTeaKyoqiiMkEjAn6ZiVNMxJ\nc7CYJFIDD0sjdXdB40XdioOHM/9HIQWzkoY5ScesiIhICpkgCIK6O0H0PomMjISnp6e6u0FERERE\n77iYmBj4+PhU2vW5ZpKIiIiIiIjKjcUkEWkkPkNKOmYlDXOSjllJw5ykYU7SMStpmJPmYDFJRERE\nRERE5cY1k0RVjGsmiYiIiKgqcM0kERERERERaRwWk0SkkbgeQjpmJQ1zko5ZScOcpGFO0jEraZiT\n5mAxSUREREREROXGNZNEVYxrJomIiIioKnDNJBEREREREWkcFpNEpJG4HkI6ZiUNc5KOWUnDnKRh\nTtIxK2mYk+ZgMUlERERERETlxjWTRFWMayaJiIiIqCpwzSQRERERERFpHBaTRKSRuB5COmYlDXOS\njllJw5ykYU7SMStpmJPmYDFJRERERERE5cY1k0RVjGsmiYiIiKgqcM0kERERERERaRwWk0Skkbge\nQjpmJQ1zko5ZScOcpGFO0jEraZiT5mAxSUREREREROXGNZNEVYxrJomIiIioKnDNJBEREREREWkc\nFpNEpJG4HkI6ZiUNc5KOWUnDnKRhTtIxK2mYk+ZgMUlERERERETlxjWTRFWMayaJiIiIqCpwzSQR\nERERERFpHBaTRKSRuB5COmYlDXOSjllJw5ykYU7SMStpmJPmYDFJRERERERE5cY1k0RVjGsmiYiI\niKgqcM0kERERERERaRwWk0SkkbgeQjpmJQ1zko5ZScOcpGFO0jEraZiT5mAxSUREREREROXGNZNE\nVYxrJomIiIioKlT2mkmtSrsyEZUo7l6OurtAREREGs7MUAf1jXXV3Q2iErGYJFKD6fsS1d0FIiIi\n0nBLe9izmFQhKioKbdu2VXc3CFwzSURERERERG+AxSQREREREVUbHJXUHCwmiYiIiIiIqNxYTBIR\nERERUbXB50xqDhaTREREREREVG4sJomIiIiIqNrgmknNwWKSiIiIiIiIyo3FJBERERERVRtcM6k5\nyiwmt2/fjoEDB6KwsLAq+gMAmD9/PhYsWFAh1xIEATNmzEBYWFiFXI+oqBcvXmDcuHE4c+aMurtC\n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\nqG+++uor/e1vf9Onn34qh8Oh7t27a/To0brjjjtuum91dbUyMjKUm5uriooKtW/fXo899pjuvPNO\nl+0cDofWrFmjTZs2qaysTLGxsRo+fLjuueceb03LK7yd1Zdffqn169frs88+U2lpqRo1aqQOHTpo\nxIgRateunTen5lF2vKeutXXrVv35z39WdHS0FixY4MmpeJVdOZ05c0YZGRnKz89XRUWFmjdvrr59\n+2rUqFHemJZX2JFVeXm5MjMzlZeXp7Nnz6pZs2bq2bOnhg8frqioKG9NzaPcyWnp0qX6/PPPdfjw\nYZWXl+vpp59WUlJSne1Yz82yYj03f09dKxDXcys5Bfp6bpqVO+t5g2nTpk271ckBgaaqqkqTJ0/W\nxYsXNXbsWN1zzz3asWOHPvjgAyUnJ6tBgwY33P/111/X9u3b9eijj+onP/mJiouLlZmZqbvvvlvN\nmjVzbpeRkaE1a9ZoyJAhGjx4sCorK/WPf/xDHTt2VKtWrbw9TY+wI6utW7dqx44duv/++zVo0CB1\n795de/fu1apVq9SjRw81b97cjqm6xa73VK3KykrNmjVLjRo1UlBQkAYOHOitqXmUXTmdPn1aU6ZM\nkSSlp6frgQce0Pe+9z1VVlbqrrvu8uocPcWurKZPn679+/dr2LBhSk1NVevWrbV+/Xrt3btXP/7x\nj709Tbe5m9OcOXPUpEkTdezYUV988YV69+6t9u3b19mO9dwsK9Zz8/dUrUBdz01zYj03z8qt9dwB\nwNj777/vGDlypOPkyZPO506ePOkYOXKk41//+tcN9/38888d6enpjs2bNzufu3LliuNXv/qVY9as\nWc7nzp0753j00UcdmZmZLvu//PLLjueee85DM/E+O7K6cOFCnX0rKioco0ePdsyfP98Ds/A+O3K6\n1sKFCx0zZ850vP76645x48Z5ZhI2sCunGTNmOH73u985rly54tkJ2MiOrEpKShzp6emOTZs2ueyf\nlZXlSE9Pd5SUlHhoNt7jTk7X+vLLL+tkVov13NWNsgr09fxaN8rpWoG4nl/rZjkF+np+rRtl5e56\nTs8kYMHu3bvVsWNHxcTEOJ+LiYlR586dtWvXrhvuu2vXLoWEhKhPnz7O54KDg/WjH/1IBQUFqqmp\nkSTl5+erpqZG/fr1c9m/f//+Onr0qE6fPu3BGXmPHVlFRkbW2TciIkKxsbE6c+aMh2biXXbkVOvA\n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\nAMCy/wMdLvD14SxvigAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Simple query times\n", "df = pd.DataFrame({'time (sec)': [dfsmplqtime, nzsmplqtime, zsmplqtime, dbsmplqtime]}, index=index)\n", "pd.options.display.mpl_style = 'default'\n", "df.plot(kind='barh', figsize=(12,5), fontsize=16, title=\"Simple query times for MovieLens 10M\")" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n5D8oJgEAAAAAltEzCdiMnkkAAADYgZ5JAAAAAIDfoZgE4JfohzBHVmbIyRxZmSEnM+RkjqzMkJP/\noJgEAAAAAFhGzyRgM3omAQAAYAd6JgEAAAAAfodiEoBfoh/CHFmZISdzZGWGnMyQkzmyMkNO/oPL\nXAGbZWVl+XoIAAAACBDevMyVYhIAAAAAYBmXuQIAAAAALKOYBAAAAABYRjEJAAAAALCMYhIAAAAA\nYFmIrwcANDZff/21/va3v+mTTz6Rw+FQnz59NGHCBN10003XPLa2tlbp6enKyclRZWWlOnfurIce\nekg9evRw2c/hcGj9+vXaunWrysvLFRsbq5SUFN1+++3empZXeDurr776Sps2bdKnn36qsrIyNW/e\nXF26dNHYsWPVqVMnb07No+x4T10uNzdXf/7znxUdHa0lS5Z4cipeZVdOp06dUnp6uvLz81VZWanW\nrVtr8ODBGj9+vDem5RV2ZFVRUaGMjAzl5eXp9OnTatWqlfr376+UlBRFRUV5a2oe5U5OK1eu1Bdf\nfKFDhw6poqJCjz/+uBISEhrsx3pulhXrufl76nKBuJ5bySnQ13PTrNxZz5vMnj179vVODgg0NTU1\nmjFjhqqrqzVp0iTdfvvt2rVrl9577z0lJiaqSZMmVz3+lVde0c6dO/Xggw/qnnvuUXFxsTIyMnTb\nbbepVatWzv3S09O1fv16jRo1SiNHjlRVVZX+8Y9/qGvXrrr55pu9PU2PsCOr3Nxc7dq1S3fddZdG\njBihPn36aN++fVq7dq369eun1q1b2zFVt9j1nqpXVVWlF198Uc2bN1dQUJCGDx/ural5lF05nTx5\nUjNnzpQkpaWl6e6779YPfvADVVVVqVevXl6do6fYldWcOXP02WefacyYMUpOTla7du20adMm7du3\nTz/5yU+8PU23uZvTggUL1KJFC3Xt2lVffvmlBg4cqM6dOzfYj/XcLCvWc/P3VL1AXc9Nc2I9N8/K\nrfXcAcDYu+++6xg3bpzjxIkTzm0nTpxwjBs3zvGvf/3rqsd+8cUXjrS0NMe2bduc2y5evOj41a9+\n5XjxxRed286cOeN48MEHHRkZGS7HP//8846nnnrKQzPxPjuyOnfuXINjKysrHRMmTHAsXrzYA7Pw\nPjtyutzSpUsd8+bNc7zyyiuOyZMne2YSNrArp7lz5zp+97vfOS5evOjZCdjIjqxKSkocaWlpjq1b\nt7ocn5mZ6UhLS3OUlJR4aDbe405Ol/vqq68aZFaP9dzV1bIK9PX8clfL6XKBuJ5f7lo5Bfp6frmr\nZeXuek7PJGDBnj171LVrV8XExDi3xcTEqHv37vr444+veuzHH3+skJAQDRo0yLktODhYP/7xj1VQ\nUKC6ujpJUn5+vurq6jRkyBCX44cOHaojR47o5MmTHpyR99iRVWRkZINjw8PDFRsbq1OnTnloJt5l\nR071Dhw4oJycHP3sZz/z7CRsYEdOJ06c0L59+3TvvfcqOLjx/vNoR1b1f4aHh7scX//Y0QhuYe1O\nTqZYz80F+npuVaCu56ZYz825u5433nQBHzh69Kg6dOjQYHv79u1VXFx81WOLi4sVExOj0NBQl+0d\nOnRQXV2djh8/7tyvadOmDS5/at++vfP7jYEdWV1JRUWFjhw54szL39mV08WLF/X6669r5MiRatu2\nrWcGbyM7cvrvf/8rSQoJCdHcuXP10EMPaeLEiVq8eLEqKio8NBPvsyOrDh06qGfPnlqzZo0OHTqk\n8+fP6+DBg1qzZo369eun2NhYz03IS9zJyRTruXsCaT23IpDXc1Os5+bcXc/5AB7AgoqKCkVERDTY\nHhkZec3FqbKy8juPrX/ua73G5fv5OzuyupLly5dLkpKTk60M12fsymn9+vWqq6vTAw884OaIfcOO\nnOrPfixdulTDhg3TqFGjdPz4ca1cuVLHjh3TCy+84O40bGHXe2r69Ol6+eWX9dvf/ta5rX///po6\nder1Dt1W7uTkideo/35jYEdWVxJI67kVgbyem2I9t8ad9ZxiEsANY926dcrNzdWUKVMa5W9rveX4\n8eNat26dpk2bppAQlv3vUn8pT69evTRp0iTn35s3b65FixYpPz9fffv29eUQ/crSpUt18OBBPfbY\nY/r+97+v4uJirVq1Sn/60580ffp0Xw8PjRzr+ZWxnpthPbfGnfWcy1wBCyIiIlRZWdlge0VFxRX7\nPUyPlf73m2rT/fydHVldLjMzU+np6Ro/frzuvPPO6xu0D9iR0xtvvKHevXsrLi5OVVVVqqysdPZI\nVFVVqaamxt1peJ0dObVo0UKS1KdPH5f94uPjJUmHDx+2PG5fsCOrvLw87dixQ08++aQSExN16623\nKikpSb/85S+1d+9ej/eHeYM7OXniNaTAWM+vRyCu56YCfT03xXpuzt31nF9pABZ06NDhiteoHzt2\n7Jo9He3bt9dHH32kmpoal36ko0ePKiQkxNlT06FDB9XW1urEiRMuv42tf93G0jtiR1b1PvjgAy1b\ntkwjRoxodJf92JFTcXGxysrKNHHixAbPMXHiRCUnJ+vRRx91cybeZUdOjeVn61rsyOrIkSOSpFtu\nucXl+Li4OOdrDRgwwK15eJs7OVl5jUBfz60K1PXcVKCv56Yay8/WtdiRlbvrOWcmAQsGDBigwsJC\nlZaWOreVlpbqwIED1/yP04ABA1RXV6ddu3Y5t126dEk7d+5UfHy883KVvn37qkmTJtq+fbvL8du3\nb1fHjh3Vpk0bD87Ie+zISpI+/PBDLVmyRElJSXr44Yc9PxEvsyOnX//613r22WddvuLj4xUVFaXZ\ns2frpz/9qXcm50F25NStWze1atVKBQUFLsfv3btX0v/+YfV3dmRVf7/Jzz//3OX4oqIiSVJ0dLRH\n5uJN7uRkivXcmkBez00F+npuivXcnLvreZPZs2fP9shIgADQsWNH7dixQ7t371Z0dLRKSkr02muv\nqVmzZpo8ebLzP1plZWWaNGmSgoKC1LNnT0nf/LAeO3ZMmzdvVosWLVRZWam///3v+vzzz/Xkk086\nf5ibNWumCxcuaOPGjQoNDVVdXZ3Wr1+v3bt3a8qUKWrXrp3P5m+FHVnt379f8+fPV6dOnfTAAw/o\n1KlTzq9z58653GDdX9mRU3R0tNq0aePy9cknn6isrEwTJkxoFJfa2ZFTUFCQoqKi9M9//lPl5eVq\n2rSp8vPz9dZbb6l79+5KTU312fytsCOrtm3b6v3339eHH36o0NBQnT9/Xvn5+VqxYoVatGihSZMm\n+X0/lzs5Sd+sP59//rkOHz6s/Px8RUdH68KFCyouLnaeMWA9/4ZJVoG+nktmOQX6ei6Z5cR6/g2T\nrNxdz/17pQf8TLNmzfTMM89oxYoVWrx4sRwOh/r06aMJEyaoWbNmzv0cDofz63JPPPGE3n77bb3z\nzjuqrKxUp06dNGPGDHXu3Nllv/HjxyssLEybNm1SeXm5YmNjNXXqVPXr18+OaXqEHVn95z//UV1d\nnQ4dOqRZs2a5HN+mTRstXrzYq3P0BLveU1cSFBTk6el4jV05JSQkKDg4WBs2bNC2bdsUGRmphIQE\njR8/3o5peoQdWTVv3ly///3vtWrVKm3cuFGnT59W69atNWDAAKWmprq8jr9yN6eMjAzt37/f+Xjz\n5s3avHmzJOmdd95xbmc9N8uK9dz8PXUlgbSem+bEem6WlbvreZCjMdxZGAAAAADgV+iZBAAAAABY\nRjEJAAAAALCMYhIAAAAAYBnFJAAAAADAMopJAAAAAIBlFJMAAAAAAMsoJgEAAAAAllFMAgAAAAAs\no5gEAAAAAFj2f0sgfKlPD1pMAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Complex query times\n", "df = pd.DataFrame({'time (sec)': [dfcmplxqtime, nzcmplxqtime, zcmplxqtime, dbcmplxqtime]}, index=index)\n", "pd.options.display.mpl_style = 'default'\n", "df.plot(kind='barh', figsize=(12,5), fontsize=16, title=\"Complex query times for MovieLens 10M\")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 }