Newer
Older
{
"cells": [
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import altair as alt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Look at the metadata"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"metadata_df = pd.read_json('../../data/covidtracking/states-metadata.json')"
]
},
{
"cell_type": "code",
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
"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>state</th>\n",
" <th>covid19SiteOld</th>\n",
" <th>covid19Site</th>\n",
" <th>covid19SiteSecondary</th>\n",
" <th>twitter</th>\n",
" <th>pui</th>\n",
" <th>pum</th>\n",
" <th>notes</th>\n",
" <th>name</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AK</td>\n",
" <td>http://dhss.alaska.gov/dph/Epi/id/Pages/COVID-...</td>\n",
" <td>http://dhss.alaska.gov/dph/Epi/id/Pages/COVID-...</td>\n",
" <td>http://dhss.alaska.gov/dph/Epi/id/Pages/COVID-...</td>\n",
" <td>@Alaska_DHSS</td>\n",
" <td>All data</td>\n",
" <td>False</td>\n",
" <td>Unclear if their reported number means \"person...</td>\n",
" <td>Alaska</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>AL</td>\n",
" <td>http://www.alabamapublichealth.gov/infectiousd...</td>\n",
" <td>https://alpublichealth.maps.arcgis.com/apps/op...</td>\n",
" <td>@alpublichealth</td>\n",
" <td>No data</td>\n",
" <td>False</td>\n",
" <td>Last negative count from 3/16. Last update tim...</td>\n",
" <td>Alabama</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>AR</td>\n",
" <td>https://www.healthy.arkansas.gov/programs-serv...</td>\n",
" <td>https://www.healthy.arkansas.gov/programs-serv...</td>\n",
" <td>@adhpio</td>\n",
" <td>All data</td>\n",
" <td>True</td>\n",
" <td>Pending = \"PUIs\"</td>\n",
" <td>Arkansas</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>AS</td>\n",
" <td>http://www.samoagovt.ws/2020/03/ministry-of-he...</td>\n",
" <td>https://www.facebook.com/amsamgov/</td>\n",
" <td>https://www.americansamoa.gov/?fbclid=IwAR2EKT...</td>\n",
" <td>None</td>\n",
" <td>No Data</td>\n",
" <td>False</td>\n",
" <td>American Samoa: No data, no confirmed cases yet.</td>\n",
" <td>American Samoa</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>AZ</td>\n",
" <td>https://www.azdhs.gov/preparedness/epidemiolog...</td>\n",
" <td>https://www.azdhs.gov/preparedness/epidemiolog...</td>\n",
" <td>@azdhs</td>\n",
" <td>All data</td>\n",
" <td>False</td>\n",
" <td>Negative = “Ruled Out”. Negatives are from pub...</td>\n",
" <td>Arizona</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" state covid19SiteOld \\\n",
"0 AK http://dhss.alaska.gov/dph/Epi/id/Pages/COVID-... \n",
"1 AL http://www.alabamapublichealth.gov/infectiousd... \n",
"2 AR https://www.healthy.arkansas.gov/programs-serv... \n",
"3 AS http://www.samoagovt.ws/2020/03/ministry-of-he... \n",
"4 AZ https://www.azdhs.gov/preparedness/epidemiolog... \n",
" covid19Site \\\n",
"0 http://dhss.alaska.gov/dph/Epi/id/Pages/COVID-... \n",
"1 https://alpublichealth.maps.arcgis.com/apps/op... \n",
"2 https://www.healthy.arkansas.gov/programs-serv... \n",
"3 https://www.facebook.com/amsamgov/ \n",
"4 https://www.azdhs.gov/preparedness/epidemiolog... \n",
" covid19SiteSecondary twitter \\\n",
"0 http://dhss.alaska.gov/dph/Epi/id/Pages/COVID-... @Alaska_DHSS \n",
"1 None @alpublichealth \n",
"2 None @adhpio \n",
"3 https://www.americansamoa.gov/?fbclid=IwAR2EKT... None \n",
"4 None @azdhs \n",
" pui pum notes \\\n",
"0 All data False Unclear if their reported number means \"person... \n",
"1 No data False Last negative count from 3/16. Last update tim... \n",
"2 All data True Pending = \"PUIs\" \n",
"3 No Data False American Samoa: No data, no confirmed cases yet. \n",
"4 All data False Negative = “Ruled Out”. Negatives are from pub... \n",
"\n",
" name \n",
"0 Alaska \n",
"1 Alabama \n",
"2 Arkansas \n",
"3 American Samoa \n",
"4 Arizona "
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"metadata_df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load most recent data and look at it"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"data_df = pd.read_json('../../data/covidtracking/states-daily.json')\n",
"data_df['date'] = pd.to_datetime(data_df['date'], format=\"%Y%m%d\")"
]
},
{
"cell_type": "code",
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
"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>state</th>\n",
" <th>positive</th>\n",
" <th>negative</th>\n",
" <th>pending</th>\n",
" <th>death</th>\n",
" <th>total</th>\n",
" <th>dateChecked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>28.0</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>96</td>\n",
" <td>351.0</td>\n",
" <td>203.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>AS</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>65</td>\n",
" <td>211.0</td>\n",
" <td>101.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" date state positive negative pending death total \\\n",
"0 2020-03-20 AK 12 686.0 NaN NaN 698 \n",
"1 2020-03-20 AL 81 28.0 NaN 0.0 109 \n",
"2 2020-03-20 AR 96 351.0 203.0 NaN 650 \n",
"3 2020-03-20 AS 0 NaN NaN 0.0 0 \n",
"4 2020-03-20 AZ 65 211.0 101.0 0.0 377 \n",
"\n",
" dateChecked \n",
"0 2020-03-20T20:00:00Z \n",
"1 2020-03-20T20:00:00Z \n",
"2 2020-03-20T20:00:00Z \n",
"3 2020-03-20T20:00:00Z \n",
"4 2020-03-20T20:00:00Z "
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Daily counts and totals"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"# compute daily differences\n",
"tdf = data_df.sort_values(['state', 'date'], ascending=[True, False]).set_index(['state', 'date'])\n",
"diffs_df = tdf[['positive', 'negative', 'death']].groupby(level='state').diff(periods=-1).dropna(how='all')\n",
"tdf_diff=tdf.join(diffs_df, rsuffix='_diff').reset_index()\n",
"\n",
"# \"Normalizing\" the totals\n",
"tdf_diff['total_10'] = tdf_diff['total']/10."
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<div id=\"altair-viz-e5533fc0f87b40628f90c34f622a4bce\"></div>\n",
"<script type=\"text/javascript\">\n",
" (function(spec, embedOpt){\n",
" const outputDiv = document.getElementById(\"altair-viz-e5533fc0f87b40628f90c34f622a4bce\");\n",
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
" 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}}, \"hconcat\": [{\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"WA\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"WA\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"WA\", \"width\": 250}]}], \"data\": {\"name\": \"data-1180c2f4d0b6c8dd916903ca4c0d70bf\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"NY\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"NY\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"NY\", \"width\": 250}]}], \"data\": {\"name\": \"data-27d6cf9464e86d250ce7b9ad9526c806\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"MA\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"MA\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"MA\", \"width\": 250}]}], \"data\": {\"name\": \"data-dea1341c1a17e5d61b64cba9e71853ed\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"CA\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"CA\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"CA\", \"width\": 250}]}], \"data\": {\"name\": \"data-2044206653abf4cf683f7eb7b0e2e7cf\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"OK\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"OK\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"OK\", \"width\": 250}]}], \"data\": {\"name\": \"data-15c49aeabdb5b7acee8110bdf90966fc\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"LA\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"LA\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"LA\", \"width\": 250}]}], \"data\": {\"name\": \"data-2480c6153905f8996f1be25f2c4ce853\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"FL\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"FL\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"FL\", \"width\": 250}]}], \"data\": {\"name\": \"data-c4deee1167555a60ac3fe96783b25881\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"NJ\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"NJ\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"NJ\", \"width\": 250}]}], \"data\": {\"name\": \"data-66a15f0a91cacd8abf8cfa13204a7e81\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"NC\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"NC\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"NC\", \"width\": 250}]}], \"data\": {\"name\": \"data-ddffbf8d2dd76c1c297388ebe03e44ee\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}, {\"layer\": [{\"mark\": {\"type\": \"bar\", \"size\": 10}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Daily positive\"}, \"field\": \"daily_positive\"}}, \"height\": 150, \"title\": \"GA\", \"width\": 250}, {\"layer\": [{\"mark\": {\"type\": \"line\", \"color\": \"lightgreen\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"Tests/10\"}, \"field\": \"total_10\"}}, \"height\": 150, \"title\": \"GA\", \"width\": 250}, {\"mark\": {\"type\": \"line\", \"color\": \"red\"}, \"encoding\": {\"x\": {\"type\": \"temporal\", \"axis\": {\"title\": \"Date\"}, \"field\": \"date\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"title\": \"# Positive\"}, \"field\": \"positive\"}}, \"height\": 150, \"title\": \"GA\", \"width\": 250}]}], \"data\": {\"name\": \"data-3d1b17d38cf3d74b0371cfc3b471f3bc\"}, \"resolve\": {\"scale\": {\"y\": \"independent\"}}}], \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.0.2.json\", \"datasets\": {\"data-1180c2f4d0b6c8dd916903ca4c0d70bf\": [{\"state\": \"WA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 1376, \"negative\": 19336.0, \"pending\": null, \"death\": 74.0, \"total\": 20712, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 189.0, \"negative_diff\": 3418.0, \"death_diff\": 8.0, \"total_10\": 2071.2, \"daily_positive\": 189.0}, {\"state\": \"WA\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 1187, \"negative\": 15918.0, \"pending\": null, \"death\": 66.0, \"total\": 17105, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 175.0, \"negative_diff\": 2801.0, \"death_diff\": 14.0, \"total_10\": 1710.5, \"daily_positive\": 175.0}, {\"state\": \"WA\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 1012, \"negative\": 13117.0, \"pending\": null, \"death\": 52.0, \"total\": 14129, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 108.0, \"negative_diff\": 1535.0, \"death_diff\": 4.0, \"total_10\": 1412.9, \"daily_positive\": 108.0}, {\"state\": \"WA\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 904, \"negative\": 11582.0, \"pending\": null, \"death\": 48.0, \"total\": 12486, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 135.0, \"negative_diff\": 2131.0, \"death_diff\": 6.0, \"total_10\": 1248.6, \"daily_positive\": 135.0}, {\"state\": \"WA\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 769, \"negative\": 9451.0, \"pending\": null, \"death\": 42.0, \"total\": 10220, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 127.0, \"negative_diff\": 2329.0, \"death_diff\": 2.0, \"total_10\": 1022.0, \"daily_positive\": 127.0}, {\"state\": \"WA\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 642, \"negative\": 7122.0, \"pending\": null, \"death\": 40.0, \"total\": 7764, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 74.0, \"negative_diff\": 1121.0, \"death_diff\": 3.0, \"total_10\": 776.4, \"daily_positive\": 74.0}, {\"state\": \"WA\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 568, \"negative\": 6001.0, \"pending\": null, \"death\": 37.0, \"total\": 6569, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 111.0, \"negative_diff\": 1651.0, \"death_diff\": 6.0, \"total_10\": 656.9, \"daily_positive\": 111.0}, {\"state\": \"WA\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 457, \"negative\": 4350.0, \"pending\": null, \"death\": 31.0, \"total\": 4807, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 120.0, \"negative_diff\": 1313.0, \"death_diff\": 2.0, \"total_10\": 480.7, \"daily_positive\": 120.0}, {\"state\": \"WA\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 337, \"negative\": 3037.0, \"pending\": null, \"death\": 29.0, \"total\": 3403, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 70.0, \"negative_diff\": 862.0, \"death_diff\": 5.0, \"total_10\": 340.3, \"daily_positive\": 70.0}, {\"state\": \"WA\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 267, \"negative\": 2175.0, \"pending\": null, \"death\": 24.0, \"total\": 2466, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 105.0, \"negative_diff\": 1065.0, \"death_diff\": null, \"total_10\": 246.6, \"daily_positive\": 105.0}, {\"state\": \"WA\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 162, \"negative\": 1110.0, \"pending\": null, \"death\": null, \"total\": 1272, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 26.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 127.2, \"daily_positive\": 26.0}, {\"state\": \"WA\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 136, \"negative\": 1110.0, \"pending\": null, \"death\": null, \"total\": 1246, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 34.0, \"negative_diff\": 470.0, \"death_diff\": null, \"total_10\": 124.6, \"daily_positive\": 34.0}, {\"state\": \"WA\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 102, \"negative\": 640.0, \"pending\": 60.0, \"death\": null, \"total\": 802, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 270.0, \"death_diff\": null, \"total_10\": 80.2, \"daily_positive\": 0.0}, {\"state\": \"WA\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 102, \"negative\": 370.0, \"pending\": 66.0, \"death\": null, \"total\": 538, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": 23.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 53.8, \"daily_positive\": 23.0}, {\"state\": \"WA\", \"date\": \"2020-03-06T00:00:00\", \"positive\": 79, \"negative\": 370.0, \"pending\": null, \"death\": null, \"total\": 449, \"dateChecked\": \"2020-03-06T21:00:00Z\", \"positive_diff\": 9.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 44.9, \"daily_positive\": 9.0}, {\"state\": \"WA\", \"date\": \"2020-03-05T00:00:00\", \"positive\": 70, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 70, \"dateChecked\": \"2020-03-05T21:00:00Z\", \"positive_diff\": 31.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 7.0, \"daily_positive\": 31.0}, {\"state\": \"WA\", \"date\": \"2020-03-04T00:00:00\", \"positive\": 39, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 39, \"dateChecked\": \"2020-03-04T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 3.9, \"daily_positive\": null}], \"data-27d6cf9464e86d250ce7b9ad9526c806\": [{\"state\": \"NY\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 7102, \"negative\": 25325.0, \"pending\": null, \"death\": 35.0, \"total\": 32427, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 2950.0, \"negative_diff\": 7193.0, \"death_diff\": 23.0, \"total_10\": 3242.7, \"daily_positive\": 2950.0}, {\"state\": \"NY\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 4152, \"negative\": 18132.0, \"pending\": null, \"death\": 12.0, \"total\": 22284, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 1770.0, \"negative_diff\": 5917.0, \"death_diff\": 0.0, \"total_10\": 2228.4, \"daily_positive\": 1770.0}, {\"state\": \"NY\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 2382, \"negative\": 12215.0, \"pending\": null, \"death\": 12.0, \"total\": 14597, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 682.0, \"negative_diff\": 6709.0, \"death_diff\": 5.0, \"total_10\": 1459.7, \"daily_positive\": 682.0}, {\"state\": \"NY\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 1700, \"negative\": 5506.0, \"pending\": null, \"death\": 7.0, \"total\": 7206, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 750.0, \"negative_diff\": 963.0, \"death_diff\": 0.0, \"total_10\": 720.6, \"daily_positive\": 750.0}, {\"state\": \"NY\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 950, \"negative\": 4543.0, \"pending\": null, \"death\": 7.0, \"total\": 5493, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 221.0, \"negative_diff\": 0.0, \"death_diff\": 4.0, \"total_10\": 549.3, \"daily_positive\": 221.0}, {\"state\": \"NY\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 729, \"negative\": 4543.0, \"pending\": null, \"death\": 3.0, \"total\": 5272, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 205.0, \"negative_diff\": 1764.0, \"death_diff\": null, \"total_10\": 527.2, \"daily_positive\": 205.0}, {\"state\": \"NY\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 524, \"negative\": 2779.0, \"pending\": null, \"death\": null, \"total\": 3303, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 103.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 330.3, \"daily_positive\": 103.0}, {\"state\": \"NY\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 421, \"negative\": 2779.0, \"pending\": null, \"death\": null, \"total\": 3200, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 205.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 320.0, \"daily_positive\": 205.0}, {\"state\": \"NY\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 216, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 216, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 21.6, \"daily_positive\": 0.0}, {\"state\": \"NY\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 216, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 216, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 43.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 21.6, \"daily_positive\": 43.0}, {\"state\": \"NY\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 173, \"negative\": 92.0, \"pending\": null, \"death\": null, \"total\": 265, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 31.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 26.5, \"daily_positive\": 31.0}, {\"state\": \"NY\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 142, \"negative\": 92.0, \"pending\": null, \"death\": null, \"total\": 234, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 37.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 23.4, \"daily_positive\": 37.0}, {\"state\": \"NY\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 105, \"negative\": 92.0, \"pending\": null, \"death\": null, \"total\": 197, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 29.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 19.7, \"daily_positive\": 29.0}, {\"state\": \"NY\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 76, \"negative\": 92.0, \"pending\": 236.0, \"death\": null, \"total\": 404, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": 43.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 40.4, \"daily_positive\": 43.0}, {\"state\": \"NY\", \"date\": \"2020-03-06T00:00:00\", \"positive\": 33, \"negative\": 92.0, \"pending\": 236.0, \"death\": null, \"total\": 361, \"dateChecked\": \"2020-03-06T21:00:00Z\", \"positive_diff\": 11.0, \"negative_diff\": 16.0, \"death_diff\": null, \"total_10\": 36.1, \"daily_positive\": 11.0}, {\"state\": \"NY\", \"date\": \"2020-03-05T00:00:00\", \"positive\": 22, \"negative\": 76.0, \"pending\": 24.0, \"death\": null, \"total\": 122, \"dateChecked\": \"2020-03-05T21:00:00Z\", \"positive_diff\": 16.0, \"negative_diff\": 28.0, \"death_diff\": null, \"total_10\": 12.2, \"daily_positive\": 16.0}, {\"state\": \"NY\", \"date\": \"2020-03-04T00:00:00\", \"positive\": 6, \"negative\": 48.0, \"pending\": 24.0, \"death\": null, \"total\": 78, \"dateChecked\": \"2020-03-04T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 7.8, \"daily_positive\": null}], \"data-dea1341c1a17e5d61b64cba9e71853ed\": [{\"state\": \"MA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 413, \"negative\": 3678.0, \"pending\": null, \"death\": 1.0, \"total\": 4091, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 85.0, \"negative_diff\": 874.0, \"death_diff\": null, \"total_10\": 409.1, \"daily_positive\": 85.0}, {\"state\": \"MA\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 328, \"negative\": 2804.0, \"pending\": null, \"death\": null, \"total\": 3132, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 72.0, \"negative_diff\": 789.0, \"death_diff\": null, \"total_10\": 313.2, \"daily_positive\": 72.0}, {\"state\": \"MA\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 256, \"negative\": 2015.0, \"pending\": null, \"death\": null, \"total\": 2271, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 38.0, \"negative_diff\": 474.0, \"death_diff\": null, \"total_10\": 227.1, \"daily_positive\": 38.0}, {\"state\": \"MA\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 218, \"negative\": 1541.0, \"pending\": null, \"death\": null, \"total\": 1759, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 54.0, \"negative_diff\": 1189.0, \"death_diff\": null, \"total_10\": 175.9, \"daily_positive\": 54.0}, {\"state\": \"MA\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 164, \"negative\": 352.0, \"pending\": null, \"death\": null, \"total\": 516, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 26.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 51.6, \"daily_positive\": 26.0}, {\"state\": \"MA\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 138, \"negative\": 352.0, \"pending\": null, \"death\": null, \"total\": 490, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 49.0, \"daily_positive\": 0.0}, {\"state\": \"MA\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 138, \"negative\": 352.0, \"pending\": null, \"death\": null, \"total\": 490, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 15.0, \"negative_diff\": 260.0, \"death_diff\": null, \"total_10\": 49.0, \"daily_positive\": 15.0}, {\"state\": \"MA\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 123, \"negative\": 92.0, \"pending\": null, \"death\": null, \"total\": 215, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 28.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 21.5, \"daily_positive\": 28.0}, {\"state\": \"MA\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 95, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 95, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 3.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 9.5, \"daily_positive\": 3.0}, {\"state\": \"MA\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 92, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 92, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 9.2, \"daily_positive\": 0.0}, {\"state\": \"MA\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 92, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 92, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 51.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 9.2, \"daily_positive\": 51.0}, {\"state\": \"MA\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 41, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 41, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 28.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 4.1, \"daily_positive\": 28.0}, {\"state\": \"MA\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 13, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 13, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 1.3, \"daily_positive\": 0.0}, {\"state\": \"MA\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 13, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 13, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 1.3, \"daily_positive\": 5.0}, {\"state\": \"MA\", \"date\": \"2020-03-06T00:00:00\", \"positive\": 8, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 8, \"dateChecked\": \"2020-03-06T21:00:00Z\", \"positive_diff\": 6.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.8, \"daily_positive\": 6.0}, {\"state\": \"MA\", \"date\": \"2020-03-05T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-05T21:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": 0.0}, {\"state\": \"MA\", \"date\": \"2020-03-04T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-04T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": null}], \"data-2044206653abf4cf683f7eb7b0e2e7cf\": [{\"state\": \"CA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 1063, \"negative\": 10424.0, \"pending\": null, \"death\": 20.0, \"total\": 11487, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 139.0, \"negative_diff\": 1637.0, \"death_diff\": 2.0, \"total_10\": 1148.7, \"daily_positive\": 139.0}, {\"state\": \"CA\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 924, \"negative\": 8787.0, \"pending\": null, \"death\": 18.0, \"total\": 9711, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 313.0, \"negative_diff\": 806.0, \"death_diff\": 5.0, \"total_10\": 971.1, \"daily_positive\": 313.0}, {\"state\": \"CA\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 611, \"negative\": 7981.0, \"pending\": null, \"death\": 13.0, \"total\": 8592, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 128.0, \"negative_diff\": 0.0, \"death_diff\": 2.0, \"total_10\": 859.2, \"daily_positive\": 128.0}, {\"state\": \"CA\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 483, \"negative\": 7981.0, \"pending\": null, \"death\": 11.0, \"total\": 8407, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 148.0, \"negative_diff\": 0.0, \"death_diff\": 5.0, \"total_10\": 840.7, \"daily_positive\": 148.0}, {\"state\": \"CA\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 335, \"negative\": 7981.0, \"pending\": null, \"death\": 6.0, \"total\": 8316, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 42.0, \"negative_diff\": 7065.0, \"death_diff\": 1.0, \"total_10\": 831.6, \"daily_positive\": 42.0}, {\"state\": \"CA\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 293, \"negative\": 916.0, \"pending\": null, \"death\": 5.0, \"total\": 1209, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 41.0, \"negative_diff\": 0.0, \"death_diff\": 0.0, \"total_10\": 120.9, \"daily_positive\": 41.0}, {\"state\": \"CA\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 252, \"negative\": 916.0, \"pending\": null, \"death\": 5.0, \"total\": 1168, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 50.0, \"negative_diff\": 0.0, \"death_diff\": 1.0, \"total_10\": 116.8, \"daily_positive\": 50.0}, {\"state\": \"CA\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 202, \"negative\": 916.0, \"pending\": null, \"death\": 4.0, \"total\": 1118, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 0.0, \"death_diff\": 0.0, \"total_10\": 111.8, \"daily_positive\": 0.0}, {\"state\": \"CA\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 202, \"negative\": 916.0, \"pending\": null, \"death\": 4.0, \"total\": 1118, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 45.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 111.8, \"daily_positive\": 45.0}, {\"state\": \"CA\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 157, \"negative\": 916.0, \"pending\": null, \"death\": null, \"total\": 1073, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 24.0, \"negative_diff\": 226.0, \"death_diff\": null, \"total_10\": 107.3, \"daily_positive\": 24.0}, {\"state\": \"CA\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 133, \"negative\": 690.0, \"pending\": null, \"death\": null, \"total\": 823, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 19.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 82.3, \"daily_positive\": 19.0}, {\"state\": \"CA\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 114, \"negative\": 690.0, \"pending\": null, \"death\": null, \"total\": 804, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 26.0, \"negative_diff\": 228.0, \"death_diff\": null, \"total_10\": 80.4, \"daily_positive\": 26.0}, {\"state\": \"CA\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 88, \"negative\": 462.0, \"pending\": null, \"death\": null, \"total\": 550, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 19.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 55.0, \"daily_positive\": 19.0}, {\"state\": \"CA\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 69, \"negative\": 462.0, \"pending\": null, \"death\": null, \"total\": 531, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": 9.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 53.1, \"daily_positive\": 9.0}, {\"state\": \"CA\", \"date\": \"2020-03-06T00:00:00\", \"positive\": 60, \"negative\": 462.0, \"pending\": null, \"death\": null, \"total\": 522, \"dateChecked\": \"2020-03-06T21:00:00Z\", \"positive_diff\": 7.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 52.2, \"daily_positive\": 7.0}, {\"state\": \"CA\", \"date\": \"2020-03-05T00:00:00\", \"positive\": 53, \"negative\": 462.0, \"pending\": null, \"death\": null, \"total\": 515, \"dateChecked\": \"2020-03-05T21:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 51.5, \"daily_positive\": 0.0}, {\"state\": \"CA\", \"date\": \"2020-03-04T00:00:00\", \"positive\": 53, \"negative\": 462.0, \"pending\": null, \"death\": null, \"total\": 515, \"dateChecked\": \"2020-03-04T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 51.5, \"daily_positive\": null}], \"data-15c49aeabdb5b7acee8110bdf90966fc\": [{\"state\": \"OK\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 49, \"negative\": 538.0, \"pending\": 374.0, \"death\": 1.0, \"total\": 961, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": 72.0, \"death_diff\": 0.0, \"total_10\": 96.1, \"daily_positive\": 5.0}, {\"state\": \"OK\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 44, \"negative\": 466.0, \"pending\": 250.0, \"death\": 1.0, \"total\": 760, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 15.0, \"negative_diff\": 88.0, \"death_diff\": null, \"total_10\": 76.0, \"daily_positive\": 15.0}, {\"state\": \"OK\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 29, \"negative\": 378.0, \"pending\": 110.0, \"death\": null, \"total\": 517, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 12.0, \"negative_diff\": 131.0, \"death_diff\": null, \"total_10\": 51.7, \"daily_positive\": 12.0}, {\"state\": \"OK\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 17, \"negative\": 247.0, \"pending\": 82.0, \"death\": null, \"total\": 346, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 7.0, \"negative_diff\": 73.0, \"death_diff\": null, \"total_10\": 34.6, \"daily_positive\": 7.0}, {\"state\": \"OK\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 10, \"negative\": 174.0, \"pending\": 29.0, \"death\": null, \"total\": 213, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": 56.0, \"death_diff\": null, \"total_10\": 21.3, \"daily_positive\": 1.0}, {\"state\": \"OK\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 9, \"negative\": 118.0, \"pending\": 12.0, \"death\": null, \"total\": 139, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": 82.0, \"death_diff\": null, \"total_10\": 13.9, \"daily_positive\": 5.0}, {\"state\": \"OK\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 4, \"negative\": 36.0, \"pending\": 37.0, \"death\": null, \"total\": 77, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 7.7, \"daily_positive\": 1.0}, {\"state\": \"OK\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 3, \"negative\": 36.0, \"pending\": 37.0, \"death\": null, \"total\": 76, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 7.6, \"daily_positive\": 0.0}, {\"state\": \"OK\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 3, \"negative\": 36.0, \"pending\": 4.0, \"death\": null, \"total\": 43, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": 21.0, \"death_diff\": null, \"total_10\": 4.3, \"daily_positive\": 1.0}, {\"state\": \"OK\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 2, \"negative\": 15.0, \"pending\": 11.0, \"death\": null, \"total\": 28, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 2.8, \"daily_positive\": 0.0}, {\"state\": \"OK\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 2, \"negative\": 15.0, \"pending\": 11.0, \"death\": null, \"total\": 28, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": 7.0, \"death_diff\": null, \"total_10\": 2.8, \"daily_positive\": 1.0}, {\"state\": \"OK\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 1, \"negative\": 8.0, \"pending\": 10.0, \"death\": null, \"total\": 19, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 1.9, \"daily_positive\": 0.0}, {\"state\": \"OK\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 1, \"negative\": 8.0, \"pending\": 2.0, \"death\": null, \"total\": 11, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 1.1, \"daily_positive\": 0.0}, {\"state\": \"OK\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 1, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 1, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.1, \"daily_positive\": null}], \"data-2480c6153905f8996f1be25f2c4ce853\": [{\"state\": \"LA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 479, \"negative\": 568.0, \"pending\": null, \"death\": 12.0, \"total\": 1047, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 132.0, \"negative_diff\": 110.0, \"death_diff\": 4.0, \"total_10\": 104.7, \"daily_positive\": 132.0}, {\"state\": \"LA\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 347, \"negative\": 458.0, \"pending\": null, \"death\": 8.0, \"total\": 805, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 107.0, \"negative_diff\": 123.0, \"death_diff\": 2.0, \"total_10\": 80.5, \"daily_positive\": 107.0}, {\"state\": \"LA\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 240, \"negative\": 335.0, \"pending\": null, \"death\": 6.0, \"total\": 575, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 69.0, \"negative_diff\": 49.0, \"death_diff\": 2.0, \"total_10\": 57.5, \"daily_positive\": 69.0}, {\"state\": \"LA\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 171, \"negative\": 286.0, \"pending\": null, \"death\": 4.0, \"total\": 457, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 57.0, \"negative_diff\": 98.0, \"death_diff\": 2.0, \"total_10\": 45.7, \"daily_positive\": 57.0}, {\"state\": \"LA\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 114, \"negative\": 188.0, \"pending\": null, \"death\": 2.0, \"total\": 302, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 23.0, \"negative_diff\": 32.0, \"death_diff\": 0.0, \"total_10\": 30.2, \"daily_positive\": 23.0}, {\"state\": \"LA\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 91, \"negative\": 156.0, \"pending\": null, \"death\": 2.0, \"total\": 247, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 22.0, \"negative_diff\": 47.0, \"death_diff\": null, \"total_10\": 24.7, \"daily_positive\": 22.0}, {\"state\": \"LA\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 69, \"negative\": 109.0, \"pending\": null, \"death\": null, \"total\": 178, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 33.0, \"negative_diff\": 72.0, \"death_diff\": null, \"total_10\": 17.8, \"daily_positive\": 33.0}, {\"state\": \"LA\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 36, \"negative\": 37.0, \"pending\": null, \"death\": null, \"total\": 73, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 22.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 7.3, \"daily_positive\": 22.0}, {\"state\": \"LA\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 14, \"negative\": 37.0, \"pending\": null, \"death\": null, \"total\": 51, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 8.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 5.1, \"daily_positive\": 8.0}, {\"state\": \"LA\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 6, \"negative\": 37.0, \"pending\": null, \"death\": null, \"total\": 43, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": 26.0, \"death_diff\": null, \"total_10\": 4.3, \"daily_positive\": 5.0}, {\"state\": \"LA\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 1, \"negative\": 11.0, \"pending\": null, \"death\": null, \"total\": 12, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 6.0, \"death_diff\": null, \"total_10\": 1.2, \"daily_positive\": 0.0}, {\"state\": \"LA\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 1, \"negative\": 5.0, \"pending\": null, \"death\": null, \"total\": 6, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": 0.0, \"death_diff\": null, \"total_10\": 0.6, \"daily_positive\": 1.0}, {\"state\": \"LA\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 0, \"negative\": 5.0, \"pending\": null, \"death\": null, \"total\": 5, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.5, \"daily_positive\": 0.0}, {\"state\": \"LA\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 0, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 0, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.0, \"daily_positive\": null}], \"data-c4deee1167555a60ac3fe96783b25881\": [{\"state\": \"FL\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 520, \"negative\": 1870.0, \"pending\": 1026.0, \"death\": 10.0, \"total\": 3416, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 130.0, \"negative_diff\": 337.0, \"death_diff\": 2.0, \"total_10\": 341.6, \"daily_positive\": 130.0}, {\"state\": \"FL\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 390, \"negative\": 1533.0, \"pending\": 1019.0, \"death\": 8.0, \"total\": 2942, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 76.0, \"negative_diff\": 308.0, \"death_diff\": 1.0, \"total_10\": 294.2, \"daily_positive\": 76.0}, {\"state\": \"FL\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 314, \"negative\": 1225.0, \"pending\": 954.0, \"death\": 7.0, \"total\": 2493, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 128.0, \"negative_diff\": 285.0, \"death_diff\": 1.0, \"total_10\": 249.3, \"daily_positive\": 128.0}, {\"state\": \"FL\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 186, \"negative\": 940.0, \"pending\": 872.0, \"death\": 6.0, \"total\": 1998, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 45.0, \"negative_diff\": 256.0, \"death_diff\": 2.0, \"total_10\": 199.8, \"daily_positive\": 45.0}, {\"state\": \"FL\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 141, \"negative\": 684.0, \"pending\": 514.0, \"death\": 4.0, \"total\": 1339, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 25.0, \"negative_diff\": 6.0, \"death_diff\": 0.0, \"total_10\": 133.9, \"daily_positive\": 25.0}, {\"state\": \"FL\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 116, \"negative\": 678.0, \"pending\": 454.0, \"death\": 4.0, \"total\": 1248, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 39.0, \"negative_diff\": 200.0, \"death_diff\": 1.0, \"total_10\": 124.8, \"daily_positive\": 39.0}, {\"state\": \"FL\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 77, \"negative\": 478.0, \"pending\": 221.0, \"death\": 3.0, \"total\": 776, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 27.0, \"negative_diff\": 0.0, \"death_diff\": 1.0, \"total_10\": 77.6, \"daily_positive\": 27.0}, {\"state\": \"FL\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 50, \"negative\": 478.0, \"pending\": 221.0, \"death\": 2.0, \"total\": 749, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 18.0, \"negative_diff\": 177.0, \"death_diff\": 0.0, \"total_10\": 74.9, \"daily_positive\": 18.0}, {\"state\": \"FL\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 32, \"negative\": 301.0, \"pending\": 147.0, \"death\": 2.0, \"total\": 480, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 4.0, \"negative_diff\": 0.0, \"death_diff\": 0.0, \"total_10\": 48.0, \"daily_positive\": 4.0}, {\"state\": \"FL\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 28, \"negative\": 301.0, \"pending\": 147.0, \"death\": 2.0, \"total\": 476, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 9.0, \"negative_diff\": 79.0, \"death_diff\": null, \"total_10\": 47.6, \"daily_positive\": 9.0}, {\"state\": \"FL\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 19, \"negative\": 222.0, \"pending\": 155.0, \"death\": null, \"total\": 396, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": 82.0, \"death_diff\": null, \"total_10\": 39.6, \"daily_positive\": 1.0}, {\"state\": \"FL\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 18, \"negative\": 140.0, \"pending\": 115.0, \"death\": null, \"total\": 273, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": 22.0, \"death_diff\": null, \"total_10\": 27.3, \"daily_positive\": 1.0}, {\"state\": \"FL\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 17, \"negative\": 118.0, \"pending\": 108.0, \"death\": null, \"total\": 243, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 3.0, \"negative_diff\": 18.0, \"death_diff\": null, \"total_10\": 24.3, \"daily_positive\": 3.0}, {\"state\": \"FL\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 14, \"negative\": 100.0, \"pending\": 88.0, \"death\": null, \"total\": 202, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": 45.0, \"death_diff\": null, \"total_10\": 20.2, \"daily_positive\": 5.0}, {\"state\": \"FL\", \"date\": \"2020-03-06T00:00:00\", \"positive\": 9, \"negative\": 55.0, \"pending\": 51.0, \"death\": null, \"total\": 115, \"dateChecked\": \"2020-03-06T21:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 24.0, \"death_diff\": null, \"total_10\": 11.5, \"daily_positive\": 0.0}, {\"state\": \"FL\", \"date\": \"2020-03-05T00:00:00\", \"positive\": 9, \"negative\": 31.0, \"pending\": 69.0, \"death\": null, \"total\": 109, \"dateChecked\": \"2020-03-05T21:00:00Z\", \"positive_diff\": 7.0, \"negative_diff\": 7.0, \"death_diff\": null, \"total_10\": 10.9, \"daily_positive\": 7.0}, {\"state\": \"FL\", \"date\": \"2020-03-04T00:00:00\", \"positive\": 2, \"negative\": 24.0, \"pending\": 16.0, \"death\": null, \"total\": 42, \"dateChecked\": \"2020-03-04T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 4.2, \"daily_positive\": null}], \"data-66a15f0a91cacd8abf8cfa13204a7e81\": [{\"state\": \"NJ\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 890, \"negative\": 264.0, \"pending\": 86.0, \"death\": 11.0, \"total\": 1240, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 148.0, \"negative_diff\": 54.0, \"death_diff\": 2.0, \"total_10\": 124.0, \"daily_positive\": 148.0}, {\"state\": \"NJ\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 742, \"negative\": 210.0, \"pending\": 74.0, \"death\": 9.0, \"total\": 1026, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 315.0, \"negative_diff\": 20.0, \"death_diff\": 4.0, \"total_10\": 102.6, \"daily_positive\": 315.0}, {\"state\": \"NJ\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 427, \"negative\": 190.0, \"pending\": 21.0, \"death\": 5.0, \"total\": 638, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 160.0, \"negative_diff\": 27.0, \"death_diff\": 2.0, \"total_10\": 63.8, \"daily_positive\": 160.0}, {\"state\": \"NJ\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 267, \"negative\": 163.0, \"pending\": 55.0, \"death\": 3.0, \"total\": 485, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 89.0, \"negative_diff\": 43.0, \"death_diff\": 1.0, \"total_10\": 48.5, \"daily_positive\": 89.0}, {\"state\": \"NJ\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 178, \"negative\": 120.0, \"pending\": 20.0, \"death\": 2.0, \"total\": 218, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 80.0, \"negative_diff\": 0.0, \"death_diff\": 0.0, \"total_10\": 21.8, \"daily_positive\": 80.0}, {\"state\": \"NJ\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 98, \"negative\": 120.0, \"pending\": 34.0, \"death\": 2.0, \"total\": 252, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 48.0, \"negative_diff\": 23.0, \"death_diff\": 1.0, \"total_10\": 25.2, \"daily_positive\": 48.0}, {\"state\": \"NJ\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 50, \"negative\": 97.0, \"pending\": 80.0, \"death\": 1.0, \"total\": 227, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": 0.0, \"death_diff\": 0.0, \"total_10\": 22.7, \"daily_positive\": 0.0}, {\"state\": \"NJ\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 50, \"negative\": 97.0, \"pending\": 80.0, \"death\": 1.0, \"total\": 227, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 20.0, \"negative_diff\": 23.0, \"death_diff\": 0.0, \"total_10\": 22.7, \"daily_positive\": 20.0}, {\"state\": \"NJ\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 30, \"negative\": 74.0, \"pending\": 20.0, \"death\": 1.0, \"total\": 124, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 6.0, \"negative_diff\": 17.0, \"death_diff\": 0.0, \"total_10\": 12.4, \"daily_positive\": 6.0}, {\"state\": \"NJ\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 24, \"negative\": 57.0, \"pending\": 20.0, \"death\": 1.0, \"total\": 100, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 9.0, \"negative_diff\": 13.0, \"death_diff\": null, \"total_10\": 10.0, \"daily_positive\": 9.0}, {\"state\": \"NJ\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 15, \"negative\": 44.0, \"pending\": 20.0, \"death\": null, \"total\": 79, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 4.0, \"negative_diff\": 9.0, \"death_diff\": null, \"total_10\": 7.9, \"daily_positive\": 4.0}, {\"state\": \"NJ\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 11, \"negative\": 35.0, \"pending\": 14.0, \"death\": null, \"total\": 60, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": 4.0, \"death_diff\": null, \"total_10\": 6.0, \"daily_positive\": 5.0}, {\"state\": \"NJ\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 6, \"negative\": 31.0, \"pending\": 0.0, \"death\": null, \"total\": 37, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 2.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 3.7, \"daily_positive\": 2.0}, {\"state\": \"NJ\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 4, \"negative\": null, \"pending\": 1.0, \"death\": null, \"total\": 5, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": 3.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.5, \"daily_positive\": 3.0}, {\"state\": \"NJ\", \"date\": \"2020-03-06T00:00:00\", \"positive\": 1, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 1, \"dateChecked\": \"2020-03-06T21:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.1, \"daily_positive\": 0.0}, {\"state\": \"NJ\", \"date\": \"2020-03-05T00:00:00\", \"positive\": 1, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 1, \"dateChecked\": \"2020-03-05T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.1, \"daily_positive\": null}], \"data-ddffbf8d2dd76c1c297388ebe03e44ee\": [{\"state\": \"NC\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 137, \"negative\": 3096.0, \"pending\": null, \"death\": 0.0, \"total\": 3233, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 40.0, \"negative_diff\": 688.0, \"death_diff\": 0.0, \"total_10\": 323.3, \"daily_positive\": 40.0}, {\"state\": \"NC\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 97, \"negative\": 2408.0, \"pending\": null, \"death\": 0.0, \"total\": 2505, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 34.0, \"negative_diff\": 621.0, \"death_diff\": 0.0, \"total_10\": 250.5, \"daily_positive\": 34.0}, {\"state\": \"NC\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 63, \"negative\": 1787.0, \"pending\": null, \"death\": 0.0, \"total\": 1850, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 23.0, \"negative_diff\": 1313.0, \"death_diff\": 0.0, \"total_10\": 185.0, \"daily_positive\": 23.0}, {\"state\": \"NC\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 40, \"negative\": 474.0, \"pending\": null, \"death\": 0.0, \"total\": 514, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 7.0, \"negative_diff\": 178.0, \"death_diff\": 0.0, \"total_10\": 51.4, \"daily_positive\": 7.0}, {\"state\": \"NC\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 33, \"negative\": 296.0, \"pending\": 151.0, \"death\": 0.0, \"total\": 480, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": 69.0, \"death_diff\": null, \"total_10\": 48.0, \"daily_positive\": 1.0}, {\"state\": \"NC\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 32, \"negative\": 227.0, \"pending\": 151.0, \"death\": null, \"total\": 410, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 9.0, \"negative_diff\": 90.0, \"death_diff\": null, \"total_10\": 41.0, \"daily_positive\": 9.0}, {\"state\": \"NC\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 23, \"negative\": 137.0, \"pending\": null, \"death\": null, \"total\": 160, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 8.0, \"negative_diff\": 51.0, \"death_diff\": null, \"total_10\": 16.0, \"daily_positive\": 8.0}, {\"state\": \"NC\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 15, \"negative\": 86.0, \"pending\": null, \"death\": null, \"total\": 101, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 3.0, \"negative_diff\": 26.0, \"death_diff\": null, \"total_10\": 10.1, \"daily_positive\": 3.0}, {\"state\": \"NC\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 12, \"negative\": 60.0, \"pending\": null, \"death\": null, \"total\": 72, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 7.2, \"daily_positive\": 5.0}, {\"state\": \"NC\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 7, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 7, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.7, \"daily_positive\": 0.0}, {\"state\": \"NC\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 7, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 7, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.7, \"daily_positive\": 5.0}, {\"state\": \"NC\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": 0.0}, {\"state\": \"NC\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": 0.0}, {\"state\": \"NC\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": 0.0}, {\"state\": \"NC\", \"date\": \"2020-03-06T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-06T21:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": 1.0}, {\"state\": \"NC\", \"date\": \"2020-03-05T00:00:00\", \"positive\": 1, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 1, \"dateChecked\": \"2020-03-05T21:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.1, \"daily_positive\": 0.0}, {\"state\": \"NC\", \"date\": \"2020-03-04T00:00:00\", \"positive\": 1, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 1, \"dateChecked\": \"2020-03-04T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.1, \"daily_positive\": null}], \"data-3d1b17d38cf3d74b0371cfc3b471f3bc\": [{\"state\": \"GA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 420, \"negative\": 1966.0, \"pending\": null, \"death\": 13.0, \"total\": 2386, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"positive_diff\": 133.0, \"negative_diff\": 422.0, \"death_diff\": 3.0, \"total_10\": 238.6, \"daily_positive\": 133.0}, {\"state\": \"GA\", \"date\": \"2020-03-19T00:00:00\", \"positive\": 287, \"negative\": 1544.0, \"pending\": null, \"death\": 10.0, \"total\": 1831, \"dateChecked\": \"2020-03-19T20:00:00Z\", \"positive_diff\": 90.0, \"negative_diff\": 233.0, \"death_diff\": 9.0, \"total_10\": 183.1, \"daily_positive\": 90.0}, {\"state\": \"GA\", \"date\": \"2020-03-18T00:00:00\", \"positive\": 197, \"negative\": 1311.0, \"pending\": null, \"death\": 1.0, \"total\": 1508, \"dateChecked\": \"2020-03-18T20:00:00Z\", \"positive_diff\": 51.0, \"negative_diff\": null, \"death_diff\": 0.0, \"total_10\": 150.8, \"daily_positive\": 51.0}, {\"state\": \"GA\", \"date\": \"2020-03-17T00:00:00\", \"positive\": 146, \"negative\": null, \"pending\": null, \"death\": 1.0, \"total\": 146, \"dateChecked\": \"2020-03-17T20:00:00Z\", \"positive_diff\": 25.0, \"negative_diff\": null, \"death_diff\": 0.0, \"total_10\": 14.6, \"daily_positive\": 25.0}, {\"state\": \"GA\", \"date\": \"2020-03-16T00:00:00\", \"positive\": 121, \"negative\": null, \"pending\": null, \"death\": 1.0, \"total\": 121, \"dateChecked\": \"2020-03-16T20:00:00Z\", \"positive_diff\": 22.0, \"negative_diff\": null, \"death_diff\": 0.0, \"total_10\": 12.1, \"daily_positive\": 22.0}, {\"state\": \"GA\", \"date\": \"2020-03-15T00:00:00\", \"positive\": 99, \"negative\": null, \"pending\": null, \"death\": 1.0, \"total\": 99, \"dateChecked\": \"2020-03-15T20:00:00Z\", \"positive_diff\": 33.0, \"negative_diff\": null, \"death_diff\": 0.0, \"total_10\": 9.9, \"daily_positive\": 33.0}, {\"state\": \"GA\", \"date\": \"2020-03-14T00:00:00\", \"positive\": 66, \"negative\": null, \"pending\": null, \"death\": 1.0, \"total\": 66, \"dateChecked\": \"2020-03-14T20:00:00Z\", \"positive_diff\": 24.0, \"negative_diff\": null, \"death_diff\": 0.0, \"total_10\": 6.6, \"daily_positive\": 24.0}, {\"state\": \"GA\", \"date\": \"2020-03-13T00:00:00\", \"positive\": 42, \"negative\": null, \"pending\": null, \"death\": 1.0, \"total\": 42, \"dateChecked\": \"2020-03-13T20:00:00Z\", \"positive_diff\": 11.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 4.2, \"daily_positive\": 11.0}, {\"state\": \"GA\", \"date\": \"2020-03-12T00:00:00\", \"positive\": 31, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 31, \"dateChecked\": \"2020-03-12T20:00:00Z\", \"positive_diff\": 9.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 3.1, \"daily_positive\": 9.0}, {\"state\": \"GA\", \"date\": \"2020-03-11T00:00:00\", \"positive\": 22, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 22, \"dateChecked\": \"2020-03-11T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 2.2, \"daily_positive\": 5.0}, {\"state\": \"GA\", \"date\": \"2020-03-10T00:00:00\", \"positive\": 17, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 17, \"dateChecked\": \"2020-03-10T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 1.7, \"daily_positive\": 5.0}, {\"state\": \"GA\", \"date\": \"2020-03-09T00:00:00\", \"positive\": 12, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 12, \"dateChecked\": \"2020-03-09T20:00:00Z\", \"positive_diff\": 5.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 1.2, \"daily_positive\": 5.0}, {\"state\": \"GA\", \"date\": \"2020-03-08T00:00:00\", \"positive\": 7, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 7, \"dateChecked\": \"2020-03-08T20:00:00Z\", \"positive_diff\": 1.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.7, \"daily_positive\": 1.0}, {\"state\": \"GA\", \"date\": \"2020-03-07T00:00:00\", \"positive\": 6, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 6, \"dateChecked\": \"2020-03-07T21:00:00Z\", \"positive_diff\": 4.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.6, \"daily_positive\": 4.0}, {\"state\": \"GA\", \"date\": \"2020-03-06T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-06T21:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": 0.0}, {\"state\": \"GA\", \"date\": \"2020-03-05T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-05T21:00:00Z\", \"positive_diff\": 0.0, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": 0.0}, {\"state\": \"GA\", \"date\": \"2020-03-04T00:00:00\", \"positive\": 2, \"negative\": null, \"pending\": null, \"death\": null, \"total\": 2, \"dateChecked\": \"2020-03-04T21:00:00Z\", \"positive_diff\": null, \"negative_diff\": null, \"death_diff\": null, \"total_10\": 0.2, \"daily_positive\": null}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.HConcatChart(...)"
]
},
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# produce the charts for a few states\n",
"\n",
"charts=[]\n",
"for state in ['WA', 'NY', 'MA', 'CA', 'OK','LA','FL','NJ','NC','GA']: \n",
" state_df = tdf_diff[tdf_diff['state'] == state].copy()\n",
"\n",
" state_df.loc[:,'daily_positive'] = state_df['positive'][::-1].diff()\n",
" state_df.loc[:,'total_10'] = state_df['total']/10.\n",
"\n",
" base = alt.Chart(state_df, title=state).encode(alt.X('date', axis=alt.Axis(title='Date'))).properties(width=250, height=150)\n",
" dailies = base.mark_bar(size=10).encode(alt.Y('daily_positive', axis=alt.Axis(title='Daily positive')))\n",
"\n",
" totals = base.mark_line(color='lightgreen').encode(alt.Y('total_10', axis=alt.Axis(title='Tests/10'))) \n",
" positives = totals.mark_line(color='red').encode(alt.Y('positive', axis=alt.Axis(title='# Positive')))\n",
" cumulative = totals + positives\n",
"\n",
" charts.append(alt.layer(dailies, cumulative).resolve_scale(y='independent'))\n",
"\n",
"\n",
"alt.hconcat(*charts)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Counts per 100k"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"pop_df = pd.read_csv('../../data/geodata/us_pop_fung_2019.csv').set_index('ST')"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"56 states/territories have data on this date.\n"
]
}
],
"source": [
"most_recent_test_date = data_df['date'].max()\n",
"most_recent_df = data_df[data_df['date'] == most_recent_test_date].set_index('state')\n",
"print(\"Most recent test date\", most_recent_test_date)\n",
"print(len(most_recent_df), \"states/territories have data on this date.\")"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"most_recent_df['total/100k'] = (most_recent_df['total'] / pop_df['Population']) * 100000\n",
"most_recent_df['total/positive'] = (most_recent_df['total'] / most_recent_df['positive'])\n",
"most_recent_df = most_recent_df.reset_index()"
]
},
{
"cell_type": "code",
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
"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>state</th>\n",
" <th>date</th>\n",
" <th>positive</th>\n",
" <th>negative</th>\n",
" <th>pending</th>\n",
" <th>death</th>\n",
" <th>total</th>\n",
" <th>dateChecked</th>\n",
" <th>total/100k</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AK</td>\n",
" <td>2020-03-20</td>\n",
" <td>12</td>\n",
" <td>686.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>698</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>95.414499</td>\n",
" <td>58.166667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>AL</td>\n",
" <td>28.0</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>109</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>2.223045</td>\n",
" <td>1.345679</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>AR</td>\n",
" <td>2020-03-20</td>\n",
" <td>96</td>\n",
" <td>351.0</td>\n",
" <td>203.0</td>\n",
" <td>650</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>21.538691</td>\n",
" <td>6.770833</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>AS</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>AZ</td>\n",
" <td>2020-03-20</td>\n",
" <td>65</td>\n",
" <td>211.0</td>\n",
" <td>101.0</td>\n",
" <td>377</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>5.179484</td>\n",
" <td>5.800000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" state date positive negative pending death total \\\n",
"0 AK 2020-03-20 12 686.0 NaN NaN 698 \n",
"1 AL 2020-03-20 81 28.0 NaN 0.0 109 \n",
"2 AR 2020-03-20 96 351.0 203.0 NaN 650 \n",
"3 AS 2020-03-20 0 NaN NaN 0.0 0 \n",
"4 AZ 2020-03-20 65 211.0 101.0 0.0 377 \n",
" dateChecked total/100k total/positive \n",
"0 2020-03-20T20:00:00Z 95.414499 58.166667 \n",
"1 2020-03-20T20:00:00Z 2.223045 1.345679 \n",
"2 2020-03-20T20:00:00Z 21.538691 6.770833 \n",
"3 2020-03-20T20:00:00Z NaN NaN \n",
"4 2020-03-20T20:00:00Z 5.179484 5.800000 "
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"most_recent_df.head()"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<div id=\"altair-viz-cd5d7f00b447409eab50e64235fc1cbb\"></div>\n",
"<script type=\"text/javascript\">\n",
" (function(spec, embedOpt){\n",
" const outputDiv = document.getElementById(\"altair-viz-cd5d7f00b447409eab50e64235fc1cbb\");\n",
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
" 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-c1e8abbd60f610511423df584e195bc6\"}, \"mark\": \"bar\", \"encoding\": {\"x\": {\"type\": \"nominal\", \"field\": \"state\", \"sort\": \"y\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"total/100k\"}}, \"title\": \"Tests per 100k\", \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.0.2.json\", \"datasets\": {\"data-c1e8abbd60f610511423df584e195bc6\": [{\"state\": \"AL\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 81, \"negative\": 28.0, \"pending\": null, \"death\": 0.0, \"total\": 109, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 2.2230448167874557, \"total/positive\": 1.345679012345679}, {\"state\": \"OH\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 169, \"negative\": 140.0, \"pending\": null, \"death\": 1.0, \"total\": 309, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 2.6434883780616127, \"total/positive\": 1.8284023668639053}, {\"state\": \"MD\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 149, \"negative\": 94.0, \"pending\": null, \"death\": 1.0, \"total\": 243, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 4.0193989757975945, \"total/positive\": 1.6308724832214765}, {\"state\": \"AZ\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 65, \"negative\": 211.0, \"pending\": 101.0, \"death\": 0.0, \"total\": 377, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 5.179484241522235, \"total/positive\": 5.8}, {\"state\": \"MO\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 47, \"negative\": 369.0, \"pending\": null, \"death\": 1.0, \"total\": 416, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 6.7780835881088946, \"total/positive\": 8.851063829787234}, {\"state\": \"DE\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 38, \"negative\": 36.0, \"pending\": null, \"death\": 0.0, \"total\": 74, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 7.599377261841679, \"total/positive\": 1.9473684210526316}, {\"state\": \"IN\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 79, \"negative\": 475.0, \"pending\": null, \"death\": 2.0, \"total\": 554, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 8.22908464504794, \"total/positive\": 7.012658227848101}, {\"state\": \"HI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 26, \"negative\": 124.0, \"pending\": 9.0, \"death\": null, \"total\": 159, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 11.229828685078877, \"total/positive\": 6.115384615384615}, {\"state\": \"TN\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 228, \"negative\": 563.0, \"pending\": null, \"death\": null, \"total\": 791, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 11.575879671730883, \"total/positive\": 3.469298245614035}, {\"state\": \"WV\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 7, \"negative\": 219.0, \"pending\": 13.0, \"death\": 0.0, \"total\": 239, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 13.373270357726588, \"total/positive\": 34.142857142857146}, {\"state\": \"NJ\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 890, \"negative\": 264.0, \"pending\": 86.0, \"death\": 11.0, \"total\": 1240, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 13.960520997636843, \"total/positive\": 1.3932584269662922}, {\"state\": \"NE\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 32, \"negative\": 240.0, \"pending\": null, \"death\": 0.0, \"total\": 272, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 14.061149457611839, \"total/positive\": 8.5}, {\"state\": \"KY\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 47, \"negative\": 592.0, \"pending\": null, \"death\": 1.0, \"total\": 639, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 14.302747761530442, \"total/positive\": 13.595744680851064}, {\"state\": \"KS\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 44, \"negative\": 417.0, \"pending\": null, \"death\": 1.0, \"total\": 461, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 15.823903636889122, \"total/positive\": 10.477272727272727}, {\"state\": \"FL\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 520, \"negative\": 1870.0, \"pending\": 1026.0, \"death\": 10.0, \"total\": 3416, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 15.904841371323243, \"total/positive\": 6.569230769230769}, {\"state\": \"SC\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 81, \"negative\": 833.0, \"pending\": null, \"death\": 1.0, \"total\": 914, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 17.752005646458514, \"total/positive\": 11.283950617283951}, {\"state\": \"TX\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 194, \"negative\": 5083.0, \"pending\": null, \"death\": 5.0, \"total\": 5277, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 18.199136629095698, \"total/positive\": 27.201030927835053}, {\"state\": \"AR\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 96, \"negative\": 351.0, \"pending\": 203.0, \"death\": null, \"total\": 650, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 21.53869094463728, \"total/positive\": 6.770833333333333}, {\"state\": \"IA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 45, \"negative\": 642.0, \"pending\": null, \"death\": null, \"total\": 687, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 21.77447726991794, \"total/positive\": 15.266666666666667}, {\"state\": \"PA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 268, \"negative\": 2574.0, \"pending\": null, \"death\": 1.0, \"total\": 2842, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 22.199675378568127, \"total/positive\": 10.604477611940299}, {\"state\": \"CT\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 194, \"negative\": 604.0, \"pending\": null, \"death\": 3.0, \"total\": 798, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 22.382489824802324, \"total/positive\": 4.11340206185567}, {\"state\": \"GA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 420, \"negative\": 1966.0, \"pending\": null, \"death\": 13.0, \"total\": 2386, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 22.472496386364185, \"total/positive\": 5.680952380952381}, {\"state\": \"LA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 479, \"negative\": 568.0, \"pending\": null, \"death\": 12.0, \"total\": 1047, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 22.521970214210395, \"total/positive\": 2.18580375782881}, {\"state\": \"OK\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 49, \"negative\": 538.0, \"pending\": 374.0, \"death\": 1.0, \"total\": 961, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 24.28625329829306, \"total/positive\": 19.612244897959183}, {\"state\": \"MS\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 80, \"negative\": 695.0, \"pending\": null, \"death\": 1.0, \"total\": 775, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 26.040362898497353, \"total/positive\": 9.6875}, {\"state\": \"MI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 549, \"negative\": 2069.0, \"pending\": null, \"death\": 3.0, \"total\": 2618, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 26.214453656440657, \"total/positive\": 4.768670309653916}, {\"state\": \"VA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 114, \"negative\": 2211.0, \"pending\": null, \"death\": 2.0, \"total\": 2325, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 27.239116918373682, \"total/positive\": 20.394736842105264}, {\"state\": \"CA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 1063, \"negative\": 10424.0, \"pending\": null, \"death\": 20.0, \"total\": 11487, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 29.072016525114265, \"total/positive\": 10.80620884289746}, {\"state\": \"NC\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 137, \"negative\": 3096.0, \"pending\": null, \"death\": 0.0, \"total\": 3233, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 30.82545868244381, \"total/positive\": 23.598540145985403}, {\"state\": \"IL\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 590, \"negative\": 3696.0, \"pending\": null, \"death\": 5.0, \"total\": 4286, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 33.82307878244176, \"total/positive\": 7.264406779661017}, {\"state\": \"ID\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 23, \"negative\": 590.0, \"pending\": null, \"death\": null, \"total\": 613, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 34.20634854204507, \"total/positive\": 26.652173913043477}, {\"state\": \"CO\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 277, \"negative\": 2675.0, \"pending\": null, \"death\": 3.0, \"total\": 2952, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 51.26124899630753, \"total/positive\": 10.657039711191336}, {\"state\": \"MA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 413, \"negative\": 3678.0, \"pending\": null, \"death\": 1.0, \"total\": 4091, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 58.86751901538858, \"total/positive\": 9.905569007263923}, {\"state\": \"OR\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 114, \"negative\": 2003.0, \"pending\": 433.0, \"death\": 3.0, \"total\": 2550, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 60.45896176077361, \"total/positive\": 22.36842105263158}, {\"state\": \"WY\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 19, \"negative\": 331.0, \"pending\": null, \"death\": null, \"total\": 350, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 60.47422156718081, \"total/positive\": 18.42105263157895}, {\"state\": \"WI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 206, \"negative\": 3455.0, \"pending\": null, \"death\": 3.0, \"total\": 3661, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 62.87748388388774, \"total/positive\": 17.771844660194176}, {\"state\": \"UT\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 112, \"negative\": 2035.0, \"pending\": null, \"death\": 0.0, \"total\": 2147, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 66.9690619777302, \"total/positive\": 19.169642857142858}, {\"state\": \"NV\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 109, \"negative\": 1992.0, \"pending\": -3.0, \"death\": 1.0, \"total\": 2098, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 68.11343321572025, \"total/positive\": 19.24770642201835}, {\"state\": \"MN\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 115, \"negative\": 3741.0, \"pending\": null, \"death\": null, \"total\": 3856, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 68.37325555993725, \"total/positive\": 33.530434782608694}, {\"state\": \"RI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 54, \"negative\": 654.0, \"pending\": 140.0, \"death\": null, \"total\": 848, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 80.0482555049695, \"total/positive\": 15.703703703703704}, {\"state\": \"DC\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 71, \"negative\": 501.0, \"pending\": 1.0, \"death\": 1.0, \"total\": 573, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 81.1903382080598, \"total/positive\": 8.070422535211268}, {\"state\": \"MT\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 16, \"negative\": 931.0, \"pending\": null, \"death\": null, \"total\": 947, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 88.60586576445249, \"total/positive\": 59.1875}, {\"state\": \"AK\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 12, \"negative\": 686.0, \"pending\": null, \"death\": null, \"total\": 698, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 95.4144994497946, \"total/positive\": 58.166666666666664}, {\"state\": \"NH\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 44, \"negative\": 745.0, \"pending\": 631.0, \"death\": null, \"total\": 1420, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 104.43395692172822, \"total/positive\": 32.27272727272727}, {\"state\": \"SD\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 14, \"negative\": 663.0, \"pending\": 270.0, \"death\": 1.0, \"total\": 947, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 107.04689603564763, \"total/positive\": 67.64285714285714}, {\"state\": \"ND\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 20, \"negative\": 800.0, \"pending\": null, \"death\": 0.0, \"total\": 820, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 107.60279347349692, \"total/positive\": 41.0}, {\"state\": \"VT\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 29, \"negative\": 779.0, \"pending\": null, \"death\": 2.0, \"total\": 808, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 129.48946215398027, \"total/positive\": 27.862068965517242}, {\"state\": \"NY\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 7102, \"negative\": 25325.0, \"pending\": null, \"death\": 35.0, \"total\": 32427, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 166.6892760662174, \"total/positive\": 4.565896930442129}, {\"state\": \"ME\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 57, \"negative\": 2264.0, \"pending\": null, \"death\": null, \"total\": 2321, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 172.6662163408748, \"total/positive\": 40.719298245614034}, {\"state\": \"NM\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 43, \"negative\": 3771.0, \"pending\": null, \"death\": null, \"total\": 3814, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 181.893707116794, \"total/positive\": 88.69767441860465}, {\"state\": \"WA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 1376, \"negative\": 19336.0, \"pending\": null, \"death\": 74.0, \"total\": 20712, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": 271.9933162553958, \"total/positive\": 15.05232558139535}, {\"state\": \"AS\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 0, \"negative\": null, \"pending\": null, \"death\": 0.0, \"total\": 0, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": null, \"total/positive\": null}, {\"state\": \"GU\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 14, \"negative\": 86.0, \"pending\": null, \"death\": null, \"total\": 100, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": null, \"total/positive\": 7.142857142857143}, {\"state\": \"MP\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 0, \"negative\": null, \"pending\": null, \"death\": 0.0, \"total\": 0, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": null, \"total/positive\": null}, {\"state\": \"PR\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 14, \"negative\": 114.0, \"pending\": 52.0, \"death\": null, \"total\": 180, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": null, \"total/positive\": 12.857142857142858}, {\"state\": \"VI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 3, \"negative\": null, \"pending\": null, \"death\": 0.0, \"total\": 3, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"total/100k\": null, \"total/positive\": 1.0}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.Chart(...)"
]
},
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"chart = alt.Chart(most_recent_df.sort_values('total/100k'), title=\"Tests per 100k\")\n",
"chart.mark_bar().encode(alt.X('state', sort='y'), alt.Y('total/100k'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tests per 100k Population & Total Positives"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"#Load most recent data and city population counts\n",
"data_df = pd.read_json('../../data/covidtracking/states-daily.json')\n",
"data_df['date'] = pd.to_datetime(data_df['date'], format=\"%Y%m%d\")\n",
"pop_df = pd.read_csv('../../data/geodata/us_pop_fung_2019.csv').set_index('ST')"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"56 states/territories have data on this date.\n"
]
}
],
"source": [
"most_recent_test_date = data_df['date'].max()\n",
"most_recent_df = data_df[data_df['date'] == most_recent_test_date].set_index('state')\n",
"print(\"Most recent test date\", most_recent_test_date)\n",
"print(len(most_recent_df), \"states/territories have data on this date.\")"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [],
"source": [
"most_recent_df['tests/100k'] = round((most_recent_df['total'] / pop_df['Population']) * 100000,2)\n",
"most_recent_df['pos/100k'] = round((most_recent_df['positive'] / pop_df['Population']) * 100000,2)\n",
"most_recent_df['total/positive'] = round((most_recent_df['total'] / most_recent_df['positive']),2)\n",
"most_recent_df = most_recent_df.reset_index()"
]
},
{
"cell_type": "code",
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
"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>state</th>\n",
" <th>date</th>\n",
" <th>positive</th>\n",
" <th>negative</th>\n",
" <th>pending</th>\n",
" <th>death</th>\n",
" <th>total</th>\n",
" <th>dateChecked</th>\n",
" <th>tests/100k</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AK</td>\n",
" <td>2020-03-20</td>\n",
" <td>12</td>\n",
" <td>686.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>698</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>95.41</td>\n",
" <td>1.64</td>\n",
" <td>58.17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>AL</td>\n",
" <td>28.0</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>109</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>2.22</td>\n",
" <td>1.65</td>\n",
" <td>1.35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>AR</td>\n",
" <td>2020-03-20</td>\n",
" <td>96</td>\n",
" <td>351.0</td>\n",
" <td>203.0</td>\n",
" <td>650</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>21.54</td>\n",
" <td>3.18</td>\n",
" <td>6.77</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>AS</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>AZ</td>\n",
" <td>2020-03-20</td>\n",
" <td>65</td>\n",
" <td>211.0</td>\n",
" <td>101.0</td>\n",
" <td>377</td>\n",
" <td>2020-03-20T20:00:00Z</td>\n",
" <td>5.18</td>\n",
" <td>0.89</td>\n",
" <td>5.80</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" state date positive negative pending death total \\\n",
"0 AK 2020-03-20 12 686.0 NaN NaN 698 \n",
"1 AL 2020-03-20 81 28.0 NaN 0.0 109 \n",
"2 AR 2020-03-20 96 351.0 203.0 NaN 650 \n",
"3 AS 2020-03-20 0 NaN NaN 0.0 0 \n",
"4 AZ 2020-03-20 65 211.0 101.0 0.0 377 \n",
" dateChecked tests/100k pos/100k total/positive \n",
"0 2020-03-20T20:00:00Z 95.41 1.64 58.17 \n",
"1 2020-03-20T20:00:00Z 2.22 1.65 1.35 \n",
"2 2020-03-20T20:00:00Z 21.54 3.18 6.77 \n",
"3 2020-03-20T20:00:00Z NaN NaN NaN \n",
"4 2020-03-20T20:00:00Z 5.18 0.89 5.80 "
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"most_recent_df.head()"
]
},
{
"cell_type": "code",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<div id=\"altair-viz-2185da6a40fd430e87aafaf4c171c923\"></div>\n",
"<script type=\"text/javascript\">\n",
" (function(spec, embedOpt){\n",
" const outputDiv = document.getElementById(\"altair-viz-2185da6a40fd430e87aafaf4c171c923\");\n",
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
" 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}}, \"layer\": [{\"mark\": {\"type\": \"bar\", \"color\": \"lightgrey\"}, \"encoding\": {\"tooltip\": [{\"type\": \"nominal\", \"field\": \"state\"}, {\"type\": \"quantitative\", \"field\": \"pos/100k\"}, {\"type\": \"quantitative\", \"field\": \"tests/100k\"}, {\"type\": \"quantitative\", \"field\": \"positive\"}], \"x\": {\"type\": \"nominal\", \"field\": \"state\", \"sort\": \"x\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"grid\": true, \"title\": \"Tests / 100k population\"}, \"field\": \"tests/100k\"}}, \"title\": \"COVID-19 in the States : tests and positive cases / 100k Population\"}, {\"mark\": {\"type\": \"circle\", \"color\": \"blue\", \"size\": 60}, \"encoding\": {\"tooltip\": [{\"type\": \"nominal\", \"field\": \"state\"}, {\"type\": \"quantitative\", \"field\": \"pos/100k\"}, {\"type\": \"quantitative\", \"field\": \"tests/100k\"}, {\"type\": \"quantitative\", \"field\": \"positive\"}], \"x\": {\"type\": \"nominal\", \"field\": \"state\", \"sort\": \"x\"}, \"y\": {\"type\": \"quantitative\", \"axis\": {\"tickMinStep\": 5, \"title\": \"Positive COVID-19 Cases/100k population\"}, \"field\": \"pos/100k\"}}, \"title\": \"COVID-19 in the States : tests and positive cases / 100k Population\"}], \"data\": {\"name\": \"data-4c75d1ce0dd41789750ce2a59fa776ac\"}, \"height\": 600, \"resolve\": {\"scale\": {\"y\": \"independent\"}}, \"width\": 800, \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.0.2.json\", \"datasets\": {\"data-4c75d1ce0dd41789750ce2a59fa776ac\": [{\"state\": \"AL\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 81, \"negative\": 28.0, \"pending\": null, \"death\": 0.0, \"total\": 109, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 2.22, \"pos/100k\": 1.65, \"total/positive\": 1.35}, {\"state\": \"OH\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 169, \"negative\": 140.0, \"pending\": null, \"death\": 1.0, \"total\": 309, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 2.64, \"pos/100k\": 1.45, \"total/positive\": 1.83}, {\"state\": \"MD\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 149, \"negative\": 94.0, \"pending\": null, \"death\": 1.0, \"total\": 243, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 4.02, \"pos/100k\": 2.46, \"total/positive\": 1.63}, {\"state\": \"AZ\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 65, \"negative\": 211.0, \"pending\": 101.0, \"death\": 0.0, \"total\": 377, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 5.18, \"pos/100k\": 0.89, \"total/positive\": 5.8}, {\"state\": \"MO\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 47, \"negative\": 369.0, \"pending\": null, \"death\": 1.0, \"total\": 416, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 6.78, \"pos/100k\": 0.77, \"total/positive\": 8.85}, {\"state\": \"DE\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 38, \"negative\": 36.0, \"pending\": null, \"death\": 0.0, \"total\": 74, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 7.6, \"pos/100k\": 3.9, \"total/positive\": 1.95}, {\"state\": \"IN\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 79, \"negative\": 475.0, \"pending\": null, \"death\": 2.0, \"total\": 554, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 8.23, \"pos/100k\": 1.17, \"total/positive\": 7.01}, {\"state\": \"HI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 26, \"negative\": 124.0, \"pending\": 9.0, \"death\": null, \"total\": 159, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 11.23, \"pos/100k\": 1.84, \"total/positive\": 6.12}, {\"state\": \"TN\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 228, \"negative\": 563.0, \"pending\": null, \"death\": null, \"total\": 791, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 11.58, \"pos/100k\": 3.34, \"total/positive\": 3.47}, {\"state\": \"WV\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 7, \"negative\": 219.0, \"pending\": 13.0, \"death\": 0.0, \"total\": 239, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 13.37, \"pos/100k\": 0.39, \"total/positive\": 34.14}, {\"state\": \"NJ\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 890, \"negative\": 264.0, \"pending\": 86.0, \"death\": 11.0, \"total\": 1240, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 13.96, \"pos/100k\": 10.02, \"total/positive\": 1.39}, {\"state\": \"NE\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 32, \"negative\": 240.0, \"pending\": null, \"death\": 0.0, \"total\": 272, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 14.06, \"pos/100k\": 1.65, \"total/positive\": 8.5}, {\"state\": \"KY\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 47, \"negative\": 592.0, \"pending\": null, \"death\": 1.0, \"total\": 639, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 14.3, \"pos/100k\": 1.05, \"total/positive\": 13.6}, {\"state\": \"KS\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 44, \"negative\": 417.0, \"pending\": null, \"death\": 1.0, \"total\": 461, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 15.82, \"pos/100k\": 1.51, \"total/positive\": 10.48}, {\"state\": \"FL\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 520, \"negative\": 1870.0, \"pending\": 1026.0, \"death\": 10.0, \"total\": 3416, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 15.9, \"pos/100k\": 2.42, \"total/positive\": 6.57}, {\"state\": \"SC\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 81, \"negative\": 833.0, \"pending\": null, \"death\": 1.0, \"total\": 914, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 17.75, \"pos/100k\": 1.57, \"total/positive\": 11.28}, {\"state\": \"TX\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 194, \"negative\": 5083.0, \"pending\": null, \"death\": 5.0, \"total\": 5277, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 18.2, \"pos/100k\": 0.67, \"total/positive\": 27.2}, {\"state\": \"AR\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 96, \"negative\": 351.0, \"pending\": 203.0, \"death\": null, \"total\": 650, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 21.54, \"pos/100k\": 3.18, \"total/positive\": 6.77}, {\"state\": \"IA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 45, \"negative\": 642.0, \"pending\": null, \"death\": null, \"total\": 687, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 21.77, \"pos/100k\": 1.43, \"total/positive\": 15.27}, {\"state\": \"PA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 268, \"negative\": 2574.0, \"pending\": null, \"death\": 1.0, \"total\": 2842, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 22.2, \"pos/100k\": 2.09, \"total/positive\": 10.6}, {\"state\": \"CT\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 194, \"negative\": 604.0, \"pending\": null, \"death\": 3.0, \"total\": 798, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 22.38, \"pos/100k\": 5.44, \"total/positive\": 4.11}, {\"state\": \"GA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 420, \"negative\": 1966.0, \"pending\": null, \"death\": 13.0, \"total\": 2386, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 22.47, \"pos/100k\": 3.96, \"total/positive\": 5.68}, {\"state\": \"LA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 479, \"negative\": 568.0, \"pending\": null, \"death\": 12.0, \"total\": 1047, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 22.52, \"pos/100k\": 10.3, \"total/positive\": 2.19}, {\"state\": \"OK\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 49, \"negative\": 538.0, \"pending\": 374.0, \"death\": 1.0, \"total\": 961, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 24.29, \"pos/100k\": 1.24, \"total/positive\": 19.61}, {\"state\": \"MS\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 80, \"negative\": 695.0, \"pending\": null, \"death\": 1.0, \"total\": 775, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 26.04, \"pos/100k\": 2.69, \"total/positive\": 9.69}, {\"state\": \"MI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 549, \"negative\": 2069.0, \"pending\": null, \"death\": 3.0, \"total\": 2618, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 26.21, \"pos/100k\": 5.5, \"total/positive\": 4.77}, {\"state\": \"VA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 114, \"negative\": 2211.0, \"pending\": null, \"death\": 2.0, \"total\": 2325, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 27.24, \"pos/100k\": 1.34, \"total/positive\": 20.39}, {\"state\": \"CA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 1063, \"negative\": 10424.0, \"pending\": null, \"death\": 20.0, \"total\": 11487, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 29.07, \"pos/100k\": 2.69, \"total/positive\": 10.81}, {\"state\": \"NC\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 137, \"negative\": 3096.0, \"pending\": null, \"death\": 0.0, \"total\": 3233, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 30.83, \"pos/100k\": 1.31, \"total/positive\": 23.6}, {\"state\": \"IL\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 590, \"negative\": 3696.0, \"pending\": null, \"death\": 5.0, \"total\": 4286, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 33.82, \"pos/100k\": 4.66, \"total/positive\": 7.26}, {\"state\": \"ID\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 23, \"negative\": 590.0, \"pending\": null, \"death\": null, \"total\": 613, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 34.21, \"pos/100k\": 1.28, \"total/positive\": 26.65}, {\"state\": \"CO\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 277, \"negative\": 2675.0, \"pending\": null, \"death\": 3.0, \"total\": 2952, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 51.26, \"pos/100k\": 4.81, \"total/positive\": 10.66}, {\"state\": \"MA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 413, \"negative\": 3678.0, \"pending\": null, \"death\": 1.0, \"total\": 4091, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 58.87, \"pos/100k\": 5.94, \"total/positive\": 9.91}, {\"state\": \"OR\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 114, \"negative\": 2003.0, \"pending\": 433.0, \"death\": 3.0, \"total\": 2550, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 60.46, \"pos/100k\": 2.7, \"total/positive\": 22.37}, {\"state\": \"WY\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 19, \"negative\": 331.0, \"pending\": null, \"death\": null, \"total\": 350, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 60.47, \"pos/100k\": 3.28, \"total/positive\": 18.42}, {\"state\": \"WI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 206, \"negative\": 3455.0, \"pending\": null, \"death\": 3.0, \"total\": 3661, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 62.88, \"pos/100k\": 3.54, \"total/positive\": 17.77}, {\"state\": \"UT\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 112, \"negative\": 2035.0, \"pending\": null, \"death\": 0.0, \"total\": 2147, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 66.97, \"pos/100k\": 3.49, \"total/positive\": 19.17}, {\"state\": \"NV\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 109, \"negative\": 1992.0, \"pending\": -3.0, \"death\": 1.0, \"total\": 2098, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 68.11, \"pos/100k\": 3.54, \"total/positive\": 19.25}, {\"state\": \"MN\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 115, \"negative\": 3741.0, \"pending\": null, \"death\": null, \"total\": 3856, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 68.37, \"pos/100k\": 2.04, \"total/positive\": 33.53}, {\"state\": \"RI\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 54, \"negative\": 654.0, \"pending\": 140.0, \"death\": null, \"total\": 848, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 80.05, \"pos/100k\": 5.1, \"total/positive\": 15.7}, {\"state\": \"DC\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 71, \"negative\": 501.0, \"pending\": 1.0, \"death\": 1.0, \"total\": 573, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 81.19, \"pos/100k\": 10.06, \"total/positive\": 8.07}, {\"state\": \"MT\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 16, \"negative\": 931.0, \"pending\": null, \"death\": null, \"total\": 947, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 88.61, \"pos/100k\": 1.5, \"total/positive\": 59.19}, {\"state\": \"AK\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 12, \"negative\": 686.0, \"pending\": null, \"death\": null, \"total\": 698, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 95.41, \"pos/100k\": 1.64, \"total/positive\": 58.17}, {\"state\": \"NH\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 44, \"negative\": 745.0, \"pending\": 631.0, \"death\": null, \"total\": 1420, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 104.43, \"pos/100k\": 3.24, \"total/positive\": 32.27}, {\"state\": \"SD\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 14, \"negative\": 663.0, \"pending\": 270.0, \"death\": 1.0, \"total\": 947, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 107.05, \"pos/100k\": 1.58, \"total/positive\": 67.64}, {\"state\": \"ND\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 20, \"negative\": 800.0, \"pending\": null, \"death\": 0.0, \"total\": 820, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 107.6, \"pos/100k\": 2.62, \"total/positive\": 41.0}, {\"state\": \"VT\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 29, \"negative\": 779.0, \"pending\": null, \"death\": 2.0, \"total\": 808, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 129.49, \"pos/100k\": 4.65, \"total/positive\": 27.86}, {\"state\": \"NY\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 7102, \"negative\": 25325.0, \"pending\": null, \"death\": 35.0, \"total\": 32427, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 166.69, \"pos/100k\": 36.51, \"total/positive\": 4.57}, {\"state\": \"ME\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 57, \"negative\": 2264.0, \"pending\": null, \"death\": null, \"total\": 2321, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 172.67, \"pos/100k\": 4.24, \"total/positive\": 40.72}, {\"state\": \"NM\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 43, \"negative\": 3771.0, \"pending\": null, \"death\": null, \"total\": 3814, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 181.89, \"pos/100k\": 2.05, \"total/positive\": 88.7}, {\"state\": \"WA\", \"date\": \"2020-03-20T00:00:00\", \"positive\": 1376, \"negative\": 19336.0, \"pending\": null, \"death\": 74.0, \"total\": 20712, \"dateChecked\": \"2020-03-20T20:00:00Z\", \"tests/100k\": 271.99, \"pos/100k\": 18.07, \"total/positive\": 15.05}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.LayerChart(...)"
]
},
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#resort dataframe in ascending order of testing rates per 100k population\n",
"source_df = most_recent_df.sort_values('tests/100k')\n",
"\n",
"#drop data points without total testing info\n",
"source_df =source_df.dropna(subset=['tests/100k'])\n",
"\n",
"#now create some layers for the chart\n",
"base = alt.Chart(source_df,\n",
" title='COVID-19 in the States : tests and positive cases / 100k Population').encode(\n",
" alt.X('state',sort='x'))\n",
" \n",
"bar = base.mark_bar(color='lightgrey').encode(\n",
" alt.X('state',sort='x'),\n",
" alt.Y('tests/100k',axis=alt.Axis(title='Tests / 100k population',grid=True)),\n",
"circle = base.mark_circle(color='blue',size=60).encode(\n",
" alt.X('state',sort='x'),\n",
" alt.Y('positive', axis=alt.Axis(title='Positive COVID-19 Cases')),\n",
" tooltip=['state','positive','tests/100k']\n",
")\n",
"\n",
"#postives per 100,000 pop\n",
"circle2 = base.mark_circle(color='blue',size=60).encode(\n",
" alt.X('state',sort='x'),\n",
" alt.Y('pos/100k', axis=alt.Axis(title='Positive COVID-19 Cases/100k population',tickMinStep=5)),\n",
" tooltip=['state','pos/100k','tests/100k','positive']\n",
")\n",
"\n",
"#assemble the chart with two independent y-axes\n",
"bigChart = alt.layer(bar,circle2).resolve_scale(y='independent').properties(width=800,height=600)\n",
"bigChart"
]
},
{
"cell_type": "code",
"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>positive</th>\n",
" <th>negative</th>\n",
" <th>pending</th>\n",