Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8b4dc47

Browse files
Update main.py
1 parent e6e0ee6 commit 8b4dc47

File tree

1 file changed

+7
-77
lines changed

1 file changed

+7
-77
lines changed

‎corona cases forecasting/main.py‎

Lines changed: 7 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
plt.style.use('fivethirtyeight')
1111
from pmdarima import auto_arima
1212

13-
1413
confirmed_cases = pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv')
1514
deaths_reported = pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv')
1615
recovered_cases = pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv')
@@ -22,36 +21,27 @@
2221
confirmed = confirmed_cases.loc[:, cols[4]:cols[-1]]
2322
deaths = deaths_reported.loc[:, cols[4]:cols[-1]]
2423
recoveries = recovered_cases.loc[:, cols[4]:cols[-1]]
25-
2624
# Range of date
2725
dates = confirmed.keys()
28-
2926
# Summary
3027
world_cases = []
3128
total_deaths = []
3229
mortality_rate = []
3330
recovery_rate = []
3431
total_recovered = []
3532
total_active = []
36-
3733
# Confirmed
3834
india_cases = []
39-
4035
# Death
4136
india_deaths = []
42-
4337
# Recovered
4438
india_recoveries = []
45-
4639
# Fill with the dataset
4740
for i in dates:
4841
india_cases.append(confirmed_cases[confirmed_cases['Country/Region'] == 'India'][i].sum())
49-
5042
india_deaths.append(deaths_reported[deaths_reported['Country/Region'] == 'India'][i].sum())
51-
5243
india_recoveries.append(recovered_cases[recovered_cases['Country/Region'] == 'India'][i].sum())
5344

54-
5545
def daily_increase(data):
5646
d = []
5747
for i in range(len(data)):
@@ -61,9 +51,6 @@ def daily_increase(data):
6151
d.append(data[i]-data[i-1])
6252
return d
6353

64-
65-
66-
6754
def fresh_cases_daily():
6855
#confirmed cases
6956
india_daily_increase = daily_increase(india_cases)
@@ -81,20 +68,16 @@ def fresh_cases_daily():
8168
future_forecast_dates.append((start_date + datetime.timedelta(days=i)).strftime('%m/%d/%Y'))
8269

8370
dataCovid= pd.DataFrame({ 'Dates': future_forecast_dates , 'Daily Increase':india_daily_increase })
84-
8571
train = dataCovid[:int(0.7*(len(dataCovid)))]
8672
valid = dataCovid[int(0.7*(len(dataCovid))):]
8773
#preprocessing (since arima takes univariate series as input)
8874
train.drop('Dates',axis=1,inplace=True)
8975
valid.drop('Dates',axis=1,inplace=True)
90-
9176
model = auto_arima(train, trace=True, error_action='ignore', suppress_warnings=True)
9277
model.fit(train)
93-
9478
forecast = model.predict(n_periods=len(valid))
9579
forecast = pd.DataFrame(forecast,index = valid.index,columns=['Prediction'])
9680

97-
9881
def ARIMAmodel(series, order, days = 21):
9982
# Fitting and forecast the series
10083
train = [x for x in series]
@@ -104,13 +87,10 @@ def ARIMAmodel(series, order, days = 21):
10487
start_day = date.today() + datetime.timedelta(days = 1)
10588
predictions_df = pd.DataFrame({'Forecast':forecast.round()}, index=pd.date_range(start = start_day, periods=days, freq='D'))
10689
return predictions_df, ci
107-
108-
109-
90+
11091
new_positives = dataCovid['Daily Increase'].values
11192
order = {
11293
'new_positives': (2, 1, 5),
113-
11494
}
11595
new_positives_today=new_positives[-1]
11696
# Forecasting with ARIMA models
@@ -123,17 +103,14 @@ def ARIMAmodel(series, order, days = 21):
123103
datesX.append((date.today()+ datetime.timedelta(days=i)).strftime('%m/%d/%Y'))
124104

125105
# Plot Results for forecasted dates only (detailed)
126-
127106
plt.plot(datesX,casesY,color='red')
128107
plt.title('New active Cases Forecast')
129108
plt.xticks(rotation=90)
130109
# plt.figure(figsize=(22,22))
131-
plt.savefig("plot1.png",bbox_inches='tight')
110+
plt.savefig("./corona cases forecasting/Results/plot1.png",bbox_inches='tight')
132111
plt.autoscale()
133112
plt.show()
134113

135-
136-
137114
def death_cases_daily():
138115
#confirmed cases
139116
india_daily_increase = daily_increase(india_deaths)
@@ -151,20 +128,16 @@ def death_cases_daily():
151128
future_forecast_dates.append((start_date + datetime.timedelta(days=i)).strftime('%m/%d/%Y'))
152129

153130
dataCovid= pd.DataFrame({ 'Dates': future_forecast_dates , 'Daily Increase':india_daily_increase })
154-
155131
train = dataCovid[:int(0.7*(len(dataCovid)))]
156132
valid = dataCovid[int(0.7*(len(dataCovid))):]
157133
#preprocessing (since arima takes univariate series as input)
158134
train.drop('Dates',axis=1,inplace=True)
159135
valid.drop('Dates',axis=1,inplace=True)
160-
161136
model = auto_arima(train, trace=True, error_action='ignore', suppress_warnings=True)
162137
model.fit(train)
163-
164138
forecast = model.predict(n_periods=len(valid))
165139
forecast = pd.DataFrame(forecast,index = valid.index,columns=['Prediction'])
166140

167-
168141
def ARIMAmodel(series, order, days = 21):
169142
# Fitting and forecast the series
170143
train = [x for x in series]
@@ -175,12 +148,9 @@ def ARIMAmodel(series, order, days = 21):
175148
predictions_df = pd.DataFrame({'Forecast':forecast.round()}, index=pd.date_range(start = start_day, periods=days, freq='D'))
176149
return predictions_df, ci
177150

178-
179-
180151
new_deaths = dataCovid['Daily Increase'].values
181152
order = {
182153
'new_deaths': (0, 1, 1),
183-
184154
}
185155
new_deaths_today=new_deaths[-1]
186156
# Forecasting with ARIMA models
@@ -193,49 +163,38 @@ def ARIMAmodel(series, order, days = 21):
193163
datesX.append((date.today()+ datetime.timedelta(days=i)).strftime('%m/%d/%Y'))
194164

195165
# Plot Results for forecasted dates only (detailed)
196-
197166
plt.plot(datesX,casesY,color='red')
198167
plt.title('New death Cases Forecast')
199168
plt.xticks(rotation=90)
200169
# plt.figure(figsize=(22,22))
201-
plt.savefig("plot2.png",bbox_inches='tight')
170+
plt.savefig("./corona cases forecasting/Results/plot2.png",bbox_inches='tight')
202171
plt.autoscale()
203172
plt.show()
204173

205-
206-
207-
208174
def recovered_cases_daily():
209175
#confirmed cases
210176
india_daily_increase = daily_increase(india_recoveries)
211-
212177
# Dates pre processing
213178
days_since_1_22 = np.array([i for i in range(len(dates))]).reshape(-1, 1)
214-
215179
days_in_future = 0
216180
future_forecast = np.array([i for i in range(len(dates)+days_in_future)]).reshape(-1, 1)
217-
218181
start = '1/22/2020'
219182
start_date = datetime.datetime.strptime(start, '%m/%d/%Y')
220183
future_forecast_dates = []
221184
for i in range(len(future_forecast)):
222185
future_forecast_dates.append((start_date + datetime.timedelta(days=i)).strftime('%m/%d/%Y'))
223186

224187
dataCovid= pd.DataFrame({ 'Dates': future_forecast_dates , 'Daily recoveries':india_daily_increase })
225-
226188
train = dataCovid[:int(0.7*(len(dataCovid)))]
227189
valid = dataCovid[int(0.7*(len(dataCovid))):]
228190
#preprocessing (since arima takes univariate series as input)
229191
train.drop('Dates',axis=1,inplace=True)
230192
valid.drop('Dates',axis=1,inplace=True)
231-
232193
model = auto_arima(train, trace=True, error_action='ignore', suppress_warnings=True)
233194
model.fit(train)
234-
235195
forecast = model.predict(n_periods=len(valid))
236196
forecast = pd.DataFrame(forecast,index = valid.index,columns=['Prediction'])
237197

238-
239198
def ARIMAmodel(series, order, days = 21):
240199
# Fitting and forecast the series
241200
train = [x for x in series]
@@ -246,12 +205,9 @@ def ARIMAmodel(series, order, days = 21):
246205
predictions_df = pd.DataFrame({'Forecast':forecast.round()}, index=pd.date_range(start = start_day, periods=days, freq='D'))
247206
return predictions_df, ci
248207

249-
250-
251208
new_recoveries = dataCovid['Daily recoveries'].values
252209
order = {
253210
'new_recoveries': (1, 1, 2),
254-
255211
}
256212
new_recoveries_today=new_recoveries[-1]
257213
# Forecasting with ARIMA models
@@ -264,17 +220,16 @@ def ARIMAmodel(series, order, days = 21):
264220
datesX.append((date.today()+ datetime.timedelta(days=i)).strftime('%m/%d/%Y'))
265221

266222
# Plot Results for forecasted dates only (detailed)
267-
268223
plt.plot(datesX,casesY,color='red')
269224
plt.title('New recovered Cases Forecast')
270225
plt.xticks(rotation=90)
271226
# plt.figure(figsize=(22,22))
272-
plt.savefig("plot3.png",bbox_inches='tight')
227+
plt.savefig("./corona cases forecasting/Results/plot3.png",bbox_inches='tight')
273228
plt.autoscale()
274229
plt.show()
275-
276-
277-
choice=input("F for fresh cases,D for death cases,R for recovered cases prediction")
230+
231+
# Taking user input choice for type of prediction method to be intitiated
232+
choice=input("F for fresh cases,D for death cases,R for recovered cases prediction : ")
278233
if choice=='F':
279234
fresh_cases_daily()
280235
elif choice=='D':
@@ -283,28 +238,3 @@ def ARIMAmodel(series, order, days = 21):
283238
recovered_cases_daily()
284239
else:
285240
print("Enter a valid choice")
286-
287-
288-
289-
290-
291-
292-
293-
294-
295-
296-
297-
298-
299-
300-
301-
302-
303-
304-
305-
306-
307-
308-
309-
310-

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /