Skip to content

Instantly share code, notes, and snippets.

@hadim
Created March 18, 2020 19:39
Show Gist options
  • Save hadim/bc5451dc064af75667f1c803946621b8 to your computer and use it in GitHub Desktop.
Save hadim/bc5451dc064af75667f1c803946621b8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <div class=\"bk-root\">\n",
" <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
" <span id=\"1001\">Loading BokehJS ...</span>\n",
" </div>"
]
},
"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",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\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",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\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",
" 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",
" \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.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.0.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.0.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.0.0.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 \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\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 \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\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 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 \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.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.0.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.0.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.0.0.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": [
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"import pathlib\n",
"import datetime\n",
"import itertools\n",
"\n",
"import bokeh\n",
"from bokeh import io\n",
"from bokeh import models\n",
"from bokeh import plotting\n",
"from bokeh import palettes\n",
"bokeh.io.output_notebook()\n",
"\n",
"from tqdm.auto import tqdm\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"data_dir = pathlib.Path(\"../data\")\n",
"base_url = \"https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/{date_str}.csv\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a133bef38277438098ec7753a0113e17",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=33.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2020-03-18 00:00:00 not available\n",
"\n"
]
}
],
"source": [
"# Scrap data\n",
"start_date = datetime.datetime(2020, 2, 15)\n",
"end_date = datetime.datetime.now()\n",
"\n",
"data = pd.DataFrame()\n",
"all_dates = pd.date_range(start_date, end_date, freq=\"D\")\n",
"\n",
"for date in tqdm(all_dates, total=len(all_dates)):\n",
" date_str = date.strftime(\"%m-%d-%Y\")\n",
" url = base_url.format(date_str=date_str)\n",
" \n",
" try:\n",
" df = pd.read_csv(url)\n",
" df[\"date\"] = date\n",
" data = data.append(df)\n",
" except Exception:\n",
" print(f\"{date} not available\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Mainland China', 'Others', 'Singapore', 'Hong Kong', 'Japan',\n",
" 'Thailand', 'South Korea', 'Malaysia', 'Taiwan', 'Germany',\n",
" 'Vietnam', 'France', 'Macau', 'UK', 'United Arab Emirates',\n",
" 'Australia', 'Canada', 'India', 'Italy', 'Philippines', 'Russia',\n",
" 'Spain', 'US', 'Belgium', 'Cambodia', 'Egypt', 'Finland', 'Nepal',\n",
" 'Sri Lanka', 'Sweden', 'Iran', 'Israel', 'Lebanon', 'Iraq', 'Oman',\n",
" 'Afghanistan', 'Bahrain', 'Kuwait', 'Austria', 'Algeria',\n",
" 'Croatia', 'Switzerland', 'Pakistan', 'Brazil', 'Georgia',\n",
" 'Greece', 'North Macedonia', 'Norway', 'Romania', 'Denmark',\n",
" 'Estonia', 'Netherlands', 'San Marino', ' Azerbaijan', 'Belarus',\n",
" 'Iceland', 'Lithuania', 'Mexico', 'New Zealand', 'Nigeria',\n",
" 'North Ireland', 'Ireland', 'Luxembourg', 'Monaco', 'Qatar',\n",
" 'Ecuador', 'Azerbaijan', 'Czech Republic', 'Armenia',\n",
" 'Dominican Republic', 'Indonesia', 'Portugal', 'Andorra', 'Latvia',\n",
" 'Morocco', 'Saudi Arabia', 'Senegal', 'Argentina', 'Chile',\n",
" 'Jordan', 'Ukraine', 'Saint Barthelemy', 'Hungary',\n",
" 'Faroe Islands', 'Gibraltar', 'Liechtenstein', 'Poland', 'Tunisia',\n",
" 'Palestine', 'Bosnia and Herzegovina', 'Slovenia', 'South Africa',\n",
" 'Bhutan', 'Cameroon', 'Colombia', 'Costa Rica', 'Peru', 'Serbia',\n",
" 'Slovakia', 'Togo', 'Vatican City', 'French Guiana', 'Malta',\n",
" 'Martinique', 'Republic of Ireland', 'Bulgaria', 'Maldives',\n",
" 'Bangladesh', 'Moldova', 'Paraguay', 'Albania', 'Cyprus',\n",
" 'St. Martin', 'Brunei', 'Iran (Islamic Republic of)',\n",
" 'Republic of Korea', 'Hong Kong SAR', 'Taipei and environs',\n",
" 'Viet Nam', 'occupied Palestinian territory', 'Macao SAR',\n",
" 'Russian Federation', 'Republic of Moldova', 'Saint Martin',\n",
" 'Burkina Faso', 'Channel Islands', 'Holy See', 'Mongolia',\n",
" 'Panama', 'China', 'Korea, South', 'Cruise Ship', 'United Kingdom',\n",
" 'Czechia', 'Taiwan*', 'Bolivia', 'Honduras', 'Congo (Kinshasa)',\n",
" \"Cote d'Ivoire\", 'Jamaica', 'Reunion', 'Turkey', 'Cuba', 'Guyana',\n",
" 'Kazakhstan', 'Cayman Islands', 'Guadeloupe', 'Ethiopia', 'Sudan',\n",
" 'Guinea', 'Antigua and Barbuda', 'Aruba', 'Kenya', 'Uruguay',\n",
" 'Ghana', 'Jersey', 'Namibia', 'Seychelles', 'Trinidad and Tobago',\n",
" 'Venezuela', 'Curacao', 'Eswatini', 'Gabon', 'Guatemala',\n",
" 'Guernsey', 'Mauritania', 'Rwanda', 'Saint Lucia',\n",
" 'Saint Vincent and the Grenadines', 'Suriname', 'Kosovo',\n",
" 'Central African Republic', 'Congo (Brazzaville)',\n",
" 'Equatorial Guinea', 'Uzbekistan', 'Guam', 'Puerto Rico', 'Benin',\n",
" 'Greenland', 'Liberia', 'Mayotte', 'Republic of the Congo',\n",
" 'Somalia', 'Tanzania', 'The Bahamas', 'Barbados', 'Montenegro',\n",
" 'The Gambia'], dtype=object)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Print all countries\n",
"data[\"Country/Region\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" <div class=\"bk-root\" id=\"b2bc7516-4bea-4138-8c79-1cfbd7edeebc\" data-root-id=\"1002\"></div>\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"1d1b8bce-2976-4969-a10d-fdb3b3282e54\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1011\"}],\"center\":[{\"id\":\"1014\"},{\"id\":\"1018\"},{\"id\":\"1058\"}],\"left\":[{\"id\":\"1015\"}],\"renderers\":[{\"id\":\"1037\"},{\"id\":\"1064\"},{\"id\":\"1092\"},{\"id\":\"1122\"},{\"id\":\"1154\"},{\"id\":\"1188\"},{\"id\":\"1224\"},{\"id\":\"1262\"},{\"id\":\"1302\"},{\"id\":\"1344\"}],\"sizing_mode\":\"stretch_width\",\"title\":{\"id\":\"1040\"},\"toolbar\":{\"id\":\"1025\"},\"x_range\":{\"id\":\"1003\"},\"x_scale\":{\"id\":\"1007\"},\"y_range\":{\"id\":\"1005\"},\"y_scale\":{\"id\":\"1009\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1057\",\"type\":\"YearsTicker\"},{\"attributes\":{},\"id\":\"1134\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1169\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1324\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1062\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1325\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1150\"}},\"id\":\"1155\",\"type\":\"CDSView\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1019\"},{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1383\"}]},\"id\":\"1025\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"Confirmed\":[12,12,12,12,12,12,12,12,12,12,14,18,38,57,100,130,191,204,285,377,653,949,1126,1209,1784,2284,2284,3667,4480,4513,6650,7683],\"Deaths\":[1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,4,4,6,9,11,19,19,33,48,48,79,91,91,148,148],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAR0AAAAAAAIBHQAAAAAAAgEdAAAAAAACAR0AAAAAAAIBHQAAAAAAAgEdAAAAAAACAR0AAAAAAAIBHQAAAAAAAgEdAAAAAAACAR0Cw4emVsoxUQLDh6ZWyjFRA2ht8YTIhUEDaG3xhMiFRQGRd3EYD0EtAXkvIBz37UUB2vp8aL2VJQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEBmiGNd3OpewGaIY13c6l7ArOHplbK8OUBOHhZqTUM7wCv2l92TkHHA001iEFhodcBbIEHxY/RxwA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[4,4,4,4,4,4,4,4,4,4,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1102\"},\"selection_policy\":{\"id\":\"1103\"}},\"id\":\"1060\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#d62728\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1261\",\"type\":\"Circle\"},{\"attributes\":{\"source\":{\"id\":\"1220\"}},\"id\":\"1225\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1168\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"1060\"},\"glyph\":{\"id\":\"1062\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1063\"},\"selection_glyph\":null,\"view\":{\"id\":\"1065\"}},\"id\":\"1064\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1102\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"Confirmed\":[2,2,2,2,2,2,2,2,2,2,6,13,15,32,45,84,120,165,222,259,400,500,673,1073,1695,2277,2277,5232,6391,7798,9942,11748],\"Deaths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,5,10,17,28,35,54,55,133,195,289,342,533],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREAAAAAAAABEQAAAAAAAAERAAAAAAAAAREAAAAAAAABEQAAAAAAAAERAAAAAAAAAREAAAAAAAABEQAAAAAAAAERAAAAAAAAAREAAAAAAAABEQAAAAAAAAERA3pOHhVo7REDek4eFWjtEQN6Th4VaO0RA3pOHhVo7REDek4eFWjtEQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAAAAAAAAAQwAAAAAAAABDAAAAAAAAAEMAAAAAAAAAQwAAAAAAAABDAAAAAAAAAEMAAAAAAAAAQwAAAAAAAABDAAAAAAAAAEMAAAAAAAAAQwAAAAAAAABDAPE7RkVz+DcA8TtGRXP4NwDxO0ZFc/g3APE7RkVz+DcA8TtGRXP4NwA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,30,30,32,32,183,183,193,517,517,530,1028],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1168\"},\"selection_policy\":{\"id\":\"1169\"}},\"id\":\"1118\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"Confirmed\":[7,7,8,8,8,8,9,9,9,10,11,11,13,14,20,24,27,30,33,37,49,54,64,76,79,108,117,193,196,250,415,478],\"Deaths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,4,5],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7FG4HoWtZkDsUbgeha1mQOxRuB6FrWZA7FG4HoWtZkDsUbgeha1mQB8Wak3zDm1Al5APejbgcUCXkA96NuBxQAyTqYJRe2pADJOpglF7akBiEFg5tCZwQGIQWDm0JnBA+AZfmEwseUD5oGez6tF2QMZLN4lBDH1A3NeBc8YYgUDc14FzxhiBQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dJNYhBVdsDx0k1iEFV2wPHSTWIQVXbA8dJNYhBVdsDx0k1iEFV2wEMc6+I2dn3AQKTfvg5HgsBApN++DkeCwFr1udqKMXnAWvW52ooxecC2FfvL7lh9wLYV+8vuWH3Am+Ydp+jriMC06nO1lRaFwLaEfNAz34jA6nO1FXuyjsDqc7UVe7KOwA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[1,1,1,1,1,1,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,9,9],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1204\"},\"selection_policy\":{\"id\":\"1205\"}},\"id\":\"1150\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"Confirmed\":[16,16,16,16,16,16,16,16,16,16,17,27,46,48,79,130,159,196,262,482,670,799,1040,1176,1457,1908,2078,3675,4585,5795,7272,9257],\"Deaths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,3,3,7,9,11,17,24],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACASUAAAAAAAIBJQAAAAAAAgElAAAAAAACASUAAAAAAAIBJQAAAAAAAgElAAAAAAACASUAAAAAAAIBJQAAAAAAAgElAAAAAAACASUAAAAAAAIBJQAAAAAAAgElAPnlYqDWVSUA+eVioNZVJQD55WKg1lUlAPnlYqDWVSUA+eVioNZVJQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACJAukkMAivnJEC6SQwCK+ckQLpJDAIr5yRAukkMAivnJEC6SQwCK+ckQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[1,1,1,12,12,12,14,14,14,14,14,15,16,16,16,16,16,16,16,16,17,18,18,18,18,25,25,46,46,46,67,67],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1409\"},\"selection_policy\":{\"id\":\"1410\"}},\"id\":\"1340\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1033\"}},\"id\":\"1038\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1063\",\"type\":\"Circle\"},{\"attributes\":{\"data_source\":{\"id\":\"1340\"},\"glyph\":{\"id\":\"1342\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1343\"},\"selection_glyph\":null,\"view\":{\"id\":\"1345\"}},\"id\":\"1344\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"click_policy\":\"hide\",\"items\":[{\"id\":\"1059\"},{\"id\":\"1117\"},{\"id\":\"1183\"},{\"id\":\"1257\"},{\"id\":\"1339\"}],\"location\":\"top_left\"},\"id\":\"1058\",\"type\":\"Legend\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1223\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1103\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data_source\":{\"id\":\"1220\"},\"glyph\":{\"id\":\"1222\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1223\"},\"selection_glyph\":null,\"view\":{\"id\":\"1225\"}},\"id\":\"1224\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1060\"}},\"id\":\"1065\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1091\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1340\"}},\"id\":\"1345\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"Confirmed\":[7,7,8,8,8,8,9,9,9,10,11,11,13,14,20,24,27,30,33,37,49,54,64,76,79,108,117,193,196,250,415,478],\"Deaths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,4,5],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7FG4HoWtZkDsUbgeha1mQOxRuB6FrWZA7FG4HoWtZkDsUbgeha1mQB8Wak3zDm1Al5APejbgcUCXkA96NuBxQAyTqYJRe2pADJOpglF7akBiEFg5tCZwQGIQWDm0JnBA+AZfmEwseUD5oGez6tF2QMZLN4lBDH1A3NeBc8YYgUDc14FzxhiBQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8dJNYhBVdsDx0k1iEFV2wPHSTWIQVXbA8dJNYhBVdsDx0k1iEFV2wEMc6+I2dn3AQKTfvg5HgsBApN++DkeCwFr1udqKMXnAWvW52ooxecC2FfvL7lh9wLYV+8vuWH3Am+Ydp+jriMC06nO1lRaFwLaEfNAz34jA6nO1FXuyjsDqc7UVe7KOwA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[1,1,1,1,1,1,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,9,9],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1242\"},\"selection_policy\":{\"id\":\"1243\"}},\"id\":\"1184\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1072\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"1150\"},\"glyph\":{\"id\":\"1152\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1153\"},\"selection_glyph\":null,\"view\":{\"id\":\"1155\"}},\"id\":\"1154\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1204\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1243\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data_source\":{\"id\":\"1184\"},\"glyph\":{\"id\":\"1186\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1187\"},\"selection_glyph\":null,\"view\":{\"id\":\"1189\"}},\"id\":\"1188\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1300\",\"type\":\"Line\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#9467bd\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1343\",\"type\":\"Circle\"},{\"attributes\":{\"label\":{\"value\":\"France\"},\"renderers\":[{\"id\":\"1037\"},{\"id\":\"1064\"}]},\"id\":\"1059\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1073\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#2ca02c\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1187\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1369\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1368\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1184\"}},\"id\":\"1189\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"Confirmed\":[16,16,16,16,16,16,16,16,16,16,17,27,46,48,79,130,159,196,262,482,670,799,1040,1176,1457,1908,2078,3675,4585,5795,7272,9257],\"Deaths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,3,3,7,9,11,17,24],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACASUAAAAAAAIBJQAAAAAAAgElAAAAAAACASUAAAAAAAIBJQAAAAAAAgElAAAAAAACASUAAAAAAAIBJQAAAAAAAgElAAAAAAACASUAAAAAAAIBJQAAAAAAAgElAPnlYqDWVSUA+eVioNZVJQD55WKg1lUlAPnlYqDWVSUA+eVioNZVJQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACJAAAAAAAAAIkAAAAAAAAAiQAAAAAAAACJAukkMAivnJEC6SQwCK+ckQLpJDAIr5yRAukkMAivnJEC6SQwCK+ckQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[1,1,1,12,12,12,14,14,14,14,14,15,16,16,16,16,16,16,16,16,17,18,18,18,18,25,25,46,46,46,67,67],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1368\"},\"selection_policy\":{\"id\":\"1369\"}},\"id\":\"1298\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"formatters\":{\"@date\":\"datetime\"},\"tooltips\":[[\"Date\",\"@date{%F}\"],[\"Confirmed\",\"@Confirmed\"],[\"Deaths\",\"@Deaths\"]]},\"id\":\"1383\",\"type\":\"HoverTool\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1090\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1088\"}},\"id\":\"1093\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1152\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1007\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1036\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"#2ca02c\"},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1186\",\"type\":\"Circle\"},{\"attributes\":{\"label\":{\"value\":\"Spain\"},\"renderers\":[{\"id\":\"1092\"},{\"id\":\"1122\"}]},\"id\":\"1117\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"1298\"},\"glyph\":{\"id\":\"1300\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1301\"},\"selection_glyph\":null,\"view\":{\"id\":\"1303\"}},\"id\":\"1302\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1409\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"1088\"},\"glyph\":{\"id\":\"1090\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1091\"},\"selection_glyph\":null,\"view\":{\"id\":\"1093\"}},\"id\":\"1092\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1205\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1118\"}},\"id\":\"1123\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1035\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"DatetimeTickFormatter\"},{\"attributes\":{},\"id\":\"1005\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"Italy\"},\"renderers\":[{\"id\":\"1224\"},{\"id\":\"1262\"}]},\"id\":\"1257\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"1033\"},\"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\":\"1410\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1242\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"LinearScale\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1040\",\"type\":\"Title\"},{\"attributes\":{\"label\":{\"value\":\"Canada\"},\"renderers\":[{\"id\":\"1154\"},{\"id\":\"1188\"}]},\"id\":\"1183\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1042\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1282\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Date\",\"formatter\":{\"id\":\"1044\"},\"ticker\":{\"id\":\"1012\"}},\"id\":\"1011\",\"type\":\"DatetimeAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1015\"},\"dimension\":1,\"ticker\":null},\"id\":\"1018\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#ff7f0e\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1121\",\"type\":\"Circle\"},{\"attributes\":{\"num_minor_ticks\":5,\"tickers\":[{\"id\":\"1046\"},{\"id\":\"1047\"},{\"id\":\"1048\"},{\"id\":\"1049\"},{\"id\":\"1050\"},{\"id\":\"1051\"},{\"id\":\"1052\"},{\"id\":\"1053\"},{\"id\":\"1054\"},{\"id\":\"1055\"},{\"id\":\"1056\"},{\"id\":\"1057\"}]},\"id\":\"1012\",\"type\":\"DatetimeTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1011\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1014\",\"type\":\"Grid\"},{\"attributes\":{\"label\":{\"value\":\"Germany\"},\"renderers\":[{\"id\":\"1302\"},{\"id\":\"1344\"}]},\"id\":\"1339\",\"type\":\"LegendItem\"},{\"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\":\"1045\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data_source\":{\"id\":\"1118\"},\"glyph\":{\"id\":\"1120\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1121\"},\"selection_glyph\":null,\"view\":{\"id\":\"1123\"}},\"id\":\"1122\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1016\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1258\"}},\"id\":\"1263\",\"type\":\"CDSView\"},{\"attributes\":{\"formatter\":{\"id\":\"1042\"},\"ticker\":{\"id\":\"1016\"}},\"id\":\"1015\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_color\":{\"value\":\"#ff7f0e\"},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1120\",\"type\":\"Circle\"},{\"attributes\":{\"base\":24,\"mantissas\":[1,2,4,6,8,12],\"max_interval\":43200000.0,\"min_interval\":3600000.0,\"num_minor_ticks\":0},\"id\":\"1048\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"line_color\":\"#d62728\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1222\",\"type\":\"Line\"},{\"attributes\":{\"base\":60,\"mantissas\":[1,2,5,10,15,20,30],\"max_interval\":1800000.0,\"min_interval\":1000.0,\"num_minor_ticks\":0},\"id\":\"1047\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1153\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"Confirmed\":[2,2,2,2,2,2,2,2,2,2,6,13,15,32,45,84,120,165,222,259,400,500,673,1073,1695,2277,2277,5232,6391,7798,9942,11748],\"Deaths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,5,10,17,28,35,54,55,133,195,289,342,533],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREAAAAAAAABEQAAAAAAAAERAAAAAAAAAREAAAAAAAABEQAAAAAAAAERAAAAAAAAAREAAAAAAAABEQAAAAAAAAERAAAAAAAAAREAAAAAAAABEQAAAAAAAAERA3pOHhVo7REDek4eFWjtEQN6Th4VaO0RA3pOHhVo7REDek4eFWjtEQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAAAAAAAAAQwAAAAAAAABDAAAAAAAAAEMAAAAAAAAAQwAAAAAAAABDAAAAAAAAAEMAAAAAAAAAQwAAAAAAAABDAAAAAAAAAEMAAAAAAAAAQwAAAAAAAABDAPE7RkVz+DcA8TtGRXP4NwDxO0ZFc/g3APE7RkVz+DcA8TtGRXP4NwA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,30,30,32,32,183,183,193,517,517,530,1028],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1134\"},\"selection_policy\":{\"id\":\"1135\"}},\"id\":\"1088\",\"type\":\"ColumnDataSource\"},{\"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\":\"1049\",\"type\":\"DaysTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"line_width\":2,\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1301\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"Confirmed\":[3,3,3,3,3,3,20,62,155,229,322,453,655,888,1128,1694,2036,2502,3089,3858,4636,5883,7375,9172,10149,12462,12462,17660,21157,24747,27980,31506],\"Deaths\":[0,0,0,0,0,0,1,2,3,7,10,12,17,21,29,34,52,79,107,148,197,233,366,463,631,827,827,1266,1441,1809,2158,2503],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVA8rBQa5rvREDysFBrmu9EQPKwUGua70RA8rBQa5rvREDysFBrmu9EQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKEAAAAAAAAAoQAAAAAAAAChAAAAAAAAAKEAAAAAAAAAoQAAAAAAAAChAAAAAAAAAKEAAAAAAAAAoQAAAAAAAAChAAAAAAAAAKEAAAAAAAAAoQAAAAAAAAChANIC3QIIiKUA0gLdAgiIpQDSAt0CCIilANIC3QIIiKUA0gLdAgiIpQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[0,0,0,0,0,0,0,1,2,1,1,3,45,46,46,83,149,160,276,414,523,589,622,724,724,1045,1045,1439,1966,2335,2749,2941],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1324\"},\"selection_policy\":{\"id\":\"1325\"}},\"id\":\"1258\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"days\":[1,4,7,10,13,16,19,22,25,28]},\"id\":\"1050\",\"type\":\"DaysTicker\"},{\"attributes\":{\"data_source\":{\"id\":\"1258\"},\"glyph\":{\"id\":\"1260\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1261\"},\"selection_glyph\":null,\"view\":{\"id\":\"1263\"}},\"id\":\"1262\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"Confirmed\":[3,3,3,3,3,3,20,62,155,229,322,453,655,888,1128,1694,2036,2502,3089,3858,4636,5883,7375,9172,10149,12462,12462,17660,21157,24747,27980,31506],\"Deaths\":[0,0,0,0,0,0,1,2,3,7,10,12,17,21,29,34,52,79,107,148,197,233,366,463,631,827,827,1266,1441,1809,2158,2503],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVAAAAAAACARUAAAAAAAIBFQAAAAAAAgEVA8rBQa5rvREDysFBrmu9EQPKwUGua70RA8rBQa5rvREDysFBrmu9EQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKEAAAAAAAAAoQAAAAAAAAChAAAAAAAAAKEAAAAAAAAAoQAAAAAAAAChAAAAAAAAAKEAAAAAAAAAoQAAAAAAAAChAAAAAAAAAKEAAAAAAAAAoQAAAAAAAAChANIC3QIIiKUA0gLdAgiIpQDSAt0CCIilANIC3QIIiKUA0gLdAgiIpQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[0,0,0,0,0,0,0,1,2,1,1,3,45,46,46,83,149,160,276,414,523,589,622,724,724,1045,1045,1439,1966,2335,2749,2941],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1282\"},\"selection_policy\":{\"id\":\"1283\"}},\"id\":\"1220\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"days\":[1,8,15,22]},\"id\":\"1051\",\"type\":\"DaysTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"#d62728\"},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1260\",\"type\":\"Circle\"},{\"attributes\":{\"fill_color\":{\"value\":\"#9467bd\"},\"line_color\":{\"value\":null},\"size\":{\"units\":\"screen\",\"value\":8},\"x\":{\"field\":\"date\"},\"y\":{\"field\":\"Confirmed\"}},\"id\":\"1342\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1019\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1135\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"days\":[1,15]},\"id\":\"1052\",\"type\":\"DaysTicker\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"months\":[0,1,2,3,4,5,6,7,8,9,10,11]},\"id\":\"1053\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"overlay\":{\"id\":\"1045\"}},\"id\":\"1021\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1283\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1003\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1298\"}},\"id\":\"1303\",\"type\":\"CDSView\"},{\"attributes\":{\"months\":[0,2,4,6,8,10]},\"id\":\"1054\",\"type\":\"MonthsTicker\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"SaveTool\"},{\"attributes\":{\"months\":[0,6]},\"id\":\"1056\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"months\":[0,4,8]},\"id\":\"1055\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"mantissas\":[1,2,5],\"max_interval\":500.0,\"num_minor_ticks\":0},\"id\":\"1046\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"data\":{\"Confirmed\":[12,12,12,12,12,12,12,12,12,12,14,18,38,57,100,130,191,204,285,377,653,949,1126,1209,1784,2284,2284,3667,4480,4513,6650,7683],\"Deaths\":[1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,4,4,6,9,11,19,19,33,48,48,79,91,91,148,148],\"Latitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAR0AAAAAAAIBHQAAAAAAAgEdAAAAAAACAR0AAAAAAAIBHQAAAAAAAgEdAAAAAAACAR0AAAAAAAIBHQAAAAAAAgEdAAAAAAACAR0Cw4emVsoxUQLDh6ZWyjFRA2ht8YTIhUEDaG3xhMiFRQGRd3EYD0EtAXkvIBz37UUB2vp8aL2VJQA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Longitude\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEBmiGNd3OpewGaIY13c6l7ArOHplbK8OUBOHhZqTUM7wCv2l92TkHHA001iEFhodcBbIEHxY/RxwA==\",\"dtype\":\"float64\",\"shape\":[32]},\"Recovered\":[4,4,4,4,4,4,4,4,4,4,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12],\"date\":{\"__ndarray__\":\"AABAUWIEd0IAAAC3tAR3QgAAwBwHBXdCAACAglkFd0IAAEDoqwV3QgAAAE7+BXdCAADAs1AGd0IAAIAZowZ3QgAAQH/1BndCAAAA5UcHd0IAAMBKmgd3QgAAgLDsB3dCAABAFj8Id0IAAAB8kQh3QgAAwOHjCHdCAACARzYJd0IAAECtiAl3QgAAABPbCXdCAADAeC0Kd0IAAIDefwp3QgAAQETSCndCAAAAqiQLd0IAAMAPdwt3QgAAgHXJC3dCAABA2xsMd0IAAABBbgx3QgAAwKbADHdCAACADBMNd0IAAEByZQ13QgAAANi3DXdCAADAPQoOd0IAAICjXA53Qg==\",\"dtype\":\"float64\",\"shape\":[32]},\"index\":[0,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]},\"selected\":{\"id\":\"1072\"},\"selection_policy\":{\"id\":\"1073\"}},\"id\":\"1033\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"1002\"]},\"title\":\"Bokeh Application\",\"version\":\"2.0.0\"}};\n",
" var render_items = [{\"docid\":\"1d1b8bce-2976-4969-a10d-fdb3b3282e54\",\"root_ids\":[\"1002\"],\"roots\":{\"1002\":\"b2bc7516-4bea-4138-8c79-1cfbd7edeebc\"}}];\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": [
"countries = [\"France\", \"Spain\", \"Canada\", \"Italy\", \"Germany\"]\n",
"\n",
"fig = bokeh.plotting.figure(sizing_mode='stretch_width', x_axis_type='datetime')\n",
"palette = palettes.all_palettes[\"Category10\"][10]\n",
"colors = itertools.cycle(palette) \n",
"\n",
"for country, color in zip(countries, colors):\n",
"\n",
" data_indexed = data.set_index(\"Country/Region\")\n",
" cases = data_indexed.loc[country].groupby(\"date\").sum()\n",
" source = bokeh.models.ColumnDataSource(cases)\n",
"\n",
" d = cases.reset_index()\n",
" fig.line(x=\"date\", y=\"Confirmed\", line_color=color, line_width=2, legend_label=country, source=d)\n",
" fig.circle(x=\"date\", y=\"Confirmed\", size=8, fill_color=color, line_color=None, source=d, legend_label=country)\n",
"\n",
"fig.legend.location = \"top_left\"\n",
"fig.legend.click_policy = \"hide\"\n",
" \n",
"fig.xgrid.grid_line_color = None\n",
"fig.xaxis.axis_label = \"Date\"\n",
"\n",
"tooltips = [(\"Date\", \"@date{%F}\"), (\"Confirmed\", \"@Confirmed\"), (\"Deaths\", \"@Deaths\")]\n",
"hover_tools = bokeh.models.HoverTool(tooltips=tooltips, formatters={'@date': 'datetime'})\n",
"fig.add_tools(hover_tools)\n",
"\n",
"bokeh.io.show(fig)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"9.531332163313914"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"1.38**7"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Province/State</th>\n",
" <th>Country/Region</th>\n",
" <th>Last Update</th>\n",
" <th>Confirmed</th>\n",
" <th>Deaths</th>\n",
" <th>Recovered</th>\n",
" <th>date</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Hubei</td>\n",
" <td>Mainland China</td>\n",
" <td>2020-02-15T23:13:05</td>\n",
" <td>56249</td>\n",
" <td>1596</td>\n",
" <td>5623</td>\n",
" <td>2020-02-15</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Guangdong</td>\n",
" <td>Mainland China</td>\n",
" <td>2020-02-15T14:03:04</td>\n",
" <td>1294</td>\n",
" <td>2</td>\n",
" <td>410</td>\n",
" <td>2020-02-15</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Henan</td>\n",
" <td>Mainland China</td>\n",
" <td>2020-02-15T12:13:08</td>\n",
" <td>1212</td>\n",
" <td>13</td>\n",
" <td>391</td>\n",
" <td>2020-02-15</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Zhejiang</td>\n",
" <td>Mainland China</td>\n",
" <td>2020-02-15T11:23:17</td>\n",
" <td>1162</td>\n",
" <td>0</td>\n",
" <td>428</td>\n",
" <td>2020-02-15</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Hunan</td>\n",
" <td>Mainland China</td>\n",
" <td>2020-02-15T13:03:04</td>\n",
" <td>1001</td>\n",
" <td>2</td>\n",
" <td>425</td>\n",
" <td>2020-02-15</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Province/State Country/Region Last Update Confirmed Deaths \\\n",
"0 Hubei Mainland China 2020-02-15T23:13:05 56249 1596 \n",
"1 Guangdong Mainland China 2020-02-15T14:03:04 1294 2 \n",
"2 Henan Mainland China 2020-02-15T12:13:08 1212 13 \n",
"3 Zhejiang Mainland China 2020-02-15T11:23:17 1162 0 \n",
"4 Hunan Mainland China 2020-02-15T13:03:04 1001 2 \n",
"\n",
" Recovered date Latitude Longitude \n",
"0 5623 2020-02-15 NaN NaN \n",
"1 410 2020-02-15 NaN NaN \n",
"2 391 2020-02-15 NaN NaN \n",
"3 428 2020-02-15 NaN NaN \n",
"4 425 2020-02-15 NaN NaN "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Country/Region</th>\n",
" <th>Last Update</th>\n",
" <th>Confirmed</th>\n",
" <th>Deaths</th>\n",
" <th>Recovered</th>\n",
" <th>date</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Province/State</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-09T08:43:03</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-09</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-10T00:53:03</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-10</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-11T23:13:06</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-11</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-12T01:53:03</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-12</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-11T20:00:00</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-13</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-13T13:33:03</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-14</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-15T01:53:02</td>\n",
" <td>24</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-15</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-16T20:13:20</td>\n",
" <td>50</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-16</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Quebec</th>\n",
" <td>Canada</td>\n",
" <td>2020-03-17T19:33:03</td>\n",
" <td>74</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2020-03-17</td>\n",
" <td>52.9399</td>\n",
" <td>-73.5491</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Country/Region Last Update Confirmed Deaths \\\n",
"Province/State \n",
"Quebec Canada 2020-03-09T08:43:03 3 0 \n",
"Quebec Canada 2020-03-10T00:53:03 4 0 \n",
"Quebec Canada 2020-03-11T23:13:06 8 0 \n",
"Quebec Canada 2020-03-12T01:53:03 9 0 \n",
"Quebec Canada 2020-03-11T20:00:00 17 0 \n",
"Quebec Canada 2020-03-13T13:33:03 17 0 \n",
"Quebec Canada 2020-03-15T01:53:02 24 0 \n",
"Quebec Canada 2020-03-16T20:13:20 50 0 \n",
"Quebec Canada 2020-03-17T19:33:03 74 0 \n",
"\n",
" Recovered date Latitude Longitude \n",
"Province/State \n",
"Quebec 0 2020-03-09 52.9399 -73.5491 \n",
"Quebec 0 2020-03-10 52.9399 -73.5491 \n",
"Quebec 0 2020-03-11 52.9399 -73.5491 \n",
"Quebec 0 2020-03-12 52.9399 -73.5491 \n",
"Quebec 0 2020-03-13 52.9399 -73.5491 \n",
"Quebec 0 2020-03-14 52.9399 -73.5491 \n",
"Quebec 0 2020-03-15 52.9399 -73.5491 \n",
"Quebec 0 2020-03-16 52.9399 -73.5491 \n",
"Quebec 0 2020-03-17 52.9399 -73.5491 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.set_index(\"Province/State\").loc[\"Quebec\"]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:mol]",
"language": "python",
"name": "conda-env-mol-py"
},
"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.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment