{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", "

Bokeh Tutorial

\n", "
\n", "\n", "

07. Bar and Categorical Data Plots

" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", "\n", " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", " root._bokeh_onload_callbacks = [];\n", " root._bokeh_is_loading = undefined;\n", " }\n", "\n", " var JS_MIME_TYPE = 'application/javascript';\n", " var HTML_MIME_TYPE = 'text/html';\n", " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " var CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " var script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " var cell = handle.cell;\n", "\n", " var id = cell.output_area._bokeh_element_id;\n", " var server_id = cell.output_area._bokeh_server_id;\n", " // Clean up Bokeh references\n", " if (id != null && id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd, {\n", " iopub: {\n", " output: function(msg) {\n", " var id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[toinsert.length - 1]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " }\n", "\n", " \n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " var NB_LOAD_WARNING = {'data': {'text/html':\n", " \"
\\n\"+\n", " \"

\\n\"+\n", " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", " \"

\\n\"+\n", " \"\\n\"+\n", " \"\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"\\n\"+\n", " \"
\"}};\n", "\n", " function display_loaded() {\n", " var el = document.getElementById(\"1001\");\n", " if (el != null) {\n", " el.textContent = \"BokehJS is loading...\";\n", " }\n", " if (root.Bokeh !== undefined) {\n", " if (el != null) {\n", " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\n", " }\n", "\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) {\n", " if (callback != null)\n", " callback();\n", " });\n", " } finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.debug(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(css_urls, js_urls, callback) {\n", " if (css_urls == null) css_urls = [];\n", " if (js_urls == null) js_urls = [];\n", "\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", "\n", " function on_load() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", " run_callbacks()\n", " }\n", " }\n", "\n", " function on_error() {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (var i = 0; i < css_urls.length; i++) {\n", " var url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error;\n", " element.rel = \"stylesheet\";\n", " element.type = \"text/css\";\n", " element.href = url;\n", " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", " document.body.appendChild(element);\n", " }\n", "\n", " const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.0.1.min.js\": \"JpP8FXbgAZLkfur7LiK3j9AGBhHNIvF742meBJrjO2ShJDhCG2I1uVvW+0DUtrmc\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.0.1.min.js\": \"xZlADit0Q04ISQEdKg2k3L4W9AwQBAuDs9nJL9fM/WwzL1tEU9VPNezOFX0nLEAz\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.0.1.min.js\": \"4BuPRZkdMKSnj3zoxiNrQ86XgNw0rYmBOxe7nshquXwwcauupgBF2DHLVG1WuZlV\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.0.1.min.js\": \"Dv1SQ87hmDqK6S5OhBf0bCuwAEvL5QYL0PuR/F1SPVhCS/r/abjkbpKDYL2zeM19\"};\n", "\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error;\n", " element.async = false;\n", " element.src = url;\n", " if (url in hashes) {\n", " element.crossOrigin = \"anonymous\";\n", " element.integrity = \"sha384-\" + hashes[url];\n", " }\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " };var element = document.getElementById(\"1001\");\n", " if (element == null) {\n", " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n", " return false;\n", " }\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " \n", " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.0.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.0.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.0.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.0.1.min.js\"];\n", " var css_urls = [];\n", " \n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " function(Bokeh) {\n", " \n", " \n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " \n", " if (root.Bokeh !== undefined || force === true) {\n", " \n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\n", " if (force === true) {\n", " display_loaded();\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", "\n", " }\n", "\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(css_urls, js_urls, function() {\n", " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(window));" ], "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"1001\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.0.1.min.js\": \"JpP8FXbgAZLkfur7LiK3j9AGBhHNIvF742meBJrjO2ShJDhCG2I1uVvW+0DUtrmc\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.0.1.min.js\": \"xZlADit0Q04ISQEdKg2k3L4W9AwQBAuDs9nJL9fM/WwzL1tEU9VPNezOFX0nLEAz\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.0.1.min.js\": \"4BuPRZkdMKSnj3zoxiNrQ86XgNw0rYmBOxe7nshquXwwcauupgBF2DHLVG1WuZlV\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.0.1.min.js\": \"Dv1SQ87hmDqK6S5OhBf0bCuwAEvL5QYL0PuR/F1SPVhCS/r/abjkbpKDYL2zeM19\"};\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n if (url in hashes) {\n element.crossOrigin = \"anonymous\";\n element.integrity = \"sha384-\" + hashes[url];\n }\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };var element = document.getElementById(\"1001\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n return false;\n }\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.0.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.0.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.0.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.0.1.min.js\"];\n var css_urls = [];\n \n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from bokeh.io import show, output_notebook\n", "from bokeh.plotting import figure\n", "\n", "output_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic Bar Charts\n", "\n", "Bar charts are a common and important type of plot. Bokeh makes it simple to create all sorts of stacked or nested bar charts, and to deal with categorical data in general." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The example below shows a simple bar chart created using the `vbar` method for drawing vertical bars. (There is a corresponding `hbar` for horizontal bars.) We also set a few plot properties to make the chart look nicer, see chapter [Styling and Theming](02 - Styling and Theming.ipynb) for information about visual properties." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"1135263a-4fde-4b2c-b8f7-a2ef34b0c7b1\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1013\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"}],\"left\":[{\"id\":\"1016\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"1037\"}],\"title\":{\"id\":\"1003\"},\"toolbar\":{\"id\":\"1027\"},\"x_range\":{\"id\":\"1005\"},\"x_scale\":{\"id\":\"1009\"},\"y_range\":{\"id\":\"1007\"},\"y_scale\":{\"id\":\"1011\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1026\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"text\":\"Fruit Counts\"},\"id\":\"1003\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"1036\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"1011\",\"type\":\"LinearScale\"},{\"attributes\":{\"formatter\":{\"id\":\"1041\"},\"ticker\":{\"id\":\"1014\"}},\"id\":\"1013\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"factors\":[\"Apples\",\"Pears\",\"Nectarines\",\"Plums\",\"Grapes\",\"Strawberries\"]},\"id\":\"1005\",\"type\":\"FactorRange\"},{\"attributes\":{\"start\":0},\"id\":\"1007\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1013\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1043\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"dimension\":1,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"1026\"}},\"id\":\"1022\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"SaveTool\"},{\"attributes\":{\"data\":{\"top\":[5,3,4,2,4,6],\"x\":[\"Apples\",\"Pears\",\"Nectarines\",\"Plums\",\"Grapes\",\"Strawberries\"]},\"selected\":{\"id\":\"1045\"},\"selection_policy\":{\"id\":\"1046\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"1035\",\"type\":\"VBar\"},{\"attributes\":{\"data_source\":{\"id\":\"1034\"},\"glyph\":{\"id\":\"1035\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1036\"},\"selection_glyph\":null,\"view\":{\"id\":\"1038\"}},\"id\":\"1037\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1041\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1034\"}},\"id\":\"1038\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"BasicTickFormatter\"}],\"root_ids\":[\"1002\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.1\"}};\n", " var render_items = [{\"docid\":\"1135263a-4fde-4b2c-b8f7-a2ef34b0c7b1\",\"root_ids\":[\"1002\"],\"roots\":{\"1002\":\"b0185c99-5061-49fa-a787-d06c0cacec31\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1002" } }, "output_type": "display_data" } ], "source": [ "# Here is a list of categorical values (or factors)\n", "fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']\n", "\n", "# Set the x_range to the list of categories above\n", "p = figure(x_range=fruits, plot_height=250, title=\"Fruit Counts\")\n", "\n", "# Categorical values can also be used as coordinates\n", "p.vbar(x=fruits, top=[5, 3, 4, 2, 4, 6], width=0.9)\n", "\n", "# Set some properties to make the plot look better\n", "p.xgrid.grid_line_color = None\n", "p.y_range.start = 0\n", "\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When we want to create a plot with a categorical range, we pass the ordered list of categorical values to `figure`, e.g. `x_range=['a', 'b', 'c']`. In the plot above, we passed the list of fruits as `x_range`, and we can see those refelected as the x-axis.\n", "\n", "The `vbar` glyph method takes an `x` location for the center of the bar, a `top` and `bottom` (which defaults to 0), and a `width`. When we are using a categorical range as we are here, each category implicitly has width of 1, so setting `width=0.9` as we have done here makes the bars shrink away from each other. (Another option would be to add some padding to the range.)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Exercise: Create your own simple bar chart\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since `vbar` is a glyph method, we can use it with a `ColumnDataSource` just as we woudl with any other glyph. In the example below, we put the data (including color data) in a `ColumnDataSource` and use that to drive our plot. We also add a legend, see chapter [Adding Annotations.ipynb](03 - Adding Annotations.ipynb) for more information about legends and other annotations." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"036a8bf6-d367-4042-a8b2-affd7022abe1\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1107\"}],\"center\":[{\"id\":\"1109\"},{\"id\":\"1113\"},{\"id\":\"1139\"}],\"left\":[{\"id\":\"1110\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"1131\"}],\"title\":{\"id\":\"1097\"},\"toolbar\":{\"id\":\"1121\"},\"x_range\":{\"id\":\"1099\"},\"x_scale\":{\"id\":\"1103\"},\"y_range\":{\"id\":\"1101\"},\"y_scale\":{\"id\":\"1105\"}},\"id\":\"1096\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1105\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1103\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"1114\",\"type\":\"PanTool\"},{\"attributes\":{\"factors\":[\"Apples\",\"Pears\",\"Nectarines\",\"Plums\",\"Grapes\",\"Strawberries\"]},\"id\":\"1099\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"1108\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"formatter\":{\"id\":\"1135\"},\"ticker\":{\"id\":\"1108\"}},\"id\":\"1107\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"end\":9},\"id\":\"1101\",\"type\":\"Range1d\"},{\"attributes\":{\"axis\":{\"id\":\"1107\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1109\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1137\"},\"ticker\":{\"id\":\"1111\"}},\"id\":\"1110\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1111\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1110\"},\"dimension\":1,\"ticker\":null},\"id\":\"1113\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"field\":\"color\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"field\":\"color\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"fruits\"}},\"id\":\"1130\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"1115\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1114\"},{\"id\":\"1115\"},{\"id\":\"1116\"},{\"id\":\"1117\"},{\"id\":\"1118\"},{\"id\":\"1119\"}]},\"id\":\"1121\",\"type\":\"Toolbar\"},{\"attributes\":{\"text\":\"Fruit Counts\"},\"id\":\"1097\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1119\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1120\"}},\"id\":\"1116\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"color\":[\"#3288bd\",\"#99d594\",\"#e6f598\",\"#fee08b\",\"#fc8d59\",\"#d53e4f\"],\"counts\":[5,3,4,2,4,6],\"fruits\":[\"Apples\",\"Pears\",\"Nectarines\",\"Plums\",\"Grapes\",\"Strawberries\"]},\"selected\":{\"id\":\"1155\"},\"selection_policy\":{\"id\":\"1156\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1117\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1118\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1155\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1129\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1130\"},\"selection_glyph\":null,\"view\":{\"id\":\"1132\"}},\"id\":\"1131\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1156\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1132\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"field\":\"fruits\"},\"renderers\":[{\"id\":\"1131\"}]},\"id\":\"1140\",\"type\":\"LegendItem\"},{\"attributes\":{\"items\":[{\"id\":\"1140\"}],\"location\":\"top_center\",\"orientation\":\"horizontal\"},\"id\":\"1139\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"fill_color\":{\"field\":\"color\"},\"line_color\":{\"field\":\"color\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"fruits\"}},\"id\":\"1129\",\"type\":\"VBar\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1120\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1137\",\"type\":\"BasicTickFormatter\"}],\"root_ids\":[\"1096\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.1\"}};\n", " var render_items = [{\"docid\":\"036a8bf6-d367-4042-a8b2-affd7022abe1\",\"root_ids\":[\"1096\"],\"roots\":{\"1096\":\"7f6ff04e-aa2b-468e-80f6-1a3a559796cd\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1096" } }, "output_type": "display_data" } ], "source": [ "from bokeh.models import ColumnDataSource\n", "from bokeh.palettes import Spectral6\n", "\n", "fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']\n", "counts = [5, 3, 4, 2, 4, 6]\n", "\n", "source = ColumnDataSource(data=dict(fruits=fruits, counts=counts, color=Spectral6))\n", "\n", "p = figure(x_range=fruits, plot_height=250, y_range=(0, 9), title=\"Fruit Counts\")\n", "p.vbar(x='fruits', top='counts', width=0.9, color='color', legend_field=\"fruits\", source=source)\n", "\n", "p.xgrid.grid_line_color = None\n", "p.legend.orientation = \"horizontal\"\n", "p.legend.location = \"top_center\"\n", "\n", "show(p)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Exercise: Create your own simple bar chart driven by a ColumnDataSource\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stacked Bars\n", "\n", "It's often desirable to stack bars together. Bokeh makes this straightforward using the `vbar_stack` and `hbar_stack` methods. When passing data to one of these methods, the data source should have a series for each \"row\" in the stack. You will provide an ordered list of column names to stack together from the data source. \n", "\n", "In the example below, we see simulated data for fruit exports (positive values) and imports (negative values) stacked using two calls to `hbar_stack`. The values in the columns for each year are ordered according to the `fruits`, i.e. this is not a \"tidy\" data format." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"0920c661-0690-458e-9124-044f34a223b3\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1216\"}],\"center\":[{\"id\":\"1219\"},{\"id\":\"1222\"},{\"id\":\"1255\"}],\"left\":[{\"id\":\"1220\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"1247\"},{\"id\":\"1260\"},{\"id\":\"1274\"},{\"id\":\"1295\"},{\"id\":\"1309\"},{\"id\":\"1325\"}],\"title\":{\"id\":\"1206\"},\"toolbar\":{\"id\":\"1230\"},\"x_range\":{\"id\":\"1208\"},\"x_scale\":{\"id\":\"1212\"},\"y_range\":{\"id\":\"1210\"},\"y_scale\":{\"id\":\"1214\"}},\"id\":\"1205\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1285\"}},\"id\":\"1296\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"2015 exports\"},\"renderers\":[{\"id\":\"1247\"}]},\"id\":\"1256\",\"type\":\"LegendItem\"},{\"attributes\":{\"formatter\":{\"id\":\"1253\"},\"ticker\":{\"id\":\"1221\"}},\"id\":\"1220\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"source\":{\"id\":\"1237\"}},\"id\":\"1275\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#e34a33\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1286\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#e34a33\"},\"right\":{\"expr\":{\"id\":\"1287\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1294\",\"type\":\"HBar\"},{\"attributes\":{},\"id\":\"1319\",\"type\":\"Selection\"},{\"attributes\":{\"fields\":[\"2015\",\"2016\"]},\"id\":\"1289\",\"type\":\"Stack\"},{\"attributes\":{},\"id\":\"1221\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"fields\":[\"2015\",\"2016\"]},\"id\":\"1290\",\"type\":\"Stack\"},{\"attributes\":{\"axis\":{\"id\":\"1220\"},\"dimension\":1,\"grid_line_color\":null,\"ticker\":null},\"id\":\"1222\",\"type\":\"Grid\"},{\"attributes\":{\"fields\":[\"2015\"]},\"id\":\"1239\",\"type\":\"Stack\"},{\"attributes\":{\"fields\":[\"2015\",\"2016\",\"2017\"]},\"id\":\"1291\",\"type\":\"Stack\"},{\"attributes\":{},\"id\":\"1223\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"#e34a33\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1286\"}},\"line_color\":{\"value\":\"#e34a33\"},\"right\":{\"expr\":{\"id\":\"1287\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1293\",\"type\":\"HBar\"},{\"attributes\":{\"data\":{\"2015\":[-1,0,-1,-3,-2,-1],\"2016\":[-2,-1,-3,-1,-2,-2],\"2017\":[-1,-2,-1,0,-2,-2],\"fruits\":[\"Apples\",\"Pears\",\"Nectarines\",\"Plums\",\"Grapes\",\"Strawberries\"]},\"selected\":{\"id\":\"1319\"},\"selection_policy\":{\"id\":\"1320\"}},\"id\":\"1285\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1224\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#fee8c8\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1290\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#fee8c8\"},\"right\":{\"expr\":{\"id\":\"1291\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1324\",\"type\":\"HBar\"},{\"attributes\":{},\"id\":\"1228\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1229\"}},\"id\":\"1225\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1285\"}},\"id\":\"1326\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1226\",\"type\":\"SaveTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1223\"},{\"id\":\"1224\"},{\"id\":\"1225\"},{\"id\":\"1226\"},{\"id\":\"1227\"},{\"id\":\"1228\"}]},\"id\":\"1230\",\"type\":\"Toolbar\"},{\"attributes\":{\"label\":{\"value\":\"2015 imports\"},\"renderers\":[{\"id\":\"1295\"}]},\"id\":\"1305\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1227\",\"type\":\"ResetTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1285\"},\"glyph\":{\"id\":\"1293\"},\"hover_glyph\":null,\"muted_glyph\":null,\"name\":\"2015\",\"nonselection_glyph\":{\"id\":\"1294\"},\"selection_glyph\":null,\"view\":{\"id\":\"1296\"}},\"id\":\"1295\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"#fee8c8\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1290\"}},\"line_color\":{\"value\":\"#fee8c8\"},\"right\":{\"expr\":{\"id\":\"1291\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1323\",\"type\":\"HBar\"},{\"attributes\":{\"items\":[{\"id\":\"1256\"},{\"id\":\"1270\"},{\"id\":\"1284\"},{\"id\":\"1305\"},{\"id\":\"1321\"},{\"id\":\"1337\"}],\"location\":\"center_left\"},\"id\":\"1255\",\"type\":\"Legend\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#e0f3db\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1242\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#e0f3db\"},\"right\":{\"expr\":{\"id\":\"1243\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1273\",\"type\":\"HBar\"},{\"attributes\":{\"label\":{\"value\":\"2017 imports\"},\"renderers\":[{\"id\":\"1325\"}]},\"id\":\"1337\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"1285\"},\"glyph\":{\"id\":\"1323\"},\"hover_glyph\":null,\"muted_glyph\":null,\"name\":\"2017\",\"nonselection_glyph\":{\"id\":\"1324\"},\"selection_glyph\":null,\"view\":{\"id\":\"1326\"}},\"id\":\"1325\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"#e0f3db\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1242\"}},\"line_color\":{\"value\":\"#e0f3db\"},\"right\":{\"expr\":{\"id\":\"1243\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1272\",\"type\":\"HBar\"},{\"attributes\":{\"label\":{\"value\":\"2017 exports\"},\"renderers\":[{\"id\":\"1274\"}]},\"id\":\"1284\",\"type\":\"LegendItem\"},{\"attributes\":{\"fields\":[\"2015\"]},\"id\":\"1240\",\"type\":\"Stack\"},{\"attributes\":{\"data_source\":{\"id\":\"1237\"},\"glyph\":{\"id\":\"1245\"},\"hover_glyph\":null,\"muted_glyph\":null,\"name\":\"2015\",\"nonselection_glyph\":{\"id\":\"1246\"},\"selection_glyph\":null,\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#a8ddb5\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1240\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#a8ddb5\"},\"right\":{\"expr\":{\"id\":\"1241\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1259\",\"type\":\"HBar\"},{\"attributes\":{\"fields\":[]},\"id\":\"1238\",\"type\":\"Stack\"},{\"attributes\":{\"data_source\":{\"id\":\"1237\"},\"glyph\":{\"id\":\"1272\"},\"hover_glyph\":null,\"muted_glyph\":null,\"name\":\"2017\",\"nonselection_glyph\":{\"id\":\"1273\"},\"selection_glyph\":null,\"view\":{\"id\":\"1275\"}},\"id\":\"1274\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1237\"}},\"id\":\"1261\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#43a2ca\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1238\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#43a2ca\"},\"right\":{\"expr\":{\"id\":\"1239\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1246\",\"type\":\"HBar\"},{\"attributes\":{\"fill_color\":{\"value\":\"#43a2ca\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1238\"}},\"line_color\":{\"value\":\"#43a2ca\"},\"right\":{\"expr\":{\"id\":\"1239\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1245\",\"type\":\"HBar\"},{\"attributes\":{\"fields\":[\"2015\",\"2016\"]},\"id\":\"1241\",\"type\":\"Stack\"},{\"attributes\":{\"fields\":[]},\"id\":\"1286\",\"type\":\"Stack\"},{\"attributes\":{\"data_source\":{\"id\":\"1237\"},\"glyph\":{\"id\":\"1258\"},\"hover_glyph\":null,\"muted_glyph\":null,\"name\":\"2016\",\"nonselection_glyph\":{\"id\":\"1259\"},\"selection_glyph\":null,\"view\":{\"id\":\"1261\"}},\"id\":\"1260\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"2015\":[2,1,4,3,2,4],\"2016\":[5,3,4,2,4,6],\"2017\":[3,2,4,4,5,3],\"fruits\":[\"Apples\",\"Pears\",\"Nectarines\",\"Plums\",\"Grapes\",\"Strawberries\"]},\"selected\":{\"id\":\"1268\"},\"selection_policy\":{\"id\":\"1269\"}},\"id\":\"1237\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1237\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"2016 exports\"},\"renderers\":[{\"id\":\"1260\"}]},\"id\":\"1270\",\"type\":\"LegendItem\"},{\"attributes\":{\"fields\":[\"2015\",\"2016\"]},\"id\":\"1242\",\"type\":\"Stack\"},{\"attributes\":{\"fill_color\":{\"value\":\"#a8ddb5\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1240\"}},\"line_color\":{\"value\":\"#a8ddb5\"},\"right\":{\"expr\":{\"id\":\"1241\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1258\",\"type\":\"HBar\"},{\"attributes\":{},\"id\":\"1251\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fields\":[\"2015\",\"2016\",\"2017\"]},\"id\":\"1243\",\"type\":\"Stack\"},{\"attributes\":{\"text\":\"Fruit import/export, by year\"},\"id\":\"1206\",\"type\":\"Title\"},{\"attributes\":{\"fields\":[\"2015\"]},\"id\":\"1287\",\"type\":\"Stack\"},{\"attributes\":{\"end\":16,\"start\":-16},\"id\":\"1208\",\"type\":\"Range1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#fdbb84\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1288\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#fdbb84\"},\"right\":{\"expr\":{\"id\":\"1289\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1308\",\"type\":\"HBar\"},{\"attributes\":{},\"id\":\"1212\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1285\"}},\"id\":\"1310\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1268\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1253\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1229\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"1216\"},\"ticker\":null},\"id\":\"1219\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"#fdbb84\"},\"height\":{\"value\":0.9},\"left\":{\"expr\":{\"id\":\"1288\"}},\"line_color\":{\"value\":\"#fdbb84\"},\"right\":{\"expr\":{\"id\":\"1289\"}},\"y\":{\"field\":\"fruits\"}},\"id\":\"1307\",\"type\":\"HBar\"},{\"attributes\":{\"factors\":[\"Apples\",\"Pears\",\"Nectarines\",\"Plums\",\"Grapes\",\"Strawberries\"],\"range_padding\":0.1},\"id\":\"1210\",\"type\":\"FactorRange\"},{\"attributes\":{\"label\":{\"value\":\"2016 imports\"},\"renderers\":[{\"id\":\"1309\"}]},\"id\":\"1321\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1214\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"1269\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data_source\":{\"id\":\"1285\"},\"glyph\":{\"id\":\"1307\"},\"hover_glyph\":null,\"muted_glyph\":null,\"name\":\"2016\",\"nonselection_glyph\":{\"id\":\"1308\"},\"selection_glyph\":null,\"view\":{\"id\":\"1310\"}},\"id\":\"1309\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"formatter\":{\"id\":\"1251\"},\"ticker\":{\"id\":\"1217\"}},\"id\":\"1216\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1217\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fields\":[\"2015\"]},\"id\":\"1288\",\"type\":\"Stack\"},{\"attributes\":{},\"id\":\"1320\",\"type\":\"UnionRenderers\"}],\"root_ids\":[\"1205\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.1\"}};\n", " var render_items = [{\"docid\":\"0920c661-0690-458e-9124-044f34a223b3\",\"root_ids\":[\"1205\"],\"roots\":{\"1205\":\"33f20891-b010-48f8-9ab5-1ba1f9233264\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1205" } }, "output_type": "display_data" } ], "source": [ "from bokeh.palettes import GnBu3, OrRd3\n", "\n", "years = ['2015', '2016', '2017']\n", "\n", "exports = {'fruits' : fruits,\n", " '2015' : [2, 1, 4, 3, 2, 4],\n", " '2016' : [5, 3, 4, 2, 4, 6],\n", " '2017' : [3, 2, 4, 4, 5, 3]}\n", "imports = {'fruits' : fruits,\n", " '2015' : [-1, 0, -1, -3, -2, -1],\n", " '2016' : [-2, -1, -3, -1, -2, -2],\n", " '2017' : [-1, -2, -1, 0, -2, -2]}\n", "\n", "p = figure(y_range=fruits, plot_height=250, x_range=(-16, 16), title=\"Fruit import/export, by year\")\n", "\n", "p.hbar_stack(years, y='fruits', height=0.9, color=GnBu3, source=ColumnDataSource(exports),\n", " legend_label=[\"%s exports\" % x for x in years])\n", "\n", "p.hbar_stack(years, y='fruits', height=0.9, color=OrRd3, source=ColumnDataSource(imports),\n", " legend_label=[\"%s imports\" % x for x in years])\n", "\n", "p.y_range.range_padding = 0.1\n", "p.ygrid.grid_line_color = None\n", "p.legend.location = \"center_left\"\n", "\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice we also added some padding *around* the categorical range (e.g. at both ends of the axis) by specifying\n", "\n", "```\n", "p.y_range.range_padding = 0.1\n", "```" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Create a stacked bar chart with a single call to vbar_stack\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Grouped Bar Charts\n", "\n", "Sometimes we want to group bars together, instead of stacking them. Bokeh can handle up to three levels of nested (hierarchical) categories, and will automatically group output according to the outermost level. To specify neted categorical coordinates, the columns of the data source should contain tuples, for example:\n", "\n", " x = [ (\"Apples\", \"2015\"), (\"Apples\", \"2016\"), (\"Apples\", \"2017\"), (\"Pears\", \"2015), ... ]\n", " \n", "Values in other columns correspond to each item in `x`, exactly as in other cases. When plotting with these kinds of nested coordinates, we must tell Bokeh the contents and order the axis range, by explicitly passing a `FactorRange` to `figure`. In the example below, this is seen as\n", "\n", " p = figure(x_range=FactorRange(*x), ....)\n", " " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"af0de98a-7811-49fa-b677-d774247bd9dc\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1436\"}],\"center\":[{\"id\":\"1438\"},{\"id\":\"1442\"}],\"left\":[{\"id\":\"1439\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"1460\"}],\"title\":{\"id\":\"1427\"},\"toolbar\":{\"id\":\"1450\"},\"x_range\":{\"id\":\"1425\"},\"x_scale\":{\"id\":\"1432\"},\"y_range\":{\"id\":\"1430\"},\"y_scale\":{\"id\":\"1434\"}},\"id\":\"1426\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1447\",\"type\":\"ResetTool\"},{\"attributes\":{\"formatter\":{\"id\":\"1492\"},\"ticker\":{\"id\":\"1440\"}},\"id\":\"1439\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1424\"}},\"id\":\"1461\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1436\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1438\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1439\"},\"dimension\":1,\"ticker\":null},\"id\":\"1442\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"1459\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"1437\",\"type\":\"CategoricalTicker\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1446\",\"type\":\"SaveTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1424\"},\"glyph\":{\"id\":\"1458\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1459\"},\"selection_glyph\":null,\"view\":{\"id\":\"1461\"}},\"id\":\"1460\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1444\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1443\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1492\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1449\"}},\"id\":\"1445\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1449\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"factors\":[[\"Apples\",\"2015\"],[\"Apples\",\"2016\"],[\"Apples\",\"2017\"],[\"Pears\",\"2015\"],[\"Pears\",\"2016\"],[\"Pears\",\"2017\"],[\"Nectarines\",\"2015\"],[\"Nectarines\",\"2016\"],[\"Nectarines\",\"2017\"],[\"Plums\",\"2015\"],[\"Plums\",\"2016\"],[\"Plums\",\"2017\"],[\"Grapes\",\"2015\"],[\"Grapes\",\"2016\"],[\"Grapes\",\"2017\"],[\"Strawberries\",\"2015\"],[\"Strawberries\",\"2016\"],[\"Strawberries\",\"2017\"]],\"range_padding\":0.1},\"id\":\"1425\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"1448\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"1458\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"CategoricalScale\"},{\"attributes\":{\"data\":{\"counts\":[2,5,3,1,3,2,4,3,4,3,2,4,2,4,5,4,6,3],\"x\":[[\"Apples\",\"2015\"],[\"Apples\",\"2016\"],[\"Apples\",\"2017\"],[\"Pears\",\"2015\"],[\"Pears\",\"2016\"],[\"Pears\",\"2017\"],[\"Nectarines\",\"2015\"],[\"Nectarines\",\"2016\"],[\"Nectarines\",\"2017\"],[\"Plums\",\"2015\"],[\"Plums\",\"2016\"],[\"Plums\",\"2017\"],[\"Grapes\",\"2015\"],[\"Grapes\",\"2016\"],[\"Grapes\",\"2017\"],[\"Strawberries\",\"2015\"],[\"Strawberries\",\"2016\"],[\"Strawberries\",\"2017\"]]},\"selected\":{\"id\":\"1494\"},\"selection_policy\":{\"id\":\"1495\"}},\"id\":\"1424\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"text\":\"Fruit Counts by Year\"},\"id\":\"1427\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1490\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"formatter\":{\"id\":\"1490\"},\"major_label_orientation\":1,\"ticker\":{\"id\":\"1437\"}},\"id\":\"1436\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1443\"},{\"id\":\"1444\"},{\"id\":\"1445\"},{\"id\":\"1446\"},{\"id\":\"1447\"},{\"id\":\"1448\"}]},\"id\":\"1450\",\"type\":\"Toolbar\"},{\"attributes\":{\"start\":0},\"id\":\"1430\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1440\",\"type\":\"BasicTicker\"}],\"root_ids\":[\"1426\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.1\"}};\n", " var render_items = [{\"docid\":\"af0de98a-7811-49fa-b677-d774247bd9dc\",\"root_ids\":[\"1426\"],\"roots\":{\"1426\":\"92ce2c69-d406-42bc-9151-2712f97df8b4\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1426" } }, "output_type": "display_data" } ], "source": [ "from bokeh.models import FactorRange\n", "\n", "fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']\n", "years = ['2015', '2016', '2017']\n", "\n", "data = {'fruits' : fruits,\n", " '2015' : [2, 1, 4, 3, 2, 4],\n", " '2016' : [5, 3, 3, 2, 4, 6],\n", " '2017' : [3, 2, 4, 4, 5, 3]}\n", "\n", "# this creates [ (\"Apples\", \"2015\"), (\"Apples\", \"2016\"), (\"Apples\", \"2017\"), (\"Pears\", \"2015), ... ]\n", "x = [ (fruit, year) for fruit in fruits for year in years ]\n", "counts = sum(zip(data['2015'], data['2016'], data['2017']), ()) # like an hstack\n", "\n", "source = ColumnDataSource(data=dict(x=x, counts=counts))\n", "\n", "p = figure(x_range=FactorRange(*x), plot_height=250, title=\"Fruit Counts by Year\")\n", "\n", "p.vbar(x='x', top='counts', width=0.9, source=source)\n", "\n", "p.y_range.start = 0\n", "p.x_range.range_padding = 0.1\n", "p.xaxis.major_label_orientation = 1\n", "p.xgrid.grid_line_color = None\n", "\n", "show(p)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Exercise: Make the chart above have a different color for each year by adding colors to the ColumnDataSource\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another way we can set the color of the bars is to use a transorm. We first saw some transforms in previous chapter [Data Sources and Transformations](04 - Data Sources and Transformations.ipynb). Here we use a new one `factor_cmap` that accepts a the name of a column to use for colormapping, as well as the palette and factors that define the color mapping. \n", "\n", "Additionally we can configure it to map just the sub-factors if desired. For instance in this case we don't want shade each `(fruit, year)` pair differently. Instead, we want to only shade based on the `year`. So we pass `start=1` and `end=2` to specify the slice range of each factor to use when colormapping. Then we pass the result as the `fill_color` value:\n", "\n", "```\n", " fill_color=factor_cmap('x', palette=['firebrick', 'olive', 'navy'], factors=years, start=1, end=2))\n", "```\n", "to have the colors be applied automatically based on the underlying data. " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"cb08be15-4b25-44cb-b258-79284135b80d\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1555\"}],\"center\":[{\"id\":\"1557\"},{\"id\":\"1561\"}],\"left\":[{\"id\":\"1558\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"1580\"}],\"title\":{\"id\":\"1546\"},\"toolbar\":{\"id\":\"1569\"},\"x_range\":{\"id\":\"1544\"},\"x_scale\":{\"id\":\"1551\"},\"y_range\":{\"id\":\"1549\"},\"y_scale\":{\"id\":\"1553\"}},\"id\":\"1545\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"field\":\"x\",\"transform\":{\"id\":\"1576\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"white\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"1579\",\"type\":\"VBar\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1568\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"formatter\":{\"id\":\"1618\"},\"major_label_orientation\":1,\"ticker\":{\"id\":\"1556\"}},\"id\":\"1555\",\"type\":\"CategoricalAxis\"},{\"attributes\":{},\"id\":\"1551\",\"type\":\"CategoricalScale\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1562\"},{\"id\":\"1563\"},{\"id\":\"1564\"},{\"id\":\"1565\"},{\"id\":\"1566\"},{\"id\":\"1567\"}]},\"id\":\"1569\",\"type\":\"Toolbar\"},{\"attributes\":{\"text\":\"Fruit Counts by Year\"},\"id\":\"1546\",\"type\":\"Title\"},{\"attributes\":{\"start\":0},\"id\":\"1549\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_color\":{\"field\":\"x\",\"transform\":{\"id\":\"1576\"}},\"line_color\":{\"value\":\"white\"},\"top\":{\"field\":\"counts\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"1578\",\"type\":\"VBar\"},{\"attributes\":{\"axis\":{\"id\":\"1558\"},\"dimension\":1,\"ticker\":null},\"id\":\"1561\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1556\",\"type\":\"CategoricalTicker\"},{\"attributes\":{},\"id\":\"1553\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1563\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"formatter\":{\"id\":\"1620\"},\"ticker\":{\"id\":\"1559\"}},\"id\":\"1558\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1566\",\"type\":\"ResetTool\"},{\"attributes\":{\"source\":{\"id\":\"1424\"}},\"id\":\"1581\",\"type\":\"CDSView\"},{\"attributes\":{\"end\":2,\"factors\":[\"2015\",\"2016\",\"2017\"],\"palette\":[\"firebrick\",\"olive\",\"navy\"],\"start\":1},\"id\":\"1576\",\"type\":\"CategoricalColorMapper\"},{\"attributes\":{},\"id\":\"1562\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1567\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1494\",\"type\":\"Selection\"},{\"attributes\":{\"factors\":[[\"Apples\",\"2015\"],[\"Apples\",\"2016\"],[\"Apples\",\"2017\"],[\"Pears\",\"2015\"],[\"Pears\",\"2016\"],[\"Pears\",\"2017\"],[\"Nectarines\",\"2015\"],[\"Nectarines\",\"2016\"],[\"Nectarines\",\"2017\"],[\"Plums\",\"2015\"],[\"Plums\",\"2016\"],[\"Plums\",\"2017\"],[\"Grapes\",\"2015\"],[\"Grapes\",\"2016\"],[\"Grapes\",\"2017\"],[\"Strawberries\",\"2015\"],[\"Strawberries\",\"2016\"],[\"Strawberries\",\"2017\"]],\"range_padding\":0.1},\"id\":\"1544\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"1618\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data_source\":{\"id\":\"1424\"},\"glyph\":{\"id\":\"1578\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1579\"},\"selection_glyph\":null,\"view\":{\"id\":\"1581\"}},\"id\":\"1580\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1555\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1557\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1620\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"counts\":[2,5,3,1,3,2,4,3,4,3,2,4,2,4,5,4,6,3],\"x\":[[\"Apples\",\"2015\"],[\"Apples\",\"2016\"],[\"Apples\",\"2017\"],[\"Pears\",\"2015\"],[\"Pears\",\"2016\"],[\"Pears\",\"2017\"],[\"Nectarines\",\"2015\"],[\"Nectarines\",\"2016\"],[\"Nectarines\",\"2017\"],[\"Plums\",\"2015\"],[\"Plums\",\"2016\"],[\"Plums\",\"2017\"],[\"Grapes\",\"2015\"],[\"Grapes\",\"2016\"],[\"Grapes\",\"2017\"],[\"Strawberries\",\"2015\"],[\"Strawberries\",\"2016\"],[\"Strawberries\",\"2017\"]]},\"selected\":{\"id\":\"1494\"},\"selection_policy\":{\"id\":\"1495\"}},\"id\":\"1424\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1568\"}},\"id\":\"1564\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1565\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1559\",\"type\":\"BasicTicker\"}],\"root_ids\":[\"1545\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.1\"}};\n", " var render_items = [{\"docid\":\"cb08be15-4b25-44cb-b258-79284135b80d\",\"root_ids\":[\"1545\"],\"roots\":{\"1545\":\"a4ffa9ee-68ad-4bff-99e6-e369f8436694\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1545" } }, "output_type": "display_data" } ], "source": [ "from bokeh.transform import factor_cmap\n", "\n", "p = figure(x_range=FactorRange(*x), plot_height=250, title=\"Fruit Counts by Year\")\n", "\n", "p.vbar(x='x', top='counts', width=0.9, source=source, line_color=\"white\",\n", "\n", " # use the palette to colormap based on the the x[1:2] values\n", " fill_color=factor_cmap('x', palette=['firebrick', 'olive', 'navy'], factors=years, start=1, end=2))\n", "\n", "p.y_range.start = 0\n", "p.x_range.range_padding = 0.1\n", "p.xaxis.major_label_orientation = 1\n", "p.xgrid.grid_line_color = None\n", "\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to achieve grouped bar plots using another technique called \"visual dodge\". That would be useful e.g. if you only wanted to have the axis labeled by fruit type, and not include the years on the axis. This tutorial does not cover that technique but you can find information in the [User's Guide](https://bokeh.pydata.org/en/dev/docs/user_guide/categorical.html#visual-dodge). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mixing Categorical Levels\n", "\n", "If you have created a range with nested categories as above, it is possible to plot glyphs using only the \"outer\" categories, if desired. The plot below shows monthly values grouped by quarter as bars. The data for these are in the famliar format:\n", "\n", " factors = [(\"Q1\", \"jan\"), (\"Q1\", \"feb\"), (\"Q1\", \"mar\"), ....]\n", "\n", "The plot also overlays a line representing average quarterly values, and this is accomplished by using only the \"quarter\" part of each nexted category:\n", "\n", " p.line(x=[\"Q1\", \"Q2\", \"Q3\", \"Q4\"], y=....)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"3a14e85f-12a8-4471-98ca-7cff1627f325\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1681\"}],\"center\":[{\"id\":\"1683\"},{\"id\":\"1687\"}],\"left\":[{\"id\":\"1684\"}],\"plot_height\":250,\"renderers\":[{\"id\":\"1705\"},{\"id\":\"1710\"},{\"id\":\"1715\"}],\"title\":{\"id\":\"1760\"},\"toolbar\":{\"id\":\"1695\"},\"x_range\":{\"id\":\"1672\"},\"x_scale\":{\"id\":\"1677\"},\"y_range\":{\"id\":\"1675\"},\"y_scale\":{\"id\":\"1679\"}},\"id\":\"1673\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1712\"}},\"id\":\"1716\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"white\"},\"line_color\":{\"value\":\"red\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1713\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":[\"Q1\",\"Q2\",\"Q3\",\"Q4\"],\"y\":[12,9,13,14]},\"selected\":{\"id\":\"1770\"},\"selection_policy\":{\"id\":\"1771\"}},\"id\":\"1712\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1677\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"1688\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1766\",\"type\":\"Selection\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1760\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.5},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"1703\",\"type\":\"VBar\"},{\"attributes\":{\"start\":0},\"id\":\"1675\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1679\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1767\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"formatter\":{\"id\":\"1762\"},\"ticker\":{\"id\":\"1682\"}},\"id\":\"1681\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1694\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1682\",\"type\":\"CategoricalTicker\"},{\"attributes\":{},\"id\":\"1762\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1681\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1683\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1764\"},\"ticker\":{\"id\":\"1685\"}},\"id\":\"1684\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1685\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1684\"},\"dimension\":1,\"ticker\":null},\"id\":\"1687\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1764\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1688\"},{\"id\":\"1689\"},{\"id\":\"1690\"},{\"id\":\"1691\"},{\"id\":\"1692\"},{\"id\":\"1693\"}]},\"id\":\"1695\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"top\":[10,12,16,9,10,8,12,13,14,14,12,16],\"x\":[[\"Q1\",\"jan\"],[\"Q1\",\"feb\"],[\"Q1\",\"mar\"],[\"Q2\",\"apr\"],[\"Q2\",\"may\"],[\"Q2\",\"jun\"],[\"Q3\",\"jul\"],[\"Q3\",\"aug\"],[\"Q3\",\"sep\"],[\"Q4\",\"oct\"],[\"Q4\",\"nov\"],[\"Q4\",\"dec\"]]},\"selected\":{\"id\":\"1766\"},\"selection_policy\":{\"id\":\"1767\"}},\"id\":\"1702\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1768\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1689\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1693\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1694\"}},\"id\":\"1690\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1769\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1691\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1692\",\"type\":\"ResetTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1707\"},\"glyph\":{\"id\":\"1708\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1709\"},\"selection_glyph\":null,\"view\":{\"id\":\"1711\"}},\"id\":\"1710\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":[\"Q1\",\"Q2\",\"Q3\",\"Q4\"],\"y\":[12,9,13,14]},\"selected\":{\"id\":\"1768\"},\"selection_policy\":{\"id\":\"1769\"}},\"id\":\"1707\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"top\":{\"field\":\"top\"},\"width\":{\"value\":0.9},\"x\":{\"field\":\"x\"}},\"id\":\"1704\",\"type\":\"VBar\"},{\"attributes\":{\"factors\":[[\"Q1\",\"jan\"],[\"Q1\",\"feb\"],[\"Q1\",\"mar\"],[\"Q2\",\"apr\"],[\"Q2\",\"may\"],[\"Q2\",\"jun\"],[\"Q3\",\"jul\"],[\"Q3\",\"aug\"],[\"Q3\",\"sep\"],[\"Q4\",\"oct\"],[\"Q4\",\"nov\"],[\"Q4\",\"dec\"]],\"range_padding\":0.1},\"id\":\"1672\",\"type\":\"FactorRange\"},{\"attributes\":{\"data_source\":{\"id\":\"1702\"},\"glyph\":{\"id\":\"1703\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1704\"},\"selection_glyph\":null,\"view\":{\"id\":\"1706\"}},\"id\":\"1705\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1702\"}},\"id\":\"1706\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1770\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1707\"}},\"id\":\"1711\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1708\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1771\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"red\",\"line_width\":3,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1709\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"white\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"red\"},\"size\":{\"units\":\"screen\",\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1714\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"1712\"},\"glyph\":{\"id\":\"1713\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1714\"},\"selection_glyph\":null,\"view\":{\"id\":\"1716\"}},\"id\":\"1715\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"1673\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.1\"}};\n", " var render_items = [{\"docid\":\"3a14e85f-12a8-4471-98ca-7cff1627f325\",\"root_ids\":[\"1673\"],\"roots\":{\"1673\":\"3044d13f-1e21-4e06-93f3-f9fd993bd0df\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1673" } }, "output_type": "display_data" } ], "source": [ "factors = [(\"Q1\", \"jan\"), (\"Q1\", \"feb\"), (\"Q1\", \"mar\"),\n", " (\"Q2\", \"apr\"), (\"Q2\", \"may\"), (\"Q2\", \"jun\"),\n", " (\"Q3\", \"jul\"), (\"Q3\", \"aug\"), (\"Q3\", \"sep\"),\n", " (\"Q4\", \"oct\"), (\"Q4\", \"nov\"), (\"Q4\", \"dec\")]\n", "\n", "p = figure(x_range=FactorRange(*factors), plot_height=250)\n", "\n", "x = [ 10, 12, 16, 9, 10, 8, 12, 13, 14, 14, 12, 16 ]\n", "p.vbar(x=factors, top=x, width=0.9, alpha=0.5)\n", "\n", "qs, aves = [\"Q1\", \"Q2\", \"Q3\", \"Q4\"], [12, 9, 13, 14]\n", "p.line(x=qs, y=aves, color=\"red\", line_width=3)\n", "p.circle(x=qs, y=aves, line_color=\"red\", fill_color=\"white\", size=10)\n", "\n", "p.y_range.start = 0\n", "p.x_range.range_padding = 0.1\n", "p.xgrid.grid_line_color = None\n", "\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using Pandas `GroupBy`\n", "\n", "We may want to make charts based on the results of \"group by\" operations. Bokeh can utilize Pandas `GroupBy` objects directly to make this simpler. Let's take a look at how Bokeh deals with `GroupBy` objects by examining the \"cars\" data set." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mpgcyldisplhpweightaccelyroriginnamemfr
018.08307.0130350412.070North Americachevrolet chevelle malibuchevrolet
115.08350.0165369311.570North Americabuick skylark 320buick
218.08318.0150343611.070North Americaplymouth satelliteplymouth
316.08304.0150343312.070North Americaamc rebel sstamc
417.08302.0140344910.570North Americaford torinoford
\n", "
" ], "text/plain": [ " mpg cyl displ hp weight accel yr origin \\\n", "0 18.0 8 307.0 130 3504 12.0 70 North America \n", "1 15.0 8 350.0 165 3693 11.5 70 North America \n", "2 18.0 8 318.0 150 3436 11.0 70 North America \n", "3 16.0 8 304.0 150 3433 12.0 70 North America \n", "4 17.0 8 302.0 140 3449 10.5 70 North America \n", "\n", " name mfr \n", "0 chevrolet chevelle malibu chevrolet \n", "1 buick skylark 320 buick \n", "2 plymouth satellite plymouth \n", "3 amc rebel sst amc \n", "4 ford torino ford " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from bokeh.sampledata.autompg import autompg_clean as df\n", "\n", "df.cyl = df.cyl.astype(str)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose we would like to display some values grouped according to `\"cyl\"`. If we create `df.groupby(('cyl'))` then call `group.describe()` we can see that Pandas automatically computes various statistics for each group. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mpgdispl...accelyr
countmeanstdmin25%50%75%maxcountmean...75%maxcountmeanstdmin25%50%75%max
cyl
34.020.5500002.56450118.018.7520.2522.0523.74.072.500000...13.513.54.075.5000003.69684672.072.7575.077.7580.0
4199.029.2839205.67054618.025.0028.4032.9546.6199.0109.670854...18.024.8199.077.0301513.73748470.074.0077.080.0082.0
53.027.3666678.22820420.322.8525.4030.9036.43.0145.000000...20.020.13.079.0000001.00000078.078.5079.079.5080.0
683.019.9734943.82880915.018.0019.0021.0038.083.0218.361446...17.621.083.075.9518073.26438170.074.0076.078.0082.0
8103.014.9631072.8362849.013.0014.0016.0026.6103.0345.009709...14.022.2103.073.9029133.02121470.072.0073.076.0081.0
\n", "

5 rows × 48 columns

\n", "
" ], "text/plain": [ " mpg displ \\\n", " count mean std min 25% 50% 75% max count \n", "cyl \n", "3 4.0 20.550000 2.564501 18.0 18.75 20.25 22.05 23.7 4.0 \n", "4 199.0 29.283920 5.670546 18.0 25.00 28.40 32.95 46.6 199.0 \n", "5 3.0 27.366667 8.228204 20.3 22.85 25.40 30.90 36.4 3.0 \n", "6 83.0 19.973494 3.828809 15.0 18.00 19.00 21.00 38.0 83.0 \n", "8 103.0 14.963107 2.836284 9.0 13.00 14.00 16.00 26.6 103.0 \n", "\n", " ... accel yr \\\n", " mean ... 75% max count mean std min 25% \n", "cyl ... \n", "3 72.500000 ... 13.5 13.5 4.0 75.500000 3.696846 72.0 72.75 \n", "4 109.670854 ... 18.0 24.8 199.0 77.030151 3.737484 70.0 74.00 \n", "5 145.000000 ... 20.0 20.1 3.0 79.000000 1.000000 78.0 78.50 \n", "6 218.361446 ... 17.6 21.0 83.0 75.951807 3.264381 70.0 74.00 \n", "8 345.009709 ... 14.0 22.2 103.0 73.902913 3.021214 70.0 72.00 \n", "\n", " \n", " 50% 75% max \n", "cyl \n", "3 75.0 77.75 80.0 \n", "4 77.0 80.00 82.0 \n", "5 79.0 79.50 80.0 \n", "6 76.0 78.00 82.0 \n", "8 73.0 76.00 81.0 \n", "\n", "[5 rows x 48 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group = df.groupby(('cyl'))\n", "\n", "group.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bokeh allows us to create a `ColumnDataSource` directly from Pandas `GroupBy` objects, and when this happens, the data source is automatically filled with the summary values from `group.desribe()`. Observe the column names below, which correspond to the output above." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'cyl,mpg_count,mpg_mean,mpg_std,mpg_min,mpg_25%,mpg_50%,mpg_75%,mpg_max,displ_count,displ_mean,displ_std,displ_min,displ_25%,displ_50%,displ_75%,displ_max,hp_count,hp_mean,hp_std,hp_min,hp_25%,hp_50%,hp_75%,hp_max,weight_count,weight_mean,weight_std,weight_min,weight_25%,weight_50%,weight_75%,weight_max,accel_count,accel_mean,accel_std,accel_min,accel_25%,accel_50%,accel_75%,accel_max,yr_count,yr_mean,yr_std,yr_min,yr_25%,yr_50%,yr_75%,yr_max'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "source = ColumnDataSource(group)\n", "\n", "\",\".join(source.column_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Knowing these column names, we can immediately create bar charts based on Pandas `GroupBy` objects. The example below plots the aveage MPG per cylinder, i.e. columns `\"mpg_mean\"` vs `\"cyl\"`" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"997ea5b6-121b-4244-86d8-7ebe2a1f9c6a\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1861\"}],\"center\":[{\"id\":\"1863\"},{\"id\":\"1867\"}],\"left\":[{\"id\":\"1864\"}],\"plot_height\":350,\"renderers\":[{\"id\":\"1885\"}],\"title\":{\"id\":\"1943\"},\"toolbar\":{\"id\":\"1875\"},\"x_range\":{\"id\":\"1853\"},\"x_scale\":{\"id\":\"1857\"},\"y_range\":{\"id\":\"1855\"},\"y_scale\":{\"id\":\"1859\"}},\"id\":\"1852\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"fill_color\":{\"field\":\"cyl\",\"transform\":{\"id\":\"1851\"}},\"line_color\":{\"value\":\"white\"},\"top\":{\"field\":\"mpg_mean\"},\"width\":{\"value\":1},\"x\":{\"field\":\"cyl\"}},\"id\":\"1883\",\"type\":\"VBar\"},{\"attributes\":{},\"id\":\"1947\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"factors\":[\"3\",\"4\",\"5\",\"6\",\"8\"],\"palette\":[\"#2b83ba\",\"#abdda4\",\"#ffffbf\",\"#fdae61\",\"#d7191c\"]},\"id\":\"1851\",\"type\":\"CategoricalColorMapper\"},{\"attributes\":{},\"id\":\"1945\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{},\"id\":\"1857\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"1859\",\"type\":\"LinearScale\"},{\"attributes\":{\"factors\":[\"3\",\"4\",\"5\",\"6\",\"8\"]},\"id\":\"1853\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"1868\",\"type\":\"PanTool\"},{\"attributes\":{\"start\":0},\"id\":\"1855\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1874\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1872\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"number of cylinders\",\"formatter\":{\"id\":\"1945\"},\"ticker\":{\"id\":\"1862\"}},\"id\":\"1861\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1943\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1862\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1861\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1863\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Mean MPG\",\"formatter\":{\"id\":\"1947\"},\"ticker\":{\"id\":\"1865\"}},\"id\":\"1864\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1949\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"accel_25%\":{\"__ndarray__\":\"AAAAAACAKkCamZmZmZktQGZmZmZm5jFAmpmZmZkZLkAAAAAAAAAnQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"accel_50%\":{\"__ndarray__\":\"AAAAAAAAK0AzMzMzMzMwQGZmZmZm5jNAAAAAAAAAMEAAAAAAAAAqQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"accel_75%\":{\"__ndarray__\":\"AAAAAAAAK0AAAAAAAAAyQAAAAAAAADRAmpmZmZmZMUAAAAAAAAAsQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"accel_count\":{\"__ndarray__\":\"AAAAAAAAEEAAAAAAAOBoQAAAAAAAAAhAAAAAAADAVEAAAAAAAMBZQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"accel_max\":{\"__ndarray__\":\"AAAAAAAAK0DNzMzMzMw4QJqZmZmZGTRAAAAAAAAANUAzMzMzMzM2QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"accel_mean\":{\"__ndarray__\":\"AAAAAACAKkCRxCwG+JQwQCIiIiIiojJA7d9LWxRBMEA+LI1MIukpQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"accel_min\":{\"__ndarray__\":\"AAAAAAAAKUAzMzMzMzMnQM3MzMzMzC9AmpmZmZmZJkAAAAAAAAAgQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"accel_std\":{\"__ndarray__\":\"AAAAAAAA4D+b1TA5wxADQO1jrP039AJA0StM4BRBAED/ZpysTswBQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"cyl\":[\"3\",\"4\",\"5\",\"6\",\"8\"],\"displ_25%\":{\"__ndarray__\":\"AAAAAACAUUAAAAAAAMBWQAAAAAAAgF9AAAAAAADwaEAAAAAAABBzQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"displ_50%\":{\"__ndarray__\":\"AAAAAACAUUAAAAAAAEBaQAAAAAAAYGBAAAAAAADgbEAAAAAAAOB1QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"displ_75%\":{\"__ndarray__\":\"AAAAAAAgUkAAAAAAAEBeQAAAAAAAoGNAAAAAAABAb0AAAAAAAIB2QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"displ_count\":{\"__ndarray__\":\"AAAAAAAAEEAAAAAAAOBoQAAAAAAAAAhAAAAAAADAVEAAAAAAAMBZQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"displ_max\":{\"__ndarray__\":\"AAAAAAAAVEAAAAAAAIBjQAAAAAAA4GZAAAAAAABgcEAAAAAAAHB8QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"displ_mean\":{\"__ndarray__\":\"AAAAAAAgUkD/9sBG72pbQAAAAAAAIGJAmjq/9pBLa0DJeVnEJ5B1QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"displ_min\":{\"__ndarray__\":\"AAAAAACAUUAAAAAAAABRQAAAAAAAQF5AAAAAAAAgYkAAAAAAAEBwQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"displ_std\":{\"__ndarray__\":\"AAAAAAAAFEC8furRdmA1QLmT4WuwpEBAT4BvAbA2QEDXs8ZGYGNHQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"hp_25%\":{\"__ndarray__\":\"AAAAAADQV0AAAAAAAABRQAAAAAAAAFJAAAAAAAAgV0AAAAAAAIBhQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"hp_50%\":{\"__ndarray__\":\"AAAAAACgWEAAAAAAAIBTQAAAAAAAQFNAAAAAAAAAWUAAAAAAAMBiQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"hp_75%\":{\"__ndarray__\":\"AAAAAACgWUAAAAAAAABWQAAAAAAAgFZAAAAAAACAW0AAAAAAAOBlQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"hp_count\":{\"__ndarray__\":\"AAAAAAAAEEAAAAAAAOBoQAAAAAAAAAhAAAAAAADAVEAAAAAAAMBZQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"hp_max\":{\"__ndarray__\":\"AAAAAACAW0AAAAAAAMBcQAAAAAAAwFlAAAAAAACgZEAAAAAAAMBsQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"hp_mean\":{\"__ndarray__\":\"AAAAAADQWEB2PKeSApJTQFVVVVVVlVRAsD3ksmJgWUDCfquNocljQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"hp_min\":{\"__ndarray__\":\"AAAAAACAVkAAAAAAAABHQAAAAAAAwFBAAAAAAAAAUkAAAAAAAIBWQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"hp_std\":{\"__ndarray__\":\"sTIWI2yaIECGr0Go0wstQDKsjxZJlTJAxZAwIvaeLEBQwZb3G3Q8QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"mpg_25%\":{\"__ndarray__\":\"AAAAAADAMkAAAAAAAAA5QJqZmZmZ2TZAAAAAAAAAMkAAAAAAAAAqQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"mpg_50%\":{\"__ndarray__\":\"AAAAAABANEBmZmZmZmY8QGZmZmZmZjlAAAAAAAAAM0AAAAAAAAAsQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"mpg_75%\":{\"__ndarray__\":\"zczMzMwMNkCamZmZmXlAQGZmZmZm5j5AAAAAAAAANUAAAAAAAAAwQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"mpg_count\":{\"__ndarray__\":\"AAAAAAAAEEAAAAAAAOBoQAAAAAAAAAhAAAAAAADAVEAAAAAAAMBZQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"mpg_max\":{\"__ndarray__\":\"MzMzMzOzN0DNzMzMzExHQDMzMzMzM0JAAAAAAAAAQ0CamZmZmZk6QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"mpg_mean\":{\"__ndarray__\":\"zczMzMyMNEBwD2z0rkg9QN3d3d3dXTtA6lu15jb5M0BgwH9VHO0tQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"mpg_min\":{\"__ndarray__\":\"AAAAAAAAMkAAAAAAAAAyQM3MzMzMTDRAAAAAAAAALkAAAAAAAAAiQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"mpg_std\":{\"__ndarray__\":\"ca9eOxmEBECNLXOmo64WQOWG1RfXdCBALURKf2ahDkC0cW7BtbAGQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"weight_25%\":{\"__ndarray__\":\"AAAAAADNoUAAAAAAAP6fQAAAAAAAlKZAAAAAAAACp0AAAAAAAK6tQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"weight_50%\":{\"__ndarray__\":\"AAAAAACOokAAAAAAAGyhQAAAAAAADKdAAAAAAAAUqUAAAAAAACywQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"weight_75%\":{\"__ndarray__\":\"AAAAAAB+o0AAAAAAAAWkQAAAAAAAUKlAAAAAAADOqkAAAAAAgDOxQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"weight_count\":{\"__ndarray__\":\"AAAAAAAAEEAAAAAAAOBoQAAAAAAAAAhAAAAAAADAVEAAAAAAAMBZQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"weight_max\":{\"__ndarray__\":\"AAAAAABApUAAAAAAAIypQAAAAAAAlKtAAAAAAACGrkAAAAAAABS0QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"weight_mean\":{\"__ndarray__\":\"AAAAAAC9okAsMl+aOAKiQKuqqqqqPqhAjqbOrz0EqUBD0x3stxKwQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"weight_min\":{\"__ndarray__\":\"AAAAAACYoEAAAAAAADSZQAAAAAAAHKZAAAAAAABQo0AAAAAAAByoQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"weight_std\":{\"__ndarray__\":\"udhs7B3ybkC6+VSg9G11QA9pSX6AZXdAdmeNgiLGdEC+UR6eVA18QA==\",\"dtype\":\"float64\",\"shape\":[5]},\"yr_25%\":{\"__ndarray__\":\"AAAAAAAwUkAAAAAAAIBSQAAAAAAAoFNAAAAAAACAUkAAAAAAAABSQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"yr_50%\":{\"__ndarray__\":\"AAAAAADAUkAAAAAAAEBTQAAAAAAAwFNAAAAAAAAAU0AAAAAAAEBSQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"yr_75%\":{\"__ndarray__\":\"AAAAAABwU0AAAAAAAABUQAAAAAAA4FNAAAAAAACAU0AAAAAAAABTQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"yr_count\":{\"__ndarray__\":\"AAAAAAAAEEAAAAAAAOBoQAAAAAAAAAhAAAAAAADAVEAAAAAAAMBZQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"yr_max\":{\"__ndarray__\":\"AAAAAAAAVEAAAAAAAIBUQAAAAAAAAFRAAAAAAACAVEAAAAAAAEBUQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"yr_mean\":{\"__ndarray__\":\"AAAAAADgUkDEWG397UFTQAAAAAAAwFNAghLeaOr8UkCL+ARSyXlSQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"yr_min\":{\"__ndarray__\":\"AAAAAAAAUkAAAAAAAIBRQAAAAAAAgFNAAAAAAACAUUAAAAAAAIBRQA==\",\"dtype\":\"float64\",\"shape\":[5]},\"yr_std\":{\"__ndarray__\":\"p1MQvCOTDUAd5PLGXeYNQAAAAAAAAPA/p0OY+nMdCkAEv1x2cisIQA==\",\"dtype\":\"float64\",\"shape\":[5]}},\"selected\":{\"id\":\"1949\"},\"selection_policy\":{\"id\":\"1950\"}},\"id\":\"1850\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1865\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1864\"},\"dimension\":1,\"ticker\":null},\"id\":\"1867\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1950\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1868\"},{\"id\":\"1869\"},{\"id\":\"1870\"},{\"id\":\"1871\"},{\"id\":\"1872\"},{\"id\":\"1873\"}]},\"id\":\"1875\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1869\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1873\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1874\"}},\"id\":\"1870\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1850\"}},\"id\":\"1886\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"1850\"},\"glyph\":{\"id\":\"1883\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1884\"},\"selection_glyph\":null,\"view\":{\"id\":\"1886\"}},\"id\":\"1885\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1871\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"field\":\"cyl\",\"transform\":{\"id\":\"1851\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"white\"},\"top\":{\"field\":\"mpg_mean\"},\"width\":{\"value\":1},\"x\":{\"field\":\"cyl\"}},\"id\":\"1884\",\"type\":\"VBar\"}],\"root_ids\":[\"1852\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.1\"}};\n", " var render_items = [{\"docid\":\"997ea5b6-121b-4244-86d8-7ebe2a1f9c6a\",\"root_ids\":[\"1852\"],\"roots\":{\"1852\":\"eff23bb3-ee53-4973-922f-682870032cb3\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1852" } }, "output_type": "display_data" } ], "source": [ "from bokeh.palettes import Spectral5\n", "\n", "cyl_cmap = factor_cmap('cyl', palette=Spectral5, factors=sorted(df.cyl.unique()))\n", "\n", "p = figure(plot_height=350, x_range=group)\n", "p.vbar(x='cyl', top='mpg_mean', width=1, line_color=\"white\", \n", " fill_color=cyl_cmap, source=source)\n", "\n", "p.xgrid.grid_line_color = None\n", "p.xaxis.axis_label = \"number of cylinders\"\n", "p.yaxis.axis_label = \"Mean MPG\"\n", "p.y_range.start = 0\n", "\n", "show(p)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# Exercise: Use the same dataset to make a similar plot of mean horsepower (hp) by origin\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Catgorical Scatterplots\n", "\n", "So far we have seen Categorical data used together with various bar glyphs. But Bokeh can use categorical coordinates for most any glyphs. Let's create a scatter plot with categorical coordinates on one axis. The `commits` data set simply has a series datetimes of GitHub commit. Additional columns to express the day and hour of day for each commit have already been added." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
daytime
datetime
2017-04-22 15:11:58-05:00Sat15:11:58
2017-04-21 14:20:57-05:00Fri14:20:57
2017-04-20 14:35:08-05:00Thu14:35:08
2017-04-20 10:34:29-05:00Thu10:34:29
2017-04-20 09:17:23-05:00Thu09:17:23
\n", "
" ], "text/plain": [ " day time\n", "datetime \n", "2017-04-22 15:11:58-05:00 Sat 15:11:58\n", "2017-04-21 14:20:57-05:00 Fri 14:20:57\n", "2017-04-20 14:35:08-05:00 Thu 14:35:08\n", "2017-04-20 10:34:29-05:00 Thu 10:34:29\n", "2017-04-20 09:17:23-05:00 Thu 09:17:23" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from bokeh.sampledata.commits import data\n", "\n", "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create our scatter plot, we pass the list of categories as the range just as before\n", "\n", " p = figure(y_range=DAYS, ...)\n", " \n", "Then we can plot circles for each commit, with `\"time\"` driving the x-coordinate, and `\"day\"` driving the y-coordinate.\n", "\n", " p.circle(x='time', y='day', ...)\n", "\n", "To make the values more distinguishable, we can also add a `jitter` transform to the y-coordinate, which is shown in the complete example below." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"1073f616-3475-48e3-a76b-db378dbbb737\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"2017\"}],\"center\":[{\"id\":\"2020\"},{\"id\":\"2023\"}],\"left\":[{\"id\":\"2021\"}],\"plot_height\":300,\"plot_width\":800,\"renderers\":[{\"id\":\"2042\"}],\"title\":{\"id\":\"2007\"},\"toolbar\":{\"id\":\"2031\"},\"x_range\":{\"id\":\"2009\"},\"x_scale\":{\"id\":\"2013\"},\"y_range\":{\"id\":\"2011\"},\"y_scale\":{\"id\":\"2015\"}},\"id\":\"2006\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"months\":[0,2,4,6,8,10]},\"id\":\"2122\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"days\":[\"%Hh\"]},\"id\":\"2044\",\"type\":\"DatetimeTickFormatter\"},{\"attributes\":{\"text\":\"Commits by Time of Day (US/Central) 2012\\u20142016\"},\"id\":\"2007\",\"type\":\"Title\"},{\"attributes\":{\"months\":[0,1,2,3,4,5,6,7,8,9,10,11]},\"id\":\"2121\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"2030\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"base\":24,\"mantissas\":[1,2,4,6,8,12],\"max_interval\":43200000.0,\"min_interval\":3600000.0,\"num_minor_ticks\":0},\"id\":\"2116\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"days\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]},\"id\":\"2117\",\"type\":\"DaysTicker\"},{\"attributes\":{},\"id\":\"2022\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"base\":60,\"mantissas\":[1,2,5,10,15,20,30],\"max_interval\":1800000.0,\"min_interval\":1000.0,\"num_minor_ticks\":0},\"id\":\"2115\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"mantissas\":[1,2,5],\"max_interval\":500.0,\"num_minor_ticks\":0},\"id\":\"2114\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"formatter\":{\"id\":\"2113\"},\"ticker\":{\"id\":\"2022\"}},\"id\":\"2021\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"source\":{\"id\":\"2005\"}},\"id\":\"2043\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"2005\"},\"glyph\":{\"id\":\"2040\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2041\"},\"selection_glyph\":null,\"view\":{\"id\":\"2043\"}},\"id\":\"2042\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.3},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.3},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"time\"},\"y\":{\"field\":\"day\",\"transform\":{\"id\":\"2038\"}}},\"id\":\"2040\",\"type\":\"Circle\"},{\"attributes\":{\"months\":[0,6]},\"id\":\"2124\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"range\":{\"id\":\"2011\"},\"width\":0.6},\"id\":\"2038\",\"type\":\"Jitter\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"2024\"},{\"id\":\"2025\"},{\"id\":\"2026\"},{\"id\":\"2027\"},{\"id\":\"2028\"},{\"id\":\"2029\"}]},\"id\":\"2031\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"2128\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2028\",\"type\":\"ResetTool\"},{\"attributes\":{\"data\":{\"datetime\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[4916]},\"day\":[\"Sat\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Wed\",\"Wed\",\"Wed\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Fri\",\"Thu\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Wed\",\"Sat\",\"Sat\",\"Sat\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Mon\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Sun\",\"Sat\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Thu\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Wed\",\"Wed\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Thu\",\"Wed\",\"Mon\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Fri\",\"Wed\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Wed\",\"Wed\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Wed\",\"Tue\",\"Thu\",\"Thu\",\"Thu\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Sun\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Tue\",\"Tue\",\"Sat\",\"Sat\",\"Fri\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Sun\",\"Sun\",\"Sun\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Mon\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Tue\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Thu\",\"Thu\",\"Sun\",\"Sun\",\"Thu\",\"Sat\",\"Sat\",\"Sat\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Mon\",\"Sun\",\"Fri\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Thu\",\"Thu\",\"Thu\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Wed\",\"Tue\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Thu\",\"Thu\",\"Wed\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Sat\",\"Sat\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Thu\",\"Mon\",\"Sat\",\"Fri\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Sun\",\"Sun\",\"Tue\",\"Sat\",\"Sat\",\"Sat\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Mon\",\"Sat\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Mon\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Mon\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Sat\",\"Sat\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Wed\",\"Tue\",\"Tue\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Mon\",\"Mon\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Sat\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Fri\",\"Fri\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Sat\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Mon\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Mon\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Thu\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Mon\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Wed\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Sun\",\"Wed\",\"Wed\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Fri\",\"Thu\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Sat\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Wed\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sat\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Sat\",\"Sat\",\"Fri\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Wed\",\"Mon\",\"Mon\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Thu\",\"Thu\",\"Fri\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Mon\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Wed\",\"Tue\",\"Thu\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Wed\",\"Tue\",\"Sun\",\"Thu\",\"Mon\",\"Mon\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Thu\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Fri\",\"Fri\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Sat\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Thu\",\"Wed\",\"Wed\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Thu\",\"Thu\",\"Wed\",\"Wed\",\"Tue\",\"Tue\",\"Tue\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Mon\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sun\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Sat\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Tue\",\"Fri\",\"Fri\",\"Thu\",\"Thu\",\"Thu\",\"Thu\",\"Mon\",\"Thu\",\"Wed\",\"Sat\"],\"time\":[54718000.0,51657000.0,52508000.0,38069000.0,33443000.0,81337000.0,80774000.0,80483000.0,74654000.0,72943000.0,72156000.0,79027000.0,73356000.0,60243000.0,59674000.0,54660000.0,47185000.0,46270000.0,42411000.0,41561000.0,76103000.0,75239000.0,75174000.0,69770000.0,69154000.0,68707000.0,68471000.0,68401000.0,51978000.0,80814000.0,80793000.0,80773000.0,80732000.0,78572000.0,78548000.0,78529000.0,78475000.0,81847000.0,81826000.0,81807000.0,67463000.0,70189000.0,70135000.0,52275000.0,52236000.0,52215000.0,39012000.0,38954000.0,47169000.0,36607000.0,36364000.0,34425000.0,71255000.0,71190000.0,71169000.0,68205000.0,33937000.0,40530000.0,37944000.0,46956000.0,46932000.0,46913000.0,45436000.0,53499000.0,58975000.0,31108000.0,54117000.0,40470000.0,40454000.0,40440000.0,40174000.0,70402000.0,70400000.0,70400000.0,59587000.0,40434000.0,45152000.0,43238000.0,35155000.0,70317000.0,47126000.0,37226000.0,31811000.0,48541000.0,48163000.0,42499000.0,75967000.0,75955000.0,75944000.0,75914000.0,68122000.0,68109000.0,68097000.0,67287000.0,62152000.0,62138000.0,62125000.0,61982000.0,43111000.0,36084000.0,50209000.0,44569000.0,75183000.0,85934000.0,85925000.0,85918000.0,85849000.0,71895000.0,71886000.0,71879000.0,71834000.0,68865000.0,68857000.0,68851000.0,68811000.0,63582000.0,63575000.0,63567000.0,62720000.0,59907000.0,59897000.0,59890000.0,59849000.0,56496000.0,56482000.0,56475000.0,56442000.0,53682000.0,53675000.0,53667000.0,53615000.0,69040000.0,69018000.0,69011000.0,67813000.0,55512000.0,55397000.0,51445000.0,51425000.0,51418000.0,51311000.0,51088000.0,51077000.0,51069000.0,51009000.0,47045000.0,46565000.0,44348000.0,44335000.0,44328000.0,44042000.0,2219000.0,45646000.0,49042000.0,48758000.0,61312000.0,50302000.0,41519000.0,37043000.0,36998000.0,36988000.0,36976000.0,36792000.0,43712000.0,43692000.0,43678000.0,41292000.0,42722000.0,43898000.0,43882000.0,43871000.0,43354000.0,40720000.0,40706000.0,40694000.0,40624000.0,38166000.0,38153000.0,38142000.0,59743000.0,59727000.0,59715000.0,59599000.0,53830000.0,62242000.0,56549000.0,56480000.0,66262000.0,66247000.0,66234000.0,50611000.0,71529000.0,54458000.0,71051000.0,47096000.0,61719000.0,52324000.0,52291000.0,52279000.0,52220000.0,50887000.0,63378000.0,56446000.0,47421000.0,46206000.0,46183000.0,44168000.0,43447000.0,41524000.0,62394000.0,59276000.0,57466000.0,57441000.0,57429000.0,57355000.0,52299000.0,46974000.0,44299000.0,58061000.0,49650000.0,56890000.0,54241000.0,48833000.0,44169000.0,43954000.0,43755000.0,43626000.0,40980000.0,52584000.0,50328000.0,56425000.0,61735000.0,56482000.0,64856000.0,46846000.0,43053000.0,52398000.0,52384000.0,52372000.0,31011000.0,61055000.0,53864000.0,53349000.0,64316000.0,61674000.0,49820000.0,48360000.0,48343000.0,48332000.0,48191000.0,37944000.0,37924000.0,37913000.0,53255000.0,53200000.0,53188000.0,53130000.0,52881000.0,52790000.0,46106000.0,46087000.0,46077000.0,46018000.0,45234000.0,44818000.0,39772000.0,37709000.0,36720000.0,34548000.0,27248000.0,60404000.0,36766000.0,36758000.0,36748000.0,36740000.0,35590000.0,35530000.0,34591000.0,34583000.0,34574000.0,34483000.0,34474000.0,34465000.0,34458000.0,34415000.0,33875000.0,63320000.0,62046000.0,60834000.0,9838000.0,9828000.0,7804000.0,7669000.0,54510000.0,54500000.0,37664000.0,78546000.0,78531000.0,69191000.0,65977000.0,85661000.0,41194000.0,80371000.0,80363000.0,78471000.0,78441000.0,75704000.0,75678000.0,65355000.0,65347000.0,57952000.0,85175000.0,44065000.0,44057000.0,43875000.0,41688000.0,41679000.0,39363000.0,56073000.0,3036000.0,33045000.0,52440000.0,47646000.0,29693000.0,37841000.0,46460000.0,46451000.0,46439000.0,44107000.0,48050000.0,47995000.0,50303000.0,75933000.0,63719000.0,75605000.0,65922000.0,81052000.0,39749000.0,43021000.0,41867000.0,80122000.0,78253000.0,74103000.0,66842000.0,64330000.0,49777000.0,42703000.0,35216000.0,35138000.0,59684000.0,56137000.0,3048000.0,68177000.0,68175000.0,68166000.0,63236000.0,63189000.0,12312000.0,10394000.0,9505000.0,66733000.0,65064000.0,51603000.0,36555000.0,60879000.0,21296000.0,38199000.0,63259000.0,40172000.0,13349000.0,83312000.0,77880000.0,82713000.0,78949000.0,45989000.0,45818000.0,45645000.0,60725000.0,80506000.0,76895000.0,67858000.0,38452000.0,58409000.0,57004000.0,47065000.0,54975000.0,47841000.0,35726000.0,56391000.0,33847000.0,74645000.0,53603000.0,51167000.0,44153000.0,44009000.0,43367000.0,43230000.0,34923000.0,34314000.0,31239000.0,67619000.0,66255000.0,64804000.0,64388000.0,63956000.0,63274000.0,58477000.0,48924000.0,47080000.0,40584000.0,35438000.0,43447000.0,41030000.0,34406000.0,34087000.0,41042000.0,40843000.0,27238000.0,27209000.0,15266000.0,40183000.0,36134000.0,33930000.0,32806000.0,32745000.0,48823000.0,22760000.0,21892000.0,21362000.0,15461000.0,14748000.0,72231000.0,47260000.0,47057000.0,38537000.0,3538000.0,3510000.0,35856000.0,34993000.0,4099000.0,2628000.0,53131000.0,52951000.0,61288000.0,59220000.0,57272000.0,47644000.0,47616000.0,39007000.0,38727000.0,38668000.0,58901000.0,58865000.0,49027000.0,47792000.0,44508000.0,44413000.0,44362000.0,40529000.0,41496000.0,38855000.0,38673000.0,62405000.0,62118000.0,58796000.0,58394000.0,57792000.0,50799000.0,50675000.0,34543000.0,43072000.0,66350000.0,63434000.0,62384000.0,62050000.0,50761000.0,50376000.0,48901000.0,39786000.0,44410000.0,44363000.0,39206000.0,38694000.0,38222000.0,37157000.0,43054000.0,41805000.0,40888000.0,37323000.0,66415000.0,34477000.0,1838000.0,85934000.0,85921000.0,83216000.0,83153000.0,82938000.0,54598000.0,36217000.0,32123000.0,55861000.0,53483000.0,47641000.0,47130000.0,45003000.0,44887000.0,42209000.0,41667000.0,41571000.0,36708000.0,31440000.0,31353000.0,31297000.0,31258000.0,66314000.0,60499000.0,51780000.0,51715000.0,3460000.0,81186000.0,76709000.0,73832000.0,72821000.0,61085000.0,50936000.0,44614000.0,40423000.0,39652000.0,36003000.0,53692000.0,53624000.0,49706000.0,46885000.0,43548000.0,38702000.0,53457000.0,52214000.0,45036000.0,37010000.0,67001000.0,64599000.0,63686000.0,51408000.0,49282000.0,41272000.0,40543000.0,35077000.0,4117000.0,55337000.0,49427000.0,48025000.0,38599000.0,37870000.0,50284000.0,50247000.0,43525000.0,43323000.0,41666000.0,80501000.0,80139000.0,58979000.0,58950000.0,48243000.0,48203000.0,48981000.0,41459000.0,41391000.0,53745000.0,49100000.0,48919000.0,46771000.0,58283000.0,56327000.0,55385000.0,82410000.0,81496000.0,53667000.0,52708000.0,52082000.0,50373000.0,50178000.0,49918000.0,50831000.0,30256000.0,81778000.0,80306000.0,64220000.0,46478000.0,46108000.0,46029000.0,45743000.0,45387000.0,43038000.0,43016000.0,48572000.0,42364000.0,41907000.0,44991000.0,32623000.0,32580000.0,75754000.0,57633000.0,57571000.0,55589000.0,53498000.0,53456000.0,48807000.0,48703000.0,48691000.0,46688000.0,38982000.0,34809000.0,57481000.0,54179000.0,45478000.0,63642000.0,60305000.0,52393000.0,49036000.0,48763000.0,48094000.0,33458000.0,31651000.0,31215000.0,61436000.0,60199000.0,60038000.0,59499000.0,54540000.0,50934000.0,50916000.0,43843000.0,43763000.0,43446000.0,67724000.0,67058000.0,64768000.0,59475000.0,57605000.0,56436000.0,50065000.0,70146000.0,62579000.0,40061000.0,39798000.0,39448000.0,63541000.0,64473000.0,63566000.0,36695000.0,34807000.0,31150000.0,31121000.0,31089000.0,85362000.0,81807000.0,73737000.0,71432000.0,64942000.0,64881000.0,51437000.0,38957000.0,58465000.0,56642000.0,48599000.0,46911000.0,38051000.0,35973000.0,71493000.0,66933000.0,66902000.0,60316000.0,58316000.0,58241000.0,58219000.0,50584000.0,36547000.0,36386000.0,41438000.0,35408000.0,53273000.0,70255000.0,66510000.0,57390000.0,54071000.0,55280000.0,54087000.0,52895000.0,52715000.0,39505000.0,39443000.0,31217000.0,75574000.0,75559000.0,73796000.0,73785000.0,71970000.0,66377000.0,47416000.0,47414000.0,47410000.0,47392000.0,47388000.0,42520000.0,73118000.0,70415000.0,68384000.0,68365000.0,51873000.0,51488000.0,49451000.0,48830000.0,46415000.0,46212000.0,44799000.0,43413000.0,43287000.0,60013000.0,42457000.0,42235000.0,42035000.0,41842000.0,41689000.0,41364000.0,40986000.0,39544000.0,38832000.0,64378000.0,64178000.0,60304000.0,54989000.0,54935000.0,54736000.0,52707000.0,50900000.0,38579000.0,38492000.0,37984000.0,85504000.0,84163000.0,84015000.0,81760000.0,77211000.0,72969000.0,71348000.0,63218000.0,62803000.0,62497000.0,61534000.0,60940000.0,59142000.0,58599000.0,57410000.0,60591000.0,33966000.0,54492000.0,84654000.0,83015000.0,82293000.0,82250000.0,80383000.0,79252000.0,79143000.0,78952000.0,78533000.0,78321000.0,62402000.0,62386000.0,60862000.0,59992000.0,57658000.0,52798000.0,46140000.0,44250000.0,43193000.0,42949000.0,42790000.0,34698000.0,34387000.0,33908000.0,78597000.0,65884000.0,75128000.0,71538000.0,69146000.0,68819000.0,66476000.0,62218000.0,62128000.0,61921000.0,61859000.0,61790000.0,43361000.0,62991000.0,62962000.0,49055000.0,41134000.0,78480000.0,36296000.0,66450000.0,66426000.0,66317000.0,63116000.0,49777000.0,49456000.0,44457000.0,44366000.0,39261000.0,34537000.0,55526000.0,54315000.0,32183000.0,69172000.0,67843000.0,62502000.0,39943000.0,36610000.0,36299000.0,68209000.0,62135000.0,61580000.0,64471000.0,63562000.0,63541000.0,62985000.0,62963000.0,56566000.0,52610000.0,49243000.0,47613000.0,47563000.0,46711000.0,46015000.0,45665000.0,45313000.0,41507000.0,39195000.0,32698000.0,46835000.0,44019000.0,41790000.0,39940000.0,35810000.0,70722000.0,70019000.0,68590000.0,63064000.0,56571000.0,56447000.0,54146000.0,54070000.0,58831000.0,56590000.0,49002000.0,52639000.0,51260000.0,48750000.0,48641000.0,47734000.0,32943000.0,32491000.0,77188000.0,56382000.0,53520000.0,42009000.0,35259000.0,56946000.0,56894000.0,56864000.0,51397000.0,42380000.0,42350000.0,37827000.0,37103000.0,1626000.0,75650000.0,75619000.0,75614000.0,75567000.0,75546000.0,75519000.0,75451000.0,75419000.0,62423000.0,62417000.0,50773000.0,50755000.0,50466000.0,45938000.0,42675000.0,42668000.0,39469000.0,37599000.0,35633000.0,78146000.0,69550000.0,69523000.0,67000000.0,66759000.0,63006000.0,62539000.0,61030000.0,55089000.0,79469000.0,76905000.0,69481000.0,62320000.0,60675000.0,57670000.0,55774000.0,55421000.0,55368000.0,54588000.0,43801000.0,40912000.0,40172000.0,40123000.0,36526000.0,33593000.0,33568000.0,33521000.0,33414000.0,33156000.0,74254000.0,73609000.0,70177000.0,69473000.0,65778000.0,65634000.0,62989000.0,61188000.0,60697000.0,60642000.0,52365000.0,49480000.0,49340000.0,48204000.0,46854000.0,42969000.0,41213000.0,40447000.0,40357000.0,40103000.0,39675000.0,39484000.0,39305000.0,38641000.0,38625000.0,38582000.0,38067000.0,37641000.0,37447000.0,37335000.0,37315000.0,37095000.0,37066000.0,36941000.0,36889000.0,36852000.0,36574000.0,36543000.0,36463000.0,34803000.0,32726000.0,32639000.0,1456000.0,1262000.0,1245000.0,653000.0,85584000.0,83938000.0,81599000.0,79689000.0,79396000.0,79230000.0,61797000.0,61068000.0,60027000.0,58779000.0,56751000.0,54757000.0,51564000.0,44277000.0,42766000.0,42733000.0,42565000.0,41520000.0,38004000.0,34280000.0,34251000.0,31324000.0,31308000.0,30483000.0,81978000.0,81473000.0,81356000.0,79956000.0,75803000.0,72347000.0,64663000.0,59235000.0,57699000.0,57132000.0,47349000.0,35117000.0,34674000.0,34623000.0,31243000.0,80745000.0,79775000.0,78932000.0,78700000.0,76236000.0,74565000.0,62517000.0,62390000.0,60955000.0,60883000.0,60045000.0,54419000.0,43005000.0,39161000.0,39069000.0,36292000.0,36268000.0,36245000.0,33873000.0,33863000.0,5625000.0,80727000.0,80698000.0,80661000.0,80260000.0,71981000.0,71968000.0,71567000.0,69805000.0,69745000.0,69478000.0,68675000.0,68395000.0,68224000.0,67905000.0,67805000.0,62721000.0,62649000.0,58871000.0,58710000.0,58227000.0,44051000.0,79332000.0,79309000.0,76725000.0,76612000.0,76029000.0,37024000.0,29983000.0,30043000.0,56111000.0,30623000.0,32348000.0,29882000.0,66331000.0,56735000.0,56524000.0,56263000.0,31145000.0,36987000.0,54137000.0,53221000.0,51304000.0,51003000.0,50925000.0,43370000.0,67542000.0,65628000.0,63774000.0,54917000.0,63398000.0,40162000.0,40023000.0,40235000.0,37009000.0,62354000.0,65348000.0,61807000.0,60051000.0,59381000.0,58626000.0,58382000.0,58297000.0,58129000.0,58034000.0,48235000.0,48179000.0,46169000.0,40550000.0,40533000.0,34668000.0,34646000.0,82399000.0,82066000.0,78591000.0,74304000.0,74298000.0,74204000.0,74151000.0,74132000.0,74110000.0,74091000.0,73425000.0,73336000.0,72955000.0,72756000.0,71539000.0,71207000.0,70896000.0,70779000.0,70270000.0,70157000.0,70127000.0,70023000.0,69630000.0,69300000.0,68689000.0,68019000.0,67924000.0,67598000.0,67381000.0,67035000.0,66202000.0,66109000.0,65606000.0,65557000.0,65529000.0,65235000.0,65085000.0,64528000.0,64415000.0,64268000.0,64177000.0,64063000.0,63823000.0,63518000.0,63402000.0,63395000.0,63300000.0,63127000.0,62813000.0,62670000.0,62181000.0,61980000.0,60258000.0,60122000.0,59627000.0,58725000.0,58624000.0,58520000.0,57980000.0,57558000.0,57471000.0,57426000.0,57387000.0,56283000.0,54360000.0,53684000.0,53372000.0,52650000.0,50303000.0,50183000.0,50166000.0,50104000.0,46274000.0,40235000.0,40162000.0,40023000.0,74850000.0,74559000.0,74545000.0,68860000.0,56380000.0,54557000.0,54335000.0,54311000.0,48824000.0,46204000.0,44930000.0,83471000.0,63219000.0,62156000.0,61845000.0,61188000.0,60370000.0,58748000.0,58013000.0,57705000.0,57690000.0,57252000.0,52513000.0,52360000.0,52280000.0,52224000.0,52166000.0,51053000.0,50848000.0,1664000.0,82507000.0,82413000.0,73496000.0,73355000.0,73333000.0,70149000.0,69647000.0,69540000.0,69491000.0,66395000.0,66354000.0,66336000.0,66282000.0,64636000.0,63380000.0,63270000.0,63160000.0,62709000.0,61853000.0,59626000.0,59152000.0,59144000.0,59133000.0,58143000.0,56444000.0,56432000.0,55414000.0,54727000.0,54248000.0,53156000.0,52881000.0,52277000.0,51032000.0,50877000.0,50492000.0,49047000.0,48469000.0,48257000.0,47629000.0,52750000.0,52734000.0,51375000.0,50561000.0,48458000.0,35521000.0,35294000.0,34483000.0,34407000.0,34335000.0,33207000.0,32845000.0,78033000.0,65236000.0,65190000.0,64798000.0,43056000.0,43038000.0,43026000.0,74091000.0,58215000.0,58000000.0,50740000.0,34569000.0,34230000.0,50905000.0,50447000.0,50249000.0,42024000.0,41933000.0,39483000.0,37185000.0,36402000.0,34967000.0,34694000.0,33989000.0,33814000.0,33604000.0,85040000.0,55743000.0,47096000.0,45266000.0,40874000.0,40070000.0,39406000.0,37564000.0,32709000.0,33195000.0,32811000.0,32683000.0,32664000.0,31219000.0,30791000.0,78739000.0,74202000.0,73551000.0,72010000.0,71595000.0,64746000.0,61483000.0,61226000.0,80293000.0,80242000.0,55851000.0,41152000.0,72135000.0,70482000.0,54614000.0,54261000.0,54210000.0,69066000.0,62106000.0,61920000.0,61456000.0,61434000.0,61387000.0,61340000.0,61310000.0,35433000.0,35392000.0,60046000.0,59319000.0,58782000.0,55561000.0,55514000.0,53587000.0,45509000.0,44572000.0,43846000.0,38772000.0,38683000.0,38372000.0,34996000.0,34861000.0,34751000.0,72313000.0,72156000.0,70425000.0,70417000.0,70409000.0,70402000.0,60296000.0,60193000.0,58089000.0,56907000.0,56894000.0,56881000.0,55636000.0,55594000.0,49708000.0,48929000.0,48925000.0,44313000.0,43558000.0,43350000.0,28283000.0,28257000.0,28183000.0,62998000.0,56450000.0,53039000.0,52216000.0,52116000.0,47057000.0,46238000.0,46115000.0,39001000.0,38974000.0,37546000.0,35856000.0,35779000.0,23962000.0,21516000.0,68476000.0,61136000.0,56309000.0,38420000.0,79754000.0,67698000.0,65292000.0,43106000.0,42062000.0,40951000.0,36310000.0,1451000.0,84323000.0,82362000.0,59279000.0,59260000.0,59235000.0,54814000.0,54770000.0,54297000.0,51535000.0,51479000.0,51143000.0,47415000.0,39472000.0,69349000.0,68923000.0,66212000.0,66039000.0,65914000.0,61325000.0,61301000.0,61055000.0,58355000.0,54670000.0,39693000.0,83879000.0,80221000.0,78185000.0,77892000.0,77851000.0,66337000.0,62072000.0,59746000.0,53063000.0,52953000.0,52573000.0,51820000.0,51805000.0,50894000.0,38338000.0,38211000.0,38116000.0,37823000.0,37663000.0,37577000.0,34142000.0,34127000.0,34038000.0,33935000.0,76572000.0,62996000.0,58614000.0,57797000.0,57566000.0,56880000.0,56546000.0,56525000.0,55215000.0,54764000.0,54547000.0,54506000.0,80079000.0,75988000.0,75534000.0,75186000.0,75171000.0,73936000.0,73864000.0,73505000.0,73128000.0,72372000.0,71724000.0,65245000.0,64610000.0,64519000.0,64406000.0,58443000.0,53031000.0,63665000.0,39648000.0,39545000.0,34276000.0,42453000.0,77756000.0,55106000.0,54356000.0,49890000.0,46122000.0,32160000.0,32114000.0,75995000.0,67265000.0,65916000.0,63345000.0,63135000.0,60580000.0,56203000.0,56014000.0,42091000.0,41627000.0,34357000.0,82151000.0,75136000.0,74693000.0,29586000.0,54924000.0,54030000.0,48968000.0,48866000.0,48603000.0,69892000.0,29698000.0,29205000.0,38278000.0,38076000.0,38009000.0,36355000.0,36143000.0,74007000.0,73571000.0,72441000.0,79616000.0,79524000.0,79471000.0,79433000.0,52942000.0,52714000.0,52305000.0,51883000.0,22707000.0,79347000.0,79231000.0,56735000.0,56626000.0,56069000.0,46967000.0,45729000.0,42597000.0,42237000.0,42148000.0,42112000.0,42010000.0,41947000.0,39606000.0,39467000.0,38931000.0,32984000.0,32949000.0,32921000.0,30965000.0,30809000.0,73767000.0,73748000.0,73664000.0,64933000.0,64917000.0,64885000.0,64800000.0,62743000.0,65825000.0,42466000.0,42453000.0,42450000.0,42399000.0,38935000.0,33929000.0,77339000.0,52896000.0,47264000.0,46204000.0,44368000.0,44361000.0,70833000.0,81986000.0,81922000.0,81909000.0,71810000.0,71704000.0,71358000.0,70369000.0,70173000.0,69795000.0,69681000.0,58735000.0,53158000.0,74845000.0,84769000.0,44666000.0,76156000.0,53548000.0,42763000.0,37445000.0,66513000.0,66799000.0,29431000.0,57385000.0,57466000.0,57448000.0,64898000.0,43645000.0,40850000.0,53141000.0,51489000.0,46595000.0,40185000.0,39710000.0,76221000.0,75794000.0,75054000.0,52535000.0,41700000.0,41640000.0,41556000.0,75023000.0,74110000.0,60349000.0,60132000.0,60117000.0,45237000.0,45144000.0,34576000.0,51417000.0,76882000.0,61403000.0,60513000.0,60445000.0,69411000.0,68982000.0,68962000.0,68935000.0,66894000.0,65906000.0,36042000.0,34848000.0,32759000.0,50167000.0,66579000.0,84240000.0,84183000.0,58745000.0,47595000.0,33124000.0,32611000.0,26014000.0,25507000.0,25435000.0,25416000.0,68835000.0,68338000.0,67433000.0,65494000.0,65064000.0,65001000.0,64414000.0,58659000.0,47205000.0,40796000.0,36386000.0,36368000.0,67306000.0,57702000.0,56284000.0,55117000.0,55049000.0,54713000.0,53674000.0,52735000.0,52443000.0,52347000.0,51083000.0,50479000.0,50452000.0,50346000.0,49847000.0,49527000.0,49363000.0,49233000.0,49018000.0,48431000.0,46519000.0,46506000.0,46488000.0,46461000.0,58067000.0,43360000.0,43247000.0,38556000.0,28887000.0,58580000.0,57355000.0,64525000.0,81718000.0,77707000.0,76039000.0,57798000.0,47075000.0,46625000.0,40736000.0,40602000.0,39602000.0,39509000.0,52618000.0,76203000.0,53724000.0,48095000.0,46267000.0,59510000.0,55925000.0,50273000.0,50100000.0,50012000.0,37995000.0,69249000.0,76804000.0,76569000.0,76561000.0,75790000.0,75523000.0,60654000.0,60409000.0,32706000.0,49570000.0,47845000.0,1018000.0,68415000.0,68097000.0,67901000.0,67842000.0,67686000.0,67231000.0,67203000.0,67182000.0,53295000.0,52882000.0,51224000.0,56782000.0,64002000.0,63982000.0,63951000.0,43342000.0,42797000.0,46291000.0,46139000.0,43724000.0,42879000.0,42414000.0,42934000.0,28953000.0,43683000.0,43577000.0,43378000.0,44727000.0,39358000.0,61384000.0,59580000.0,49860000.0,38910000.0,74879000.0,73013000.0,72767000.0,70901000.0,69737000.0,58491000.0,39774000.0,36390000.0,34227000.0,34141000.0,31202000.0,56320000.0,59405000.0,49217000.0,49073000.0,48714000.0,45153000.0,42208000.0,42139000.0,41846000.0,40043000.0,38474000.0,38394000.0,37683000.0,37615000.0,68834000.0,68772000.0,39008000.0,38967000.0,38938000.0,60630000.0,60532000.0,59928000.0,57568000.0,80394000.0,74312000.0,73534000.0,46392000.0,38725000.0,36497000.0,74341000.0,66550000.0,63874000.0,62789000.0,56989000.0,56819000.0,53298000.0,40612000.0,63002000.0,38672000.0,91000.0,81857000.0,54299000.0,44503000.0,32780000.0,28393000.0,84454000.0,84161000.0,84049000.0,80356000.0,80351000.0,80229000.0,79394000.0,75173000.0,75115000.0,74656000.0,74532000.0,63370000.0,63052000.0,59150000.0,57851000.0,48626000.0,34127000.0,61487000.0,58599000.0,58091000.0,57006000.0,56976000.0,56503000.0,54219000.0,36671000.0,36649000.0,36625000.0,56410000.0,2651000.0,86305000.0,84521000.0,82929000.0,77856000.0,77726000.0,70972000.0,70539000.0,69762000.0,67841000.0,66313000.0,64791000.0,60784000.0,60744000.0,60605000.0,60592000.0,50552000.0,42397000.0,59083000.0,51528000.0,50906000.0,43307000.0,41841000.0,41600000.0,41571000.0,71049000.0,46470000.0,34913000.0,34319000.0,33545000.0,32433000.0,63991000.0,63853000.0,63118000.0,62976000.0,62757000.0,43762000.0,43720000.0,56442000.0,63776000.0,60663000.0,60248000.0,34677000.0,32916000.0,70351000.0,70081000.0,69477000.0,65716000.0,64279000.0,53365000.0,28478000.0,22522000.0,22392000.0,21025000.0,19873000.0,19223000.0,19143000.0,81970000.0,73359000.0,70913000.0,70772000.0,70653000.0,68861000.0,68837000.0,68795000.0,66743000.0,66147000.0,51698000.0,49128000.0,34600000.0,71232000.0,38286000.0,38199000.0,38163000.0,27210000.0,27189000.0,27155000.0,32176000.0,31084000.0,30443000.0,30354000.0,29088000.0,28808000.0,28324000.0,22433000.0,59708000.0,68833000.0,64106000.0,54481000.0,54464000.0,54110000.0,49080000.0,43791000.0,28384000.0,42418000.0,42214000.0,83025000.0,79447000.0,79347000.0,79320000.0,79218000.0,78163000.0,49993000.0,42412000.0,42378000.0,28179000.0,53748000.0,51500000.0,51479000.0,42661000.0,41324000.0,38717000.0,38663000.0,33938000.0,77640000.0,77600000.0,77551000.0,57694000.0,48291000.0,36853000.0,65899000.0,64056000.0,61760000.0,61461000.0,60881000.0,60394000.0,58792000.0,58691000.0,58344000.0,55933000.0,55921000.0,44440000.0,44258000.0,72682000.0,53196000.0,51286000.0,42898000.0,39821000.0,62687000.0,57587000.0,50164000.0,48044000.0,59411000.0,46692000.0,56460000.0,55219000.0,55138000.0,52815000.0,49965000.0,49449000.0,37829000.0,35982000.0,34291000.0,66845000.0,66558000.0,65250000.0,64637000.0,59083000.0,50079000.0,49986000.0,49441000.0,49243000.0,43898000.0,41749000.0,39683000.0,81494000.0,79502000.0,75944000.0,74285000.0,72869000.0,71627000.0,69631000.0,65052000.0,62793000.0,60429000.0,60293000.0,34831000.0,32672000.0,32599000.0,32577000.0,32539000.0,32441000.0,32386000.0,54238000.0,60458000.0,39066000.0,38109000.0,38055000.0,36475000.0,35263000.0,34265000.0,44455000.0,44099000.0,38390000.0,38306000.0,47541000.0,44255000.0,30340000.0,74235000.0,51196000.0,46750000.0,38833000.0,59782000.0,59745000.0,52729000.0,52710000.0,49397000.0,41225000.0,37977000.0,84743000.0,84439000.0,83334000.0,79600000.0,79566000.0,77448000.0,77436000.0,77417000.0,77389000.0,77363000.0,76332000.0,73674000.0,59695000.0,58902000.0,44234000.0,42585000.0,42577000.0,41770000.0,41760000.0,41682000.0,40732000.0,33878000.0,33873000.0,32610000.0,32560000.0,32478000.0,32441000.0,75175000.0,74001000.0,70948000.0,67680000.0,53219000.0,50782000.0,44605000.0,66363000.0,66337000.0,63701000.0,63666000.0,63633000.0,45359000.0,45346000.0,44898000.0,30703000.0,29728000.0,63982000.0,63336000.0,62054000.0,61956000.0,56496000.0,55561000.0,52167000.0,41550000.0,37626000.0,36995000.0,56439000.0,57088000.0,57069000.0,56999000.0,56974000.0,38399000.0,38109000.0,35993000.0,35601000.0,33356000.0,76016000.0,72430000.0,50542000.0,50533000.0,30747000.0,30694000.0,49251000.0,47992000.0,47961000.0,47827000.0,74293000.0,37669000.0,32009000.0,34589000.0,34056000.0,32312000.0,30741000.0,49633000.0,18718000.0,52753000.0,52079000.0,51842000.0,32841000.0,32634000.0,32580000.0,21193000.0,18667000.0,49992000.0,49975000.0,49653000.0,45600000.0,40382000.0,32416000.0,30558000.0,28305000.0,24933000.0,24731000.0,24689000.0,70621000.0,70466000.0,70456000.0,67971000.0,67503000.0,63884000.0,63628000.0,63503000.0,62447000.0,58211000.0,57176000.0,51741000.0,36115000.0,32289000.0,66685000.0,64901000.0,53381000.0,52599000.0,50892000.0,45883000.0,45857000.0,42057000.0,40967000.0,40488000.0,38876000.0,38829000.0,37441000.0,37388000.0,33278000.0,63374000.0,55120000.0,35783000.0,34607000.0,32420000.0,84813000.0,84795000.0,84778000.0,80190000.0,80119000.0,79761000.0,73748000.0,71111000.0,68441000.0,67624000.0,67616000.0,61509000.0,61499000.0,48951000.0,12157000.0,11256000.0,11209000.0,8290000.0,8179000.0,8169000.0,8154000.0,78420000.0,77050000.0,76955000.0,76946000.0,76544000.0,76184000.0,73716000.0,69129000.0,66189000.0,64541000.0,59571000.0,59566000.0,57504000.0,57496000.0,55744000.0,50910000.0,50904000.0,44300000.0,43904000.0,43825000.0,43778000.0,32087000.0,31630000.0,30315000.0,24792000.0,24756000.0,74351000.0,72633000.0,49727000.0,47297000.0,35519000.0,69140000.0,42018000.0,40641000.0,40332000.0,38799000.0,60962000.0,57870000.0,54962000.0,54770000.0,49468000.0,48266000.0,45789000.0,45674000.0,39307000.0,34498000.0,31883000.0,31230000.0,78023000.0,75050000.0,71047000.0,70317000.0,62188000.0,53632000.0,50970000.0,51766000.0,35411000.0,41166000.0,41119000.0,60294000.0,59330000.0,55917000.0,50762000.0,50599000.0,49631000.0,35146000.0,33483000.0,51765000.0,51682000.0,29641000.0,62681000.0,57639000.0,40482000.0,58231000.0,57783000.0,45511000.0,34301000.0,34133000.0,34070000.0,34025000.0,33952000.0,33902000.0,33865000.0,33832000.0,33721000.0,46329000.0,54811000.0,53871000.0,42574000.0,42303000.0,42111000.0,37396000.0,34495000.0,72968000.0,70083000.0,69377000.0,61453000.0,61343000.0,60523000.0,60083000.0,59625000.0,58718000.0,54322000.0,53329000.0,53222000.0,51694000.0,51306000.0,44858000.0,35055000.0,34990000.0,34971000.0,60607000.0,42617000.0,36465000.0,36431000.0,34245000.0,74795000.0,50759000.0,49947000.0,49883000.0,49847000.0,49610000.0,48642000.0,48370000.0,48341000.0,46083000.0,46040000.0,79211000.0,54429000.0,53296000.0,51206000.0,48806000.0,48671000.0,43116000.0,42961000.0,35836000.0,35799000.0,59135000.0,58701000.0,57573000.0,55474000.0,55411000.0,54097000.0,51491000.0,43775000.0,40353000.0,38043000.0,37303000.0,33238000.0,33231000.0,37930000.0,72514000.0,72121000.0,58177000.0,43423000.0,43066000.0,37249000.0,37139000.0,56503000.0,56476000.0,59062000.0,57431000.0,57402000.0,33052000.0,32554000.0,35244000.0,34416000.0,34140000.0,32474000.0,32038000.0,6365000.0,66239000.0,56635000.0,56326000.0,24893000.0,72137000.0,54898000.0,51230000.0,46219000.0,46137000.0,43438000.0,43373000.0,42150000.0,42075000.0,41816000.0,41785000.0,41733000.0,41175000.0,40566000.0,40478000.0,39741000.0,39588000.0,39034000.0,37972000.0,37703000.0,37301000.0,32789000.0,32397000.0,29047000.0,27164000.0,26436000.0,24662000.0,85300000.0,69903000.0,69170000.0,68305000.0,67284000.0,64564000.0,57850000.0,54369000.0,54954000.0,49975000.0,49826000.0,64147000.0,45938000.0,33433000.0,72620000.0,61787000.0,60751000.0,59033000.0,54081000.0,52426000.0,51191000.0,49728000.0,49600000.0,34775000.0,83726000.0,82418000.0,77821000.0,77437000.0,77250000.0,77184000.0,77061000.0,76893000.0,65445000.0,65314000.0,65119000.0,59739000.0,51799000.0,75208000.0,49978000.0,49770000.0,44376000.0,44307000.0,43915000.0,43813000.0,40736000.0,58136000.0,52881000.0,42343000.0,42134000.0,41726000.0,40518000.0,40071000.0,39930000.0,39727000.0,37497000.0,36698000.0,33523000.0,32707000.0,52045000.0,51611000.0,47282000.0,47019000.0,44344000.0,44268000.0,43869000.0,43556000.0,41219000.0,37434000.0,81902000.0,81334000.0,80659000.0,80124000.0,77669000.0,77445000.0,77377000.0,76637000.0,54356000.0,47904000.0,47245000.0,45745000.0,45254000.0,56499000.0,56434000.0,56001000.0,51266000.0,48664000.0,47510000.0,44500000.0,35644000.0,31778000.0,28404000.0,78573000.0,40548000.0,36600000.0,62423000.0,35464000.0,35448000.0,35413000.0,29712000.0,40448000.0,48439000.0,42897000.0,74955000.0,74844000.0,69762000.0,59913000.0,40952000.0,37512000.0,36955000.0,67002000.0,58450000.0,58432000.0,57035000.0,44693000.0,37489000.0,35533000.0,33420000.0,57183000.0,57134000.0,43851000.0,42457000.0,36139000.0,35295000.0,34739000.0,33298000.0,32882000.0,83393000.0,75721000.0,29996000.0,80242000.0,79780000.0,79763000.0,79732000.0,79687000.0,50577000.0,50501000.0,48528000.0,41833000.0,36524000.0,36216000.0,31774000.0,85529000.0,75260000.0,75187000.0,74934000.0,74934000.0,69902000.0,69871000.0,67905000.0,57252000.0,52229000.0,52194000.0,83203000.0,82700000.0,82634000.0,62684000.0,31330000.0,30851000.0,71822000.0,68103000.0,66493000.0,65227000.0,56252000.0,56009000.0,55333000.0,54901000.0,54324000.0,53588000.0,53203000.0,52796000.0,52776000.0,51985000.0,39960000.0,35791000.0,32086000.0,31037000.0,81182000.0,51462000.0,51309000.0,82360000.0,70073000.0,64598000.0,63916000.0,63049000.0,62119000.0,61760000.0,77780000.0,52808000.0,79136000.0,79018000.0,78979000.0,78965000.0,76993000.0,61036000.0,56508000.0,55013000.0,35686000.0,28774000.0,79755000.0,76170000.0,76149000.0,75776000.0,65068000.0,62048000.0,48963000.0,43501000.0,35371000.0,34442000.0,31904000.0,53114000.0,45999000.0,45515000.0,45299000.0,43895000.0,41164000.0,39119000.0,38194000.0,68256000.0,63781000.0,61466000.0,59879000.0,59830000.0,55275000.0,52753000.0,51196000.0,50494000.0,48581000.0,42418000.0,40523000.0,78622000.0,61178000.0,61080000.0,54290000.0,52659000.0,52216000.0,51415000.0,51242000.0,50185000.0,47832000.0,39244000.0,37492000.0,53841000.0,55322000.0,55300000.0,51637000.0,51596000.0,51543000.0,76241000.0,72855000.0,63937000.0,63729000.0,41202000.0,40025000.0,39503000.0,35075000.0,34383000.0,32730000.0,31587000.0,39848000.0,39114000.0,36421000.0,36375000.0,36325000.0,36291000.0,36266000.0,78966000.0,78945000.0,65875000.0,65297000.0,65249000.0,64800000.0,64722000.0,74419000.0,71919000.0,71668000.0,70117000.0,69951000.0,69925000.0,69899000.0,69861000.0,56141000.0,55075000.0,42347000.0,48668000.0,47907000.0,29416000.0,29334000.0,73235000.0,72785000.0,72633000.0,72598000.0,72540000.0,72371000.0,72362000.0,69170000.0,68735000.0,67532000.0,65984000.0,65004000.0,64980000.0,83006000.0,36552000.0,35876000.0,31954000.0,52461000.0,46436000.0,42040000.0,40292000.0,47401000.0,47317000.0,60682000.0,58769000.0,58616000.0,57992000.0,56244000.0,77323000.0,51176000.0,41361000.0,39728000.0,37132000.0,36170000.0,58482000.0,76998000.0,72750000.0,55263000.0,49994000.0,49534000.0,49163000.0,41052000.0,36947000.0,36585000.0,35089000.0,33793000.0,33665000.0,32252000.0,31991000.0,51297000.0,50415000.0,40728000.0,46258000.0,46194000.0,46052000.0,46028000.0,43732000.0,43703000.0,40029000.0,39920000.0,34985000.0,61268000.0,61228000.0,61077000.0,57190000.0,57160000.0,57117000.0,53377000.0,52964000.0,52378000.0,51441000.0,51428000.0,50030000.0,49578000.0,49549000.0,33378000.0,33169000.0,52994000.0,49404000.0,46150000.0,56281000.0,36674000.0,36641000.0,46946000.0,45294000.0,44192000.0,33011000.0,26219000.0,25851000.0,74628000.0,72221000.0,67924000.0,67529000.0,73663000.0,72020000.0,57182000.0,57150000.0,44926000.0,41204000.0,40980000.0,36275000.0,41977000.0,41931000.0,64992000.0,59714000.0,55678000.0,74103000.0,58517000.0,58485000.0,52692000.0,52663000.0,49804000.0,49747000.0,48634000.0,40757000.0,33738000.0,15785000.0,58194000.0,51569000.0,51551000.0,51286000.0,41104000.0,41061000.0,55415000.0,50304000.0,48993000.0,48901000.0,48875000.0,47949000.0,37876000.0,37837000.0,36444000.0,36388000.0,62547000.0,62535000.0,81818000.0,80262000.0,80180000.0,80002000.0,71794000.0,50777000.0,40796000.0,40165000.0,49758000.0,38162000.0,38126000.0,36647000.0,6515000.0,65558000.0,65499000.0,46341000.0,46324000.0,33974000.0,78197000.0,59427000.0,43521000.0,66222000.0,64677000.0,64638000.0,60602000.0,46664000.0,46595000.0,46403000.0,31743000.0,41355000.0,55236000.0,54645000.0,54529000.0,48142000.0,47462000.0,47430000.0,44974000.0,38701000.0,57439000.0,56015000.0,52333000.0,51967000.0,38813000.0,37125000.0,34767000.0,4313000.0,51378000.0,42398000.0,42373000.0,74472000.0,73109000.0,72311000.0,72248000.0,58730000.0,54022000.0,52666000.0,52582000.0,40178000.0,35271000.0,34460000.0,27378000.0,26178000.0,76851000.0,73655000.0,69820000.0,34591000.0,73065000.0,72235000.0,72224000.0,72158000.0,72039000.0,71701000.0,55156000.0,54896000.0,53755000.0,43135000.0,35883000.0,33990000.0,32216000.0,50431000.0,47628000.0,47352000.0,36087000.0,61244000.0,61224000.0,60872000.0,57122000.0,48608000.0,47352000.0,46346000.0,44905000.0,43893000.0,42422000.0,42362000.0,33284000.0,33018000.0,53472000.0,76955000.0,74495000.0,46906000.0,31989000.0,31021000.0,30921000.0,55106000.0,45044000.0,46786000.0,46755000.0,35948000.0,79096000.0,76609000.0,74826000.0,74041000.0,56053000.0,54852000.0,35471000.0,83008000.0,81712000.0,80965000.0,79791000.0,79664000.0,79582000.0,50216000.0,30827000.0,30817000.0,41547000.0,41528000.0,27785000.0,26607000.0,26538000.0,26502000.0,54767000.0,50505000.0,33170000.0,72957000.0,72554000.0,55986000.0,51798000.0,27791000.0,24971000.0,76325000.0,75359000.0,63022000.0,61542000.0,54312000.0,83358000.0,77425000.0,73904000.0,73862000.0,73731000.0,73701000.0,53046000.0,53008000.0,35604000.0,35546000.0,33737000.0,61171000.0,43105000.0,42457000.0,36571000.0,27052000.0,77184000.0,75410000.0,53324000.0,49999000.0,49956000.0,49858000.0,49740000.0,46393000.0,52986000.0,52717000.0,52684000.0,50821000.0,41806000.0,56417000.0,35110000.0,29089000.0,29083000.0,28983000.0,28915000.0,80946000.0,76894000.0,53933000.0,50563000.0,30091000.0,30073000.0,30006000.0,79370000.0,79333000.0,78228000.0,78072000.0,59475000.0,44837000.0,44154000.0,44140000.0,41108000.0,40901000.0,40564000.0,40239000.0,40202000.0,38996000.0,38236000.0,38217000.0,36543000.0,35448000.0,33738000.0,33654000.0,33639000.0,33040000.0,80018000.0,77385000.0,77110000.0,67746000.0,65772000.0,65460000.0,59596000.0,57676000.0,55952000.0,54536000.0,53854000.0,52279000.0,50362000.0,48984000.0,47316000.0,47261000.0,47249000.0,46783000.0,44098000.0,43860000.0,43860000.0,43090000.0,43060000.0,41515000.0,41336000.0,39696000.0,39043000.0,36651000.0,34136000.0,32514000.0,31616000.0,29336000.0,72469000.0,68172000.0,63092000.0,63059000.0,45220000.0,45053000.0,41033000.0,41016000.0,48865000.0,30256000.0,28490000.0,24722000.0,84095000.0,73328000.0,64797000.0,57692000.0,54070000.0,54064000.0,51460000.0,51447000.0,47926000.0,41922000.0,35666000.0,33675000.0,33439000.0,32148000.0,31929000.0,30449000.0,76058000.0,75931000.0,73842000.0,70906000.0,62125000.0,61390000.0,58179000.0,44738000.0,38097000.0,78565000.0,76366000.0,71203000.0,71034000.0,69517000.0,69394000.0,60956000.0,59215000.0,55713000.0,55704000.0,51066000.0,46887000.0,46040000.0,45927000.0,39888000.0,34544000.0,33775000.0,26928000.0,26909000.0,26150000.0,26110000.0,78647000.0,63532000.0,63490000.0,63316000.0,62136000.0,61700000.0,60172000.0,58904000.0,46542000.0,35545000.0,34616000.0,34058000.0,33567000.0,59302000.0,45580000.0,37612000.0,82940000.0,82896000.0,67139000.0,67117000.0,65093000.0,62326000.0,59943000.0,59369000.0,59305000.0,45121000.0,45104000.0,43838000.0,80381000.0,80365000.0,75710000.0,49416000.0,43247000.0,41685000.0,40995000.0,40742000.0,39606000.0,37452000.0,58599000.0,54556000.0,53750000.0,50523000.0,50397000.0,50387000.0,45808000.0,35729000.0,83632000.0,83597000.0,77317000.0,77213000.0,76762000.0,76545000.0,76091000.0,67659000.0,62009000.0,58187000.0,56609000.0,54493000.0,54097000.0,53988000.0,47446000.0,42727000.0,84305000.0,83287000.0,82974000.0,63108000.0,62351000.0,61548000.0,60459000.0,57330000.0,51982000.0,47978000.0,47423000.0,42293000.0,41824000.0,35654000.0,35209000.0,34146000.0,32354000.0,24055000.0,80984000.0,79634000.0,78805000.0,76539000.0,76184000.0,70020000.0,54568000.0,54182000.0,50880000.0,50695000.0,49311000.0,45610000.0,43739000.0,42055000.0,40395000.0,40355000.0,40332000.0,39561000.0,39561000.0,37540000.0,63196000.0,58905000.0,57902000.0,55452000.0,45329000.0,58946000.0,58669000.0,58643000.0,56368000.0,4984000.0,4969000.0,3510000.0,2807000.0,79356000.0,76485000.0,76336000.0,68855000.0,68827000.0,68799000.0,68714000.0,59604000.0,44906000.0,41551000.0,36253000.0,36200000.0,58507000.0,57375000.0,49336000.0,76409000.0,76255000.0,58902000.0,55372000.0,54549000.0,54512000.0,54492000.0,49386000.0,49117000.0,48608000.0,46294000.0,46072000.0,42514000.0,34150000.0,33912000.0,40367000.0,38752000.0,37674000.0,37500000.0,36267000.0,34099000.0,34068000.0,32750000.0,81705000.0,60098000.0,56894000.0,56419000.0,56366000.0,53226000.0,52530000.0,45394000.0,39516000.0,76860000.0,76829000.0,62184000.0,62009000.0,58591000.0,57855000.0,40891000.0,739000.0,85729000.0,85643000.0,85469000.0,84044000.0,82924000.0,81866000.0,81708000.0,74104000.0,59317000.0,58603000.0,57043000.0,55934000.0,43487000.0,48196000.0,34944000.0,32302000.0,29122000.0,21519000.0,19334000.0,26447000.0,47116000.0,43910000.0,43827000.0,33619000.0,32809000.0,31872000.0,25849000.0,25689000.0,22487000.0,11445000.0,9228000.0,67939000.0,67923000.0,53640000.0,49819000.0,48353000.0,45478000.0,67364000.0,67333000.0,64799000.0,64510000.0,64494000.0,63296000.0,58167000.0,57730000.0,13496000.0,12784000.0,11956000.0,11146000.0,4533000.0,55909000.0,55175000.0,31738000.0,30957000.0,20115000.0,19296000.0,13284000.0,6557000.0,6542000.0,6481000.0,41707000.0,41121000.0,33720000.0,15895000.0,15886000.0,10644000.0,72280000.0,72256000.0,69627000.0,69617000.0,45683000.0,42385000.0,36726000.0,38884000.0,112000.0,85146000.0,84839000.0,84695000.0,83565000.0,82950000.0,82159000.0,77905000.0,77880000.0,72767000.0,71059000.0,71007000.0,58635000.0,57041000.0,42451000.0,42419000.0,32323000.0,32238000.0,29183000.0,26365000.0,26180000.0,80698000.0,57837000.0,40554000.0,29410000.0,28882000.0,27650000.0,80121000.0,39791000.0,30511000.0,30506000.0,30403000.0,35188000.0,35181000.0,72450000.0,50755000.0,50217000.0,49901000.0,49892000.0,49845000.0,49686000.0,49621000.0,76587000.0,60008000.0,59873000.0,56157000.0,55501000.0,55409000.0,54526000.0,54205000.0,50747000.0,45945000.0,45032000.0,44144000.0,44099000.0,43364000.0,38917000.0,37918000.0,37820000.0,36614000.0,36222000.0,35593000.0,32905000.0,54507000.0,38502000.0,37737000.0,36158000.0,86226000.0,55318000.0,53664000.0,50055000.0,43471000.0,35253000.0,35015000.0,34914000.0,33759000.0,33753000.0,32858000.0,31147000.0,86102000.0,73764000.0,71389000.0,36189000.0,34207000.0,82292000.0,1524000.0,72547000.0,71214000.0,70568000.0,64061000.0,63622000.0,59887000.0,58809000.0,58618000.0,56178000.0,49833000.0,46536000.0,44954000.0,63853000.0,61672000.0,52521000.0,47261000.0,79389000.0,79034000.0,78995000.0,78944000.0,7643000.0,6316000.0,5834000.0,5002000.0,2968000.0,81908000.0,80383000.0,78372000.0,38563000.0,71443000.0,62222000.0,54813000.0,43153000.0,36962000.0,53193000.0,35747000.0,35738000.0,35490000.0,35301000.0,56218000.0,78037000.0,49752000.0,56620000.0,50390000.0,47973000.0,44406000.0,40521000.0,40490000.0,69215000.0,68922000.0,52275000.0,48689000.0,47192000.0,69394000.0,65213000.0,63776000.0,62789000.0,54609000.0,54579000.0,38467000.0,58631000.0,55948000.0,54732000.0,54469000.0,40347000.0,40019000.0,38220000.0,38188000.0,59033000.0,58954000.0,58626000.0,56535000.0,56423000.0,37559000.0,47884000.0,40827000.0,40377000.0,28812000.0,28797000.0,28770000.0,28090000.0,24100000.0,24021000.0,23947000.0,23896000.0,52598000.0,50604000.0,40206000.0,39343000.0,33040000.0,33001000.0,66689000.0,65681000.0,65668000.0,65640000.0,32501000.0,68916000.0,68665000.0,68644000.0,37672000.0,37663000.0,69821000.0,69815000.0,69799000.0,66859000.0,86290000.0,85789000.0,84028000.0,69123000.0,69116000.0,69097000.0,59416000.0,58632000.0,57116000.0,57099000.0,54527000.0,54158000.0,41708000.0,79853000.0,53563000.0,53116000.0,52742000.0,52459000.0,50959000.0,43589000.0,43047000.0,41032000.0,40886000.0,40838000.0,32461000.0,63693000.0,60689000.0,55857000.0,55851000.0,53105000.0,50411000.0,49522000.0,49254000.0,49094000.0,86233000.0,57294000.0,53244000.0,53228000.0,55732000.0,55515000.0,44473000.0,37828000.0,37821000.0,81973000.0,60480000.0,36487000.0,36423000.0,59732000.0,56659000.0,55100000.0,50949000.0,43744000.0,43262000.0,81918000.0,66986000.0,66193000.0,62374000.0,55516000.0,46693000.0,45753000.0,44567000.0,42491000.0,41876000.0,41428000.0,40703000.0,40239000.0,38502000.0,38483000.0,37038000.0,36241000.0,35646000.0,54484000.0,46667000.0,36335000.0,42411000.0,60637000.0,59782000.0,59756000.0,59626000.0,56561000.0,56520000.0,32840000.0,63410000.0,63386000.0,63344000.0,63232000.0,61926000.0,61813000.0,61790000.0,61753000.0,36891000.0,33460000.0,32465000.0,32135000.0,27736000.0,27720000.0,86032000.0,84089000.0,84050000.0,84003000.0,81543000.0,81122000.0,81119000.0,81102000.0,61825000.0,59620000.0,55794000.0,49289000.0,48297000.0,47797000.0,46758000.0,43503000.0,42923000.0,41991000.0,40234000.0,38783000.0,79109000.0,78351000.0,76279000.0,74857000.0,73416000.0,73214000.0,25160000.0,25126000.0,82385000.0,81899000.0,80547000.0,79668000.0,78051000.0,75802000.0,75309000.0,73747000.0,72380000.0,23725000.0,23317000.0,75875000.0,75843000.0,73795000.0,71146000.0,58385000.0,57988000.0,57908000.0,57482000.0,56673000.0,53675000.0,53644000.0,53320000.0,52324000.0,52304000.0,50930000.0,49442000.0,47952000.0,59034000.0,57860000.0,22927000.0,19298000.0,10643000.0,10507000.0,9088000.0,8384000.0,59273000.0,58781000.0,27137000.0,27111000.0,27013000.0,19671000.0,36677000.0,34856000.0,34722000.0,67534000.0,67513000.0,63058000.0,63001000.0,62970000.0,45707000.0,44276000.0,33295000.0,81979000.0,75713000.0,74061000.0,61369000.0,61319000.0,61243000.0,61210000.0,61143000.0,55967000.0,55509000.0,54960000.0,54928000.0,54826000.0,52195000.0,33627000.0,77719000.0,59383000.0,58451000.0,41668000.0,61138000.0,61070000.0,57086000.0,53665000.0,53626000.0,52010000.0,38108000.0,64100000.0,56185000.0,56125000.0,39216000.0,43698000.0,39611000.0,37993000.0,34634000.0,28727000.0,26693000.0,79127000.0,78719000.0,78695000.0,45447000.0,45442000.0,40252000.0,34805000.0,34576000.0,42049000.0,42025000.0,41739000.0,74553000.0,74070000.0,73483000.0,64675000.0,64151000.0,64067000.0,59289000.0,59158000.0,58180000.0,58072000.0,57330000.0,56703000.0,56653000.0,55366000.0,55024000.0,54833000.0,53381000.0,52498000.0,50852000.0,50838000.0,47967000.0,47499000.0,45198000.0,45094000.0,42976000.0,35734000.0,32284000.0,32265000.0,31905000.0,27790000.0,74363000.0,57760000.0,56937000.0,56864000.0,56858000.0,53944000.0,53802000.0,53545000.0,53528000.0,52474000.0,32767000.0,31896000.0,31792000.0,27501000.0,47251000.0,47017000.0,46463000.0,46442000.0,40339000.0,31051000.0,50750000.0,50599000.0,49578000.0,49554000.0,73500000.0,73475000.0,70621000.0,70614000.0,70586000.0,56388000.0,55535000.0,55528000.0,48308000.0,48281000.0,47245000.0,46978000.0,40198000.0,40014000.0,39776000.0,39024000.0,36546000.0,35742000.0,30924000.0,30526000.0,30435000.0,24963000.0,24620000.0,24168000.0,23729000.0,23686000.0,23636000.0,21645000.0,21299000.0,19977000.0,55604000.0,24595000.0,24299000.0,23375000.0,23269000.0,49089000.0,48249000.0,48241000.0,36382000.0,33153000.0,33127000.0,32806000.0,27653000.0,27634000.0,27589000.0,26947000.0,18320000.0,44018000.0,43230000.0,81764000.0,81676000.0,81586000.0,80755000.0,80211000.0,80184000.0,80175000.0,79955000.0,79901000.0,59168000.0,58252000.0,50757000.0,50749000.0,50189000.0,50151000.0,50020000.0,40623000.0,31877000.0,30722000.0,30656000.0,77259000.0,77021000.0,76988000.0,73108000.0,65320000.0,63270000.0,63231000.0,54727000.0,54716000.0,54648000.0,53347000.0,53302000.0,49285000.0,48227000.0,40139000.0,83071000.0,83035000.0,66583000.0,66545000.0,66424000.0,52594000.0,52372000.0,52327000.0,59947000.0,59923000.0,32204000.0,84194000.0,82425000.0,76388000.0,74825000.0,73729000.0,70470000.0,68899000.0,64203000.0,53992000.0,53625000.0,54554000.0,53632000.0,50358000.0,49921000.0,47637000.0,47526000.0,40643000.0,3917000.0,3153000.0,3127000.0,81053000.0,81020000.0,80358000.0,77986000.0,76563000.0,74807000.0,67486000.0,67471000.0,60115000.0,57414000.0,57407000.0,84293000.0,61519000.0,61511000.0,51456000.0,51322000.0,37148000.0,37013000.0,36948000.0,60065000.0,59609000.0,53798000.0,53288000.0,52834000.0,51805000.0,51610000.0,85784000.0,56799000.0,55419000.0,52873000.0,52842000.0,52809000.0,51258000.0,51200000.0,43811000.0,43802000.0,43777000.0,38214000.0,37902000.0,36933000.0,85876000.0,85836000.0,85319000.0,78959000.0,78765000.0,75720000.0,73593000.0,70916000.0,69733000.0,69713000.0,69630000.0,65614000.0,57332000.0,56598000.0,51852000.0,51754000.0,40586000.0,37457000.0,75153000.0,73337000.0,70551000.0,70121000.0,64818000.0,64790000.0,56418000.0,55193000.0,51519000.0,49186000.0,48787000.0,48701000.0,48667000.0,34436000.0,34391000.0,2749000.0,2254000.0,84792000.0,83476000.0,83196000.0,83162000.0,79492000.0,59597000.0,55819000.0,53468000.0,58280000.0,58273000.0,57142000.0,57106000.0,54679000.0,54655000.0,34278000.0,83411000.0,53820000.0,42068000.0,41153000.0,36890000.0,36635000.0,36179000.0,58922000.0,58595000.0,43580000.0,39588000.0,33646000.0,73218000.0,38810000.0,46672000.0,46332000.0,77175000.0,59963000.0,57307000.0,57303000.0,57279000.0,57174000.0,55784000.0,54912000.0,53559000.0,53342000.0,52983000.0,52977000.0,52948000.0,35352000.0,61961000.0,56662000.0,56562000.0,55779000.0,53456000.0,51856000.0,51761000.0,50343000.0,50331000.0,48743000.0,58610000.0,58570000.0,50932000.0,40855000.0,80639000.0,82783000.0,73741000.0,72741000.0,48247000.0,46986000.0,58202000.0,55449000.0,55255000.0,54996000.0,38285000.0,38252000.0,64791000.0,60054000.0,59837000.0,59283000.0,56943000.0,50335000.0,50242000.0,50224000.0,36745000.0,77982000.0,77860000.0,77749000.0,77676000.0,77609000.0,76843000.0,69350000.0,69308000.0,69064000.0,69022000.0,49919000.0,49389000.0,49330000.0,26581000.0,26581000.0,38699000.0,71775000.0,71775000.0,28481000.0,55517000.0,51548000.0,40124000.0,54399000.0,79978000.0,76335000.0,53610000.0,53590000.0,53541000.0,47291000.0,42229000.0,42203000.0,58174000.0,51371000.0,43404000.0,42330000.0,40242000.0,48990000.0,48670000.0,48230000.0,47018000.0,46681000.0,46550000.0,46454000.0,37557000.0,37530000.0,36264000.0,36212000.0,34387000.0,34368000.0,34348000.0,33723000.0,206000.0,85903000.0,82838000.0,77590000.0,76504000.0,41269000.0,71278000.0,43723000.0,71280000.0,71209000.0,68127000.0,15066000.0,13813000.0,35482000.0,50395000.0,52968000.0,49195000.0,49154000.0,48184000.0,44294000.0,44116000.0,42304000.0,42298000.0,83805000.0,83798000.0,53396000.0,53071000.0,52735000.0,48994000.0,48087000.0,48024000.0,32253000.0,80700000.0,80572000.0,78825000.0,78340000.0,78220000.0,78152000.0,77845000.0,74165000.0,74026000.0,74007000.0,73240000.0,72779000.0,72765000.0,68470000.0,68392000.0,66351000.0,58664000.0,58556000.0,58471000.0,58410000.0,55520000.0,39043000.0,38847000.0,36048000.0,35978000.0,34567000.0,85722000.0,84971000.0,81266000.0,77481000.0,76556000.0,76549000.0,74456000.0,74432000.0,71135000.0,70133000.0,69336000.0,68279000.0,67948000.0,65438000.0,65417000.0,40248000.0,40231000.0,40203000.0,35120000.0,34990000.0,34945000.0,79692000.0,78240000.0,78063000.0,55979000.0,55506000.0,54063000.0,54045000.0,49334000.0,48928000.0,47168000.0,46973000.0,46665000.0,46628000.0,61565000.0,61557000.0,57158000.0,56724000.0,56172000.0,54208000.0,54025000.0,54004000.0,50873000.0,50137000.0,49876000.0,49767000.0,76282000.0,75757000.0,75634000.0,61555000.0,59844000.0,59822000.0,57680000.0,56600000.0,54278000.0,54270000.0,44645000.0,43744000.0,43708000.0,37592000.0,37556000.0,34488000.0,34395000.0,34066000.0,3371000.0,76163000.0,81899000.0,79167000.0,78857000.0,58644000.0,71341000.0,69101000.0,51533000.0,40796000.0,40796000.0,64417000.0,62735000.0,57061000.0,51092000.0,39167000.0,83345000.0,5031000.0,4323000.0,76308000.0,76091000.0,76054000.0,72072000.0,43412000.0,43395000.0,42798000.0,38143000.0,38143000.0,63146000.0,61822000.0,61399000.0,61399000.0,61087000.0,61052000.0,59572000.0,59572000.0,51141000.0,51119000.0,50744000.0,49818000.0,49371000.0,47146000.0,46104000.0,44380000.0,43783000.0,43738000.0,43198000.0,625000.0,85413000.0,79072000.0,67396000.0,65276000.0,65276000.0,65231000.0,65183000.0,65172000.0,63669000.0,58138000.0,58115000.0,44178000.0,41567000.0,5731000.0,5164000.0,85901000.0,84027000.0,83232000.0,83204000.0,66962000.0,64246000.0,30309000.0,30262000.0,25525000.0,19045000.0,16786000.0,14885000.0,14035000.0,74469000.0,16813000.0,13944000.0,1495000.0,636000.0,86131000.0,85834000.0,83399000.0,83005000.0,82969000.0,63672000.0,45993000.0,45903000.0,45154000.0,45011000.0,40972000.0,40022000.0,39507000.0,34603000.0,32580000.0,73855000.0,59956000.0,49214000.0,48780000.0,48687000.0,48417000.0,48042000.0,47967000.0,37772000.0,23070000.0,22212000.0,22212000.0,22207000.0,6301000.0,85578000.0,83806000.0,82348000.0,80754000.0,79868000.0,79369000.0,79079000.0,78594000.0,74387000.0,72603000.0,72411000.0,72298000.0,72243000.0,58032000.0,57687000.0,57183000.0,56232000.0,56232000.0,55851000.0,54433000.0,54433000.0,54075000.0,48724000.0,50857000.0,33694000.0,33675000.0,31727000.0,31693000.0,31318000.0,31303000.0,2661000.0,80838000.0,80529000.0,77748000.0,77717000.0,77649000.0,77649000.0,77633000.0,75795000.0,75134000.0,72702000.0,52416000.0,51092000.0,51085000.0,51005000.0,50972000.0,50921000.0,45532000.0,45571000.0,45532000.0,45532000.0,81515000.0,81487000.0,81487000.0,76745000.0,76707000.0,76707000.0,67691000.0,67626000.0,67626000.0,67275000.0,67275000.0,67241000.0,66456000.0,66456000.0,64142000.0,63946000.0,61167000.0,61167000.0,61133000.0,61097000.0,60953000.0,52826000.0,46569000.0,46569000.0,46535000.0,46467000.0,62317000.0,62003000.0,62003000.0,61986000.0,60916000.0,60916000.0,60886000.0,49334000.0,48415000.0,47429000.0,46990000.0,45503000.0,69735000.0,35737000.0,35737000.0,35223000.0,35223000.0,35030000.0,35002000.0,85167000.0,85049000.0,84687000.0,33359000.0,63046000.0,63032000.0,62772000.0,62772000.0,62751000.0,62751000.0,62711000.0,62711000.0,58236000.0,58236000.0,58219000.0,57297000.0,57297000.0,57123000.0,54419000.0,54356000.0,48560000.0,45573000.0,42332000.0,63906000.0,63436000.0,61720000.0,61720000.0,61716000.0,61250000.0,55424000.0,53272000.0,52281000.0,52281000.0,52277000.0,40071000.0,38028000.0,61703000.0,53345000.0,51975000.0,41524000.0,41415000.0,41323000.0,49644000.0,55157000.0,54822000.0,54249000.0,54217000.0,64432000.0,64432000.0,64416000.0,64409000.0,61838000.0,61773000.0,60755000.0,60755000.0,56076000.0,56076000.0,56076000.0,55886000.0,55337000.0,55337000.0,55300000.0,53314000.0,52410000.0,52393000.0,52360000.0,50150000.0,40355000.0,40355000.0,40355000.0,36397000.0,30988000.0,29905000.0,29892000.0,28336000.0,28336000.0,28336000.0,28270000.0,28235000.0,67199000.0,67199000.0,67199000.0,57981000.0,57028000.0,57028000.0,56979000.0,54608000.0,53834000.0,53777000.0,51719000.0,51139000.0,49757000.0,49715000.0,49083000.0,48312000.0,78007000.0,68975000.0,45100000.0,63842000.0,52473000.0,50129000.0,42009000.0,41784000.0,41784000.0,41784000.0,58122000.0,58083000.0,84858000.0,84858000.0,80007000.0,78298000.0,78210000.0,76316000.0,76316000.0,67772000.0,67772000.0,62663000.0,62663000.0,48674000.0,48374000.0,45002000.0,43522000.0,43423000.0,41122000.0,40894000.0,40367000.0,40334000.0,64888000.0,64888000.0,45996000.0,45818000.0,30657000.0,30006000.0,28261000.0,26749000.0,26621000.0,26471000.0,30559000.0,62093000.0,62093000.0,62075000.0,62075000.0,58420000.0,58420000.0,56039000.0,56039000.0,52777000.0,52765000.0,48024000.0,48024000.0,48024000.0,41543000.0,28149000.0,50594000.0,27602000.0,26763000.0,26357000.0,83769000.0,83761000.0,2628000.0,80945000.0,80707000.0,80696000.0,76922000.0,76904000.0,54485000.0,53794000.0,53014000.0,51085000.0,84398000.0,81980000.0,80332000.0,77740000.0,4253000.0,4067000.0,4042000.0,84846000.0,75533000.0,80035000.0,79998000.0,67907000.0,63188000.0,63182000.0,60625000.0,58662000.0,57946000.0,57068000.0,57068000.0,56934000.0,33638000.0,37885000.0,28196000.0,3423000.0,81697000.0,56334000.0,56138000.0,65209000.0,65176000.0,64135000.0,62472000.0,51618000.0,51182000.0,40855000.0,38331000.0,62068000.0,61284000.0,47947000.0,43909000.0,48434000.0,40596000.0,47419000.0,47415000.0,41514000.0,78888000.0,77918000.0,60773000.0,59130000.0,57409000.0,57369000.0,57357000.0,61475000.0,452000.0,60975000.0,56470000.0,55840000.0,51767000.0,36749000.0,36749000.0,35654000.0,66609000.0,66580000.0,2660000.0,2640000.0,79241000.0,74090000.0,73954000.0,73929000.0,69075000.0,68299000.0,64160000.0,48520000.0,48232000.0,48187000.0,40351000.0,39271000.0,36995000.0,68327000.0,66688000.0,66619000.0,66549000.0,66517000.0,58018000.0,52174000.0,40663000.0,37143000.0,58275000.0,36784000.0,57283000.0,54595000.0,46216000.0,52251000.0,36022000.0,44999000.0,44981000.0,44956000.0,36787000.0,50487000.0,43481000.0,37909000.0,62709000.0,61307000.0,61245000.0,39157000.0,39145000.0,39123000.0,38191000.0,62125000.0,62100000.0,62073000.0,58882000.0,58680000.0,43473000.0,58896000.0,58817000.0,58088000.0,58034000.0,58002000.0,38945000.0,38735000.0,36025000.0,32942000.0,32450000.0,32223000.0,83088000.0,79089000.0,56078000.0,55119000.0,48269000.0,54173000.0,24670000.0,56039000.0,50378000.0,84915000.0,68171000.0,61022000.0,38879000.0,38351000.0,37812000.0,36962000.0,36576000.0,36354000.0,36220000.0,67657000.0,61284000.0,67657000.0,61284000.0,50909000.0,45721000.0,45660000.0,47461000.0,47199000.0,66949000.0,65840000.0,4593000.0,1539000.0,79802000.0,79784000.0,62536000.0,56579000.0,56546000.0,63575000.0,63404000.0,40853000.0,40647000.0,46983000.0,46935000.0,78728000.0,63742000.0,3911000.0,962000.0,82465000.0,82442000.0,73077000.0,37792000.0,74378000.0,36876000.0,3605000.0,34000.0,78431000.0,78329000.0,77662000.0,76448000.0,76407000.0,36622000.0,36615000.0,9103000.0,9092000.0,79647000.0,77109000.0,63049000.0,76929000.0,76060000.0,54967000.0,39283000.0,61304000.0,47123000.0,62197000.0,39102000.0,39081000.0,82004000.0,80813000.0,80773000.0,80714000.0,80653000.0,61876000.0,60136000.0,54458000.0,50655000.0,50578000.0,50364000.0,50345000.0,47927000.0,47654000.0,46104000.0,39062000.0,36291000.0,35773000.0,77004000.0,69883000.0,65543000.0,64924000.0,62284000.0,58566000.0,57673000.0,57648000.0,57618000.0,47624000.0,82306000.0,80716000.0,76243000.0,6217000.0,6045000.0,83173000.0,76451000.0,55319000.0,52787000.0,52188000.0,50328000.0,48660000.0,48607000.0,48217000.0,47833000.0,45455000.0,44825000.0,40637000.0,54712000.0,33404000.0,32280000.0,47359000.0,47340000.0,45452000.0,45276000.0,45209000.0,45045000.0,44990000.0,44848000.0,44793000.0,44730000.0,47379000.0,46358000.0,44532000.0,39204000.0,65908000.0,61737000.0,58959000.0,59329000.0,64003000.0,43070000.0]},\"selected\":{\"id\":\"2127\"},\"selection_policy\":{\"id\":\"2128\"}},\"id\":\"2005\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2027\",\"type\":\"SaveTool\"},{\"attributes\":{\"overlay\":{\"id\":\"2030\"}},\"id\":\"2026\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2025\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2029\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2127\",\"type\":\"Selection\"},{\"attributes\":{\"formatter\":{\"id\":\"2044\"},\"ticker\":{\"id\":\"2018\"}},\"id\":\"2017\",\"type\":\"DatetimeAxis\"},{\"attributes\":{\"num_minor_ticks\":5,\"tickers\":[{\"id\":\"2114\"},{\"id\":\"2115\"},{\"id\":\"2116\"},{\"id\":\"2117\"},{\"id\":\"2118\"},{\"id\":\"2119\"},{\"id\":\"2120\"},{\"id\":\"2121\"},{\"id\":\"2122\"},{\"id\":\"2123\"},{\"id\":\"2124\"},{\"id\":\"2125\"}]},\"id\":\"2018\",\"type\":\"DatetimeTicker\"},{\"attributes\":{},\"id\":\"2013\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"time\"},\"y\":{\"field\":\"day\",\"transform\":{\"id\":\"2038\"}}},\"id\":\"2041\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"2017\"},\"ticker\":null},\"id\":\"2020\",\"type\":\"Grid\"},{\"attributes\":{\"months\":[0,4,8]},\"id\":\"2123\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"factors\":[\"Sun\",\"Sat\",\"Fri\",\"Thu\",\"Wed\",\"Tue\",\"Mon\"]},\"id\":\"2011\",\"type\":\"FactorRange\"},{\"attributes\":{},\"id\":\"2024\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"YearsTicker\"},{\"attributes\":{\"days\":[1,8,15,22]},\"id\":\"2119\",\"type\":\"DaysTicker\"},{\"attributes\":{\"axis\":{\"id\":\"2021\"},\"dimension\":1,\"grid_line_color\":null,\"ticker\":null},\"id\":\"2023\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2015\",\"type\":\"CategoricalScale\"},{\"attributes\":{},\"id\":\"2113\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"days\":[1,15]},\"id\":\"2120\",\"type\":\"DaysTicker\"},{\"attributes\":{\"days\":[1,4,7,10,13,16,19,22,25,28]},\"id\":\"2118\",\"type\":\"DaysTicker\"},{\"attributes\":{\"range_padding\":0},\"id\":\"2009\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"2006\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.1\"}};\n", " var render_items = [{\"docid\":\"1073f616-3475-48e3-a76b-db378dbbb737\",\"root_ids\":[\"2006\"],\"roots\":{\"2006\":\"efb7ebce-f94f-4d58-a952-faedc6913eef\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "2006" } }, "output_type": "display_data" } ], "source": [ "from bokeh.transform import jitter\n", "\n", "DAYS = ['Sun', 'Sat', 'Fri', 'Thu', 'Wed', 'Tue', 'Mon']\n", "\n", "source = ColumnDataSource(data)\n", "\n", "p = figure(plot_width=800, plot_height=300, y_range=DAYS, x_axis_type='datetime', \n", " title=\"Commits by Time of Day (US/Central) 2012—2016\")\n", "\n", "p.circle(x='time', y=jitter('day', width=0.6, range=p.y_range), source=source, alpha=0.3)\n", "\n", "p.xaxis[0].formatter.days = ['%Hh']\n", "p.x_range.range_padding = 0\n", "p.ygrid.grid_line_color = None\n", "\n", "show(p)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# Exercise: Create a plot using categorical coordinates and any non-\"bar\" glyphs\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Next Section" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Click on this link to go to the next notebook: [08 - Graph and Network Plots](08%20-%20Graph%20and%20Network%20Plots.ipynb).\n", "\n", "To go back to the overview, click [here](00%20-%20Introduction%20and%20Setup.ipynb)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.2" } }, "nbformat": 4, "nbformat_minor": 4 }