Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # coding: utf-8
- # In[2]:
- get_ipython().run_line_magic('matplotlib', 'inline')
- import os
- import sys
- import matplotlib.pyplot as plt
- import bisect
- import requests
- datemap = []
- response = requests.get("https://covidtracking.com/api/states/daily")
- data = response.json()
- sr = {}
- for k in data:
- if not k["state"] in sr:
- sr[k["state"]] = []
- sr[k["state"]].append(k)
- if not k["date"] in datemap:
- bisect.insort(datemap,k["date"])
- dropKeys = ["state",
- "hash",
- "fips",
- "dateChecked",
- "hospitalizedIncrease",
- "hospitalized",
- "pending",
- "negative",
- "negativeIncrease",
- ]
- for state in sr:
- sr[state] = sorted(sr[state],key= lambda x:x["date"])
- for state in sr:
- for item in sr[state]:
- item["day"] = datemap.index(item["date"])
- dataset = {}
- for state in sr:
- dataset[state]={}
- dataset[state]["days"] = [datemap.index(x["date"]) for x in sr[state]]
- for key in sr[state][0]:
- if not key in dropKeys:
- dataset[state][key] = [x[key] for x in sr[state]]
- for item in dataset[state]:
- tarray = dataset[state][item]
- for idx in range(len(tarray)):
- tarray[idx] = 0 if not tarray[idx] else tarray[idx]
- print(list(key for key in data[0] if not key in dropKeys))
- # In[3]:
- def makeplot(states,lambdaygen, argsdict = {}):
- global dataset
- hdls = []
- for state in states:
- xval = dataset[state]["days"]
- yval = []
- lval = {}
- for idx in range(len(xval)):
- for item in dataset[state]:
- lval[item] = dataset[state][item][idx]
- try:
- yval.append(lambdaygen(lval))
- except:
- yval.append(0)
- ylab = "value" if not "unit" in argsdict else argsdict["unit"]
- if "diff" in argsdict and argsdict["diff"]:
- yval = [0]+[yval[x]-yval[x-1] for x in range(1,len(yval))]
- ylab = ylab+" / day"
- if "filter" in argsdict:
- yval = [c if argsdict["filter"](c) else 0 for c in yval]
- hdl,= plt.plot(xval,yval)
- hdls.append(hdl)
- if "title" in argsdict:
- plt.title(argsdict["title"])
- plt.legend(hdls,states)
- plt.xlabel("days")
- plt.ylabel(ylab)
- # In[4]:
- getstates=["TX","CA","NY","WA"]
- # In[5]:
- args = {"diff":False,"unit":"# of tests","title":"New Tests"}
- yvals = lambda x: x["totalTestResultsIncrease"]
- makeplot(getstates,yvals,args)
- # In[6]:
- args = {"diff":False,"filter":lambda x:x<100,"unit":"% positive/day","title":"% New confirmed per day"}
- yvals = lambda x: 100*x["positiveIncrease"]/x["totalTestResultsIncrease"]
- makeplot(getstates,yvals,args)
- # In[7]:
- args = {"diff":False,"filter":lambda x:x<100,"unit":"% positive","title":"Total % positive"}
- yvals = lambda x: 100*x["positive"]/x["totalTestResults"]
- makeplot(getstates,yvals,args)
- # In[8]:
- args = {"diff":False,"unit":"positive per day", "title":"new positives per day"}
- yvals = lambda x: x["positiveIncrease"]
- makeplot(getstates,yvals,args)
- # In[9]:
- args = {"diff":False,"unit":"% death per positive", "title":"deaths per positive"}
- yvals = lambda x: 100*x["death"]/x["positive"]
- makeplot(getstates,yvals,args)
- # In[10]:
- args = {"diff":True,"unit":"deaths", "title":"death/positive rate"}
- yvals = lambda x:x["death"]
- makeplot(getstates,yvals,args)
- # In[ ]:
- # In[ ]:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement