{"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": "Ian Rose, Tony Fast, Saul Shanabrook", "type": "text", "description": "# Using Ibis and Altair for OmniSci\n\nIn this notebook, we will use Ibis to build OmniSci query and then use Altair to compose a visualization on top of it.\n\nWe will be plotting a map of a bunch of tweets.\n\n## Assembling the Query\nFirst, let's connect to the omnisci backend and assemble the query:", "date": "2018-12-07 16:41:35 UTC", "slug": "Ibis + Altair.ipynb", "title": "Ibis + Altair.ipynb"}}, "cells": [{"source": ["# Using Ibis and Altair for OmniSci\n", "\n", "In this notebook, we will use Ibis to build OmniSci query and then use Altair to compose a visualization on top of it.\n", "\n", "We will be plotting a map of a bunch of tweets.\n", "\n", "## Assembling the Query\n", "First, let's connect to the omnisci backend and assemble the query:"], "cell_type": "markdown", "metadata": {}}, {"execution_count": 1, "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"}], "cell_type": "code", "source": ["import omnisci_renderer\n", "import ibis\n", "import altair as alt"], "metadata": {}}, {"execution_count": 2, "outputs": [], "cell_type": "code", "source": ["omnisci_cli = ibis.mapd.connect(\n", "    host='metis.mapd.com', user='mapd', password='HyperInteractive',\n", "    port=443, database='mapd', protocol= 'https'\n", ")"], "metadata": {}}, {"execution_count": 3, "outputs": [], "cell_type": "code", "source": ["t = omnisci_cli.table('tweets_nov_feb')"], "metadata": {}}, {"execution_count": 4, "outputs": [{"output_type": "stream", "text": ["SELECT \"goog_x\" AS x, \"goog_y\" AS y, \"tweet_id\" AS rowid\n", "FROM tweets_nov_feb\n"], "name": "stdout"}], "cell_type": "code", "source": ["expr = t[t.goog_x.name('x'), t.goog_y.name('y'), t.tweet_id.name('rowid')]\n", "print(expr.compile())"], "metadata": {}}, {"source": ["## Browser rendering\n", "Now, let's first try rendering this by getting a Pandas DataFrame \n", "and rendering this on the browser"], "cell_type": "markdown", "metadata": {}}, {"execution_count": 5, "outputs": [{"execution_count": 5, "data": {"text/plain": ["            x           y               rowid\n", "0  14901896.0  4116482.50  528340935361318912\n", "1  16176363.0 -4547984.00  528340935378096128\n", "2  -9273029.0  5176628.00  528340939178536960\n", "3   3618257.5  4582324.00  528340939178524672\n", "4  -5483653.0 -2930803.75  528340943553171456"], "text/html": ["<div>\n", "<style scoped>\n", "    .dataframe tbody tr th:only-of-type {\n", "        vertical-align: middle;\n", "    }\n", "\n", "    .dataframe tbody tr th {\n", "        vertical-align: top;\n", "    }\n", "\n", "    .dataframe thead th {\n", "        text-align: right;\n", "    }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", "  <thead>\n", "    <tr style=\"text-align: right;\">\n", "      <th></th>\n", "      <th>x</th>\n", "      <th>y</th>\n", "      <th>rowid</th>\n", "    </tr>\n", "  </thead>\n", "  <tbody>\n", "    <tr>\n", "      <th>0</th>\n", "      <td>14901896.0</td>\n", "      <td>4116482.50</td>\n", "      <td>528340935361318912</td>\n", "    </tr>\n", "    <tr>\n", "      <th>1</th>\n", "      <td>16176363.0</td>\n", "      <td>-4547984.00</td>\n", "      <td>528340935378096128</td>\n", "    </tr>\n", "    <tr>\n", "      <th>2</th>\n", "      <td>-9273029.0</td>\n", "      <td>5176628.00</td>\n", "      <td>528340939178536960</td>\n", "    </tr>\n", "    <tr>\n", "      <th>3</th>\n", "      <td>3618257.5</td>\n", "      <td>4582324.00</td>\n", "      <td>528340939178524672</td>\n", "    </tr>\n", "    <tr>\n", "      <th>4</th>\n", "      <td>-5483653.0</td>\n", "      <td>-2930803.75</td>\n", "      <td>528340943553171456</td>\n", "    </tr>\n", "  </tbody>\n", "</table>\n", "</div>"]}, "metadata": {}, "output_type": "execute_result"}], "cell_type": "code", "source": ["df = expr.execute()\n", "df.head()"], "metadata": {}}, {"source": ["This is a lot of data, so let's tell Altair to save it as a temporary JSON file. \n", "\n", "This way it all won't be stored in the notebook"], "cell_type": "markdown", "metadata": {}}, {"execution_count": 6, "outputs": [{"execution_count": 6, "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-2a5f68a34ef6933f28262d1d88e05041.json", "format": {"type": "json"}}, "width": 384, "config": {"view": {"height": 300, "width": 400}}, "mark": {"type": "square", "clip": true, "color": "green", "size": 2}, "height": 564, "encoding": {"y": {"scale": {"domain": [-5778161.9183506705, 10471808.487466192], "range": "height"}, "type": "quantitative", "field": "y"}, "x": {"scale": {"domain": [-3650484.1235206556, 7413325.514451755], "range": "width"}, "type": "quantitative", "field": "x"}}}, "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": "execute_result"}], "cell_type": "code", "source": ["alt.data_transformers.enable('json')\n", "alt.renderers.enable('default')\n", "alt.Chart(df, width=384, height=564).mark_square(\n", "    color='green',\n", "    size=2,\n", "    clip=True\n", ").encode(\n", "    alt.X(\n", "        'x:Q',\n", "        scale=alt.Scale(domain=[-3650484.1235206556, 7413325.514451755], range='width')\n", "    ),\n", "    alt.Y(\n", "        'y:Q',\n", "        scale=alt.Scale(domain=[-5778161.9183506705, 10471808.487466192], range='height')\n", "    ),\n", ")"], "metadata": {}}, {"source": ["## OmniSci Rendering\n", "\n", "That looks OK, but we seem to be missing some data! Well omnisci's API has a default max row limit. Instead of increasing this, let's move all the computation to omnisci, so that\n", "we don't have to send all the data to the client, just the rendered graphic.\n", "\n", "We enable the omnisci renderer with our connection info and then Altair will treat the string we pass in as a Mapd SQL query."], "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "outputs": [], "cell_type": "code", "source": ["alt.renderers.enable('omnisci', conn=omnisci_cli)\n", "alt.Chart(expr.compile(), width=384, height=564).mark_square(\n", "    color='green',\n", "    size=2,\n", "    clip=True\n", ").encode(\n", "    alt.X(\n", "        'x:Q',\n", "        scale=alt.Scale(domain=[-3650484.1235206556, 7413325.514451755], range='width')\n", "    ),\n", "    alt.Y(\n", "        'y:Q',\n", "        scale=alt.Scale(domain=[-5778161.9183506705, 10471808.487466192], range='height')\n", "    ),\n", ")"], "metadata": {}}, {"source": ["You see that we used the exact same Altair code, but we just changed the input. However, it does look a bit different because OmniScis vega backend doesn't behave the same as the standard javascript one. "], "cell_type": "markdown", "metadata": {}}]}