-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUpdateData.py
60 lines (50 loc) · 2.52 KB
/
UpdateData.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from app import db
from datetime import date,timedelta,datetime
import pandas as pd
import urllib
import json
import numpy as np
from models import state
def datechange(date):
date=date.split('/')
s=date[2]+'-'+date[1]+'-'+date[0]
return np.datetime64(s)
states=['Andaman and Nicobar Islands', 'Andhra Pradesh', 'Arunachal Pradesh','Assam', 'Bihar', 'Chandigarh', 'Chhattisgarh', 'Delhi','Dadra and Nagar Haveli and Daman and Diu','Goa', 'Gujarat', 'Haryana', 'Himachal Pradesh', 'Jammu and Kashmir', 'Jharkhand', 'Karnataka', 'Kerala', 'Ladakh','Lakshadweep' , 'Madhya Pradesh', 'Maharashtra', 'Manipur', 'Meghalaya', 'Mizoram', 'Nagaland','Odisha', 'Puducherry', 'Punjab', 'Rajasthan','Sikkim', 'Tamil Nadu', 'Telangana', 'Tripura', 'Uttar Pradesh', 'Uttarakhand','West Bengal','State Unassigned','Total']
stind=pd.Series(range(len(states)),states)
today=(datetime.utcnow()).date()
with urllib.request.urlopen("https://api.covid19india.org/raw_data6.json") as url:
data = json.loads(url.read().decode())
'''For testing
df=[]
for row in data["raw_data"]:
df.append(row.values())
df=pd.DataFrame(df,columns=data["raw_data"][0].keys())'''
ndays=2 #Update data for cases of last n days
for i in range(ndays,0,-1):
db.session.execute("delete from state where date='{0}'".format(today-timedelta(days=i)))
db.session.commit()
for it in range(ndays,0,-1):
time=[]
for row in data['raw_data']:
if row["dateannounced"]=="":
continue
dt=datetime.strptime(row["dateannounced"],'%d/%m/%Y').date()
if row["detectedstate"]!='' and row["currentstatus"]!='' and row["numcases"]!='' and today-timedelta(days=it)==dt:
time.append([row["detectedstate"],datechange(row["dateannounced"]),row["currentstatus"],int(row["numcases"])])
todaycases=[[0,0,0] for i in range(len(states))]
for row in time:
if row[2]=='Hospitalized':
ind=0
elif row[2]=='Recovered':
ind=1
else:
ind=2
todaycases[stind[row[0]]][ind]+=row[3]
todaycases[-1][ind]+=row[3]
res=db.session.execute("select * from state where date='{0}'".format(today-timedelta(days=it+1)))
for i in res:
ind=stind[i.statename]
db.session.add(state(i.statename,today-timedelta(days=it),todaycases[ind][0],todaycases[ind][1],todaycases[ind][2],
i.cumconf+todaycases[ind][0],i.cumact+todaycases[ind][0]-todaycases[ind][1]-todaycases[ind][2],i.cumrec+todaycases[ind][1],
i.cumdec+todaycases[ind][2]))
db.session.commit()