Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3.  
  4. # In[2]:
  5.  
  6.  
  7. get_ipython().run_line_magic('matplotlib', 'inline')
  8. import os
  9. import sys
  10. import matplotlib.pyplot as plt
  11. import bisect
  12. import requests
  13. datemap = []
  14. response = requests.get("https://covidtracking.com/api/states/daily")
  15. data = response.json()
  16. sr = {}
  17. for k in data:
  18. if not k["state"] in sr:
  19. sr[k["state"]] = []
  20. sr[k["state"]].append(k)
  21. if not k["date"] in datemap:
  22. bisect.insort(datemap,k["date"])
  23.  
  24. dropKeys = ["state",
  25. "hash",
  26. "fips",
  27. "dateChecked",
  28. "hospitalizedIncrease",
  29. "hospitalized",
  30. "pending",
  31. "negative",
  32. "negativeIncrease",
  33. ]
  34.  
  35. for state in sr:
  36. sr[state] = sorted(sr[state],key= lambda x:x["date"])
  37. for state in sr:
  38. for item in sr[state]:
  39. item["day"] = datemap.index(item["date"])
  40.  
  41. dataset = {}
  42. for state in sr:
  43. dataset[state]={}
  44. dataset[state]["days"] = [datemap.index(x["date"]) for x in sr[state]]
  45. for key in sr[state][0]:
  46. if not key in dropKeys:
  47. dataset[state][key] = [x[key] for x in sr[state]]
  48. for item in dataset[state]:
  49. tarray = dataset[state][item]
  50. for idx in range(len(tarray)):
  51. tarray[idx] = 0 if not tarray[idx] else tarray[idx]
  52.  
  53.  
  54.  
  55. print(list(key for key in data[0] if not key in dropKeys))
  56.  
  57.  
  58. # In[3]:
  59.  
  60.  
  61. def makeplot(states,lambdaygen, argsdict = {}):
  62. global dataset
  63. hdls = []
  64. for state in states:
  65. xval = dataset[state]["days"]
  66. yval = []
  67. lval = {}
  68. for idx in range(len(xval)):
  69. for item in dataset[state]:
  70. lval[item] = dataset[state][item][idx]
  71. try:
  72. yval.append(lambdaygen(lval))
  73. except:
  74. yval.append(0)
  75. ylab = "value" if not "unit" in argsdict else argsdict["unit"]
  76. if "diff" in argsdict and argsdict["diff"]:
  77. yval = [0]+[yval[x]-yval[x-1] for x in range(1,len(yval))]
  78. ylab = ylab+" / day"
  79. if "filter" in argsdict:
  80. yval = [c if argsdict["filter"](c) else 0 for c in yval]
  81. hdl,= plt.plot(xval,yval)
  82. hdls.append(hdl)
  83. if "title" in argsdict:
  84. plt.title(argsdict["title"])
  85. plt.legend(hdls,states)
  86. plt.xlabel("days")
  87. plt.ylabel(ylab)
  88.  
  89.  
  90.  
  91.  
  92. # In[4]:
  93.  
  94.  
  95. getstates=["TX","CA","NY","WA"]
  96.  
  97.  
  98. # In[5]:
  99.  
  100.  
  101. args = {"diff":False,"unit":"# of tests","title":"New Tests"}
  102. yvals = lambda x: x["totalTestResultsIncrease"]
  103. makeplot(getstates,yvals,args)
  104.  
  105.  
  106. # In[6]:
  107.  
  108.  
  109. args = {"diff":False,"filter":lambda x:x<100,"unit":"% positive/day","title":"% New confirmed per day"}
  110. yvals = lambda x: 100*x["positiveIncrease"]/x["totalTestResultsIncrease"]
  111. makeplot(getstates,yvals,args)
  112.  
  113.  
  114. # In[7]:
  115.  
  116.  
  117. args = {"diff":False,"filter":lambda x:x<100,"unit":"% positive","title":"Total % positive"}
  118. yvals = lambda x: 100*x["positive"]/x["totalTestResults"]
  119. makeplot(getstates,yvals,args)
  120.  
  121.  
  122. # In[8]:
  123.  
  124.  
  125. args = {"diff":False,"unit":"positive per day", "title":"new positives per day"}
  126. yvals = lambda x: x["positiveIncrease"]
  127. makeplot(getstates,yvals,args)
  128.  
  129.  
  130. # In[9]:
  131.  
  132.  
  133. args = {"diff":False,"unit":"% death per positive", "title":"deaths per positive"}
  134. yvals = lambda x: 100*x["death"]/x["positive"]
  135. makeplot(getstates,yvals,args)
  136.  
  137.  
  138. # In[10]:
  139.  
  140.  
  141. args = {"diff":True,"unit":"deaths", "title":"death/positive rate"}
  142. yvals = lambda x:x["death"]
  143. makeplot(getstates,yvals,args)
  144.  
  145.  
  146. # In[ ]:
  147.  
  148.  
  149.  
  150.  
  151.  
  152. # In[ ]:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement