From 8de82f170c403c3852d3cd250500273ad075b5a6 Mon Sep 17 00:00:00 2001 From: Chandrasekhar Ramakrishnan <cramakri@ethz.ch> Date: Mon, 16 Mar 2020 19:37:33 +0000 Subject: [PATCH] renku update --with-siblings --- .../e7ec30e9211047128543d4862ff3beee.cwl | 66 +++ runs/Dashboard.run.ipynb | 470 +++++++++++++++--- 2 files changed, 468 insertions(+), 68 deletions(-) create mode 100644 .renku/workflow/e7ec30e9211047128543d4862ff3beee.cwl diff --git a/.renku/workflow/e7ec30e9211047128543d4862ff3beee.cwl b/.renku/workflow/e7ec30e9211047128543d4862ff3beee.cwl new file mode 100644 index 00000000..9b82e33c --- /dev/null +++ b/.renku/workflow/e7ec30e9211047128543d4862ff3beee.cwl @@ -0,0 +1,66 @@ +class: Workflow +cwlVersion: v1.0 +hints: [] +inputs: + input_1: + default: ts_folder + streamable: false + type: string + input_2: + default: + class: Directory + listing: [] + path: ../../data/covid-19_jhu-csse + streamable: false + type: Directory + input_3: + default: rates_folder + streamable: false + type: string + input_4: + default: + class: Directory + listing: [] + path: ../../data/covid-19_rates + streamable: false + type: Directory + input_5: + default: geodata_path + streamable: false + type: string + input_6: + default: + class: File + path: ../../data/geodata/geo_data.csv + streamable: false + type: File + input_7: + default: + class: File + path: ../../notebooks/Dashboard.ipynb + streamable: false + type: File + input_8: + default: runs/Dashboard.run.ipynb + streamable: false + type: string +outputs: + output_0: + outputSource: step_1/output_0 + streamable: false + type: File +requirements: [] +steps: + step_1: + in: + input_1: input_1 + input_2: input_2 + input_3: input_3 + input_4: input_4 + input_5: input_5 + input_6: input_6 + input_7: input_7 + input_8: input_8 + out: + - output_0 + run: 4cc7ffe9d5a045efb048ef2222a40ffa_papermill.cwl diff --git a/runs/Dashboard.run.ipynb b/runs/Dashboard.run.ipynb index cc8928fe..66497b89 100644 --- a/runs/Dashboard.run.ipynb +++ b/runs/Dashboard.run.ipynb @@ -5,10 +5,10 @@ "execution_count": 1, "metadata": { "papermill": { - "duration": 0.459578, - "end_time": "2020-03-15T18:37:34.869556", + "duration": 0.464711, + "end_time": "2020-03-16T19:37:31.538772", "exception": false, - "start_time": "2020-03-15T18:37:34.409978", + "start_time": "2020-03-16T19:37:31.074061", "status": "completed" }, "tags": [] @@ -16,6 +16,7 @@ "outputs": [], "source": [ "import pandas as pd\n", + "import numpy as np\n", "import os\n", "from IPython.display import display, HTML, Markdown\n", "import covid_19_dashboard as helper" @@ -26,10 +27,10 @@ "execution_count": 2, "metadata": { "papermill": { - "duration": 0.021643, - "end_time": "2020-03-15T18:37:34.909914", + "duration": 0.02108, + "end_time": "2020-03-16T19:37:31.579658", "exception": false, - "start_time": "2020-03-15T18:37:34.888271", + "start_time": "2020-03-16T19:37:31.558578", "status": "completed" }, "tags": [ @@ -50,10 +51,10 @@ "execution_count": 3, "metadata": { "papermill": { - "duration": 0.020476, - "end_time": "2020-03-15T18:37:34.939191", + "duration": 0.024374, + "end_time": "2020-03-16T19:37:31.614444", "exception": false, - "start_time": "2020-03-15T18:37:34.918715", + "start_time": "2020-03-16T19:37:31.590070", "status": "completed" }, "tags": [ @@ -63,11 +64,11 @@ "outputs": [], "source": [ "# Parameters\n", - "PAPERMILL_INPUT_PATH = \"/tmp/fer34kve/notebooks/Dashboard.ipynb\"\n", + "PAPERMILL_INPUT_PATH = \"/tmp/30edqohi/notebooks/Dashboard.ipynb\"\n", "PAPERMILL_OUTPUT_PATH = \"runs/Dashboard.run.ipynb\"\n", - "ts_folder = \"/tmp/fer34kve/data/covid-19_jhu-csse\"\n", - "rates_folder = \"/tmp/fer34kve/data/covid-19_rates\"\n", - "geodata_path = \"/tmp/fer34kve/data/geodata/geo_data.csv\"\n" + "ts_folder = \"/tmp/30edqohi/data/covid-19_jhu-csse\"\n", + "rates_folder = \"/tmp/30edqohi/data/covid-19_rates\"\n", + "geodata_path = \"/tmp/30edqohi/data/geodata/geo_data.csv\"\n" ] }, { @@ -75,10 +76,10 @@ "execution_count": 4, "metadata": { "papermill": { - "duration": 0.019696, - "end_time": "2020-03-15T18:37:34.967260", + "duration": 0.024105, + "end_time": "2020-03-16T19:37:31.660498", "exception": false, - "start_time": "2020-03-15T18:37:34.947564", + "start_time": "2020-03-16T19:37:31.636393", "status": "completed" }, "tags": [] @@ -93,10 +94,10 @@ "execution_count": 5, "metadata": { "papermill": { - "duration": 0.11357, - "end_time": "2020-03-15T18:37:35.089592", + "duration": 0.113797, + "end_time": "2020-03-16T19:37:31.785101", "exception": false, - "start_time": "2020-03-15T18:37:34.976022", + "start_time": "2020-03-16T19:37:31.671304", "status": "completed" }, "tags": [] @@ -115,10 +116,10 @@ "cell_type": "markdown", "metadata": { "papermill": { - "duration": 0.010515, - "end_time": "2020-03-15T18:37:35.119478", + "duration": 0.01115, + "end_time": "2020-03-16T19:37:31.817527", "exception": false, - "start_time": "2020-03-15T18:37:35.108963", + "start_time": "2020-03-16T19:37:31.806377", "status": "completed" }, "tags": [] @@ -136,10 +137,10 @@ "execution_count": 6, "metadata": { "papermill": { - "duration": 0.043214, - "end_time": "2020-03-15T18:37:35.170249", + "duration": 0.038028, + "end_time": "2020-03-16T19:37:31.864069", "exception": false, - "start_time": "2020-03-15T18:37:35.127035", + "start_time": "2020-03-16T19:37:31.826041", "status": "completed" }, "tags": [] @@ -167,10 +168,10 @@ "cell_type": "markdown", "metadata": { "papermill": { - "duration": 0.008951, - "end_time": "2020-03-15T18:37:35.196228", + "duration": 0.009257, + "end_time": "2020-03-16T19:37:31.887304", "exception": false, - "start_time": "2020-03-15T18:37:35.187277", + "start_time": "2020-03-16T19:37:31.878047", "status": "completed" }, "tags": [] @@ -184,10 +185,10 @@ "execution_count": 7, "metadata": { "papermill": { - "duration": 0.019124, - "end_time": "2020-03-15T18:37:35.222813", + "duration": 0.021899, + "end_time": "2020-03-16T19:37:31.919972", "exception": false, - "start_time": "2020-03-15T18:37:35.203689", + "start_time": "2020-03-16T19:37:31.898073", "status": "completed" }, "tags": [] @@ -202,10 +203,10 @@ "execution_count": 8, "metadata": { "papermill": { - "duration": 0.049232, - "end_time": "2020-03-15T18:37:35.282648", + "duration": 0.060741, + "end_time": "2020-03-16T19:37:31.991920", "exception": false, - "start_time": "2020-03-15T18:37:35.233416", + "start_time": "2020-03-16T19:37:31.931179", "status": "completed" }, "tags": [] @@ -220,10 +221,10 @@ "execution_count": 9, "metadata": { "papermill": { - "duration": 0.126646, - "end_time": "2020-03-15T18:37:35.429936", + "duration": 0.118059, + "end_time": "2020-03-16T19:37:32.130413", "exception": false, - "start_time": "2020-03-15T18:37:35.303290", + "start_time": "2020-03-16T19:37:32.012354", "status": "completed" }, "tags": [] @@ -233,10 +234,10 @@ "data": { "text/html": [ "\n", - "<div id=\"altair-viz-e60bad1540b84172a14811370b16a4b1\"></div>\n", + "<div id=\"altair-viz-2b27e1cd2c9846a580069280ecdc0349\"></div>\n", "<script type=\"text/javascript\">\n", " (function(spec, embedOpt){\n", - " const outputDiv = document.getElementById(\"altair-viz-e60bad1540b84172a14811370b16a4b1\");\n", + " const outputDiv = document.getElementById(\"altair-viz-2b27e1cd2c9846a580069280ecdc0349\");\n", " const paths = {\n", " \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", " \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", @@ -320,10 +321,10 @@ "execution_count": 10, "metadata": { "papermill": { - "duration": 0.097247, - "end_time": "2020-03-15T18:37:35.544984", + "duration": 0.095504, + "end_time": "2020-03-16T19:37:32.243454", "exception": false, - "start_time": "2020-03-15T18:37:35.447737", + "start_time": "2020-03-16T19:37:32.147950", "status": "completed" }, "tags": [] @@ -333,10 +334,10 @@ "data": { "text/html": [ "\n", - "<div id=\"altair-viz-59f2d4843002481eb23decfa32046c7c\"></div>\n", + "<div id=\"altair-viz-5f173dbdceb743a2b52b65dc60d945af\"></div>\n", "<script type=\"text/javascript\">\n", " (function(spec, embedOpt){\n", - " const outputDiv = document.getElementById(\"altair-viz-59f2d4843002481eb23decfa32046c7c\");\n", + " const outputDiv = document.getElementById(\"altair-viz-5f173dbdceb743a2b52b65dc60d945af\");\n", " const paths = {\n", " \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", " \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", @@ -436,10 +437,10 @@ "cell_type": "markdown", "metadata": { "papermill": { - "duration": 0.010252, - "end_time": "2020-03-15T18:37:35.572988", + "duration": 0.012367, + "end_time": "2020-03-16T19:37:32.277849", "exception": false, - "start_time": "2020-03-15T18:37:35.562736", + "start_time": "2020-03-16T19:37:32.265482", "status": "completed" }, "tags": [] @@ -453,17 +454,17 @@ "execution_count": 11, "metadata": { "papermill": { - "duration": 0.070855, - "end_time": "2020-03-15T18:37:35.653535", + "duration": 0.065808, + "end_time": "2020-03-16T19:37:32.355850", "exception": false, - "start_time": "2020-03-15T18:37:35.582680", + "start_time": "2020-03-16T19:37:32.290042", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ - "confirmed_rate_df = helper.growth_df(rates_frames_map, geodata_df, 'confirmed', countries_over_thresh)\n", + "confirmed_rate_df = helper.growth_df(rates_frames_map, geodata_df, 'confirmed', countries_over_thresh, 2)\n", "latest_confirmed_ser = confirmed_rate_df.set_index(\n", " ['Country/Region', 'Geo Region', 'Date']).drop(\n", " ['Longitude', 'Latitude'], axis=1).unstack().iloc[:,-1]\n", @@ -475,10 +476,10 @@ "execution_count": 12, "metadata": { "papermill": { - "duration": 0.123355, - "end_time": "2020-03-15T18:37:35.799231", + "duration": 0.195694, + "end_time": "2020-03-16T19:37:32.573880", "exception": false, - "start_time": "2020-03-15T18:37:35.675876", + "start_time": "2020-03-16T19:37:32.378186", "status": "completed" }, "tags": [] @@ -488,10 +489,10 @@ "data": { "text/html": [ "\n", - "<div id=\"altair-viz-07cbea5bc0ce418e826951bb4e106548\"></div>\n", + "<div id=\"altair-viz-3a0b72e3d9c441768d2569a59c7b7179\"></div>\n", "<script type=\"text/javascript\">\n", " (function(spec, embedOpt){\n", - " const outputDiv = document.getElementById(\"altair-viz-07cbea5bc0ce418e826951bb4e106548\");\n", + " const outputDiv = document.getElementById(\"altair-viz-3a0b72e3d9c441768d2569a59c7b7179\");\n", " const paths = {\n", " \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", " \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", @@ -539,13 +540,30 @@ "alt.Chart(...)" ] }, - "execution_count": 12, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "<p style=\"font-size: smaller\">Data Sources: \n", + " <a href=\"https://github.com/CSSEGISandData/COVID-19\">JHU CSSE</a>,\n", + " <a href=\"https://data.worldbank.org/indicator/SP.POP.TOTL\">World Bank</a>,\n", + " <a href=\"https://worldmap.harvard.edu/data/geonode:country_centroids_az8\">Harvard Worldmap</a>\n", + "</p>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "base = alt.Chart(confirmed_rate_df).properties(width=300, height=200, title=\"Countries with 2 or more cases per 100k\")\n", + "base = alt.Chart(confirmed_rate_df).properties(\n", + " width=300, height=200, title=\"Countries with 2 or more cases per 100k\")\n", "line = base.mark_line().encode(\n", " x='Date',\n", " y='Confirmed/100k',\n", @@ -553,7 +571,323 @@ " facet=alt.Facet('Geo Region:N', columns=1, sort=alt.SortArray(sort_order), title='Geographic Region'),\n", " tooltip=[\"Country/Region:N\", \"Date:T\", \"Confirmed/100k:Q\"]\n", ")\n", - "line" + "line\n", + "display(line)\n", + "display(HTML('''\n", + "<p style=\"font-size: smaller\">Data Sources: \n", + " <a href=\"https://github.com/CSSEGISandData/COVID-19\">JHU CSSE</a>,\n", + " <a href=\"https://data.worldbank.org/indicator/SP.POP.TOTL\">World Bank</a>,\n", + " <a href=\"https://worldmap.harvard.edu/data/geonode:country_centroids_az8\">Harvard Worldmap</a>\n", + "</p>'''))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "papermill": { + "duration": 0.195734, + "end_time": "2020-03-16T19:37:32.788325", + "exception": false, + "start_time": "2020-03-16T19:37:32.592591", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "def country_increase_df(c, df_nominal, growth_in_rate_df):\n", + " over_100 = df_nominal[df_nominal['Confirmed'] >= 100]\n", + " tdf = (over_100[['Date', 'Confirmed']] - over_100.iloc[0][['Date', 'Confirmed']]).reset_index()\n", + " tdfr = growth_in_rate_df[(growth_in_rate_df['Date'] >= over_100.iloc[0]['Date']) &\n", + " (growth_in_rate_df['Country/Region'] == c)].reset_index()\n", + " tdf['Confirmed/100k'] = tdfr['Confirmed/100k']\n", + " tdf['Country/Region'] = c\n", + " tdf['Days'] = (tdf['Date'] / np.timedelta64(1, 'D')).astype(int)\n", + " return tdf[['Country/Region', 'Days', 'Confirmed', 'Confirmed/100k']]\n", + "\n", + "\n", + "growth_in_rate_df = helper.growth_df(rates_frames_map, geodata_df, 'confirmed', countries_over_thresh, 0)\n", + "frame_map = {'confirmed': jhu_frames_map['confirmed'].groupby(level='Country/Region').sum()}\n", + "growth_in_value_df = helper.growth_df(frame_map, geodata_df, 'confirmed', countries_over_thresh, 1000)\n", + "growth_in_value_df = growth_in_value_df.rename({'Confirmed/100k':'Confirmed'}, axis=1)\n", + "increase_df = pd.concat([country_increase_df(c, df_nominal, growth_in_rate_df) for \n", + " c, df_nominal in growth_in_value_df.groupby('Country/Region')])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "papermill": { + "duration": 0.039725, + "end_time": "2020-03-16T19:37:32.857306", + "exception": false, + "start_time": "2020-03-16T19:37:32.817581", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "def facetted_growth_plot(df, variable, sort_order, ref_country, title):\n", + " base = alt.Chart(df).properties(\n", + " width=250, height=150)\n", + " line = base.mark_line().encode(\n", + " x='Days',\n", + " y=variable,\n", + " color='Country/Region',\n", + " tooltip=[\"Country/Region:N\", \"Days:Q\", f\"{variable}:Q\"]\n", + " )\n", + " label_loc = increase_df[increase_df['Country/Region'] == ref_country]['Days'].iloc[-2]\n", + " ref = base.mark_line(opacity=0.3).encode(\n", + " x='Days',\n", + " y=variable,\n", + " color=alt.ColorValue('steelblue'),\n", + " ).transform_filter(f\"datum['Country/Region'] == '{ref_country}'\")\n", + " ref += ref.mark_text().encode(text='Country/Region:N').transform_filter(f\"datum['Days'] == {label_loc}\")\n", + " charts = []\n", + " # make our small multiples\n", + " for country in sort_order:\n", + " smallm = line.transform_filter(f\"datum['Country/Region'] == '{country}'\").properties(\n", + " title=country)\n", + " smallm += ref\n", + " charts.append(smallm)\n", + "\n", + " # group the small multiples into 3 horizontal charts\n", + " groups = []\n", + " c = None\n", + " for i, chart in enumerate(charts):\n", + " if not i%3:\n", + " if c != None:\n", + " groups.append(c)\n", + " c = alt.hconcat()\n", + " c |= chart\n", + " # vertically combine the horizontal charts\n", + " chart = alt.vconcat(title=title)\n", + " for c in groups:\n", + " chart &= c\n", + " return chart" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "papermill": { + "duration": 0.221908, + "end_time": "2020-03-16T19:37:33.100602", + "exception": false, + "start_time": "2020-03-16T19:37:32.878694", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "<div id=\"altair-viz-77a66ffd991c4eec8be4b38715230cfb\"></div>\n", + "<script type=\"text/javascript\">\n", + " (function(spec, embedOpt){\n", + " const outputDiv = document.getElementById(\"altair-viz-77a66ffd991c4eec8be4b38715230cfb\");\n", + " const paths = {\n", + " \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", + " \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", + " \"vega-lite\": \"https://cdn.jsdelivr.net/npm//vega-lite@4.0.2?noext\",\n", + " \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n", + " };\n", + "\n", + " function loadScript(lib) {\n", + " return new Promise(function(resolve, reject) {\n", + " var s = document.createElement('script');\n", + " s.src = paths[lib];\n", + " s.async = true;\n", + " s.onload = () => resolve(paths[lib]);\n", + " s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n", + " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", + " });\n", + " }\n", + "\n", + " function showError(err) {\n", + " outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n", + " throw err;\n", + " }\n", + "\n", + " function displayChart(vegaEmbed) {\n", + " vegaEmbed(outputDiv, spec, embedOpt)\n", + " .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n", + " }\n", + "\n", + " if(typeof define === \"function\" && define.amd) {\n", + " requirejs.config({paths});\n", + " require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n", + " } else if (typeof vegaEmbed === \"function\") {\n", + " displayChart(vegaEmbed);\n", + " } else {\n", + " loadScript(\"vega\")\n", + " .then(() => loadScript(\"vega-lite\"))\n", + " .then(() => loadScript(\"vega-embed\"))\n", + " .catch(showError)\n", + " .then(() => displayChart(vegaEmbed));\n", + " }\n", + " })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"vconcat\": [{\"hconcat\": [{\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"Italy\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"Iran\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Iran'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"Korea, South\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Korea, South'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}]}, {\"hconcat\": [{\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"Spain\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Spain'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"Germany\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Germany'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"France\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'France'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}]}, {\"hconcat\": [{\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"US\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'US'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"Switzerland\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Switzerland'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"title\": \"United Kingdom\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'United Kingdom'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}]}], \"data\": {\"name\": \"data-b1d0adfba3e1d05d9378ddbfce7cf172\"}, \"title\": \"Growth of cases from case 100, compared to Italy\", \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.0.2.json\", \"datasets\": {\"data-b1d0adfba3e1d05d9378ddbfce7cf172\": [{\"Country/Region\": \"France\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.14928215288271898}, {\"Country/Region\": \"France\", \"Days\": 1, \"Confirmed\": 30, \"Confirmed/100k\": 0.19406679874753469}, {\"Country/Region\": \"France\", \"Days\": 2, \"Confirmed\": 91, \"Confirmed/100k\": 0.2851289120059933}, {\"Country/Region\": \"France\", \"Days\": 3, \"Confirmed\": 104, \"Confirmed/100k\": 0.30453559188074675}, {\"Country/Region\": \"France\", \"Days\": 4, \"Confirmed\": 188, \"Confirmed/100k\": 0.4299326003022307}, {\"Country/Region\": \"France\", \"Days\": 5, \"Confirmed\": 280, \"Confirmed/100k\": 0.5672721809543322}, {\"Country/Region\": \"France\", \"Days\": 6, \"Confirmed\": 556, \"Confirmed/100k\": 0.9792909229106364}, {\"Country/Region\": \"France\", \"Days\": 7, \"Confirmed\": 852, \"Confirmed/100k\": 1.4211660954434846}, {\"Country/Region\": \"France\", \"Days\": 8, \"Confirmed\": 1029, \"Confirmed/100k\": 1.6853955060458974}, {\"Country/Region\": \"France\", \"Days\": 9, \"Confirmed\": 1112, \"Confirmed/100k\": 1.8092996929385536}, {\"Country/Region\": \"France\", \"Days\": 10, \"Confirmed\": 1687, \"Confirmed/100k\": 2.667672072014188}, {\"Country/Region\": \"France\", \"Days\": 11, \"Confirmed\": 2184, \"Confirmed/100k\": 3.4096043718413016}, {\"Country/Region\": \"France\", \"Days\": 12, \"Confirmed\": 2184, \"Confirmed/100k\": 3.4096043718413016}, {\"Country/Region\": \"France\", \"Days\": 13, \"Confirmed\": 3567, \"Confirmed/100k\": 5.474176546209304}, {\"Country/Region\": \"France\", \"Days\": 14, \"Confirmed\": 4380, \"Confirmed/100k\": 6.687840449145809}, {\"Country/Region\": \"Germany\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.15676264021182154}, {\"Country/Region\": \"Germany\", \"Days\": 1, \"Confirmed\": 29, \"Confirmed/100k\": 0.19173276764368946}, {\"Country/Region\": \"Germany\", \"Days\": 2, \"Confirmed\": 66, \"Confirmed/100k\": 0.23634982678090016}, {\"Country/Region\": \"Germany\", \"Days\": 3, \"Confirmed\": 132, \"Confirmed/100k\": 0.3159370133499788}, {\"Country/Region\": \"Germany\", \"Days\": 4, \"Confirmed\": 352, \"Confirmed/100k\": 0.5812276352469076}, {\"Country/Region\": \"Germany\", \"Days\": 5, \"Confirmed\": 540, \"Confirmed/100k\": 0.8079305303224649}, {\"Country/Region\": \"Germany\", \"Days\": 6, \"Confirmed\": 669, \"Confirmed/100k\": 0.9634873040711186}, {\"Country/Region\": \"Germany\", \"Days\": 7, \"Confirmed\": 910, \"Confirmed/100k\": 1.2541011216945723}, {\"Country/Region\": \"Germany\", \"Days\": 8, \"Confirmed\": 1046, \"Confirmed/100k\": 1.4180989606854009}, {\"Country/Region\": \"Germany\", \"Days\": 9, \"Confirmed\": 1327, \"Confirmed/100k\": 1.7569474368355689}, {\"Country/Region\": \"Germany\", \"Days\": 10, \"Confirmed\": 1778, \"Confirmed/100k\": 2.300793211724273}, {\"Country/Region\": \"Germany\", \"Days\": 11, \"Confirmed\": 1948, \"Confirmed/100k\": 2.5057905104628087}, {\"Country/Region\": \"Germany\", \"Days\": 12, \"Confirmed\": 3545, \"Confirmed/100k\": 4.431559252141878}, {\"Country/Region\": \"Germany\", \"Days\": 13, \"Confirmed\": 4455, \"Confirmed/100k\": 5.528897733624627}, {\"Country/Region\": \"Iran\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.16992609156334193}, {\"Country/Region\": \"Iran\", \"Days\": 1, \"Confirmed\": 106, \"Confirmed/100k\": 0.2995100175037322}, {\"Country/Region\": \"Iran\", \"Days\": 2, \"Confirmed\": 249, \"Confirmed/100k\": 0.4743260685365228}, {\"Country/Region\": \"Iran\", \"Days\": 3, \"Confirmed\": 454, \"Confirmed/100k\": 0.724936491345768}, {\"Country/Region\": \"Iran\", \"Days\": 4, \"Confirmed\": 839, \"Confirmed/100k\": 1.1955950902802044}, {\"Country/Region\": \"Iran\", \"Days\": 5, \"Confirmed\": 1362, \"Confirmed/100k\": 1.83495729091062}, {\"Country/Region\": \"Iran\", \"Days\": 6, \"Confirmed\": 2197, \"Confirmed/100k\": 2.855736330158034}, {\"Country/Region\": \"Iran\", \"Days\": 7, \"Confirmed\": 2783, \"Confirmed/100k\": 3.5721153924322673}, {\"Country/Region\": \"Iran\", \"Days\": 8, \"Confirmed\": 3374, \"Confirmed/100k\": 4.29460690404331}, {\"Country/Region\": \"Iran\", \"Days\": 9, \"Confirmed\": 4608, \"Confirmed/100k\": 5.803159400368232}, {\"Country/Region\": \"Iran\", \"Days\": 10, \"Confirmed\": 5684, \"Confirmed/100k\": 7.118558497649927}, {\"Country/Region\": \"Iran\", \"Days\": 11, \"Confirmed\": 6427, \"Confirmed/100k\": 8.026868469100023}, {\"Country/Region\": \"Iran\", \"Days\": 12, \"Confirmed\": 7022, \"Confirmed/100k\": 8.754249940180514}, {\"Country/Region\": \"Iran\", \"Days\": 13, \"Confirmed\": 7903, \"Confirmed/100k\": 9.831263513326588}, {\"Country/Region\": \"Iran\", \"Days\": 14, \"Confirmed\": 8861, \"Confirmed/100k\": 11.002408806259547}, {\"Country/Region\": \"Iran\", \"Days\": 15, \"Confirmed\": 9936, \"Confirmed/100k\": 12.316585413673884}, {\"Country/Region\": \"Iran\", \"Days\": 16, \"Confirmed\": 11225, \"Confirmed/100k\": 13.892374852703725}, {\"Country/Region\": \"Iran\", \"Days\": 17, \"Confirmed\": 12590, \"Confirmed/100k\": 15.561073521653087}, {\"Country/Region\": \"Italy\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.2564896727411861}, {\"Country/Region\": \"Italy\", \"Days\": 1, \"Confirmed\": 74, \"Confirmed/100k\": 0.3789428068240749}, {\"Country/Region\": \"Italy\", \"Days\": 2, \"Confirmed\": 167, \"Confirmed/100k\": 0.5328366104687865}, {\"Country/Region\": \"Italy\", \"Days\": 3, \"Confirmed\": 298, \"Confirmed/100k\": 0.7496117532371437}, {\"Country/Region\": \"Italy\", \"Days\": 4, \"Confirmed\": 500, \"Confirmed/100k\": 1.0838757138417865}, {\"Country/Region\": \"Italy\", \"Days\": 5, \"Confirmed\": 733, \"Confirmed/100k\": 1.4694376089946661}, {\"Country/Region\": \"Italy\", \"Days\": 6, \"Confirmed\": 973, \"Confirmed/100k\": 1.8665829087229542}, {\"Country/Region\": \"Italy\", \"Days\": 7, \"Confirmed\": 1539, \"Confirmed/100k\": 2.803183907248833}, {\"Country/Region\": \"Italy\", \"Days\": 8, \"Confirmed\": 1881, \"Confirmed/100k\": 3.369115959361644}, {\"Country/Region\": \"Italy\", \"Days\": 9, \"Confirmed\": 2347, \"Confirmed/100k\": 4.140239749667403}, {\"Country/Region\": \"Italy\", \"Days\": 10, \"Confirmed\": 2934, \"Confirmed/100k\": 5.111590961919508}, {\"Country/Region\": \"Italy\", \"Days\": 11, \"Confirmed\": 3703, \"Confirmed/100k\": 6.384110693132231}, {\"Country/Region\": \"Italy\", \"Days\": 12, \"Confirmed\": 4481, \"Confirmed/100k\": 7.6715233730847645}, {\"Country/Region\": \"Italy\", \"Days\": 13, \"Confirmed\": 5728, \"Confirmed/100k\": 9.735024159589663}, {\"Country/Region\": \"Italy\", \"Days\": 14, \"Confirmed\": 7220, \"Confirmed/100k\": 12.203944106233852}, {\"Country/Region\": \"Italy\", \"Days\": 15, \"Confirmed\": 9017, \"Confirmed/100k\": 15.17756953794941}, {\"Country/Region\": \"Italy\", \"Days\": 16, \"Confirmed\": 9994, \"Confirmed/100k\": 16.794281862259982}, {\"Country/Region\": \"Italy\", \"Days\": 17, \"Confirmed\": 12307, \"Confirmed/100k\": 20.62176968839136}, {\"Country/Region\": \"Italy\", \"Days\": 18, \"Confirmed\": 12307, \"Confirmed/100k\": 20.62176968839136}, {\"Country/Region\": \"Italy\", \"Days\": 19, \"Confirmed\": 17505, \"Confirmed/100k\": 29.22327497167319}, {\"Country/Region\": \"Italy\", \"Days\": 20, \"Confirmed\": 21002, \"Confirmed/100k\": 35.0100129431308}, {\"Country/Region\": \"Korea, South\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.20141277115000653}, {\"Country/Region\": \"Korea, South\", \"Days\": 1, \"Confirmed\": 100, \"Confirmed/100k\": 0.39507889725578205}, {\"Country/Region\": \"Korea, South\", \"Days\": 2, \"Confirmed\": 329, \"Confirmed/100k\": 0.8385743260380079}, {\"Country/Region\": \"Korea, South\", \"Days\": 3, \"Confirmed\": 498, \"Confirmed/100k\": 1.1658700791567684}, {\"Country/Region\": \"Korea, South\", \"Days\": 4, \"Confirmed\": 729, \"Confirmed/100k\": 1.6132388304611098}, {\"Country/Region\": \"Korea, South\", \"Days\": 5, \"Confirmed\": 873, \"Confirmed/100k\": 1.8921180520534264}, {\"Country/Region\": \"Korea, South\", \"Days\": 6, \"Confirmed\": 1157, \"Confirmed/100k\": 2.4421298501938287}, {\"Country/Region\": \"Korea, South\", \"Days\": 7, \"Confirmed\": 1662, \"Confirmed/100k\": 3.420143787027995}, {\"Country/Region\": \"Korea, South\", \"Days\": 8, \"Confirmed\": 2233, \"Confirmed/100k\": 4.525977367091973}, {\"Country/Region\": \"Korea, South\", \"Days\": 9, \"Confirmed\": 3046, \"Confirmed/100k\": 6.100482972331928}, {\"Country/Region\": \"Korea, South\", \"Days\": 10, \"Confirmed\": 3632, \"Confirmed/100k\": 7.235366471311772}, {\"Country/Region\": \"Korea, South\", \"Days\": 11, \"Confirmed\": 4231, \"Confirmed/100k\": 8.395426566685366}, {\"Country/Region\": \"Korea, South\", \"Days\": 12, \"Confirmed\": 5082, \"Confirmed/100k\": 10.043525299845516}, {\"Country/Region\": \"Korea, South\", \"Days\": 13, \"Confirmed\": 5517, \"Confirmed/100k\": 10.885972948405641}, {\"Country/Region\": \"Korea, South\", \"Days\": 14, \"Confirmed\": 5984, \"Confirmed/100k\": 11.790393757319613}, {\"Country/Region\": \"Korea, South\", \"Days\": 15, \"Confirmed\": 6489, \"Confirmed/100k\": 12.768407694153776}, {\"Country/Region\": \"Korea, South\", \"Days\": 16, \"Confirmed\": 6937, \"Confirmed/100k\": 13.636031939107651}, {\"Country/Region\": \"Korea, South\", \"Days\": 17, \"Confirmed\": 7210, \"Confirmed/100k\": 14.16474046337642}, {\"Country/Region\": \"Korea, South\", \"Days\": 18, \"Confirmed\": 7374, \"Confirmed/100k\": 14.48235291018989}, {\"Country/Region\": \"Korea, South\", \"Days\": 19, \"Confirmed\": 7409, \"Confirmed/100k\": 14.550136054326911}, {\"Country/Region\": \"Korea, South\", \"Days\": 20, \"Confirmed\": 7651, \"Confirmed/100k\": 15.01880807950289}, {\"Country/Region\": \"Korea, South\", \"Days\": 21, \"Confirmed\": 7765, \"Confirmed/100k\": 15.239587463263474}, {\"Country/Region\": \"Korea, South\", \"Days\": 22, \"Confirmed\": 7875, \"Confirmed/100k\": 15.452620201979823}, {\"Country/Region\": \"Korea, South\", \"Days\": 23, \"Confirmed\": 7982, \"Confirmed/100k\": 15.659842956913007}, {\"Country/Region\": \"Norway\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 2.0322388347293057}, {\"Country/Region\": \"Norway\", \"Days\": 1, \"Confirmed\": 39, \"Confirmed/100k\": 2.7661028583815552}, {\"Country/Region\": \"Norway\", \"Days\": 2, \"Confirmed\": 68, \"Confirmed/100k\": 3.3117966195588684}, {\"Country/Region\": \"Norway\", \"Days\": 3, \"Confirmed\": 97, \"Confirmed/100k\": 3.8574903807361824}, {\"Country/Region\": \"Norway\", \"Days\": 4, \"Confirmed\": 292, \"Confirmed/100k\": 7.526810498997428}, {\"Country/Region\": \"Norway\", \"Days\": 5, \"Confirmed\": 490, \"Confirmed/100k\": 11.252581696001155}, {\"Country/Region\": \"Norway\", \"Days\": 6, \"Confirmed\": 594, \"Confirmed/100k\": 13.209552425740487}, {\"Country/Region\": \"Norway\", \"Days\": 7, \"Confirmed\": 888, \"Confirmed/100k\": 18.741758142503603}, {\"Country/Region\": \"Norway\", \"Days\": 8, \"Confirmed\": 982, \"Confirmed/100k\": 20.510558609767997}, {\"Country/Region\": \"Spain\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.25682870610404146}, {\"Country/Region\": \"Spain\", \"Days\": 1, \"Confirmed\": 45, \"Confirmed/100k\": 0.353139470893057}, {\"Country/Region\": \"Spain\", \"Days\": 2, \"Confirmed\": 102, \"Confirmed/100k\": 0.4751331062924767}, {\"Country/Region\": \"Spain\", \"Days\": 3, \"Confirmed\": 139, \"Confirmed/100k\": 0.5543219573412228}, {\"Country/Region\": \"Spain\", \"Days\": 4, \"Confirmed\": 280, \"Confirmed/100k\": 0.8560956870134715}, {\"Country/Region\": \"Spain\", \"Days\": 5, \"Confirmed\": 380, \"Confirmed/100k\": 1.0701196087668394}, {\"Country/Region\": \"Spain\", \"Days\": 6, \"Confirmed\": 553, \"Confirmed/100k\": 1.4403809934001657}, {\"Country/Region\": \"Spain\", \"Days\": 7, \"Confirmed\": 953, \"Confirmed/100k\": 2.2964766804136367}, {\"Country/Region\": \"Spain\", \"Days\": 8, \"Confirmed\": 1575, \"Confirmed/100k\": 3.6277054737195855}, {\"Country/Region\": \"Spain\", \"Days\": 9, \"Confirmed\": 2157, \"Confirmed/100k\": 4.873324698324187}, {\"Country/Region\": \"Spain\", \"Days\": 10, \"Confirmed\": 2157, \"Confirmed/100k\": 4.873324698324187}, {\"Country/Region\": \"Spain\", \"Days\": 11, \"Confirmed\": 5112, \"Confirmed/100k\": 11.197731586136207}, {\"Country/Region\": \"Spain\", \"Days\": 12, \"Confirmed\": 6271, \"Confirmed/100k\": 13.678268839257742}, {\"Country/Region\": \"Switzerland\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 1.3385712958884843}, {\"Country/Region\": \"Switzerland\", \"Days\": 1, \"Confirmed\": 100, \"Confirmed/100k\": 2.5127566431590846}, {\"Country/Region\": \"Switzerland\", \"Days\": 2, \"Confirmed\": 154, \"Confirmed/100k\": 3.1468167306852086}, {\"Country/Region\": \"Switzerland\", \"Days\": 3, \"Confirmed\": 223, \"Confirmed/100k\": 3.957004620301923}, {\"Country/Region\": \"Switzerland\", \"Days\": 4, \"Confirmed\": 260, \"Confirmed/100k\": 4.391453198792045}, {\"Country/Region\": \"Switzerland\", \"Days\": 5, \"Confirmed\": 377, \"Confirmed/100k\": 5.7652500550986465}, {\"Country/Region\": \"Switzerland\", \"Days\": 6, \"Confirmed\": 538, \"Confirmed/100k\": 7.655688464204314}, {\"Country/Region\": \"Switzerland\", \"Days\": 7, \"Confirmed\": 538, \"Confirmed/100k\": 7.655688464204314}, {\"Country/Region\": \"Switzerland\", \"Days\": 8, \"Confirmed\": 1025, \"Confirmed/100k\": 13.373971105412135}, {\"Country/Region\": \"Switzerland\", \"Days\": 9, \"Confirmed\": 1245, \"Confirmed/100k\": 15.957178869407455}, {\"Country/Region\": \"US\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.03606715942271932}, {\"Country/Region\": \"US\", \"Days\": 1, \"Confirmed\": 31, \"Confirmed/100k\": 0.04554243011851846}, {\"Country/Region\": \"US\", \"Days\": 2, \"Confirmed\": 99, \"Confirmed/100k\": 0.06632689487059401}, {\"Country/Region\": \"US\", \"Days\": 3, \"Confirmed\": 144, \"Confirmed/100k\": 0.0800813200741734}, {\"Country/Region\": \"US\", \"Days\": 4, \"Confirmed\": 284, \"Confirmed/100k\": 0.122872865151976}, {\"Country/Region\": \"US\", \"Days\": 5, \"Confirmed\": 400, \"Confirmed/100k\": 0.15832871678786953}, {\"Country/Region\": \"US\", \"Days\": 6, \"Confirmed\": 465, \"Confirmed/100k\": 0.17819621985970646}, {\"Country/Region\": \"US\", \"Days\": 7, \"Confirmed\": 841, \"Confirmed/100k\": 0.2931220837829477}, {\"Country/Region\": \"US\", \"Days\": 8, \"Confirmed\": 1163, \"Confirmed/100k\": 0.3915426374618936}, {\"Country/Region\": \"US\", \"Days\": 9, \"Confirmed\": 1545, \"Confirmed/100k\": 0.508302424745612}, {\"Country/Region\": \"US\", \"Days\": 10, \"Confirmed\": 2061, \"Confirmed/100k\": 0.6660198337466559}, {\"Country/Region\": \"US\", \"Days\": 11, \"Confirmed\": 2609, \"Confirmed/100k\": 0.8335181673369116}, {\"Country/Region\": \"United Kingdom\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.17446497270503022}, {\"Country/Region\": \"United Kingdom\", \"Days\": 1, \"Confirmed\": 48, \"Confirmed/100k\": 0.2466573752036634}, {\"Country/Region\": \"United Kingdom\", \"Days\": 2, \"Confirmed\": 91, \"Confirmed/100k\": 0.3113297357753557}, {\"Country/Region\": \"United Kingdom\", \"Days\": 3, \"Confirmed\": 158, \"Confirmed/100k\": 0.4120982975963645}, {\"Country/Region\": \"United Kingdom\", \"Days\": 4, \"Confirmed\": 206, \"Confirmed/100k\": 0.4842907000949977}, {\"Country/Region\": \"United Kingdom\", \"Days\": 5, \"Confirmed\": 268, \"Confirmed/100k\": 0.5775392199890655}, {\"Country/Region\": \"United Kingdom\", \"Days\": 6, \"Confirmed\": 343, \"Confirmed/100k\": 0.6903398488931799}, {\"Country/Region\": \"United Kingdom\", \"Days\": 7, \"Confirmed\": 343, \"Confirmed/100k\": 0.6903398488931799}, {\"Country/Region\": \"United Kingdom\", \"Days\": 8, \"Confirmed\": 685, \"Confirmed/100k\": 1.2047107166959414}, {\"Country/Region\": \"United Kingdom\", \"Days\": 9, \"Confirmed\": 1027, \"Confirmed/100k\": 1.719081584498703}]}}, {\"mode\": \"vega-lite\"});\n", + "</script>" + ], + "text/plain": [ + "alt.VConcatChart(...)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "<p style=\"font-size: smaller\">Data Sources: \n", + " <a href=\"https://github.com/CSSEGISandData/COVID-19\">JHU CSSE</a>,\n", + " <a href=\"https://data.worldbank.org/indicator/SP.POP.TOTL\">World Bank</a>,\n", + " <a href=\"https://worldmap.harvard.edu/data/geonode:country_centroids_az8\">Harvard Worldmap</a>\n", + "</p>\n", + "<p style=\"font-size: smaller\">Inspired by <a href=\"https://covid19dashboards.com/growth-analysis/\">Thomas Wiecki</a>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sort_order = growth_in_value_df.groupby(\n", + " 'Country/Region').max().sort_values(\n", + " 'Confirmed', ascending=False).index.tolist()\n", + "# Exclude China in this plot because its numbers are far greater then everywhere else\n", + "sort_order = [o for o in sort_order if o != 'China']\n", + "chart = facetted_growth_plot(increase_df[increase_df['Country/Region'] != 'China'], \n", + " 'Confirmed',\n", + " sort_order,\n", + " 'Italy',\n", + " \"Growth of cases from case 100, compared to Italy\")\n", + "display(chart)\n", + "display(HTML('''\n", + "<p style=\"font-size: smaller\">Data Sources: \n", + " <a href=\"https://github.com/CSSEGISandData/COVID-19\">JHU CSSE</a>,\n", + " <a href=\"https://data.worldbank.org/indicator/SP.POP.TOTL\">World Bank</a>,\n", + " <a href=\"https://worldmap.harvard.edu/data/geonode:country_centroids_az8\">Harvard Worldmap</a>\n", + "</p>\n", + "<p style=\"font-size: smaller\">Inspired by <a href=\"https://covid19dashboards.com/growth-analysis/\">Thomas Wiecki</a>'''))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "papermill": { + "duration": 0.216052, + "end_time": "2020-03-16T19:37:33.346433", + "exception": false, + "start_time": "2020-03-16T19:37:33.130381", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "<div id=\"altair-viz-f4d65d54885e447cb84333868bf82c33\"></div>\n", + "<script type=\"text/javascript\">\n", + " (function(spec, embedOpt){\n", + " const outputDiv = document.getElementById(\"altair-viz-f4d65d54885e447cb84333868bf82c33\");\n", + " const paths = {\n", + " \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", + " \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", + " \"vega-lite\": \"https://cdn.jsdelivr.net/npm//vega-lite@4.0.2?noext\",\n", + " \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n", + " };\n", + "\n", + " function loadScript(lib) {\n", + " return new Promise(function(resolve, reject) {\n", + " var s = document.createElement('script');\n", + " s.src = paths[lib];\n", + " s.async = true;\n", + " s.onload = () => resolve(paths[lib]);\n", + " s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n", + " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", + " });\n", + " }\n", + "\n", + " function showError(err) {\n", + " outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n", + " throw err;\n", + " }\n", + "\n", + " function displayChart(vegaEmbed) {\n", + " vegaEmbed(outputDiv, spec, embedOpt)\n", + " .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n", + " }\n", + "\n", + " if(typeof define === \"function\" && define.amd) {\n", + " requirejs.config({paths});\n", + " require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n", + " } else if (typeof vegaEmbed === \"function\") {\n", + " displayChart(vegaEmbed);\n", + " } else {\n", + " loadScript(\"vega\")\n", + " .then(() => loadScript(\"vega-lite\"))\n", + " .then(() => loadScript(\"vega-embed\"))\n", + " .catch(showError)\n", + " .then(() => displayChart(vegaEmbed));\n", + " }\n", + " })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"vconcat\": [{\"hconcat\": [{\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"China\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'China'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"Italy\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"Iran\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Iran'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}]}, {\"hconcat\": [{\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"Korea, South\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Korea, South'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"Spain\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Spain'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"Germany\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Germany'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}]}, {\"hconcat\": [{\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"France\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'France'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"US\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'US'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}, {\"layer\": [{\"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"tooltip\": [{\"type\": \"nominal\", \"field\": \"Country/Region\"}, {\"type\": \"quantitative\", \"field\": \"Days\"}, {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}], \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"title\": \"Switzerland\", \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Switzerland'\"}], \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"opacity\": 0.3}, \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}], \"width\": 250}, {\"mark\": \"text\", \"encoding\": {\"color\": {\"value\": \"steelblue\"}, \"text\": {\"type\": \"nominal\", \"field\": \"Country/Region\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Days\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Confirmed/100k\"}}, \"height\": 150, \"transform\": [{\"filter\": \"datum['Country/Region'] == 'Italy'\"}, {\"filter\": \"datum['Days'] == 19\"}], \"width\": 250}]}]}]}], \"data\": {\"name\": \"data-d40a924abb25fe009a562fdd1ec32ed4\"}, \"title\": \"Growth of cases/100k from case 100, compared to Italy\", \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.0.2.json\", \"datasets\": {\"data-d40a924abb25fe009a562fdd1ec32ed4\": [{\"Country/Region\": \"China\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.0393471814350233}, {\"Country/Region\": \"China\", \"Days\": 1, \"Confirmed\": 95, \"Confirmed/100k\": 0.04616831690277369}, {\"Country/Region\": \"China\", \"Days\": 2, \"Confirmed\": 372, \"Confirmed/100k\": 0.06605731189821429}, {\"Country/Region\": \"China\", \"Days\": 3, \"Confirmed\": 858, \"Confirmed/100k\": 0.10095280492270577}, {\"Country/Region\": \"China\", \"Days\": 4, \"Confirmed\": 1527, \"Confirmed/100k\": 0.14898795890086378}, {\"Country/Region\": \"China\", \"Days\": 5, \"Confirmed\": 2329, \"Confirmed/100k\": 0.2065727025338723}, {\"Country/Region\": \"China\", \"Days\": 6, \"Confirmed\": 4961, \"Confirmed/100k\": 0.3955540557035463}, {\"Country/Region\": \"China\", \"Days\": 7, \"Confirmed\": 5539, \"Confirmed/100k\": 0.4370552799178592}, {\"Country/Region\": \"China\", \"Days\": 8, \"Confirmed\": 7593, \"Confirmed/100k\": 0.5845354088732202}, {\"Country/Region\": \"China\", \"Days\": 9, \"Confirmed\": 9254, \"Confirmed/100k\": 0.7037975774198876}, {\"Country/Region\": \"China\", \"Days\": 10, \"Confirmed\": 11343, \"Confirmed/100k\": 0.8537907562844199}, {\"Country/Region\": \"China\", \"Days\": 11, \"Confirmed\": 16082, \"Confirmed/100k\": 1.1940577139862}, {\"Country/Region\": \"China\", \"Days\": 12, \"Confirmed\": 19168, \"Confirmed/100k\": 1.415636914549123}, {\"Country/Region\": \"China\", \"Days\": 13, \"Confirmed\": 23159, \"Confirmed/100k\": 1.7021964056206158}, {\"Country/Region\": \"China\", \"Days\": 14, \"Confirmed\": 26892, \"Confirmed/100k\": 1.970231128790218}, {\"Country/Region\": \"China\", \"Days\": 15, \"Confirmed\": 30039, \"Confirmed/100k\": 2.1961902163376963}, {\"Country/Region\": \"China\", \"Days\": 16, \"Confirmed\": 33562, \"Confirmed/100k\": 2.4491466400522715}, {\"Country/Region\": \"China\", \"Days\": 17, \"Confirmed\": 36266, \"Confirmed/100k\": 2.6432976958922403}, {\"Country/Region\": \"China\", \"Days\": 18, \"Confirmed\": 39281, \"Confirmed/100k\": 2.8597789952108448}, {\"Country/Region\": \"China\", \"Days\": 19, \"Confirmed\": 41806, \"Confirmed/100k\": 3.0410775958010525}, {\"Country/Region\": \"China\", \"Days\": 20, \"Confirmed\": 43838, \"Confirmed/100k\": 3.1869780933849348}, {\"Country/Region\": \"China\", \"Days\": 21, \"Confirmed\": 44211, \"Confirmed/100k\": 3.213760025274102}, {\"Country/Region\": \"China\", \"Days\": 22, \"Confirmed\": 59347, \"Confirmed/100k\": 4.300546408851679}, {\"Country/Region\": \"China\", \"Days\": 23, \"Confirmed\": 65810, \"Confirmed/100k\": 4.764599024936636}, {\"Country/Region\": \"China\", \"Days\": 24, \"Confirmed\": 67865, \"Confirmed/100k\": 4.912150955317973}, {\"Country/Region\": \"China\", \"Days\": 25, \"Confirmed\": 69965, \"Confirmed/100k\": 5.062933949868244}, {\"Country/Region\": \"China\", \"Days\": 26, \"Confirmed\": 71886, \"Confirmed/100k\": 5.2008644891687545}, {\"Country/Region\": \"China\", \"Days\": 27, \"Confirmed\": 73663, \"Confirmed/100k\": 5.328455623128675}, {\"Country/Region\": \"China\", \"Days\": 28, \"Confirmed\": 74071, \"Confirmed/100k\": 5.357750604927015}, {\"Country/Region\": \"China\", \"Days\": 29, \"Confirmed\": 74529, \"Confirmed/100k\": 5.390635658024168}, {\"Country/Region\": \"China\", \"Days\": 30, \"Confirmed\": 75002, \"Confirmed/100k\": 5.424597732510967}, {\"Country/Region\": \"China\", \"Days\": 31, \"Confirmed\": 76453, \"Confirmed/100k\": 5.528781601602608}, {\"Country/Region\": \"China\", \"Days\": 32, \"Confirmed\": 76474, \"Confirmed/100k\": 5.530289431548112}, {\"Country/Region\": \"China\", \"Days\": 33, \"Confirmed\": 76693, \"Confirmed/100k\": 5.5460139438369245}, {\"Country/Region\": \"China\", \"Days\": 34, \"Confirmed\": 77206, \"Confirmed/100k\": 5.582848075362778}, {\"Country/Region\": \"China\", \"Days\": 35, \"Confirmed\": 77618, \"Confirmed/100k\": 5.612430262865021}, {\"Country/Region\": \"China\", \"Days\": 36, \"Confirmed\": 78052, \"Confirmed/100k\": 5.643592081738743}, {\"Country/Region\": \"China\", \"Days\": 37, \"Confirmed\": 78380, \"Confirmed/100k\": 5.6671429494589765}, {\"Country/Region\": \"China\", \"Days\": 38, \"Confirmed\": 78808, \"Confirmed/100k\": 5.6978739597768415}, {\"Country/Region\": \"China\", \"Days\": 39, \"Confirmed\": 79384, \"Confirmed/100k\": 5.739231581139201}, {\"Country/Region\": \"China\", \"Days\": 40, \"Confirmed\": 79588, \"Confirmed/100k\": 5.75387907203837}, {\"Country/Region\": \"China\", \"Days\": 41, \"Confirmed\": 79713, \"Confirmed/100k\": 5.762854250285411}, {\"Country/Region\": \"China\", \"Days\": 42, \"Confirmed\": 79838, \"Confirmed/100k\": 5.771829428532452}, {\"Country/Region\": \"China\", \"Days\": 43, \"Confirmed\": 79989, \"Confirmed/100k\": 5.782671443854875}, {\"Country/Region\": \"China\", \"Days\": 44, \"Confirmed\": 80142, \"Confirmed/100k\": 5.7936570620292525}, {\"Country/Region\": \"China\", \"Days\": 45, \"Confirmed\": 80222, \"Confirmed/100k\": 5.799401176107358}, {\"Country/Region\": \"China\", \"Days\": 46, \"Confirmed\": 80275, \"Confirmed/100k\": 5.803206651684103}, {\"Country/Region\": \"China\", \"Days\": 47, \"Confirmed\": 80312, \"Confirmed/100k\": 5.805863304445228}, {\"Country/Region\": \"China\", \"Days\": 48, \"Confirmed\": 80339, \"Confirmed/100k\": 5.807801942946588}, {\"Country/Region\": \"China\", \"Days\": 49, \"Confirmed\": 80373, \"Confirmed/100k\": 5.810243191429782}, {\"Country/Region\": \"China\", \"Days\": 50, \"Confirmed\": 80384, \"Confirmed/100k\": 5.8110330071155225}, {\"Country/Region\": \"China\", \"Days\": 51, \"Confirmed\": 80397, \"Confirmed/100k\": 5.811966425653213}, {\"Country/Region\": \"China\", \"Days\": 52, \"Confirmed\": 80429, \"Confirmed/100k\": 5.814264071284455}, {\"Country/Region\": \"France\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.14928215288271898}, {\"Country/Region\": \"France\", \"Days\": 1, \"Confirmed\": 30, \"Confirmed/100k\": 0.19406679874753469}, {\"Country/Region\": \"France\", \"Days\": 2, \"Confirmed\": 91, \"Confirmed/100k\": 0.2851289120059933}, {\"Country/Region\": \"France\", \"Days\": 3, \"Confirmed\": 104, \"Confirmed/100k\": 0.30453559188074675}, {\"Country/Region\": \"France\", \"Days\": 4, \"Confirmed\": 188, \"Confirmed/100k\": 0.4299326003022307}, {\"Country/Region\": \"France\", \"Days\": 5, \"Confirmed\": 280, \"Confirmed/100k\": 0.5672721809543322}, {\"Country/Region\": \"France\", \"Days\": 6, \"Confirmed\": 556, \"Confirmed/100k\": 0.9792909229106364}, {\"Country/Region\": \"France\", \"Days\": 7, \"Confirmed\": 852, \"Confirmed/100k\": 1.4211660954434846}, {\"Country/Region\": \"France\", \"Days\": 8, \"Confirmed\": 1029, \"Confirmed/100k\": 1.6853955060458974}, {\"Country/Region\": \"France\", \"Days\": 9, \"Confirmed\": 1112, \"Confirmed/100k\": 1.8092996929385536}, {\"Country/Region\": \"France\", \"Days\": 10, \"Confirmed\": 1687, \"Confirmed/100k\": 2.667672072014188}, {\"Country/Region\": \"France\", \"Days\": 11, \"Confirmed\": 2184, \"Confirmed/100k\": 3.4096043718413016}, {\"Country/Region\": \"France\", \"Days\": 12, \"Confirmed\": 2184, \"Confirmed/100k\": 3.4096043718413016}, {\"Country/Region\": \"France\", \"Days\": 13, \"Confirmed\": 3567, \"Confirmed/100k\": 5.474176546209304}, {\"Country/Region\": \"France\", \"Days\": 14, \"Confirmed\": 4380, \"Confirmed/100k\": 6.687840449145809}, {\"Country/Region\": \"Germany\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.15676264021182154}, {\"Country/Region\": \"Germany\", \"Days\": 1, \"Confirmed\": 29, \"Confirmed/100k\": 0.19173276764368946}, {\"Country/Region\": \"Germany\", \"Days\": 2, \"Confirmed\": 66, \"Confirmed/100k\": 0.23634982678090016}, {\"Country/Region\": \"Germany\", \"Days\": 3, \"Confirmed\": 132, \"Confirmed/100k\": 0.3159370133499788}, {\"Country/Region\": \"Germany\", \"Days\": 4, \"Confirmed\": 352, \"Confirmed/100k\": 0.5812276352469076}, {\"Country/Region\": \"Germany\", \"Days\": 5, \"Confirmed\": 540, \"Confirmed/100k\": 0.8079305303224649}, {\"Country/Region\": \"Germany\", \"Days\": 6, \"Confirmed\": 669, \"Confirmed/100k\": 0.9634873040711186}, {\"Country/Region\": \"Germany\", \"Days\": 7, \"Confirmed\": 910, \"Confirmed/100k\": 1.2541011216945723}, {\"Country/Region\": \"Germany\", \"Days\": 8, \"Confirmed\": 1046, \"Confirmed/100k\": 1.4180989606854009}, {\"Country/Region\": \"Germany\", \"Days\": 9, \"Confirmed\": 1327, \"Confirmed/100k\": 1.7569474368355689}, {\"Country/Region\": \"Germany\", \"Days\": 10, \"Confirmed\": 1778, \"Confirmed/100k\": 2.300793211724273}, {\"Country/Region\": \"Germany\", \"Days\": 11, \"Confirmed\": 1948, \"Confirmed/100k\": 2.5057905104628087}, {\"Country/Region\": \"Germany\", \"Days\": 12, \"Confirmed\": 3545, \"Confirmed/100k\": 4.431559252141878}, {\"Country/Region\": \"Germany\", \"Days\": 13, \"Confirmed\": 4455, \"Confirmed/100k\": 5.528897733624627}, {\"Country/Region\": \"Iran\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.16992609156334193}, {\"Country/Region\": \"Iran\", \"Days\": 1, \"Confirmed\": 106, \"Confirmed/100k\": 0.2995100175037322}, {\"Country/Region\": \"Iran\", \"Days\": 2, \"Confirmed\": 249, \"Confirmed/100k\": 0.4743260685365228}, {\"Country/Region\": \"Iran\", \"Days\": 3, \"Confirmed\": 454, \"Confirmed/100k\": 0.724936491345768}, {\"Country/Region\": \"Iran\", \"Days\": 4, \"Confirmed\": 839, \"Confirmed/100k\": 1.1955950902802044}, {\"Country/Region\": \"Iran\", \"Days\": 5, \"Confirmed\": 1362, \"Confirmed/100k\": 1.83495729091062}, {\"Country/Region\": \"Iran\", \"Days\": 6, \"Confirmed\": 2197, \"Confirmed/100k\": 2.855736330158034}, {\"Country/Region\": \"Iran\", \"Days\": 7, \"Confirmed\": 2783, \"Confirmed/100k\": 3.5721153924322673}, {\"Country/Region\": \"Iran\", \"Days\": 8, \"Confirmed\": 3374, \"Confirmed/100k\": 4.29460690404331}, {\"Country/Region\": \"Iran\", \"Days\": 9, \"Confirmed\": 4608, \"Confirmed/100k\": 5.803159400368232}, {\"Country/Region\": \"Iran\", \"Days\": 10, \"Confirmed\": 5684, \"Confirmed/100k\": 7.118558497649927}, {\"Country/Region\": \"Iran\", \"Days\": 11, \"Confirmed\": 6427, \"Confirmed/100k\": 8.026868469100023}, {\"Country/Region\": \"Iran\", \"Days\": 12, \"Confirmed\": 7022, \"Confirmed/100k\": 8.754249940180514}, {\"Country/Region\": \"Iran\", \"Days\": 13, \"Confirmed\": 7903, \"Confirmed/100k\": 9.831263513326588}, {\"Country/Region\": \"Iran\", \"Days\": 14, \"Confirmed\": 8861, \"Confirmed/100k\": 11.002408806259547}, {\"Country/Region\": \"Iran\", \"Days\": 15, \"Confirmed\": 9936, \"Confirmed/100k\": 12.316585413673884}, {\"Country/Region\": \"Iran\", \"Days\": 16, \"Confirmed\": 11225, \"Confirmed/100k\": 13.892374852703725}, {\"Country/Region\": \"Iran\", \"Days\": 17, \"Confirmed\": 12590, \"Confirmed/100k\": 15.561073521653087}, {\"Country/Region\": \"Italy\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.2564896727411861}, {\"Country/Region\": \"Italy\", \"Days\": 1, \"Confirmed\": 74, \"Confirmed/100k\": 0.3789428068240749}, {\"Country/Region\": \"Italy\", \"Days\": 2, \"Confirmed\": 167, \"Confirmed/100k\": 0.5328366104687865}, {\"Country/Region\": \"Italy\", \"Days\": 3, \"Confirmed\": 298, \"Confirmed/100k\": 0.7496117532371437}, {\"Country/Region\": \"Italy\", \"Days\": 4, \"Confirmed\": 500, \"Confirmed/100k\": 1.0838757138417865}, {\"Country/Region\": \"Italy\", \"Days\": 5, \"Confirmed\": 733, \"Confirmed/100k\": 1.4694376089946661}, {\"Country/Region\": \"Italy\", \"Days\": 6, \"Confirmed\": 973, \"Confirmed/100k\": 1.8665829087229542}, {\"Country/Region\": \"Italy\", \"Days\": 7, \"Confirmed\": 1539, \"Confirmed/100k\": 2.803183907248833}, {\"Country/Region\": \"Italy\", \"Days\": 8, \"Confirmed\": 1881, \"Confirmed/100k\": 3.369115959361644}, {\"Country/Region\": \"Italy\", \"Days\": 9, \"Confirmed\": 2347, \"Confirmed/100k\": 4.140239749667403}, {\"Country/Region\": \"Italy\", \"Days\": 10, \"Confirmed\": 2934, \"Confirmed/100k\": 5.111590961919508}, {\"Country/Region\": \"Italy\", \"Days\": 11, \"Confirmed\": 3703, \"Confirmed/100k\": 6.384110693132231}, {\"Country/Region\": \"Italy\", \"Days\": 12, \"Confirmed\": 4481, \"Confirmed/100k\": 7.6715233730847645}, {\"Country/Region\": \"Italy\", \"Days\": 13, \"Confirmed\": 5728, \"Confirmed/100k\": 9.735024159589663}, {\"Country/Region\": \"Italy\", \"Days\": 14, \"Confirmed\": 7220, \"Confirmed/100k\": 12.203944106233852}, {\"Country/Region\": \"Italy\", \"Days\": 15, \"Confirmed\": 9017, \"Confirmed/100k\": 15.17756953794941}, {\"Country/Region\": \"Italy\", \"Days\": 16, \"Confirmed\": 9994, \"Confirmed/100k\": 16.794281862259982}, {\"Country/Region\": \"Italy\", \"Days\": 17, \"Confirmed\": 12307, \"Confirmed/100k\": 20.62176968839136}, {\"Country/Region\": \"Italy\", \"Days\": 18, \"Confirmed\": 12307, \"Confirmed/100k\": 20.62176968839136}, {\"Country/Region\": \"Italy\", \"Days\": 19, \"Confirmed\": 17505, \"Confirmed/100k\": 29.22327497167319}, {\"Country/Region\": \"Italy\", \"Days\": 20, \"Confirmed\": 21002, \"Confirmed/100k\": 35.0100129431308}, {\"Country/Region\": \"Korea, South\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.20141277115000653}, {\"Country/Region\": \"Korea, South\", \"Days\": 1, \"Confirmed\": 100, \"Confirmed/100k\": 0.39507889725578205}, {\"Country/Region\": \"Korea, South\", \"Days\": 2, \"Confirmed\": 329, \"Confirmed/100k\": 0.8385743260380079}, {\"Country/Region\": \"Korea, South\", \"Days\": 3, \"Confirmed\": 498, \"Confirmed/100k\": 1.1658700791567684}, {\"Country/Region\": \"Korea, South\", \"Days\": 4, \"Confirmed\": 729, \"Confirmed/100k\": 1.6132388304611098}, {\"Country/Region\": \"Korea, South\", \"Days\": 5, \"Confirmed\": 873, \"Confirmed/100k\": 1.8921180520534264}, {\"Country/Region\": \"Korea, South\", \"Days\": 6, \"Confirmed\": 1157, \"Confirmed/100k\": 2.4421298501938287}, {\"Country/Region\": \"Korea, South\", \"Days\": 7, \"Confirmed\": 1662, \"Confirmed/100k\": 3.420143787027995}, {\"Country/Region\": \"Korea, South\", \"Days\": 8, \"Confirmed\": 2233, \"Confirmed/100k\": 4.525977367091973}, {\"Country/Region\": \"Korea, South\", \"Days\": 9, \"Confirmed\": 3046, \"Confirmed/100k\": 6.100482972331928}, {\"Country/Region\": \"Korea, South\", \"Days\": 10, \"Confirmed\": 3632, \"Confirmed/100k\": 7.235366471311772}, {\"Country/Region\": \"Korea, South\", \"Days\": 11, \"Confirmed\": 4231, \"Confirmed/100k\": 8.395426566685366}, {\"Country/Region\": \"Korea, South\", \"Days\": 12, \"Confirmed\": 5082, \"Confirmed/100k\": 10.043525299845516}, {\"Country/Region\": \"Korea, South\", \"Days\": 13, \"Confirmed\": 5517, \"Confirmed/100k\": 10.885972948405641}, {\"Country/Region\": \"Korea, South\", \"Days\": 14, \"Confirmed\": 5984, \"Confirmed/100k\": 11.790393757319613}, {\"Country/Region\": \"Korea, South\", \"Days\": 15, \"Confirmed\": 6489, \"Confirmed/100k\": 12.768407694153776}, {\"Country/Region\": \"Korea, South\", \"Days\": 16, \"Confirmed\": 6937, \"Confirmed/100k\": 13.636031939107651}, {\"Country/Region\": \"Korea, South\", \"Days\": 17, \"Confirmed\": 7210, \"Confirmed/100k\": 14.16474046337642}, {\"Country/Region\": \"Korea, South\", \"Days\": 18, \"Confirmed\": 7374, \"Confirmed/100k\": 14.48235291018989}, {\"Country/Region\": \"Korea, South\", \"Days\": 19, \"Confirmed\": 7409, \"Confirmed/100k\": 14.550136054326911}, {\"Country/Region\": \"Korea, South\", \"Days\": 20, \"Confirmed\": 7651, \"Confirmed/100k\": 15.01880807950289}, {\"Country/Region\": \"Korea, South\", \"Days\": 21, \"Confirmed\": 7765, \"Confirmed/100k\": 15.239587463263474}, {\"Country/Region\": \"Korea, South\", \"Days\": 22, \"Confirmed\": 7875, \"Confirmed/100k\": 15.452620201979823}, {\"Country/Region\": \"Korea, South\", \"Days\": 23, \"Confirmed\": 7982, \"Confirmed/100k\": 15.659842956913007}, {\"Country/Region\": \"Norway\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 2.0322388347293057}, {\"Country/Region\": \"Norway\", \"Days\": 1, \"Confirmed\": 39, \"Confirmed/100k\": 2.7661028583815552}, {\"Country/Region\": \"Norway\", \"Days\": 2, \"Confirmed\": 68, \"Confirmed/100k\": 3.3117966195588684}, {\"Country/Region\": \"Norway\", \"Days\": 3, \"Confirmed\": 97, \"Confirmed/100k\": 3.8574903807361824}, {\"Country/Region\": \"Norway\", \"Days\": 4, \"Confirmed\": 292, \"Confirmed/100k\": 7.526810498997428}, {\"Country/Region\": \"Norway\", \"Days\": 5, \"Confirmed\": 490, \"Confirmed/100k\": 11.252581696001155}, {\"Country/Region\": \"Norway\", \"Days\": 6, \"Confirmed\": 594, \"Confirmed/100k\": 13.209552425740487}, {\"Country/Region\": \"Norway\", \"Days\": 7, \"Confirmed\": 888, \"Confirmed/100k\": 18.741758142503603}, {\"Country/Region\": \"Norway\", \"Days\": 8, \"Confirmed\": 982, \"Confirmed/100k\": 20.510558609767997}, {\"Country/Region\": \"Spain\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.25682870610404146}, {\"Country/Region\": \"Spain\", \"Days\": 1, \"Confirmed\": 45, \"Confirmed/100k\": 0.353139470893057}, {\"Country/Region\": \"Spain\", \"Days\": 2, \"Confirmed\": 102, \"Confirmed/100k\": 0.4751331062924767}, {\"Country/Region\": \"Spain\", \"Days\": 3, \"Confirmed\": 139, \"Confirmed/100k\": 0.5543219573412228}, {\"Country/Region\": \"Spain\", \"Days\": 4, \"Confirmed\": 280, \"Confirmed/100k\": 0.8560956870134715}, {\"Country/Region\": \"Spain\", \"Days\": 5, \"Confirmed\": 380, \"Confirmed/100k\": 1.0701196087668394}, {\"Country/Region\": \"Spain\", \"Days\": 6, \"Confirmed\": 553, \"Confirmed/100k\": 1.4403809934001657}, {\"Country/Region\": \"Spain\", \"Days\": 7, \"Confirmed\": 953, \"Confirmed/100k\": 2.2964766804136367}, {\"Country/Region\": \"Spain\", \"Days\": 8, \"Confirmed\": 1575, \"Confirmed/100k\": 3.6277054737195855}, {\"Country/Region\": \"Spain\", \"Days\": 9, \"Confirmed\": 2157, \"Confirmed/100k\": 4.873324698324187}, {\"Country/Region\": \"Spain\", \"Days\": 10, \"Confirmed\": 2157, \"Confirmed/100k\": 4.873324698324187}, {\"Country/Region\": \"Spain\", \"Days\": 11, \"Confirmed\": 5112, \"Confirmed/100k\": 11.197731586136207}, {\"Country/Region\": \"Spain\", \"Days\": 12, \"Confirmed\": 6271, \"Confirmed/100k\": 13.678268839257742}, {\"Country/Region\": \"Switzerland\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 1.3385712958884843}, {\"Country/Region\": \"Switzerland\", \"Days\": 1, \"Confirmed\": 100, \"Confirmed/100k\": 2.5127566431590846}, {\"Country/Region\": \"Switzerland\", \"Days\": 2, \"Confirmed\": 154, \"Confirmed/100k\": 3.1468167306852086}, {\"Country/Region\": \"Switzerland\", \"Days\": 3, \"Confirmed\": 223, \"Confirmed/100k\": 3.957004620301923}, {\"Country/Region\": \"Switzerland\", \"Days\": 4, \"Confirmed\": 260, \"Confirmed/100k\": 4.391453198792045}, {\"Country/Region\": \"Switzerland\", \"Days\": 5, \"Confirmed\": 377, \"Confirmed/100k\": 5.7652500550986465}, {\"Country/Region\": \"Switzerland\", \"Days\": 6, \"Confirmed\": 538, \"Confirmed/100k\": 7.655688464204314}, {\"Country/Region\": \"Switzerland\", \"Days\": 7, \"Confirmed\": 538, \"Confirmed/100k\": 7.655688464204314}, {\"Country/Region\": \"Switzerland\", \"Days\": 8, \"Confirmed\": 1025, \"Confirmed/100k\": 13.373971105412135}, {\"Country/Region\": \"Switzerland\", \"Days\": 9, \"Confirmed\": 1245, \"Confirmed/100k\": 15.957178869407455}, {\"Country/Region\": \"US\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.03606715942271932}, {\"Country/Region\": \"US\", \"Days\": 1, \"Confirmed\": 31, \"Confirmed/100k\": 0.04554243011851846}, {\"Country/Region\": \"US\", \"Days\": 2, \"Confirmed\": 99, \"Confirmed/100k\": 0.06632689487059401}, {\"Country/Region\": \"US\", \"Days\": 3, \"Confirmed\": 144, \"Confirmed/100k\": 0.0800813200741734}, {\"Country/Region\": \"US\", \"Days\": 4, \"Confirmed\": 284, \"Confirmed/100k\": 0.122872865151976}, {\"Country/Region\": \"US\", \"Days\": 5, \"Confirmed\": 400, \"Confirmed/100k\": 0.15832871678786953}, {\"Country/Region\": \"US\", \"Days\": 6, \"Confirmed\": 465, \"Confirmed/100k\": 0.17819621985970646}, {\"Country/Region\": \"US\", \"Days\": 7, \"Confirmed\": 841, \"Confirmed/100k\": 0.2931220837829477}, {\"Country/Region\": \"US\", \"Days\": 8, \"Confirmed\": 1163, \"Confirmed/100k\": 0.3915426374618936}, {\"Country/Region\": \"US\", \"Days\": 9, \"Confirmed\": 1545, \"Confirmed/100k\": 0.508302424745612}, {\"Country/Region\": \"US\", \"Days\": 10, \"Confirmed\": 2061, \"Confirmed/100k\": 0.6660198337466559}, {\"Country/Region\": \"US\", \"Days\": 11, \"Confirmed\": 2609, \"Confirmed/100k\": 0.8335181673369116}, {\"Country/Region\": \"United Kingdom\", \"Days\": 0, \"Confirmed\": 0, \"Confirmed/100k\": 0.17446497270503022}, {\"Country/Region\": \"United Kingdom\", \"Days\": 1, \"Confirmed\": 48, \"Confirmed/100k\": 0.2466573752036634}, {\"Country/Region\": \"United Kingdom\", \"Days\": 2, \"Confirmed\": 91, \"Confirmed/100k\": 0.3113297357753557}, {\"Country/Region\": \"United Kingdom\", \"Days\": 3, \"Confirmed\": 158, \"Confirmed/100k\": 0.4120982975963645}, {\"Country/Region\": \"United Kingdom\", \"Days\": 4, \"Confirmed\": 206, \"Confirmed/100k\": 0.4842907000949977}, {\"Country/Region\": \"United Kingdom\", \"Days\": 5, \"Confirmed\": 268, \"Confirmed/100k\": 0.5775392199890655}, {\"Country/Region\": \"United Kingdom\", \"Days\": 6, \"Confirmed\": 343, \"Confirmed/100k\": 0.6903398488931799}, {\"Country/Region\": \"United Kingdom\", \"Days\": 7, \"Confirmed\": 343, \"Confirmed/100k\": 0.6903398488931799}, {\"Country/Region\": \"United Kingdom\", \"Days\": 8, \"Confirmed\": 685, \"Confirmed/100k\": 1.2047107166959414}, {\"Country/Region\": \"United Kingdom\", \"Days\": 9, \"Confirmed\": 1027, \"Confirmed/100k\": 1.719081584498703}]}}, {\"mode\": \"vega-lite\"});\n", + "</script>" + ], + "text/plain": [ + "alt.VConcatChart(...)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "<p style=\"font-size: smaller\">Data Sources: \n", + " <a href=\"https://github.com/CSSEGISandData/COVID-19\">JHU CSSE</a>,\n", + " <a href=\"https://data.worldbank.org/indicator/SP.POP.TOTL\">World Bank</a>,\n", + " <a href=\"https://worldmap.harvard.edu/data/geonode:country_centroids_az8\">Harvard Worldmap</a>\n", + "</p>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sort_order = growth_in_value_df.groupby(\n", + " 'Country/Region').max().sort_values(\n", + " 'Confirmed', ascending=False).index.tolist()\n", + "chart = facetted_growth_plot(increase_df, \n", + " 'Confirmed/100k',\n", + " sort_order,\n", + " 'Italy',\n", + " \"Growth of cases/100k from case 100, compared to Italy\")\n", + "display(chart)\n", + "display(HTML('''\n", + "<p style=\"font-size: smaller\">Data Sources: \n", + " <a href=\"https://github.com/CSSEGISandData/COVID-19\">JHU CSSE</a>,\n", + " <a href=\"https://data.worldbank.org/indicator/SP.POP.TOTL\">World Bank</a>,\n", + " <a href=\"https://worldmap.harvard.edu/data/geonode:country_centroids_az8\">Harvard Worldmap</a>\n", + "</p>'''))" ] } ], @@ -576,20 +910,20 @@ "version": "3.7.6" }, "papermill": { - "duration": 2.560957, - "end_time": "2020-03-15T18:37:36.125203", + "duration": 3.523833, + "end_time": "2020-03-16T19:37:33.679489", "environment_variables": {}, "exception": null, - "input_path": "/tmp/fer34kve/notebooks/Dashboard.ipynb", + "input_path": "/tmp/30edqohi/notebooks/Dashboard.ipynb", "output_path": "runs/Dashboard.run.ipynb", "parameters": { - "PAPERMILL_INPUT_PATH": "/tmp/fer34kve/notebooks/Dashboard.ipynb", + "PAPERMILL_INPUT_PATH": "/tmp/30edqohi/notebooks/Dashboard.ipynb", "PAPERMILL_OUTPUT_PATH": "runs/Dashboard.run.ipynb", - "geodata_path": "/tmp/fer34kve/data/geodata/geo_data.csv", - "rates_folder": "/tmp/fer34kve/data/covid-19_rates", - "ts_folder": "/tmp/fer34kve/data/covid-19_jhu-csse" + "geodata_path": "/tmp/30edqohi/data/geodata/geo_data.csv", + "rates_folder": "/tmp/30edqohi/data/covid-19_rates", + "ts_folder": "/tmp/30edqohi/data/covid-19_jhu-csse" }, - "start_time": "2020-03-15T18:37:33.564246", + "start_time": "2020-03-16T19:37:30.155656", "version": "1.1.0" } }, -- GitLab