Skip to content
Snippets Groups Projects
openzh-covid-19-example.ipynb 36.4 KiB
Newer Older
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "import altair as alt\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Read in the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# read in cantonal data and produce one dataframe\n",
    "df_list = []\n",
    "\n",
    "for f in Path('../data/openzh-covid-19/').glob('COVID19_Fallzahlen_Kanton_*total.csv'):\n",
    "    df_list.append(pd.read_csv(f))\n",
    "\n",
    "df = pd.concat(df_list)\n",
    "\n",
    "df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "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>Date</th>\n",
       "      <th>Area</th>\n",
       "      <th>TotalTestedCases</th>\n",
       "      <th>TotalConfCases</th>\n",
       "      <th>TotalPosTests1</th>\n",
       "      <th>TotalCured</th>\n",
       "      <th>TotalDeaths</th>\n",
       "      <th>TotalHospitalized</th>\n",
       "      <th>Source</th>\n",
       "      <th>Source2</th>\n",
       "      <th>Source3</th>\n",
       "      <th>Unnamed: 11</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2020-03-16</td>\n",
       "      <td>Canton_BE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>123</td>\n",
       "      <td>131.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2020-03-18</td>\n",
       "      <td>Canton_BE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>193</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2020-02-27</td>\n",
       "      <td>Canton_BS</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://www.coronavirus.bs.ch/nm/2020-coronavi...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2020-02-28</td>\n",
       "      <td>Canton_BS</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://twitter.com/BR_Sprecher/status/1233316...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2020-02-29</td>\n",
       "      <td>Canton_BS</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://twitter.com/BAG_OFSP_UFSP/status/12337...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2020-03-14</td>\n",
       "      <td>Canton_BL</td>\n",
       "      <td>NaN</td>\n",
       "      <td>47</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://www.baselland.ch/politik-und-behorden/...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2020-03-15</td>\n",
       "      <td>Canton_BL</td>\n",
       "      <td>NaN</td>\n",
       "      <td>54</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://www.baselland.ch/politik-und-behorden/...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2020-03-16</td>\n",
       "      <td>Canton_BL</td>\n",
       "      <td>NaN</td>\n",
       "      <td>76</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://www.baselland.ch/politik-und-behorden/...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2020-03-17</td>\n",
       "      <td>Canton_BL</td>\n",
       "      <td>NaN</td>\n",
       "      <td>89</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://www.baselland.ch/politik-und-behorden/...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2020-03-18</td>\n",
       "      <td>Canton_BL</td>\n",
       "      <td>NaN</td>\n",
       "      <td>116</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>https://www.baselland.ch/politik-und-behorden/...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>61 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         Date       Area  TotalTestedCases  TotalConfCases  TotalPosTests1  \\\n",
       "0  2020-03-16  Canton_BE               NaN             123           131.0   \n",
       "1  2020-03-18  Canton_BE               NaN             193             NaN   \n",
       "0  2020-02-27  Canton_BS               NaN               0             1.0   \n",
       "1  2020-02-28  Canton_BS               NaN               0             1.0   \n",
       "2  2020-02-29  Canton_BS               NaN               0             1.0   \n",
       "..        ...        ...               ...             ...             ...   \n",
       "15 2020-03-14  Canton_BL               NaN              47             NaN   \n",
       "16 2020-03-15  Canton_BL               NaN              54             NaN   \n",
       "17 2020-03-16  Canton_BL               NaN              76             NaN   \n",
       "18 2020-03-17  Canton_BL               NaN              89             NaN   \n",
       "19 2020-03-18  Canton_BL               NaN             116             NaN   \n",
       "\n",
       "    TotalCured  TotalDeaths  TotalHospitalized  \\\n",
       "0          NaN          1.0                NaN   \n",
       "1          NaN          1.0                NaN   \n",
       "0          NaN          NaN                NaN   \n",
       "1          NaN          NaN                NaN   \n",
       "2          NaN          NaN                NaN   \n",
       "..         ...          ...                ...   \n",
       "15         NaN          2.0                NaN   \n",
       "16         NaN          2.0                NaN   \n",
       "17         NaN          2.0                NaN   \n",
       "18         NaN          2.0                NaN   \n",
       "19         NaN          2.0                NaN   \n",
       "\n",
       "                                               Source Source2 Source3  \\\n",
       "0                                                 NaN     NaN     NaN   \n",
       "1                                                 NaN     NaN     NaN   \n",
       "0   https://www.coronavirus.bs.ch/nm/2020-coronavi...     NaN     NaN   \n",
       "1   https://twitter.com/BR_Sprecher/status/1233316...     NaN     NaN   \n",
       "2   https://twitter.com/BAG_OFSP_UFSP/status/12337...     NaN     NaN   \n",
       "..                                                ...     ...     ...   \n",
       "15  https://www.baselland.ch/politik-und-behorden/...     NaN     NaN   \n",
       "16  https://www.baselland.ch/politik-und-behorden/...     NaN     NaN   \n",
       "17  https://www.baselland.ch/politik-und-behorden/...     NaN     NaN   \n",
       "18  https://www.baselland.ch/politik-und-behorden/...     NaN     NaN   \n",
       "19  https://www.baselland.ch/politik-und-behorden/...     NaN     NaN   \n",
       "\n",
       "    Unnamed: 11  \n",
       "0           NaN  \n",
       "1           NaN  \n",
       "0           NaN  \n",
       "1           NaN  \n",
       "2           NaN  \n",
       "..          ...  \n",
       "15          NaN  \n",
       "16          NaN  \n",
       "17          NaN  \n",
       "18          NaN  \n",
       "19          NaN  \n",
       "\n",
       "[61 rows x 12 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# display the dataframe\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot the available data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<div id=\"altair-viz-61141442a2d542d2919ca84809825792\"></div>\n",
       "<script type=\"text/javascript\">\n",
       "  (function(spec, embedOpt){\n",
       "    const outputDiv = document.getElementById(\"altair-viz-61141442a2d542d2919ca84809825792\");\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}}, \"data\": {\"name\": \"data-4aee0f5f3a635fed9abd9b652c303e85\"}, \"mark\": \"line\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Area\"}, \"x\": {\"type\": \"temporal\", \"field\": \"Date\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"TotalConfCases\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.0.2.json\", \"datasets\": {\"data-4aee0f5f3a635fed9abd9b652c303e85\": [{\"Date\": \"2020-03-16T00:00:00\", \"Area\": \"Canton_BE\", \"TotalTestedCases\": null, \"TotalConfCases\": 123, \"TotalPosTests1\": 131.0, \"TotalCured\": null, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-18T00:00:00\", \"Area\": \"Canton_BE\", \"TotalTestedCases\": null, \"TotalConfCases\": 193, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-02-27T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 0, \"TotalPosTests1\": 1.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://www.coronavirus.bs.ch/nm/2020-coronavirus-erster-positiver-fall-in-basel-stadt-zweiter-positiv-getesteter-ausserkantonaler-fall-gd.html\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-02-28T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 0, \"TotalPosTests1\": 1.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BR_Sprecher/status/1233316679863631873?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-02-29T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 0, \"TotalPosTests1\": 1.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1233759578241863681?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-01T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 1, \"TotalPosTests1\": 0.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://www.coronavirus.bs.ch/nm/2020-coronavirus-anzahl-der-getesteten-faelle-und-zwischenstand-kita-riehen-gd.html\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-02T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": 235.0, \"TotalConfCases\": 3, \"TotalPosTests1\": 0.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://www.coronavirus.bs.ch/nm/2020-coronavirus-zwei-neue-positive-faelle-in-basel-stadt-gd.html\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-03T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 3, \"TotalPosTests1\": 0.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1234880556095213569?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-04T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 3, \"TotalPosTests1\": 0.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1235240377134862336?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-05T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 8, \"TotalPosTests1\": 0.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://www.coronavirus.bs.ch/nm/2020-coronavirus-fuenf-neue-positive-faelle-in-basel-stadt-gd.html\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-06T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 15, \"TotalPosTests1\": 2.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1235934884167852035?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-07T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 21, \"TotalPosTests1\": 1.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1236249864473894914?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-08T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 24, \"TotalPosTests1\": 1.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1236609191831384064?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-09T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 28, \"TotalPosTests1\": 1.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1236973685602426881?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-10T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 33, \"TotalPosTests1\": 0.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1237336196772175873?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-11T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 37, \"TotalPosTests1\": 12.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1237694819419422720?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-12T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 73, \"TotalPosTests1\": 7.0, \"TotalCured\": 4.0, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1238073089902235648?s=20\", \"Source2\": \"https://www.coronavirus.bs.ch/nm/2020-coronavirus-ende-der-quarantaenemassnahmen-im-fall-kita-riehen-gd.html\", \"Source3\": \"https://www.coronavirus.bs.ch/nm/2020-coronavirus-erster-todesfall-im-kanton-basel-stadt-gd.html\", \"Unnamed: 11\": null}, {\"Date\": \"2020-03-13T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 92, \"TotalPosTests1\": 19.0, \"TotalCured\": null, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1238430659762364417?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-14T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 100, \"TotalPosTests1\": 19.0, \"TotalCured\": null, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": \"https://twitter.com/BAG_OFSP_UFSP/status/1238773726423941127?s=20\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-16T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 144, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 4.0, \"TotalHospitalized\": null, \"Source\": \"https://www.coronavirus.bs.ch/nm/2020-tagesbulletin-coronavirus-144-bestaetigte-faelle-im-kanton-basel-stadt-gd.html\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-17T00:00:00\", \"Area\": \"Canton_BS\", \"TotalTestedCases\": null, \"TotalConfCases\": 165, \"TotalPosTests1\": null, \"TotalCured\": 25.0, \"TotalDeaths\": 4.0, \"TotalHospitalized\": 30.0, \"Source\": \"https://www.coronavirus.bs.ch/nm/2020-tagesbulletin-coronavirus-165-bestaetigte-faelle-im-kanton-basel-stadt-gd.html\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-18T00:00:00\", \"Area\": \"Canton_BS\\t\", \"TotalTestedCases\": null, \"TotalConfCases\": 182, \"TotalPosTests1\": null, \"TotalCured\": 36.0, \"TotalDeaths\": 4.0, \"TotalHospitalized\": 40.0, \"Source\": \"https://www.coronavirus.bs.ch/nm/2020-tagesbulletin-coronavirus-182-bestaetigte-faelle-im-kanton-basel-stadt-treffen-mit-allen-spitaelern-gd.html\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-02-27T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 1, \"TotalPosTests1\": 1.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-02-28T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 2, \"TotalPosTests1\": 2.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-02T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 2, \"TotalPosTests1\": 9.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-03T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": 400.0, \"TotalConfCases\": 9, \"TotalPosTests1\": 13.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-05T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 19, \"TotalPosTests1\": 19.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-06T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 26, \"TotalPosTests1\": 26.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-07T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 30, \"TotalPosTests1\": 30.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-08T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 37, \"TotalPosTests1\": 37.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-09T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": 855.0, \"TotalConfCases\": 40, \"TotalPosTests1\": 40.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-10T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 49, \"TotalPosTests1\": 49.0, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-11T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 59, \"TotalPosTests1\": 59.0, \"TotalCured\": 1.0, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-12T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 92, \"TotalPosTests1\": null, \"TotalCured\": 7.0, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-13T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 140, \"TotalPosTests1\": null, \"TotalCured\": 11.0, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-16T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 270, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-17T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 294, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-18T00:00:00\", \"Area\": \"Canton_ZH\", \"TotalTestedCases\": null, \"TotalConfCases\": 424, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-16T00:00:00\", \"Area\": \"Canton_TG\", \"TotalTestedCases\": 246.0, \"TotalConfCases\": 17, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-17T00:00:00\", \"Area\": \"Canton_TG\", \"TotalTestedCases\": 276.0, \"TotalConfCases\": 23, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-18T00:00:00\", \"Area\": \"Canton_TG\", \"TotalTestedCases\": null, \"TotalConfCases\": 32, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-02-28T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 1, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/neuer-coronavirus-covid-19-erster-bestaetigter-fall-aus-dem-kanton-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-02-29T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 2, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/weiterer-bestaetigter-fall-aus-dem-kanton-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-01T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 2, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-02T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 2, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-03T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 2, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-04T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 2, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-05T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 6, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/neuer-coronavirus-covid-19-sechs-bestaetigte-faelle-im-kanton-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-06T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 6, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-07T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 15, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": null, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-15-bestaetigte-faelle-in-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-08T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 19, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/patient-im-kantonsspital-baselland-stirbt-an-den-folgen-einer-coronavirus-infektion\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-09T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 20, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-xx-bestaetigte-faelle-in-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-10T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 22, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 1.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-11T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 26, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 2.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-26-bestaetigte-faelle-in-basel-landschaft-1\", \"Source2\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/zweiter-baselbieter-patient-stirbt-an-den-folgen-einer-covid-19-infektion\", \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-12T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 26, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 2.0, \"TotalHospitalized\": null, \"Source\": null, \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-13T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 42, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 2.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-26-bestaetigte-faelle-in-basel-landschaft-2\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-14T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 47, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 2.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-47-bestaetigte-faelle-in-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-15T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 54, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 2.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-54-bestaetigte-faelle-in-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-16T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 76, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 2.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-67-bestaetigte-faelle-in-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-17T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 89, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 2.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-89-bestaetigte-faelle-in-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}, {\"Date\": \"2020-03-18T00:00:00\", \"Area\": \"Canton_BL\", \"TotalTestedCases\": null, \"TotalConfCases\": 116, \"TotalPosTests1\": null, \"TotalCured\": null, \"TotalDeaths\": 2.0, \"TotalHospitalized\": null, \"Source\": \"https://www.baselland.ch/politik-und-behorden/direktionen/volkswirtschafts-und-gesundheitsdirektion/medienmitteilungen/update-116-bestaetigte-faelle-in-basel-landschaft\", \"Source2\": null, \"Source3\": null, \"Unnamed: 11\": null}]}}, {\"mode\": \"vega-lite\"});\n",
       "</script>"
      ],
      "text/plain": [
       "alt.Chart(...)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alt.Chart(df).mark_line().encode(x='Date', y='TotalConfCases', color='Area')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}