{"nbformat": 4, "nbformat_minor": 2, "metadata": {"kernelspec": {"language": "python", "name": "python3", "display_name": "Python 3"}, "language_info": {"version": "3.6.6", "codemirror_mode": {"version": 3, "name": "ipython"}, "name": "python", "pygments_lexer": "ipython3", "nbconvert_exporter": "python", "file_extension": ".py", "mimetype": "text/x-python"}, "nikola": {"author": "Tony Fast, Saul Shanabrook", "type": "text", "description": "    %reload_ext pidgin", "date": "2018-12-07 16:43:30 UTC", "slug": "4. Extract Use Cases - VL examples.ipynb", "title": "4. Extract Use Cases - VL examples.ipynb"}}, "cells": [{"execution_count": 1, "outputs": [{"output_type": "display_data", "data": {"text/plain": ["<IPython.core.display.HTML object>"], "text/html": ["<style>\n", ".input .input_area, .nbinput .input_area {\n", "    text-decoration: line-through wavy;    \n", "    font-weight: bold;\n", "\n", "}\n", ".input:hover .input_area, .nbinput:hover .input_area {\n", "    text-decoration: none;\n", "    font-weight: normal;\n", "}\n", "</style>"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/markdown": ["    %reload_ext pidgin"], "text/plain": ["'    %reload_ext pidgin'"], "text/html": ["<pre><code>%reload_ext pidgin\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    %reload_ext pidgin"], "metadata": {}}, {"source": ["## Current\n", "\n", "Working on the __November__ progress which we plan to discuss next week.\n", "\n", "This week we will review the work in VegaLite and the UDF research."], "cell_type": "markdown", "metadata": {}}, {"execution_count": 2, "outputs": [{"output_type": "display_data", "data": {"text/markdown": ["# Extracting Vega Lite Transformations"], "text/plain": ["'# Extracting Vega Lite Transformations'"], "text/html": ["<h1>Extracting Vega Lite Transformations</h1>"]}, "metadata": {}}], "cell_type": "code", "source": ["# Extracting Vega Lite Transformations"], "metadata": {}}, {"execution_count": 3, "outputs": [{"output_type": "display_data", "data": {"text/plain": ["'digraph {\\n    rankdir=LR\\n    subgraph cluster_js{label=JS VegaLite->JupyterComms->ExtractTransform->FrontEnd }\\n    Ibis->DataFrame[label=\"Empty DataFrame for type information\"]\\n    DataFrame->Altair[label=\"Compose visualization\"]\\n    ExtractTransform->UpdatedVegaLite->{FrontEnd UpdatedIbis}\\n    UpdatedIbis->Ibis\\n    Altair->VegaLite\\n    VegaLite\\n}'"], "text/html": ["<svg width=\"1283pt\" height=\"183pt\"\r\n", " viewBox=\"0.00 0.00 1282.84 183.00\" xmlns=\"http://www.w3.org/2000/svg\" >\r\n", "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 179)\">\r\n", "<title>%3</title>\r\n", "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-179 1278.84,-179 1278.84,4 -4,4\"/>\r\n", "<g id=\"clust1\" class=\"cluster\"><title>cluster_js</title>\r\n", "<polygon fill=\"none\" stroke=\"black\" points=\"8,-92 8,-167 604.258,-167 604.258,-92 8,-92\"/>\r\n", "<text text-anchor=\"middle\" x=\"306.129\" y=\"-151.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">JS</text>\r\n", "</g>\r\n", "<!-- VegaLite -->\r\n", "<g id=\"node1\" class=\"node\"><title>VegaLite</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"58.8962\" cy=\"-118\" rx=\"42.7926\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"58.8962\" y=\"-114.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">VegaLite</text>\r\n", "</g>\r\n", "<!-- JupyterComms -->\r\n", "<g id=\"node2\" class=\"node\"><title>JupyterComms</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"204.437\" cy=\"-118\" rx=\"65.7887\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"204.437\" y=\"-114.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">JupyterComms</text>\r\n", "</g>\r\n", "<!-- VegaLite&#45;&gt;JupyterComms -->\r\n", "<g id=\"edge1\" class=\"edge\"><title>VegaLite&#45;&gt;JupyterComms</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M101.8,-118C110.308,-118 119.497,-118 128.751,-118\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"128.789,-121.5 138.788,-118 128.788,-114.5 128.789,-121.5\"/>\r\n", "</g>\r\n", "<!-- ExtractTransform -->\r\n", "<g id=\"node3\" class=\"node\"><title>ExtractTransform</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"382.474\" cy=\"-118\" rx=\"75.2868\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"382.474\" y=\"-114.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">ExtractTransform</text>\r\n", "</g>\r\n", "<!-- JupyterComms&#45;&gt;ExtractTransform -->\r\n", "<g id=\"edge2\" class=\"edge\"><title>JupyterComms&#45;&gt;ExtractTransform</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M270.486,-118C279.004,-118 287.831,-118 296.615,-118\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"296.887,-121.5 306.887,-118 296.887,-114.5 296.887,-121.5\"/>\r\n", "</g>\r\n", "<!-- FrontEnd -->\r\n", "<g id=\"node4\" class=\"node\"><title>FrontEnd</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"550.762\" cy=\"-118\" rx=\"45.4919\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"550.762\" y=\"-114.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">FrontEnd</text>\r\n", "</g>\r\n", "<!-- ExtractTransform&#45;&gt;FrontEnd -->\r\n", "<g id=\"edge3\" class=\"edge\"><title>ExtractTransform&#45;&gt;FrontEnd</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M458.348,-118C470.617,-118 483.127,-118 494.798,-118\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"494.81,-121.5 504.81,-118 494.81,-114.5 494.81,-121.5\"/>\r\n", "</g>\r\n", "<!-- UpdatedVegaLite -->\r\n", "<g id=\"node8\" class=\"node\"><title>UpdatedVegaLite</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"382.474\" cy=\"-46\" rx=\"74.187\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"382.474\" y=\"-42.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">UpdatedVegaLite</text>\r\n", "</g>\r\n", "<!-- ExtractTransform&#45;&gt;UpdatedVegaLite -->\r\n", "<g id=\"edge6\" class=\"edge\"><title>ExtractTransform&#45;&gt;UpdatedVegaLite</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M382.474,-99.8594C382.474,-91.2681 382.474,-82.6768 382.474,-74.0854\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"385.974,-74 382.474,-64 378.974,-74 385.974,-74\"/>\r\n", "</g>\r\n", "<!-- Ibis -->\r\n", "<g id=\"node5\" class=\"node\"><title>Ibis</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"670.657\" cy=\"-46\" rx=\"27\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"670.657\" y=\"-42.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Ibis</text>\r\n", "</g>\r\n", "<!-- DataFrame -->\r\n", "<g id=\"node6\" class=\"node\"><title>DataFrame</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"1000.7\" cy=\"-46\" rx=\"50.0912\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"1000.7\" y=\"-42.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">DataFrame</text>\r\n", "</g>\r\n", "<!-- Ibis&#45;&gt;DataFrame -->\r\n", "<g id=\"edge4\" class=\"edge\"><title>Ibis&#45;&gt;DataFrame</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M697.673,-46C749.743,-46 867.951,-46 940.075,-46\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"940.369,-49.5001 950.369,-46 940.369,-42.5001 940.369,-49.5001\"/>\r\n", "<text text-anchor=\"middle\" x=\"824.157\" y=\"-49.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Empty DataFrame for type information</text>\r\n", "</g>\r\n", "<!-- Altair -->\r\n", "<g id=\"node7\" class=\"node\"><title>Altair</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"1244.3\" cy=\"-19\" rx=\"30.5947\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"1244.3\" y=\"-15.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Altair</text>\r\n", "</g>\r\n", "<!-- DataFrame&#45;&gt;Altair -->\r\n", "<g id=\"edge5\" class=\"edge\"><title>DataFrame&#45;&gt;Altair</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M1048.86,-40.73C1094.15,-35.6686 1161.77,-28.1113 1204.16,-23.3738\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"1204.55,-26.8515 1214.1,-22.2624 1203.78,-19.8948 1204.55,-26.8515\"/>\r\n", "<text text-anchor=\"middle\" x=\"1132.25\" y=\"-42.8\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">Compose visualization</text>\r\n", "</g>\r\n", "<!-- Altair&#45;&gt;VegaLite -->\r\n", "<g id=\"edge10\" class=\"edge\"><title>Altair&#45;&gt;VegaLite</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M1214.35,-15.2462C1169.07,-9.70903 1078.7,-0 1001.7,-0 203.437,-0 203.437,-0 203.437,-0 145.986,-0 99.0034,-57.1033 75.7264,-91.8623\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"72.5712,-90.2949 70.0635,-100.589 78.4431,-94.1054 72.5712,-90.2949\"/>\r\n", "</g>\r\n", "<!-- UpdatedVegaLite&#45;&gt;FrontEnd -->\r\n", "<g id=\"edge7\" class=\"edge\"><title>UpdatedVegaLite&#45;&gt;FrontEnd</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M419.556,-61.6229C446.215,-73.1659 482.5,-88.8765 509.995,-100.781\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"508.756,-104.059 519.323,-104.82 511.537,-97.635 508.756,-104.059\"/>\r\n", "</g>\r\n", "<!-- UpdatedIbis -->\r\n", "<g id=\"node9\" class=\"node\"><title>UpdatedIbis</title>\r\n", "<ellipse fill=\"none\" stroke=\"black\" cx=\"550.762\" cy=\"-46\" rx=\"55.7903\" ry=\"18\"/>\r\n", "<text text-anchor=\"middle\" x=\"550.762\" y=\"-42.3\" font-family=\"Times New Roman,serif\" font-size=\"14.00\">UpdatedIbis</text>\r\n", "</g>\r\n", "<!-- UpdatedVegaLite&#45;&gt;UpdatedIbis -->\r\n", "<g id=\"edge8\" class=\"edge\"><title>UpdatedVegaLite&#45;&gt;UpdatedIbis</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M456.895,-46C466.124,-46 475.515,-46 484.605,-46\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"484.716,-49.5001 494.716,-46 484.715,-42.5001 484.716,-49.5001\"/>\r\n", "</g>\r\n", "<!-- UpdatedIbis&#45;&gt;Ibis -->\r\n", "<g id=\"edge9\" class=\"edge\"><title>UpdatedIbis&#45;&gt;Ibis</title>\r\n", "<path fill=\"none\" stroke=\"black\" d=\"M606.913,-46C615.846,-46 624.896,-46 633.237,-46\"/>\r\n", "<polygon fill=\"black\" stroke=\"black\" points=\"633.362,-49.5001 643.362,-46 633.362,-42.5001 633.362,-49.5001\"/>\r\n", "</g>\r\n", "</g>\r\n", "</svg>\r\n"]}, "metadata": {}}], "cell_type": "code", "source": ["digraph {\n", "    rankdir=LR\n", "    subgraph cluster_js{label=JS VegaLite->JupyterComms->ExtractTransform->FrontEnd }\n", "    Ibis->DataFrame[label=\"Empty DataFrame for type information\"]\n", "    DataFrame->Altair[label=\"Compose visualization\"]\n", "    ExtractTransform->UpdatedVegaLite->{FrontEnd UpdatedIbis}\n", "    UpdatedIbis->Ibis\n", "    Altair->VegaLite\n", "    VegaLite\n", "}"], "metadata": {}}, {"execution_count": 4, "outputs": [{"output_type": "display_data", "data": {"text/markdown": ["## Omnisci UDFs\n", "\n", "* https://docs.google.com/document/d/1iqG9gxa-baolsqt5U7T9OLhqFdNj5Ar8PDbFmG6Gscg/edit\n", "* https://github.com/omnisci/mapd-core/pull/290/files"], "text/plain": ["'## Omnisci UDFs\\n\\n* https://docs.google.com/document/d/1iqG9gxa-baolsqt5U7T9OLhqFdNj5Ar8PDbFmG6Gscg/edit\\n* https://github.com/omnisci/mapd-core/pull/290/files'"], "text/html": ["<h2>Omnisci UDFs</h2>\n", "<ul>\n", "<li><a href=\"https://docs.google.com/document/d/1iqG9gxa-baolsqt5U7T9OLhqFdNj5Ar8PDbFmG6Gscg/edit\">https://docs.google.com/document/d/1iqG9gxa-baolsqt5U7T9OLhqFdNj5Ar8PDbFmG6Gscg/edit</a></li>\n", "<li><a href=\"https://github.com/omnisci/mapd-core/pull/290/files\">https://github.com/omnisci/mapd-core/pull/290/files</a></li>\n", "</ul>"]}, "metadata": {}}], "cell_type": "code", "source": ["## Omnisci UDFs\n", "\n", "* https://docs.google.com/document/d/1iqG9gxa-baolsqt5U7T9OLhqFdNj5Ar8PDbFmG6Gscg/edit\n", "* https://github.com/omnisci/mapd-core/pull/290/files"], "metadata": {}}, {"execution_count": 5, "outputs": [{"output_type": "stream", "text": ["\"\"\"Examples of mapd UDFs - a prototype\n", "\n", "To run this script, the remotedict and mapd_server services must be up\n", "and running. For example:\n", "\n", "# In terminal 1, run\n", "python /path/to/git/mapd-core/python/remotedict_server.py\n", "# in terminal 2, run\n", "export PYTHONPATH=/path/to/git/mapd-core/python\n", "/path/to/bin/mapd_server\n", "# in terminal 3, run\n", "export PYTHONPATH=/path/to/git/mapd-core/python\n", "\n", "# first time, numba.cfunc is applied to udf-s, may take more time\n", "\n", "python /path/to/git/mapd-core/python/example1.py \n", "\n", "Executing query=`SELECT dest_merc_y FROM flights_2008_10k`\n", "        elapsed time first time= 0.8853063583374023\n", "        elapsed time second time= 0.0868997573852539\n", "Executing query=`SELECT pyudf_d_d(-4142173805074969890, dest_merc_y) FROM flights_2008_10k`\n", "        elapsed time first time= 0.5644011497497559\n", "        elapsed time second time= 0.07272768020629883\n", "Executing query=`SELECT dest_merc_y, dest_merc_y FROM flights_2008_10k`\n", "        elapsed time first time= 0.1111757755279541\n", "        elapsed time second time= 0.11226892471313477\n", "Executing query=`SELECT pyudf_dd_d(6619462698129493568, dest_merc_x, dest_merc_y) FROM flights_2008_10k`\n", "        elapsed time first time= 0.14680194854736328\n", "        elapsed time second time= 0.07012128829956055\n", "Executing query=`SELECT dest_merc_y, dest_merc_y, dest_merc_y FROM flights_2008_10k`\n", "        elapsed time first time= 0.14289331436157227\n", "        elapsed time second time= 0.1433720588684082\n", "Executing query=`SELECT pyudf_ddd_d(-5018962639790206958, dest_merc_x, dest_merc_y, dest_merc_x) FROM flights_2008_10k LIMIT 3`\n", "        elapsed time first time= 0.09775400161743164\n", "        elapsed time second time= 0.02623295783996582\n", "\n", "# second time, compiled machine code is used\n", "\n", "python /path/to/git/mapd-core/python/example1.py \n", "\n", "Executing query=`SELECT dest_merc_y FROM flights_2008_10k`\n", "        elapsed time first time= 0.06926894187927246\n", "        elapsed time second time= 0.0670166015625\n", "Executing query=`SELECT pyudf_d_d(-4142173805074969890, dest_merc_y) FROM flights_2008_10k`\n", "        elapsed time first time= 0.06582880020141602\n", "        elapsed time second time= 0.07201480865478516\n", "Executing query=`SELECT dest_merc_y, dest_merc_y FROM flights_2008_10k`\n", "        elapsed time first time= 0.1017143726348877\n", "        elapsed time second time= 0.1010138988494873\n", "Executing query=`SELECT pyudf_dd_d(6619462698129493568, dest_merc_x, dest_merc_y) FROM flights_2008_10k`\n", "        elapsed time first time= 0.06723594665527344\n", "        elapsed time second time= 0.06605696678161621\n", "Executing query=`SELECT dest_merc_y, dest_merc_y, dest_merc_y FROM flights_2008_10k`\n", "        elapsed time first time= 0.13908123970031738\n", "        elapsed time second time= 0.14016366004943848\n", "Executing query=`SELECT pyudf_ddd_d(-5018962639790206958, dest_merc_x, dest_merc_y, dest_merc_x) FROM flights_2008_10k LIMIT 3`\n", "        elapsed time first time= 0.027436256408691406\n", "        elapsed time second time= 0.030214548110961914\n", "\n", "\"\"\"\n", "\n", "import sys\n", "import numba\n", "import numpy\n", "import time\n", "\n", "import pymapd\n", "from mapd_udf import mapd\n", "con = pymapd.connect(user=\"mapd\", password= \"HyperInteractive\", host=\"localhost\", dbname=\"mapd\")\n", "c = con.cursor()\n", "\n", "@mapd()\n", "def myudf(x):\n", "    return x+2\n", "\n", "@mapd()\n", "def myudf2(x,y):\n", "    return (x**2+y**2)**0.5\n", "\n", "@mapd()\n", "def myudf3(x,y,z):\n", "    return (x**2+y**2+z**2)**0.5\n", "\n", "for query in [\n", "        f\"SELECT dest_merc_y FROM flights_2008_10k\",\n", "        f\"SELECT {myudf('dest_merc_y')} FROM flights_2008_10k\",\n", "        f\"SELECT dest_merc_y, dest_merc_y FROM flights_2008_10k\",\n", "        f\"SELECT {myudf2('dest_merc_x', 'dest_merc_y')} FROM flights_2008_10k\",\n", "        f\"SELECT dest_merc_y, dest_merc_y, dest_merc_y FROM flights_2008_10k\",\n", "        f\"SELECT {myudf3('dest_merc_x', 'dest_merc_y', 'dest_merc_x')} FROM flights_2008_10k LIMIT 3\",\n", "]:\n", "    print(f'Executing query=`{query}`')\n", "\n", "    start = time.time()\n", "    c.execute(query)\n", "    print('\\telapsed time first time=', time.time() - start)\n", "\n", "    start = time.time()\n", "    c.execute(query)\n", "    print('\\telapsed time second time=', time.time() - start)\n", "    #print(list(c))\n"], "name": "stdout"}, {"output_type": "display_data", "data": {"text/markdown": ["    !more \"../../mapd-core/python/example1.py\""], "text/plain": ["'    !more \"../../mapd-core/python/example1.py\"'"], "text/html": ["<pre><code>!more \"../../mapd-core/python/example1.py\"\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    !more \"../../mapd-core/python/example1.py\""], "metadata": {}}, {"source": ["# Extracting Vega Lite Transformations\n", "\n", "In this notebook, I will show some use cases for extracting out the [transformations](https://vega.github.io/vega-lite/docs/transform.html) in a Vega Lite spec and moving their computation to the MapD database from the client. \n", "\n", "To demonstrate this functionality, we recreate the examples the Vega Lite team used to demonstrate this feature: https://vega.github.io/vega-lite-transforms2sql/\n"], "cell_type": "markdown", "metadata": {}}, {"source": ["## Install\n", "\n", "First, we have to install the `omnisci_renderer` package, as well as altair, ibis and the MapD client. We need to install a development branch of ibis until https://github.com/ibis-project/ibis/pull/1675 is released."], "cell_type": "markdown", "metadata": {}}, {"execution_count": 6, "outputs": [{"output_type": "stream", "text": ["C:\\Anaconda3\\lib\\site-packages\\ibis\\sql\\postgres\\compiler.py:223: UserWarning: locale specific date formats (%c, %x, %X) are not yet implemented for Windows\n", "  'for %s' % platform.system()\n"], "name": "stderr"}, {"output_type": "display_data", "data": {"text/markdown": ["    import altair as alt\n", "    import ibis\n", "    import omnisci_renderer"], "text/plain": ["'    import altair as alt\\n    import ibis\\n    import omnisci_renderer'"], "text/html": ["<pre><code>import altair as alt\n", "import ibis\n", "import omnisci_renderer\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    import altair as alt\n", "    import ibis\n", "    import omnisci_renderer"], "metadata": {}}, {"source": ["## Carrier names\n", "\n", "Let's recreate the first example, counting the carrier names.\n", "\n", "First we connect to thte table using Ibis:"], "cell_type": "markdown", "metadata": {}}, {"execution_count": 7, "outputs": [{"output_type": "display_data", "data": {"text/markdown": ["    conn = ibis.mapd.connect(\n", "        host='metis.mapd.com', user='mapd', password='HyperInteractive',\n", "        port=443, database='mapd', protocol= 'https'\n", "    )\n", "    t = conn.table(\"flights_donotmodify\")"], "text/plain": ["'    conn = ibis.mapd.connect(\\n        host=\\'metis.mapd.com\\', user=\\'mapd\\', password=\\'HyperInteractive\\',\\n        port=443, database=\\'mapd\\', protocol= \\'https\\'\\n    )\\n    t = conn.table(\"flights_donotmodify\")'"], "text/html": ["<pre><code>conn = ibis.mapd.connect(\n", "    host='metis.mapd.com', user='mapd', password='HyperInteractive',\n", "    port=443, database='mapd', protocol= 'https'\n", ")\n", "t = conn.table(\"flights_donotmodify\")\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    conn = ibis.mapd.connect(\n", "        host='metis.mapd.com', user='mapd', password='HyperInteractive',\n", "        port=443, database='mapd', protocol= 'https'\n", "    )\n", "    t = conn.table(\"flights_donotmodify\")"], "metadata": {}}, {"source": ["Then we compose an Altair chart using an ibis expression."], "cell_type": "markdown", "metadata": {}}, {"execution_count": 8, "outputs": [{"output_type": "display_data", "data": {"text/markdown": ["    c = alt.Chart(t[t.carrier_name]).mark_bar().encode(\n", "        x='carrier_name',\n", "        y='count()'\n", "    )"], "text/plain": ["\"    c = alt.Chart(t[t.carrier_name]).mark_bar().encode(\\n        x='carrier_name',\\n        y='count()'\\n    )\""], "text/html": ["<pre><code>c = alt.Chart(t[t.carrier_name]).mark_bar().encode(\n", "    x='carrier_name',\n", "    y='count()'\n", ")\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    c = alt.Chart(t[t.carrier_name]).mark_bar().encode(\n", "        x='carrier_name',\n", "        y='count()'\n", "    )"], "metadata": {}}, {"source": ["Finally, we enable rendering that extracts the aggregate expressions and adds them onto the Ibis expresion:"], "cell_type": "markdown", "metadata": {}}, {"execution_count": 9, "outputs": [{"output_type": "stream", "text": ["C:\\Anaconda3\\lib\\site-packages\\altair\\utils\\core.py:86: UserWarning: I don't know how to infer vegalite type from 'empty'.  Defaulting to nominal.\n", "  \"Defaulting to nominal.\".format(typ))\n"], "name": "stderr"}, {"output_type": "display_data", "data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfCAYAAAAfrhY5AAAAfElEQVRYR+2WwQ3AIAwDwyzJIu3gbRfxLKnaFwj6QERKH+YNMbrEVooknpKoLRRPoT/EDuAQkS34R6eq7nXNL3FX1dB5ANDVpHjT3hGi1f4TO6f9IUCr0WovAYbMaqTW7xmvjNffxmv4Aunul5k1S2nokjhrTYrPEgu5fwOTaK0gxlj23wAAAABJRU5ErkJggg==", "application/vnd.vegalite.v2+json": {"mark": "bar", "data": {"values": []}}, "text/plain": ["<VegaLite 2 object>\n", "\n", "If you see this message, it means the renderer has not been properly enabled\n", "for the frontend that you are using. For more information, see\n", "https://altair-viz.github.io/user_guide/troubleshooting.html\n"]}, "metadata": {}}, {"execution_count": 9, "data": {"text/plain": []}, "metadata": {}, "output_type": "execute_result"}, {"output_type": "display_data", "data": {"text/markdown": ["    alt.data_transformers.enable('ibis')\n", "    alt.renderers.enable(\"extract-ibis\")\n", "    c"], "text/plain": ["'    alt.data_transformers.enable(\\'ibis\\')\\n    alt.renderers.enable(\"extract-ibis\")\\n    c'"], "text/html": ["<pre><code>alt.data_transformers.enable('ibis')\n", "alt.renderers.enable(\"extract-ibis\")\n", "c\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    alt.data_transformers.enable('ibis')\n", "    alt.renderers.enable(\"extract-ibis\")\n", "    c"], "metadata": {}}, {"source": ["## Delay by Month"], "cell_type": "markdown", "metadata": {}}, {"execution_count": 10, "outputs": [{"output_type": "display_data", "data": {"image/png": "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", "application/vnd.vegalite.v2+json": {"$schema": "https://vega.github.io/schema/vega-lite/v2.6.0.json", "data": {"url": "altair-data-de8a7b2d39ae9c9241e47d902adf001c.json", "format": {"type": "json"}}, "transform": [{}], "config": {"view": {"height": 300, "width": 400}}, "mark": "rect", "encoding": {"y": {"type": "ordinal", "field": "flight_month"}, "color": {"type": "quantitative", "title": "Average of depdelay", "field": "average_depdelay"}, "x": {"type": "ordinal", "field": "flight_dayofmonth"}}}, "text/plain": ["<VegaLite 2 object>\n", "\n", "If you see this message, it means the renderer has not been properly enabled\n", "for the frontend that you are using. For more information, see\n", "https://altair-viz.github.io/user_guide/troubleshooting.html\n"]}, "metadata": {}}, {"execution_count": 10, "data": {"text/plain": []}, "metadata": {}, "output_type": "execute_result"}, {"output_type": "display_data", "data": {"text/markdown": ["    delay_by_month = alt.Chart(t[t.flight_dayofmonth, t.flight_month, t.depdelay]).mark_rect().encode(\n", "        x='flight_dayofmonth:O',\n", "        y='flight_month:O',\n", "        color='average(depdelay)'\n", "    )\n", "    delay_by_month"], "text/plain": ["\"    delay_by_month = alt.Chart(t[t.flight_dayofmonth, t.flight_month, t.depdelay]).mark_rect().encode(\\n        x='flight_dayofmonth:O',\\n        y='flight_month:O',\\n        color='average(depdelay)'\\n    )\\n    delay_by_month\""], "text/html": ["<pre><code>delay_by_month = alt.Chart(t[t.flight_dayofmonth, t.flight_month, t.depdelay]).mark_rect().encode(\n", "    x='flight_dayofmonth:O',\n", "    y='flight_month:O',\n", "    color='average(depdelay)'\n", ")\n", "delay_by_month\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    delay_by_month = alt.Chart(t[t.flight_dayofmonth, t.flight_month, t.depdelay]).mark_rect().encode(\n", "        x='flight_dayofmonth:O',\n", "        y='flight_month:O',\n", "        color='average(depdelay)'\n", "    )\n", "    delay_by_month"], "metadata": {}}, {"source": ["## Debugging"], "cell_type": "markdown", "metadata": {}}, {"source": ["We can use `display_chart` to show some intermediate computatitons for the chart. It does this by enabling different Altair renderers and displaying the chart:"], "cell_type": "markdown", "metadata": {}}, {"execution_count": 11, "outputs": [{"output_type": "display_data", "data": {"text/markdown": ["    ??omnisci_renderer.display_chart"], "text/plain": ["'    ??omnisci_renderer.display_chart'"], "text/html": ["<pre><code>??omnisci_renderer.display_chart\n", "</code></pre>"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/plain": ["\u001b[1;31mSignature:\u001b[0m \u001b[0momnisci_renderer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdisplay_chart\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mchart\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mDocstring:\u001b[0m <no docstring>\n", "\u001b[1;31mSource:\u001b[0m   \n", "\u001b[1;32mdef\u001b[0m \u001b[0mdisplay_chart\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mchart\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0mdisplay\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mCode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'alt.renderers.enable(\"json\")'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0malt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrenderers\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"json\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0mdisplay\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mchart\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0mdisplay\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mCode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'alt.renderers.enable(\"extract-json\")'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0malt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrenderers\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"extract-json\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0mchart\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_repr_mimebundle_\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0mdisplay\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mCode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'alt.renderers.enable(\"extract-ibis-sql\")'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0malt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrenderers\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"extract-ibis-sql\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0mchart\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_repr_mimebundle_\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0mdisplay\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mCode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'alt.renderers.enable(\"extract-ibis\")'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0malt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrenderers\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"extract-ibis\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n", "\u001b[0m    \u001b[0mchart\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_repr_mimebundle_\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mFile:\u001b[0m      c:\\users\\deathbeds\\jupyterlab-omnisci\\omnisci_renderer.py\n", "\u001b[1;31mType:\u001b[0m      function\n"], "text/html": ["<h1>Signature</h1>\n", "<div class=\"highlight\" style=\"background: #f8f8f8\"><pre style=\"line-height: 125%\"><span></span>omnisci_renderer<span style=\"color: #666666\">.</span>display_chart(chart)\n", "</pre></div>\n", "\n", "<h1>Docstring</h1>\n", "<pre><no docstring></pre>\n", "<h1>Source</h1>\n", "<div class=\"highlight\" style=\"background: #f8f8f8\"><pre style=\"line-height: 125%\"><span></span><span style=\"color: #008000; font-weight: bold\">def</span> <span style=\"color: #0000FF\">display_chart</span>(chart):\n", "    display(Code(<span style=\"color: #BA2121\">&#39;alt.renderers.enable(&quot;json&quot;)&#39;</span>))\n", "    alt<span style=\"color: #666666\">.</span>renderers<span style=\"color: #666666\">.</span>enable(<span style=\"color: #BA2121\">&quot;json&quot;</span>)\n", "    display(chart)\n", "\n", "    display(Code(<span style=\"color: #BA2121\">&#39;alt.renderers.enable(&quot;extract-json&quot;)&#39;</span>))\n", "    alt<span style=\"color: #666666\">.</span>renderers<span style=\"color: #666666\">.</span>enable(<span style=\"color: #BA2121\">&quot;extract-json&quot;</span>)\n", "    chart<span style=\"color: #666666\">.</span>_repr_mimebundle_(<span style=\"color: #008000\">None</span>, <span style=\"color: #008000\">None</span>)\n", "\n", "    display(Code(<span style=\"color: #BA2121\">&#39;alt.renderers.enable(&quot;extract-ibis-sql&quot;)&#39;</span>))\n", "    alt<span style=\"color: #666666\">.</span>renderers<span style=\"color: #666666\">.</span>enable(<span style=\"color: #BA2121\">&quot;extract-ibis-sql&quot;</span>)\n", "    chart<span style=\"color: #666666\">.</span>_repr_mimebundle_(<span style=\"color: #008000\">None</span>, <span style=\"color: #008000\">None</span>)\n", "\n", "    display(Code(<span style=\"color: #BA2121\">&#39;alt.renderers.enable(&quot;extract-ibis&quot;)&#39;</span>))\n", "    alt<span style=\"color: #666666\">.</span>renderers<span style=\"color: #666666\">.</span>enable(<span style=\"color: #BA2121\">&quot;extract-ibis&quot;</span>)\n", "    chart<span style=\"color: #666666\">.</span>_repr_mimebundle_(<span style=\"color: #008000\">None</span>, <span style=\"color: #008000\">None</span>)\n", "</pre></div>\n", "\n", "<h1>File</h1>\n", "<pre>c:\\users\\deathbeds\\jupyterlab-omnisci\\omnisci_renderer.py</pre>\n", "<h1>Type</h1>\n", "<pre>function</pre>\n"]}, "metadata": {}}], "cell_type": "code", "source": ["    ??omnisci_renderer.display_chart"], "metadata": {}}, {"execution_count": 12, "outputs": [{"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "alt.renderers.enable(\\PYZdq{}json\\PYZdq{})\n", "\\end{Verbatim}\n"], "text/plain": ["alt.renderers.enable(\"json\")"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>alt.renderers.enable(&quot;json&quot;)\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "stream", "text": ["C:\\Anaconda3\\lib\\site-packages\\altair\\utils\\core.py:86: UserWarning: I don't know how to infer vegalite type from 'empty'.  Defaulting to nominal.\n", "  \"Defaulting to nominal.\".format(typ))\n"], "name": "stderr"}, {"output_type": "display_data", "data": {"application/json": {"mark": "bar", "$schema": "https://vega.github.io/schema/vega-lite/v2.6.0.json", "data": {"name": "ibis_2"}, "encoding": {"y": {"type": "quantitative", "aggregate": "count"}, "x": {"type": "nominal", "field": "carrier_name"}}, "config": {"view": {"height": 300, "width": 400}}}, "text/plain": ["<VegaLite 2 object>\n", "\n", "If you see this message, it means the renderer has not been properly enabled\n", "for the frontend that you are using. For more information, see\n", "https://altair-viz.github.io/user_guide/troubleshooting.html\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "alt.renderers.enable(\\PYZdq{}extract\\PYZhy{}json\\PYZdq{})\n", "\\end{Verbatim}\n"], "text/plain": ["alt.renderers.enable(\"extract-json\")"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>alt.renderers.enable(&quot;extract-json&quot;)\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"application/json": {"$schema": "https://vega.github.io/schema/vega-lite/v2.6.0.json", "data": {"name": "ibis_3"}, "transform": [{"groupby": ["carrier_name"], "aggregate": [{"as": "count_*", "op": "count"}]}], "config": {"view": {"height": 300, "width": 400}}, "mark": "bar", "encoding": {"y": {"type": "quantitative", "title": "Number of Records", "field": "count_*"}, "x": {"type": "nominal", "field": "carrier_name"}}}, "text/plain": ["<IPython.core.display.JSON object>"]}, "metadata": {"application/json": {"expanded": false, "root": "root"}}}, {"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "alt.renderers.enable(\\PYZdq{}extract\\PYZhy{}ibis\\PYZhy{}sql\\PYZdq{})\n", "\\end{Verbatim}\n"], "text/plain": ["alt.renderers.enable(\"extract-ibis-sql\")"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>alt.renderers.enable(&quot;extract-ibis-sql&quot;)\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "SELECT \\PYZdq{}carrier\\PYZus{}name\\PYZdq{}, count(*) AS count\\PYZus{}*\n", "FROM (\n", "  SELECT \\PYZdq{}carrier\\PYZus{}name\\PYZdq{}\n", "  FROM flights\\PYZus{}donotmodify\n", ") t0\n", "GROUP BY carrier\\PYZus{}name\n", "\\end{Verbatim}\n"], "text/plain": ["SELECT \"carrier_name\", count(*) AS count_*\n", "FROM (\n", "  SELECT \"carrier_name\"\n", "  FROM flights_donotmodify\n", ") t0\n", "GROUP BY carrier_name"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>SELECT &quot;carrier_name&quot;, count(*) AS count_*\n", "FROM (\n", "  SELECT &quot;carrier_name&quot;\n", "  FROM flights_donotmodify\n", ") t0\n", "GROUP BY carrier_name\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "alt.renderers.enable(\\PYZdq{}extract\\PYZhy{}ibis\\PYZdq{})\n", "\\end{Verbatim}\n"], "text/plain": ["alt.renderers.enable(\"extract-ibis\")"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>alt.renderers.enable(&quot;extract-ibis&quot;)\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfCAYAAAAfrhY5AAAAfElEQVRYR+2WwQ3AIAwDwyzJIu3gbRfxLKnaFwj6QERKH+YNMbrEVooknpKoLRRPoT/EDuAQkS34R6eq7nXNL3FX1dB5ANDVpHjT3hGi1f4TO6f9IUCr0WovAYbMaqTW7xmvjNffxmv4Aunul5k1S2nokjhrTYrPEgu5fwOTaK0gxlj23wAAAABJRU5ErkJggg==", "application/vnd.vegalite.v2+json": {"mark": "bar", "data": {"values": []}}, "text/plain": ["<VegaLite 2 object>\n", "\n", "If you see this message, it means the renderer has not been properly enabled\n", "for the frontend that you are using. For more information, see\n", "https://altair-viz.github.io/user_guide/troubleshooting.html\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/markdown": ["    omnisci_renderer.display_chart(c)"], "text/plain": ["'    omnisci_renderer.display_chart(c)'"], "text/html": ["<pre><code>omnisci_renderer.display_chart(c)\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    omnisci_renderer.display_chart(c)"], "metadata": {}}, {"execution_count": 13, "outputs": [{"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "alt.renderers.enable(\\PYZdq{}json\\PYZdq{})\n", "\\end{Verbatim}\n"], "text/plain": ["alt.renderers.enable(\"json\")"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>alt.renderers.enable(&quot;json&quot;)\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"application/json": {"mark": "rect", "$schema": "https://vega.github.io/schema/vega-lite/v2.6.0.json", "data": {"name": "ibis_6"}, "encoding": {"y": {"type": "ordinal", "field": "flight_month"}, "color": {"type": "quantitative", "aggregate": "average", "field": "depdelay"}, "x": {"type": "ordinal", "field": "flight_dayofmonth"}}, "config": {"view": {"height": 300, "width": 400}}}, "text/plain": ["<VegaLite 2 object>\n", "\n", "If you see this message, it means the renderer has not been properly enabled\n", "for the frontend that you are using. For more information, see\n", "https://altair-viz.github.io/user_guide/troubleshooting.html\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "alt.renderers.enable(\\PYZdq{}extract\\PYZhy{}json\\PYZdq{})\n", "\\end{Verbatim}\n"], "text/plain": ["alt.renderers.enable(\"extract-json\")"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>alt.renderers.enable(&quot;extract-json&quot;)\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"application/json": {"$schema": "https://vega.github.io/schema/vega-lite/v2.6.0.json", "data": {"name": "ibis_7"}, "transform": [{"groupby": ["flight_dayofmonth", "flight_month"], "aggregate": [{"as": "average_depdelay", "op": "average", "field": "depdelay"}]}], "config": {"view": {"height": 300, "width": 400}}, "mark": "rect", "encoding": {"y": {"type": "ordinal", "field": "flight_month"}, "color": {"type": "quantitative", "title": "Average of depdelay", "field": "average_depdelay"}, "x": {"type": "ordinal", "field": "flight_dayofmonth"}}}, "text/plain": ["<IPython.core.display.JSON object>"]}, "metadata": {"application/json": {"expanded": false, "root": "root"}}}, {"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "alt.renderers.enable(\\PYZdq{}extract\\PYZhy{}ibis\\PYZhy{}sql\\PYZdq{})\n", "\\end{Verbatim}\n"], "text/plain": ["alt.renderers.enable(\"extract-ibis-sql\")"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>alt.renderers.enable(&quot;extract-ibis-sql&quot;)\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "SELECT \\PYZdq{}flight\\PYZus{}dayofmonth\\PYZdq{}, \\PYZdq{}flight\\PYZus{}month\\PYZdq{},\n", "       avg(\\PYZdq{}depdelay\\PYZdq{}) AS average\\PYZus{}depdelay\n", "FROM (\n", "  SELECT \\PYZdq{}flight\\PYZus{}dayofmonth\\PYZdq{}, \\PYZdq{}flight\\PYZus{}month\\PYZdq{}, \\PYZdq{}depdelay\\PYZdq{}\n", "  FROM flights\\PYZus{}donotmodify\n", ") t0\n", "GROUP BY flight\\PYZus{}dayofmonth, flight\\PYZus{}month\n", "\\end{Verbatim}\n"], "text/plain": ["SELECT \"flight_dayofmonth\", \"flight_month\",\n", "       avg(\"depdelay\") AS average_depdelay\n", "FROM (\n", "  SELECT \"flight_dayofmonth\", \"flight_month\", \"depdelay\"\n", "  FROM flights_donotmodify\n", ") t0\n", "GROUP BY flight_dayofmonth, flight_month"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>SELECT &quot;flight_dayofmonth&quot;, &quot;flight_month&quot;,\n", "       avg(&quot;depdelay&quot;) AS average_depdelay\n", "FROM (\n", "  SELECT &quot;flight_dayofmonth&quot;, &quot;flight_month&quot;, &quot;depdelay&quot;\n", "  FROM flights_donotmodify\n", ") t0\n", "GROUP BY flight_dayofmonth, flight_month\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/latex": ["\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "alt.renderers.enable(\\PYZdq{}extract\\PYZhy{}ibis\\PYZdq{})\n", "\\end{Verbatim}\n"], "text/plain": ["alt.renderers.enable(\"extract-ibis\")"], "text/html": ["<style>.output_html .hll { background-color: #ffffcc }\n", ".output_html  { background: #f8f8f8; }\n", ".output_html .c { color: #408080; font-style: italic } /* Comment */\n", ".output_html .err { border: 1px solid #FF0000 } /* Error */\n", ".output_html .k { color: #008000; font-weight: bold } /* Keyword */\n", ".output_html .o { color: #666666 } /* Operator */\n", ".output_html .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", ".output_html .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", ".output_html .cp { color: #BC7A00 } /* Comment.Preproc */\n", ".output_html .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", ".output_html .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", ".output_html .cs { color: #408080; font-style: italic } /* Comment.Special */\n", ".output_html .gd { color: #A00000 } /* Generic.Deleted */\n", ".output_html .ge { font-style: italic } /* Generic.Emph */\n", ".output_html .gr { color: #FF0000 } /* Generic.Error */\n", ".output_html .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", ".output_html .gi { color: #00A000 } /* Generic.Inserted */\n", ".output_html .go { color: #888888 } /* Generic.Output */\n", ".output_html .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".output_html .gs { font-weight: bold } /* Generic.Strong */\n", ".output_html .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", ".output_html .gt { color: #0044DD } /* Generic.Traceback */\n", ".output_html .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", ".output_html .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", ".output_html .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", ".output_html .kp { color: #008000 } /* Keyword.Pseudo */\n", ".output_html .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", ".output_html .kt { color: #B00040 } /* Keyword.Type */\n", ".output_html .m { color: #666666 } /* Literal.Number */\n", ".output_html .s { color: #BA2121 } /* Literal.String */\n", ".output_html .na { color: #7D9029 } /* Name.Attribute */\n", ".output_html .nb { color: #008000 } /* Name.Builtin */\n", ".output_html .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".output_html .no { color: #880000 } /* Name.Constant */\n", ".output_html .nd { color: #AA22FF } /* Name.Decorator */\n", ".output_html .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", ".output_html .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", ".output_html .nf { color: #0000FF } /* Name.Function */\n", ".output_html .nl { color: #A0A000 } /* Name.Label */\n", ".output_html .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".output_html .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".output_html .nv { color: #19177C } /* Name.Variable */\n", ".output_html .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", ".output_html .w { color: #bbbbbb } /* Text.Whitespace */\n", ".output_html .mb { color: #666666 } /* Literal.Number.Bin */\n", ".output_html .mf { color: #666666 } /* Literal.Number.Float */\n", ".output_html .mh { color: #666666 } /* Literal.Number.Hex */\n", ".output_html .mi { color: #666666 } /* Literal.Number.Integer */\n", ".output_html .mo { color: #666666 } /* Literal.Number.Oct */\n", ".output_html .sa { color: #BA2121 } /* Literal.String.Affix */\n", ".output_html .sb { color: #BA2121 } /* Literal.String.Backtick */\n", ".output_html .sc { color: #BA2121 } /* Literal.String.Char */\n", ".output_html .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".output_html .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".output_html .s2 { color: #BA2121 } /* Literal.String.Double */\n", ".output_html .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", ".output_html .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", ".output_html .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", ".output_html .sx { color: #008000 } /* Literal.String.Other */\n", ".output_html .sr { color: #BB6688 } /* Literal.String.Regex */\n", ".output_html .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".output_html .ss { color: #19177C } /* Literal.String.Symbol */\n", ".output_html .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", ".output_html .fm { color: #0000FF } /* Name.Function.Magic */\n", ".output_html .vc { color: #19177C } /* Name.Variable.Class */\n", ".output_html .vg { color: #19177C } /* Name.Variable.Global */\n", ".output_html .vi { color: #19177C } /* Name.Variable.Instance */\n", ".output_html .vm { color: #19177C } /* Name.Variable.Magic */\n", ".output_html .il { color: #666666 } /* Literal.Number.Integer.Long */</style><div class=\"highlight\"><pre><span></span>alt.renderers.enable(&quot;extract-ibis&quot;)\n", "</pre></div>\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfCAYAAAAfrhY5AAAAfElEQVRYR+2WwQ3AIAwDwyzJIu3gbRfxLKnaFwj6QERKH+YNMbrEVooknpKoLRRPoT/EDuAQkS34R6eq7nXNL3FX1dB5ANDVpHjT3hGi1f4TO6f9IUCr0WovAYbMaqTW7xmvjNffxmv4Aunul5k1S2nokjhrTYrPEgu5fwOTaK0gxlj23wAAAABJRU5ErkJggg==", "application/vnd.vegalite.v2+json": {"mark": "bar", "data": {"values": []}}, "text/plain": ["<VegaLite 2 object>\n", "\n", "If you see this message, it means the renderer has not been properly enabled\n", "for the frontend that you are using. For more information, see\n", "https://altair-viz.github.io/user_guide/troubleshooting.html\n"]}, "metadata": {}}, {"output_type": "display_data", "data": {"text/markdown": ["    omnisci_renderer.display_chart(delay_by_month)"], "text/plain": ["'    omnisci_renderer.display_chart(delay_by_month)'"], "text/html": ["<pre><code>omnisci_renderer.display_chart(delay_by_month)\n", "</code></pre>"]}, "metadata": {}}], "cell_type": "code", "source": ["    omnisci_renderer.display_chart(delay_by_month)"], "metadata": {}}]}