├── Demo.gif
├── Preprocessed_data
└── final_data.csv
├── README.md
├── app.py
├── forecast.ipynb
├── forecast_CNN.ipynb
├── forecast_LSTM.ipynb
├── model
├── arima_model.pkl
├── arma_model.pkl
├── auto_arima_model.pkl
├── exp_smoothing_model.pkl
└── prophet_model.pkl
├── req.txt
├── static
├── arima_plot_1591687174.918447.png
├── arma_plot_1591687215.727288.png
├── auto_arima_plot_1591687207.990299.png
├── exp_plot_1591687185.701119.png
├── plot.png
├── prophet_plot_1591687195.249861.png
└── style.css
└── templates
└── index.html
/Demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/Demo.gif
--------------------------------------------------------------------------------
/Preprocessed_data/final_data.csv:
--------------------------------------------------------------------------------
1 | Date,Views
2 | 2015-07-01,20.38
3 | 2015-07-02,20.75
4 | 2015-07-03,19.57
5 | 2015-07-04,20.44
6 | 2015-07-05,20.77
7 | 2015-07-06,22.54
8 | 2015-07-07,21.21
9 | 2015-07-08,19.11
10 | 2015-07-09,19.99
11 | 2015-07-10,20.2
12 | 2015-07-11,19.7
13 | 2015-07-12,20.23
14 | 2015-07-13,20.52
15 | 2015-07-14,19.7
16 | 2015-07-15,19.56
17 | 2015-07-16,19.66
18 | 2015-07-17,18.99
19 | 2015-07-18,18.36
20 | 2015-07-19,18.83
21 | 2015-07-20,20.34
22 | 2015-07-21,19.74
23 | 2015-07-22,19.54
24 | 2015-07-23,19.62
25 | 2015-07-24,18.64
26 | 2015-07-25,19.32
27 | 2015-07-26,20.4
28 | 2015-07-27,20.16
29 | 2015-07-28,19.89
30 | 2015-07-29,27.56
31 | 2015-07-30,18.5
32 | 2015-07-31,17.93
33 | 2015-08-01,18.18
34 | 2015-08-02,19.41
35 | 2015-08-03,18.95
36 | 2015-08-04,20.53
37 | 2015-08-05,20.25
38 | 2015-08-06,20.06
39 | 2015-08-07,19.12
40 | 2015-08-08,19.44
41 | 2015-08-09,19.71
42 | 2015-08-10,19.85
43 | 2015-08-11,18.37
44 | 2015-08-12,19.39
45 | 2015-08-13,19.19
46 | 2015-08-14,19.45
47 | 2015-08-15,19.31
48 | 2015-08-16,19.68
49 | 2015-08-17,20.31
50 | 2015-08-18,20.08
51 | 2015-08-19,18.9
52 | 2015-08-20,19.09
53 | 2015-08-21,18.9
54 | 2015-08-22,18.8
55 | 2015-08-23,19.89
56 | 2015-08-24,20.21
57 | 2015-08-25,18.56
58 | 2015-08-26,18.09
59 | 2015-08-27,17.86
60 | 2015-08-28,17.29
61 | 2015-08-29,17.84
62 | 2015-08-30,18.2
63 | 2015-08-31,20.55
64 | 2015-09-01,18.08
65 | 2015-09-02,18.42
66 | 2015-09-03,17.85
67 | 2015-09-04,17.48
68 | 2015-09-05,17.9
69 | 2015-09-06,19.0
70 | 2015-09-07,19.74
71 | 2015-09-08,19.65
72 | 2015-09-09,18.61
73 | 2015-09-10,18.07
74 | 2015-09-11,18.56
75 | 2015-09-12,18.93
76 | 2015-09-13,19.06
77 | 2015-09-14,19.22
78 | 2015-09-15,19.27
79 | 2015-09-16,18.23
80 | 2015-09-17,18.2
81 | 2015-09-18,17.71
82 | 2015-09-19,17.85
83 | 2015-09-20,19.61
84 | 2015-09-21,20.8
85 | 2015-09-22,18.83
86 | 2015-09-23,19.59
87 | 2015-09-24,17.95
88 | 2015-09-25,17.81
89 | 2015-09-26,18.1
90 | 2015-09-27,18.7
91 | 2015-09-28,20.31
92 | 2015-09-29,17.54
93 | 2015-09-30,19.7
94 | 2015-10-01,18.84
95 | 2015-10-02,18.54
96 | 2015-10-03,18.3
97 | 2015-10-04,18.94
98 | 2015-10-05,19.28
99 | 2015-10-06,18.27
100 | 2015-10-07,18.84
101 | 2015-10-08,19.05
102 | 2015-10-09,18.44
103 | 2015-10-10,18.94
104 | 2015-10-11,19.12
105 | 2015-10-12,20.29
106 | 2015-10-13,19.56
107 | 2015-10-14,18.8
108 | 2015-10-15,18.82
109 | 2015-10-16,17.87
110 | 2015-10-17,18.04
111 | 2015-10-18,19.03
112 | 2015-10-19,21.35
113 | 2015-10-20,20.67
114 | 2015-10-21,21.55
115 | 2015-10-22,21.47
116 | 2015-10-23,18.92
117 | 2015-10-24,17.53
118 | 2015-10-25,20.1
119 | 2015-10-26,20.55
120 | 2015-10-27,20.89
121 | 2015-10-28,20.54
122 | 2015-10-29,18.82
123 | 2015-10-30,18.18
124 | 2015-10-31,18.12
125 | 2015-11-01,17.97
126 | 2015-11-02,21.33
127 | 2015-11-03,21.05
128 | 2015-11-04,20.02
129 | 2015-11-05,19.78
130 | 2015-11-06,18.06
131 | 2015-11-07,17.54
132 | 2015-11-08,18.54
133 | 2015-11-09,20.78
134 | 2015-11-10,19.63
135 | 2015-11-11,19.2
136 | 2015-11-12,18.8
137 | 2015-11-13,18.12
138 | 2015-11-14,18.07
139 | 2015-11-15,19.12
140 | 2015-11-16,20.88
141 | 2015-11-17,19.79
142 | 2015-11-18,19.89
143 | 2015-11-19,19.15
144 | 2015-11-20,17.57
145 | 2015-11-21,18.95
146 | 2015-11-22,19.46
147 | 2015-11-23,20.56
148 | 2015-11-24,19.45
149 | 2015-11-25,18.82
150 | 2015-11-26,18.14
151 | 2015-11-27,17.9
152 | 2015-11-28,19.15
153 | 2015-11-29,19.28
154 | 2015-11-30,21.37
155 | 2015-12-01,20.1
156 | 2015-12-02,18.21
157 | 2015-12-03,18.57
158 | 2015-12-04,17.96
159 | 2015-12-05,18.17
160 | 2015-12-06,18.41
161 | 2015-12-07,21.11
162 | 2015-12-08,20.08
163 | 2015-12-09,18.03
164 | 2015-12-10,16.57
165 | 2015-12-11,17.55
166 | 2015-12-12,16.26
167 | 2015-12-13,18.34
168 | 2015-12-14,19.25
169 | 2015-12-15,17.27
170 | 2015-12-16,17.62
171 | 2015-12-17,16.54
172 | 2015-12-18,16.28
173 | 2015-12-19,16.65
174 | 2015-12-20,16.68
175 | 2015-12-21,17.8
176 | 2015-12-22,17.44
177 | 2015-12-23,17.78
178 | 2015-12-24,17.21
179 | 2015-12-25,15.98
180 | 2015-12-26,17.89
181 | 2015-12-27,17.4
182 | 2015-12-28,18.94
183 | 2015-12-29,17.57
184 | 2015-12-30,17.38
185 | 2015-12-31,16.96
186 | 2016-01-01,16.36
187 | 2016-01-02,17.61
188 | 2016-01-03,17.54
189 | 2016-01-04,19.23
190 | 2016-01-05,18.14
191 | 2016-01-06,18.38
192 | 2016-01-07,17.28
193 | 2016-01-08,16.44
194 | 2016-01-09,16.44
195 | 2016-01-10,17.28
196 | 2016-01-11,19.1
197 | 2016-01-12,18.45
198 | 2016-01-13,17.2
199 | 2016-01-14,18.14
200 | 2016-01-15,17.46
201 | 2016-01-16,18.22
202 | 2016-01-17,18.7
203 | 2016-01-18,19.39
204 | 2016-01-19,19.66
205 | 2016-01-20,18.72
206 | 2016-01-21,18.93
207 | 2016-01-22,16.9
208 | 2016-01-23,17.53
209 | 2016-01-24,17.62
210 | 2016-01-25,20.1
211 | 2016-01-26,18.64
212 | 2016-01-27,19.26
213 | 2016-01-28,17.27
214 | 2016-01-29,17.16
215 | 2016-01-30,17.09
216 | 2016-01-31,18.36
217 | 2016-02-01,20.28
218 | 2016-02-02,18.92
219 | 2016-02-03,18.86
220 | 2016-02-04,18.48
221 | 2016-02-05,17.84
222 | 2016-02-06,18.59
223 | 2016-02-07,19.31
224 | 2016-02-08,20.74
225 | 2016-02-09,20.4
226 | 2016-02-10,17.8
227 | 2016-02-11,15.99
228 | 2016-02-12,16.62
229 | 2016-02-13,17.48
230 | 2016-02-14,18.73
231 | 2016-02-15,20.03
232 | 2016-02-16,20.58
233 | 2016-02-17,20.48
234 | 2016-02-18,18.84
235 | 2016-02-19,17.77
236 | 2016-02-20,17.82
237 | 2016-02-21,18.61
238 | 2016-02-22,20.42
239 | 2016-02-23,19.12
240 | 2016-02-24,18.96
241 | 2016-02-25,19.34
242 | 2016-02-26,18.11
243 | 2016-02-27,18.72
244 | 2016-02-28,19.8
245 | 2016-02-29,21.58
246 | 2016-03-01,19.91
247 | 2016-03-02,19.66
248 | 2016-03-03,21.09
249 | 2016-03-04,17.95
250 | 2016-03-05,19.49
251 | 2016-03-06,18.44
252 | 2016-03-07,19.34
253 | 2016-03-08,18.44
254 | 2016-03-09,18.14
255 | 2016-03-10,17.28
256 | 2016-03-11,15.68
257 | 2016-03-12,16.38
258 | 2016-03-13,14.68
259 | 2016-03-14,18.62
260 | 2016-03-15,16.79
261 | 2016-03-16,16.29
262 | 2016-03-17,16.04
263 | 2016-03-18,15.87
264 | 2016-03-19,14.5
265 | 2016-03-20,18.17482758620689
266 | 2016-03-21,15.32
267 | 2016-03-22,18.069999999999993
268 | 2016-03-23,15.11
269 | 2016-03-24,14.59
270 | 2016-03-25,17.672592592592586
271 | 2016-03-26,14.59
272 | 2016-03-27,15.33
273 | 2016-03-28,17.45
274 | 2016-03-29,15.72
275 | 2016-03-30,15.31
276 | 2016-03-31,14.51
277 | 2016-04-01,16.65192307692307
278 | 2016-04-02,15.13
279 | 2016-04-03,16.17
280 | 2016-04-04,18.15
281 | 2016-04-05,17.0
282 | 2016-04-06,17.03
283 | 2016-04-07,16.82
284 | 2016-04-08,16.18
285 | 2016-04-09,17.17
286 | 2016-04-10,17.37
287 | 2016-04-11,19.21
288 | 2016-04-12,18.44
289 | 2016-04-13,17.13
290 | 2016-04-14,17.17
291 | 2016-04-15,16.61
292 | 2016-04-16,17.18
293 | 2016-04-17,17.53
294 | 2016-04-18,20.15
295 | 2016-04-19,18.55
296 | 2016-04-20,17.68
297 | 2016-04-21,15.7
298 | 2016-04-22,15.58
299 | 2016-04-23,16.67
300 | 2016-04-24,17.78
301 | 2016-04-25,20.18
302 | 2016-04-26,17.81
303 | 2016-04-27,17.62
304 | 2016-04-28,17.92
305 | 2016-04-29,16.02
306 | 2016-04-30,17.19
307 | 2016-05-01,18.2
308 | 2016-05-02,19.71
309 | 2016-05-03,19.15
310 | 2016-05-04,18.69
311 | 2016-05-05,16.77
312 | 2016-05-06,16.41
313 | 2016-05-07,17.23
314 | 2016-05-08,17.88
315 | 2016-05-09,19.26
316 | 2016-05-10,18.92
317 | 2016-05-11,18.15
318 | 2016-05-12,18.43
319 | 2016-05-13,16.81
320 | 2016-05-14,18.16
321 | 2016-05-15,19.18
322 | 2016-05-16,21.1
323 | 2016-05-17,18.96
324 | 2016-05-18,17.96
325 | 2016-05-19,17.64
326 | 2016-05-20,16.16
327 | 2016-05-21,17.89
328 | 2016-05-22,15.63
329 | 2016-05-23,19.55
330 | 2016-05-24,18.48
331 | 2016-05-25,18.78
332 | 2016-05-26,17.9
333 | 2016-05-27,16.35
334 | 2016-05-28,18.1
335 | 2016-05-29,19.0
336 | 2016-05-30,19.55
337 | 2016-05-31,19.03
338 | 2016-06-01,18.73
339 | 2016-06-02,17.31
340 | 2016-06-03,15.92
341 | 2016-06-04,15.62
342 | 2016-06-05,18.88
343 | 2016-06-06,21.89
344 | 2016-06-07,19.1
345 | 2016-06-08,20.11
346 | 2016-06-09,18.97
347 | 2016-06-10,17.79
348 | 2016-06-11,20.3
349 | 2016-06-12,21.56
350 | 2016-06-13,22.99
351 | 2016-06-14,21.6
352 | 2016-06-15,19.54
353 | 2016-06-16,18.2
354 | 2016-06-17,16.32
355 | 2016-06-18,18.41
356 | 2016-06-19,19.03
357 | 2016-06-20,20.93
358 | 2016-06-21,19.77
359 | 2016-06-22,19.88
360 | 2016-06-23,19.59
361 | 2016-06-24,17.87
362 | 2016-06-25,19.31
363 | 2016-06-26,20.25
364 | 2016-06-27,18.67
365 | 2016-06-28,20.02
366 | 2016-06-29,19.58
367 | 2016-06-30,23.21
368 | 2016-07-01,17.24
369 | 2016-07-02,20.22
370 | 2016-07-03,20.83
371 | 2016-07-04,21.62
372 | 2016-07-05,18.72
373 | 2016-07-06,14.51
374 | 2016-07-07,14.88
375 | 2016-07-08,16.1
376 | 2016-07-09,18.41
377 | 2016-07-10,20.36
378 | 2016-07-11,21.42
379 | 2016-07-12,20.02
380 | 2016-07-13,19.22
381 | 2016-07-14,19.21
382 | 2016-07-15,17.86
383 | 2016-07-16,20.21
384 | 2016-07-17,20.72
385 | 2016-07-18,22.11
386 | 2016-07-19,20.95
387 | 2016-07-20,19.40551724137932
388 | 2016-07-21,19.392500000000013
389 | 2016-07-22,19.374444444444457
390 | 2016-07-23,19.36615384615386
391 | 2016-07-24,19.426000000000016
392 | 2016-07-25,19.43083333333335
393 | 2016-07-26,19.395217391304364
394 | 2016-07-27,19.428181818181834
395 | 2016-07-28,19.400000000000016
396 | 2016-07-29,19.39100000000002
397 | 2016-07-30,19.190000000000023
398 | 2016-07-31,19.298333333333357
399 | 2016-08-01,19.24411764705885
400 | 2016-08-02,19.145000000000028
401 | 2016-08-03,18.98000000000003
402 | 2016-08-04,18.998571428571463
403 | 2016-08-05,19.34384615384619
404 | 2016-08-06,19.715833333333375
405 | 2016-08-07,20.0445454545455
406 | 2016-08-08,20.208000000000048
407 | 2016-08-09,20.191111111111166
408 | 2016-08-10,20.03750000000006
409 | 2016-08-11,20.040000000000067
410 | 2016-08-12,20.176666666666744
411 | 2016-08-13,20.37000000000009
412 | 2016-08-14,20.997500000000112
413 | 2016-08-15,21.26000000000015
414 | 2016-08-16,21.530000000000225
415 | 2016-08-17,24.93
416 | 2016-08-18,22.3
417 | 2016-08-19,20.31
418 | 2016-08-20,23.25
419 | 2016-08-21,23.95
420 | 2016-08-22,25.94
421 | 2016-08-23,25.35
422 | 2016-08-24,24.11
423 | 2016-08-25,22.25
424 | 2016-08-26,20.79
425 | 2016-08-27,25.42
426 | 2016-08-28,26.54
427 | 2016-08-29,23.761666666666702
428 | 2016-08-30,23.761666666666702
429 | 2016-08-31,23.761666666666702
430 | 2016-09-01,23.761666666666702
431 | 2016-09-02,23.761666666666702
432 | 2016-09-03,23.761666666666702
433 | 2016-09-04,23.761666666666702
434 | 2016-09-05,23.761666666666702
435 | 2016-09-06,27.95
436 | 2016-09-07,24.72
437 | 2016-09-08,22.95
438 | 2016-09-09,20.75
439 | 2016-09-10,23.23
440 | 2016-09-11,23.61
441 | 2016-09-12,21.11
442 | 2016-09-13,24.11
443 | 2016-09-14,27.33
444 | 2016-09-15,27.96
445 | 2016-09-16,21.48
446 | 2016-09-17,24.61
447 | 2016-09-18,24.44
448 | 2016-09-19,25.88
449 | 2016-09-20,21.12
450 | 2016-09-21,23.38
451 | 2016-09-22,22.83
452 | 2016-09-23,20.51
453 | 2016-09-24,23.02
454 | 2016-09-25,23.81
455 | 2016-09-26,24.71
456 | 2016-09-27,25.2
457 | 2016-09-28,24.11
458 | 2016-09-29,22.86
459 | 2016-09-30,20.99
460 | 2016-10-01,24.14
461 | 2016-10-02,23.88
462 | 2016-10-03,26.07
463 | 2016-10-04,26.38
464 | 2016-10-05,23.901379310344854
465 | 2016-10-06,23.75678571428574
466 | 2016-10-07,20.85
467 | 2016-10-08,23.05
468 | 2016-10-09,23.95
469 | 2016-10-10,24.91
470 | 2016-10-11,19.7
471 | 2016-10-12,17.72
472 | 2016-10-13,21.41
473 | 2016-10-14,21.27
474 | 2016-10-15,24.25
475 | 2016-10-16,24.59
476 | 2016-10-17,26.99
477 | 2016-10-18,25.23
478 | 2016-10-19,23.66
479 | 2016-10-20,22.12
480 | 2016-10-21,20.25
481 | 2016-10-22,23.4
482 | 2016-10-23,23.62
483 | 2016-10-24,25.39
484 | 2016-10-25,24.28
485 | 2016-10-26,23.48
486 | 2016-10-27,22.31
487 | 2016-10-28,19.9
488 | 2016-10-29,22.61
489 | 2016-10-30,22.99
490 | 2016-10-31,25.23
491 | 2016-11-01,24.03
492 | 2016-11-02,23.74
493 | 2016-11-03,22.67
494 | 2016-11-04,20.86
495 | 2016-11-05,22.98
496 | 2016-11-06,23.32
497 | 2016-11-07,25.02
498 | 2016-11-08,24.6
499 | 2016-11-09,25.3
500 | 2016-11-10,24.22
501 | 2016-11-11,20.82
502 | 2016-11-12,23.48
503 | 2016-11-13,24.37
504 | 2016-11-14,25.56
505 | 2016-11-15,24.23
506 | 2016-11-16,24.03
507 | 2016-11-17,22.34
508 | 2016-11-18,20.33
509 | 2016-11-19,22.77
510 | 2016-11-20,20.38
511 | 2016-11-21,24.42
512 | 2016-11-22,23.95
513 | 2016-11-23,22.7
514 | 2016-11-24,21.13
515 | 2016-11-25,20.06
516 | 2016-11-26,22.9
517 | 2016-11-27,22.25
518 | 2016-11-28,21.39
519 | 2016-11-29,22.78
520 | 2016-11-30,20.29
521 | 2016-12-01,21.17
522 | 2016-12-02,19.55
523 | 2016-12-03,22.7
524 | 2016-12-04,22.66
525 | 2016-12-05,25.2
526 | 2016-12-06,23.75
527 | 2016-12-07,22.92
528 | 2016-12-08,21.9
529 | 2016-12-09,19.53
530 | 2016-12-10,22.86
531 | 2016-12-11,22.93
532 | 2016-12-12,24.77
533 | 2016-12-13,23.66
534 | 2016-12-14,22.66
535 | 2016-12-15,20.83
536 | 2016-12-16,19.65
537 | 2016-12-17,18.57
538 | 2016-12-18,22.42
539 | 2016-12-19,25.07
540 | 2016-12-20,25.04
541 | 2016-12-21,26.28
542 | 2016-12-22,24.2
543 | 2016-12-23,22.54
544 | 2016-12-24,25.06
545 | 2016-12-25,25.87
546 | 2016-12-26,22.70689655172414
547 | 2016-12-27,26.92
548 | 2016-12-28,27.03
549 | 2016-12-29,26.07
550 | 2016-12-30,24.36
551 | 2016-12-31,26.15
552 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Time-Series-Forecasting-on-Web-Traffic-Dataset
2 |
3 | Performed time-series analysis and forecasting on Google's web traffic dataset to forecast number of views of Wikipedia web pages. This can help Google take effective measures to handle the web traffic.
4 |
5 | **Dataset:** Kaggle Web Traffic Time Series Forecasting (https://www.kaggle.com/c/web-traffic-time-series-forecasting)
6 |
7 | **Technologies and libraries used:** Python, AWS EC2, AWS S3, Flask, Statsmodels, Prophet, Tensorflow, Matplotlib.
8 |
9 | 
10 |
11 | ## Key highlights
12 | - Performed time series analysis, anomaly detection using `Isolation Forest` and interpolation using `rolling mean`
13 | - Explored various time series forecasting models including ARMA, ARIMA, Exponential Smoothing, Prophet, Auto-arima, CNN and LSTM and compared performance using `RMSE`
14 | - Developed `flask` app to render forecast plots generated using saved models
15 | - Practiced fetching data from `AWS S3` using boto3 and deployed the flask app on `AWS EC2` instance using nginx and gunicorn
16 |
17 | ## Execution
18 |
19 | Use requirements.txt file to install the dependancies.
20 |
21 | ```
22 | pip install -r req.txt
23 | ```
24 |
25 | To run the application on local system, comment lines 19-23 in app.py and uncomment line 25. Enter the following command in terminal.
26 | ```
27 | python app.py
28 | ```
29 |
30 | ## Time series analysis, anomaly detection and forecasting
31 |
32 | To view various analysis on the web traffic time series data, steps taken to detect and handle anomalies, model training, testing and forecasting, view the following Jupyter notebooks:
33 |
34 | - [forecast.ipynb](forecast.ipynb)
35 | - [forecast_CNN.ipynb](forecast_CNN.ipynb)
36 | - [forecast_LSTM.ipynb](forecast_LSTM.ipynb)
37 |
38 |
39 | ## Model performance
40 |
41 | Model | RMSE
42 | ------------- | -------------
43 | ARMA | 1.732618
44 | ARIMA | 1.734711
45 | Auto-arima | 2.148956
46 | Exponential Smoothing | 2.186610
47 | Prophet | 3.525529
48 |
--------------------------------------------------------------------------------
/app.py:
--------------------------------------------------------------------------------
1 | # Import packages
2 | import os
3 | import pickle
4 | from flask import Flask, request, jsonify, render_template
5 | import pandas as pd
6 | import boto3
7 | from statsmodels.tsa.statespace.sarimax import SARIMAXResults
8 | import matplotlib
9 | matplotlib.use('Agg')
10 | import matplotlib.pyplot as plt
11 | from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
12 | from matplotlib.figure import Figure
13 | import time
14 |
15 | app = Flask(__name__)
16 | SECRET_KEY = os.urandom(24)
17 |
18 | # Read data from S3 bucket
19 | bucket = "flaskforecast"
20 | file_name = "final_data.csv"
21 | s3 = boto3.client('s3',aws_access_key_id = YOUR_ACCESS_KEY,aws_secret_access_key=YOUR_SECRET_KEY)
22 | obj = s3.get_object(Bucket= bucket, Key= file_name)
23 | data_df = pd.read_csv(obj['Body'])
24 |
25 | # data_df = pd.read_csv('Preprocessed_data/final_data.csv')
26 |
27 | data_df = data_df.set_index('Date')
28 | data_df.index = pd.DatetimeIndex(data_df.index)
29 |
30 | # Train, test split
31 | train = data_df[:'2016-09']
32 | test = data_df['2016-10':]
33 |
34 |
35 | # Display plots based on user's selection of model
36 | @app.route('/')
37 | @app.route('/result', methods=['POST'])
38 | def home():
39 | fcast = ""
40 | if request.method == 'POST':
41 | method = request.form['forecast']
42 |
43 | # Forecasting using saved ARMA model
44 | if method == "arma":
45 | result=SARIMAXResults.load('model/arma_model.pkl')
46 | forecast_values = result.get_forecast(steps=test.shape[0])
47 | forecast_values_mean = forecast_values.predicted_mean
48 | conf_interval = forecast_values.conf_int()
49 |
50 | arma_forecast_df = pd.DataFrame({'Date':test.index,'Views':forecast_values.predicted_mean,'lower_views':conf_interval['lower Views'].values,'upper_views':conf_interval['upper Views'].values})
51 | arma_forecast_df = arma_forecast_df.set_index('Date')
52 |
53 | fig, ax = plt.subplots(figsize=(15,4))
54 | test.rename(columns={'Views':'Actual value'}).plot(ax=ax,color='blue')
55 | arma_forecast_df[['Views']].rename(columns={'Views':'Forecast'}).plot(ax=ax,label='Forecast',color='red')
56 | plt.fill_between(arma_forecast_df.index, \
57 | arma_forecast_df.lower_views, \
58 | arma_forecast_df.upper_views, \
59 | color='pink', alpha=0.5)
60 | plt.xlabel('Date')
61 | plt.ylabel('Views')
62 | plt.legend(loc='best')
63 | new_arma_plot = "arma_plot_" + str(time.time()) + ".png"
64 |
65 | for filename in os.listdir('static/'):
66 | if filename.startswith('arma_plot_'):
67 | os.remove('static/' + filename)
68 |
69 | plt.savefig('static/' + new_arma_plot)
70 | return render_template('index.html', forecast='ARMA', fcast='static/' + new_arma_plot)
71 |
72 | # Forecasting using saved ARIMA model
73 | elif method =="arima":
74 | arima_result = SARIMAXResults.load('model/arima_model.pkl')
75 | arima_forecast_values = arima_result.get_forecast(steps=test.shape[0])
76 | arima_forecast_mean = arima_forecast_values.predicted_mean
77 | arima_conf_interval = arima_forecast_values.conf_int()
78 |
79 | arima_forecast_df = pd.DataFrame({'Date':test.index,'Views':arima_forecast_values.predicted_mean,'lower_views':arima_conf_interval['lower Views'].values,'upper_views':arima_conf_interval['upper Views'].values})
80 | arima_forecast_df = arima_forecast_df.set_index('Date')
81 |
82 | fig, ax = plt.subplots(figsize=(15,4))
83 | test.rename(columns={'Views':'Actual value'}).plot(ax=ax,color='blue')
84 | arima_forecast_df[['Views']].rename(columns={'Views':'Forecast'}).plot(ax=ax,label='Forecast',color='red')
85 | plt.fill_between(arima_forecast_df.index, \
86 | arima_forecast_df.lower_views, \
87 | arima_forecast_df.upper_views, \
88 | color='pink', alpha=0.5)
89 | plt.xlabel('Date')
90 | plt.ylabel('Views')
91 | plt.legend(loc='best')
92 | new_arima_plot = "arima_plot_" + str(time.time()) + ".png"
93 |
94 | for filename in os.listdir('static/'):
95 | if filename.startswith('arima_plot_'):
96 | os.remove('static/' + filename)
97 |
98 | plt.savefig('static/' + new_arima_plot)
99 | return render_template('index.html', forecast='ARIMA', fcast='static/' + new_arima_plot)
100 |
101 | # Forecasting using saved Exponential Smoothing model
102 | elif method == 'exp':
103 | exp_model = pickle.load(open('model/exp_smoothing_model.pkl', 'rb'))
104 | exp_smoothing_result = exp_model.fit(smoothing_level=0.5,optimized=True)
105 | test.index=pd.DatetimeIndex(test.index)
106 | exp_smoothing_forecast = exp_smoothing_result.forecast(test.shape[0])
107 | exp_smoothing_forecast=exp_smoothing_forecast.reset_index().rename(columns={'index':'Date',0:'Views'}).set_index('Date')
108 |
109 | fig, ax = plt.subplots(figsize=(15,4))
110 | test.rename(columns={'Views':'Actual data'}).plot(ax=ax,color='blue')
111 | exp_smoothing_forecast.rename(columns={'Views':'Forecast'}).plot(ax=ax,color='red')
112 | plt.xlabel('Date')
113 | plt.ylabel('Views')
114 | plt.legend(loc='best')
115 |
116 | new_exp_plot = "exp_plot_" + str(time.time()) + ".png"
117 |
118 | for filename in os.listdir('static/'):
119 | if filename.startswith('exp_plot_'):
120 | os.remove('static/' + filename)
121 |
122 | plt.savefig('static/' + new_exp_plot)
123 | return render_template('index.html', forecast='Exponential Smoothing', fcast='static/' + new_exp_plot)
124 |
125 | # Forecasting using saved Prophet model
126 | elif method == 'prophet':
127 | prophet_model = pickle.load(open('model/prophet_model.pkl', 'rb'))
128 | test.index = pd.DatetimeIndex(test.index)
129 | future = prophet_model.make_future_dataframe(periods=test.shape[0])
130 | prophet_forecast = prophet_model.predict(future)
131 |
132 | forecast_prophet = prophet_forecast[['ds','yhat_lower','yhat_upper','yhat']][-test.shape[0]:]
133 | forecast_prophet = forecast_prophet.set_index('ds')
134 |
135 | fig, ax = plt.subplots(figsize=(15,4))
136 | pd.plotting.register_matplotlib_converters()
137 | test.rename(columns={'Views':'Actual data'}).plot(ax=ax,color='blue')
138 | forecast_prophet.rename(columns={'yhat':'Forecast'})[['Forecast']].plot(ax=ax,color='red')
139 | plt.fill_between(forecast_prophet.index,forecast_prophet['yhat_lower'],forecast_prophet['yhat_upper'],color='pink',alpha=0.5)
140 | plt.xlabel('Date')
141 | plt.ylabel('Views')
142 | plt.legend(loc='best')
143 |
144 | new_prophet_plot = "prophet_plot_" + str(time.time()) + ".png"
145 |
146 | for filename in os.listdir('static/'):
147 | if filename.startswith('prophet_plot_'):
148 | os.remove('static/' + filename)
149 |
150 | plt.savefig('static/' + new_prophet_plot)
151 | return render_template('index.html', forecast='Prophet', fcast='static/' + new_prophet_plot)
152 |
153 | # Forecasting using saved AutoARIMA model
154 | elif method == 'auto_arima':
155 | auto_arima_result = SARIMAXResults.load('model/auto_arima_model.pkl')
156 | auto_arima_forecast = auto_arima_result.predict(n_periods=test.shape[0])
157 | auto_arima_forecast = pd.DataFrame(auto_arima_forecast,index = test.index,columns=['Forecast'])
158 |
159 | fig, ax = plt.subplots(figsize=(15,4))
160 | test.rename(columns={'Views':'Actual value'}).plot(ax=ax,color='blue')
161 | auto_arima_forecast[['Forecast']].plot(ax=ax,label='Forecast',color='red')
162 | ax.set_xlabel('Date')
163 | ax.set_ylabel('Views')
164 | plt.legend(loc='best')
165 |
166 | new_auto_arima_plot = "auto_arima_plot_" + str(time.time()) + ".png"
167 |
168 | for filename in os.listdir('static/'):
169 | if filename.startswith('auto_arima_plot_'):
170 | os.remove('static/' + filename)
171 |
172 | plt.savefig('static/' + new_auto_arima_plot)
173 | return render_template('index.html', forecast='Auto-arima', fcast='static/' + new_auto_arima_plot)
174 | return render_template('index.html', fcast=fcast)
175 |
176 | if __name__ == '__main__':
177 | app.secret_key = SECRET_KEY
178 | app.run(debug=True)
179 |
--------------------------------------------------------------------------------
/forecast_CNN.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "name": "stderr",
10 | "output_type": "stream",
11 | "text": [
12 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:526: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
13 | " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
14 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:527: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
15 | " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
16 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:528: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
17 | " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
18 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:529: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
19 | " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
20 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:530: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
21 | " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
22 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:535: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
23 | " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n"
24 | ]
25 | }
26 | ],
27 | "source": [
28 | "# Import libraries\n",
29 | "import pandas as pd\n",
30 | "import tensorflow as tf\n",
31 | "from tensorflow import keras\n",
32 | "import numpy as np\n",
33 | "import matplotlib.pyplot as plt\n",
34 | "plt.style.use('fivethirtyeight')\n",
35 | "from datetime import datetime\n",
36 | "from sklearn.ensemble import IsolationForest\n",
37 | "from statsmodels.graphics import tsaplots\n",
38 | "import statsmodels.api as sm\n",
39 | "from pylab import rcParams\n",
40 | "import warnings \n",
41 | "warnings.filterwarnings(\"ignore\")"
42 | ]
43 | },
44 | {
45 | "cell_type": "code",
46 | "execution_count": 2,
47 | "metadata": {},
48 | "outputs": [],
49 | "source": [
50 | "# Read pre-processed data\n",
51 | "top_page_df = pd.read_csv('Preprocessed_data/final_data.csv')\n",
52 | "top_page_df = top_page_df.set_index('Date')"
53 | ]
54 | },
55 | {
56 | "cell_type": "code",
57 | "execution_count": 6,
58 | "metadata": {},
59 | "outputs": [
60 | {
61 | "data": {
62 | "text/html": [
63 | "
\n",
64 | "\n",
77 | "
\n",
78 | " \n",
79 | " \n",
80 | " | \n",
81 | " Views | \n",
82 | "
\n",
83 | " \n",
84 | " Date | \n",
85 | " | \n",
86 | "
\n",
87 | " \n",
88 | " \n",
89 | " \n",
90 | " 2015-07-01 | \n",
91 | " 20.38 | \n",
92 | "
\n",
93 | " \n",
94 | " 2015-07-02 | \n",
95 | " 20.75 | \n",
96 | "
\n",
97 | " \n",
98 | " 2015-07-03 | \n",
99 | " 19.57 | \n",
100 | "
\n",
101 | " \n",
102 | " 2015-07-04 | \n",
103 | " 20.44 | \n",
104 | "
\n",
105 | " \n",
106 | " 2015-07-05 | \n",
107 | " 20.77 | \n",
108 | "
\n",
109 | " \n",
110 | "
\n",
111 | "
"
112 | ],
113 | "text/plain": [
114 | " Views\n",
115 | "Date \n",
116 | "2015-07-01 20.38\n",
117 | "2015-07-02 20.75\n",
118 | "2015-07-03 19.57\n",
119 | "2015-07-04 20.44\n",
120 | "2015-07-05 20.77"
121 | ]
122 | },
123 | "execution_count": 6,
124 | "metadata": {},
125 | "output_type": "execute_result"
126 | }
127 | ],
128 | "source": [
129 | "# Time-series of page with maximum views\n",
130 | "top_pages = df_reshaped.groupby('Page')['Views'].sum().reset_index()\n",
131 | "top_pages_list = top_pages.nlargest(5,'Views')['Page'].tolist()\n",
132 | "\n",
133 | "top_page_df = df_reshaped[df_reshaped.Page == top_pages_list[0]]\n",
134 | "top_page_df = top_page_df[['Views']]\n",
135 | "top_page_df['Views'] = top_page_df['Views'].div(1000000).round(2)\n",
136 | "top_page_df.head()"
137 | ]
138 | },
139 | {
140 | "cell_type": "markdown",
141 | "metadata": {},
142 | "source": [
143 | "## Anomaly detection"
144 | ]
145 | },
146 | {
147 | "cell_type": "code",
148 | "execution_count": 7,
149 | "metadata": {},
150 | "outputs": [],
151 | "source": [
152 | "# Detecting anomalies in the data, removing anomalies and filling missing values with rolling mean\n",
153 | "isolation_forest_model = IsolationForest(contamination=0.08)\n",
154 | "isolation_forest_model.fit(top_page_df)\n",
155 | "top_page_df['anomaly'] = isolation_forest_model.predict(top_page_df)\n",
156 | "\n",
157 | "top_page_df['new_views'] = top_page_df.apply(lambda row: row.Views if row.anomaly == 1 else None, axis='columns')\n",
158 | "top_page_df = top_page_df.assign(rolling_mean=top_page_df.new_views.fillna(top_page_df.new_views.rolling(30,min_periods=1).mean()))\n",
159 | "top_page_df = top_page_df.drop(columns=['Views','anomaly','new_views']).rename(columns={'rolling_mean':'Views'})"
160 | ]
161 | },
162 | {
163 | "cell_type": "code",
164 | "execution_count": 3,
165 | "metadata": {},
166 | "outputs": [],
167 | "source": [
168 | "# Convert dataset into suitable form to train the model\n",
169 | "train = top_page_df[:'2016-09']\n",
170 | "test = top_page_df['2016-10':]\n",
171 | "\n",
172 | "def transform_dataset(X, y, time_steps=1):\n",
173 | " Xs, ys = [], []\n",
174 | " for i in range(len(X) - time_steps):\n",
175 | " v = X.iloc[i:(i + time_steps)].values\n",
176 | " Xs.append(v)\n",
177 | " ys.append(y.iloc[i + time_steps])\n",
178 | " return np.array(Xs), np.array(ys)\n",
179 | "\n",
180 | "time_steps = 7\n",
181 | "\n",
182 | "X_train, y_train = transform_dataset(train, train.Views, time_steps)\n",
183 | "X_test, y_test = transform_dataset(test, test.Views, time_steps)"
184 | ]
185 | },
186 | {
187 | "cell_type": "code",
188 | "execution_count": 4,
189 | "metadata": {},
190 | "outputs": [
191 | {
192 | "name": "stdout",
193 | "output_type": "stream",
194 | "text": [
195 | "WARNING:tensorflow:From /Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/resource_variable_ops.py:435: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
196 | "Instructions for updating:\n",
197 | "Colocations handled automatically by placer.\n",
198 | "WARNING:tensorflow:From /Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/keras/utils/losses_utils.py:170: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
199 | "Instructions for updating:\n",
200 | "Use tf.cast instead.\n"
201 | ]
202 | }
203 | ],
204 | "source": [
205 | "# Building the model\n",
206 | "n_features=1\n",
207 | "model = keras.Sequential()\n",
208 | "model.add(keras.layers.Conv1D(filters=64, kernel_size=2, activation='relu', input_shape=(time_steps, n_features)))\n",
209 | "model.add(keras.layers.MaxPooling1D(pool_size=2))\n",
210 | "model.add(keras.layers.Flatten())\n",
211 | "model.add(keras.layers.Dense(50, activation='relu'))\n",
212 | "model.add(keras.layers.Dense(1))\n",
213 | "model.compile(optimizer='adam', loss='mse')"
214 | ]
215 | },
216 | {
217 | "cell_type": "code",
218 | "execution_count": 5,
219 | "metadata": {},
220 | "outputs": [
221 | {
222 | "name": "stdout",
223 | "output_type": "stream",
224 | "text": [
225 | "WARNING:tensorflow:From /Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
226 | "Instructions for updating:\n",
227 | "Use tf.cast instead.\n",
228 | "Epoch 1/20\n",
229 | "421/421 [==============================] - 0s 568us/sample - loss: 301.7494\n",
230 | "Epoch 2/20\n",
231 | "421/421 [==============================] - 0s 47us/sample - loss: 86.0850\n",
232 | "Epoch 3/20\n",
233 | "421/421 [==============================] - 0s 45us/sample - loss: 8.9935\n",
234 | "Epoch 4/20\n",
235 | "421/421 [==============================] - 0s 39us/sample - loss: 5.1175\n",
236 | "Epoch 5/20\n",
237 | "421/421 [==============================] - 0s 42us/sample - loss: 2.7050\n",
238 | "Epoch 6/20\n",
239 | "421/421 [==============================] - 0s 43us/sample - loss: 2.4182\n",
240 | "Epoch 7/20\n",
241 | "421/421 [==============================] - 0s 39us/sample - loss: 2.3232\n",
242 | "Epoch 8/20\n",
243 | "421/421 [==============================] - 0s 37us/sample - loss: 2.2971\n",
244 | "Epoch 9/20\n",
245 | "421/421 [==============================] - 0s 40us/sample - loss: 2.2671\n",
246 | "Epoch 10/20\n",
247 | "421/421 [==============================] - 0s 37us/sample - loss: 2.2649\n",
248 | "Epoch 11/20\n",
249 | "421/421 [==============================] - 0s 40us/sample - loss: 2.2528\n",
250 | "Epoch 12/20\n",
251 | "421/421 [==============================] - 0s 39us/sample - loss: 2.2417\n",
252 | "Epoch 13/20\n",
253 | "421/421 [==============================] - 0s 39us/sample - loss: 2.2324\n",
254 | "Epoch 14/20\n",
255 | "421/421 [==============================] - 0s 40us/sample - loss: 2.2214\n",
256 | "Epoch 15/20\n",
257 | "421/421 [==============================] - 0s 38us/sample - loss: 2.2111\n",
258 | "Epoch 16/20\n",
259 | "421/421 [==============================] - 0s 39us/sample - loss: 2.2003\n",
260 | "Epoch 17/20\n",
261 | "421/421 [==============================] - 0s 40us/sample - loss: 2.1893\n",
262 | "Epoch 18/20\n",
263 | "421/421 [==============================] - 0s 41us/sample - loss: 2.1780\n",
264 | "Epoch 19/20\n",
265 | "421/421 [==============================] - 0s 39us/sample - loss: 2.1653\n",
266 | "Epoch 20/20\n",
267 | "421/421 [==============================] - 0s 41us/sample - loss: 2.1450\n"
268 | ]
269 | }
270 | ],
271 | "source": [
272 | "# Training the model\n",
273 | "history = model.fit(\n",
274 | " X_train, y_train,\n",
275 | " epochs=20,\n",
276 | " verbose=1,\n",
277 | " shuffle=False\n",
278 | ")"
279 | ]
280 | },
281 | {
282 | "cell_type": "code",
283 | "execution_count": 6,
284 | "metadata": {},
285 | "outputs": [],
286 | "source": [
287 | "# Forecasting using test data. Test data is used for forecasting to validate the results and calculate RMSE\n",
288 | "y_pred = model.predict(X_test)"
289 | ]
290 | },
291 | {
292 | "cell_type": "code",
293 | "execution_count": 7,
294 | "metadata": {},
295 | "outputs": [
296 | {
297 | "data": {
298 | "image/png": "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\n",
299 | "text/plain": [
300 | ""
301 | ]
302 | },
303 | "metadata": {},
304 | "output_type": "display_data"
305 | }
306 | ],
307 | "source": [
308 | "fig,ax=plt.subplots()\n",
309 | "pd.DataFrame({'Date':test.index[:y_test.shape[0]],'Views':y_test}).plot('Date',ax=ax)\n",
310 | "pd.DataFrame({'Date':test.index[:y_pred.shape[0]],'Views':y_pred.flatten()}).plot('Date',ax=ax)\n",
311 | "plt.legend(['test', 'forecast'], loc='upper left')\n",
312 | "plt.ylabel('Views (in million)')\n",
313 | "plt.show()"
314 | ]
315 | },
316 | {
317 | "cell_type": "code",
318 | "execution_count": 8,
319 | "metadata": {},
320 | "outputs": [
321 | {
322 | "name": "stdout",
323 | "output_type": "stream",
324 | "text": [
325 | "RMSE:2.0027657329476893\n"
326 | ]
327 | }
328 | ],
329 | "source": [
330 | "print('RMSE:'+str(np.sqrt(np.mean(np.square(y_pred.flatten() - y_test)))))"
331 | ]
332 | }
333 | ],
334 | "metadata": {
335 | "kernelspec": {
336 | "display_name": "Python 3",
337 | "language": "python",
338 | "name": "python3"
339 | },
340 | "language_info": {
341 | "codemirror_mode": {
342 | "name": "ipython",
343 | "version": 3
344 | },
345 | "file_extension": ".py",
346 | "mimetype": "text/x-python",
347 | "name": "python",
348 | "nbconvert_exporter": "python",
349 | "pygments_lexer": "ipython3",
350 | "version": "3.7.6"
351 | }
352 | },
353 | "nbformat": 4,
354 | "nbformat_minor": 2
355 | }
356 |
--------------------------------------------------------------------------------
/forecast_LSTM.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "name": "stderr",
10 | "output_type": "stream",
11 | "text": [
12 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:526: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
13 | " _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
14 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:527: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
15 | " _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
16 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:528: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
17 | " _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
18 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:529: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
19 | " _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
20 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:530: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
21 | " _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
22 | "/Users/subikshaa/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/dtypes.py:535: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
23 | " np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n"
24 | ]
25 | }
26 | ],
27 | "source": [
28 | "# Import libraries\n",
29 | "import pandas as pd\n",
30 | "import tensorflow as tf\n",
31 | "from tensorflow import keras\n",
32 | "import numpy as np\n",
33 | "import matplotlib.pyplot as plt\n",
34 | "plt.style.use('fivethirtyeight')\n",
35 | "from datetime import datetime\n",
36 | "from sklearn.ensemble import IsolationForest\n",
37 | "from statsmodels.graphics import tsaplots\n",
38 | "import statsmodels.api as sm\n",
39 | "from pylab import rcParams\n",
40 | "import warnings \n",
41 | "warnings.filterwarnings(\"ignore\")\n",
42 | "import pickle"
43 | ]
44 | },
45 | {
46 | "cell_type": "code",
47 | "execution_count": 24,
48 | "metadata": {},
49 | "outputs": [],
50 | "source": [
51 | "# Read pre-processed data\n",
52 | "top_page_df = pd.read_csv('Preprocessed_data/final_data.csv')\n",
53 | "top_page_df = top_page_df.set_index('Date')"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": 26,
59 | "metadata": {},
60 | "outputs": [],
61 | "source": [
62 | "# Convert dataset into suitable form to train the model\n",
63 | "train = top_page_df[:'2016-09']\n",
64 | "test = top_page_df['2016-10':]\n",
65 | "\n",
66 | "def transform_dataset(X, y, time_steps=1):\n",
67 | " Xs, ys = [], []\n",
68 | " for i in range(len(X) - time_steps):\n",
69 | " v = X.iloc[i:(i + time_steps)].values\n",
70 | " Xs.append(v)\n",
71 | " ys.append(y.iloc[i + time_steps])\n",
72 | " return np.array(Xs), np.array(ys)\n",
73 | "\n",
74 | "time_steps = 7\n",
75 | "\n",
76 | "X_train, y_train = transform_dataset(train, train.Views, time_steps)\n",
77 | "X_test, y_test = transform_dataset(test, test.Views, time_steps)"
78 | ]
79 | },
80 | {
81 | "cell_type": "markdown",
82 | "metadata": {},
83 | "source": [
84 | "## LSTM"
85 | ]
86 | },
87 | {
88 | "cell_type": "code",
89 | "execution_count": 27,
90 | "metadata": {},
91 | "outputs": [],
92 | "source": [
93 | "# Build the model\n",
94 | "model = keras.Sequential()\n",
95 | "model.add(keras.layers.LSTM(\n",
96 | " units=128,\n",
97 | " input_shape=(X_train.shape[1], X_train.shape[2])\n",
98 | "))\n",
99 | "model.add(keras.layers.Dense(units=1))\n",
100 | "model.compile(\n",
101 | " loss='mean_squared_error',\n",
102 | " optimizer=keras.optimizers.RMSprop()\n",
103 | ")"
104 | ]
105 | },
106 | {
107 | "cell_type": "code",
108 | "execution_count": 28,
109 | "metadata": {},
110 | "outputs": [
111 | {
112 | "name": "stdout",
113 | "output_type": "stream",
114 | "text": [
115 | "Train on 378 samples, validate on 43 samples\n",
116 | "Epoch 1/20\n",
117 | "378/378 [==============================] - 1s 3ms/sample - loss: 137.4239 - val_loss: 64.4879\n",
118 | "Epoch 2/20\n",
119 | "378/378 [==============================] - 0s 432us/sample - loss: 13.3225 - val_loss: 23.4985\n",
120 | "Epoch 3/20\n",
121 | "378/378 [==============================] - 0s 424us/sample - loss: 3.8077 - val_loss: 13.6965\n",
122 | "Epoch 4/20\n",
123 | "378/378 [==============================] - 0s 444us/sample - loss: 2.5473 - val_loss: 10.9317\n",
124 | "Epoch 5/20\n",
125 | "378/378 [==============================] - 0s 434us/sample - loss: 2.3783 - val_loss: 10.1192\n",
126 | "Epoch 6/20\n",
127 | "378/378 [==============================] - 0s 424us/sample - loss: 2.3542 - val_loss: 9.7383\n",
128 | "Epoch 7/20\n",
129 | "378/378 [==============================] - 0s 432us/sample - loss: 2.2620 - val_loss: 9.2423\n",
130 | "Epoch 8/20\n",
131 | "378/378 [==============================] - 0s 437us/sample - loss: 2.2058 - val_loss: 8.8267\n",
132 | "Epoch 9/20\n",
133 | "378/378 [==============================] - 0s 424us/sample - loss: 2.1622 - val_loss: 8.4865\n",
134 | "Epoch 10/20\n",
135 | "378/378 [==============================] - 0s 411us/sample - loss: 2.1475 - val_loss: 8.2733\n",
136 | "Epoch 11/20\n",
137 | "378/378 [==============================] - 0s 410us/sample - loss: 2.1462 - val_loss: 8.2827\n",
138 | "Epoch 12/20\n",
139 | "378/378 [==============================] - 0s 419us/sample - loss: 2.1442 - val_loss: 8.2541\n",
140 | "Epoch 13/20\n",
141 | "378/378 [==============================] - 0s 422us/sample - loss: 2.1335 - val_loss: 8.0268\n",
142 | "Epoch 14/20\n",
143 | "378/378 [==============================] - 0s 429us/sample - loss: 2.1043 - val_loss: 7.8695\n",
144 | "Epoch 15/20\n",
145 | "378/378 [==============================] - 0s 440us/sample - loss: 2.0836 - val_loss: 7.8140\n",
146 | "Epoch 16/20\n",
147 | "378/378 [==============================] - 0s 426us/sample - loss: 2.0589 - val_loss: 7.6039\n",
148 | "Epoch 17/20\n",
149 | "378/378 [==============================] - 0s 433us/sample - loss: 2.0475 - val_loss: 7.5233\n",
150 | "Epoch 18/20\n",
151 | "378/378 [==============================] - 0s 445us/sample - loss: 2.0286 - val_loss: 7.4461\n",
152 | "Epoch 19/20\n",
153 | "378/378 [==============================] - 0s 432us/sample - loss: 2.0171 - val_loss: 7.4894\n",
154 | "Epoch 20/20\n",
155 | "378/378 [==============================] - 0s 429us/sample - loss: 2.0133 - val_loss: 7.7140\n"
156 | ]
157 | }
158 | ],
159 | "source": [
160 | "# Training the model\n",
161 | "history = model.fit(\n",
162 | " X_train, y_train,\n",
163 | " epochs=20,\n",
164 | " batch_size=16,\n",
165 | " validation_split=0.1,\n",
166 | " verbose=1,\n",
167 | " shuffle=False\n",
168 | ")"
169 | ]
170 | },
171 | {
172 | "cell_type": "code",
173 | "execution_count": 29,
174 | "metadata": {},
175 | "outputs": [
176 | {
177 | "data": {
178 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAboAAAE0CAYAAABaTfYtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxTVf7/8ddN0p1uQJqCXZC2tLRsigLiiLLIKiACI86M+mMRARdwlFGEgYFRFsEFtVYE56uDIgIyCsjAKIuyCW5YZK0CRRBaWuhKtyT390faNGna0tI2Scvn+Xhgc889uTk5jX3n3O0oWVlZKkIIIUQTpXF1A4QQQoiGJEEnhBCiSZOgE0II0aRJ0AkhhGjSJOiEEEI0aRJ0QgghmjQJOiEagSFDhhAUFERqamqdtjN58uRabafsdYVozCTohBBCNGkSdEIIIZo0CTohhBBNmgSdEEBqaipBQUEMGTKE9PR0HnvsMWJiYmjdujX9+/dnz549AOTl5fH888/ToUMHQkJC6N69O59++mml2ywqKmLp0qXcfvvttGrVirCwMPr168e///1vVLXyO+998skn3HnnnYSGhhIdHc3EiRM5f/58tW0/ePAg48aNIy4uDr1eT2xsLBMnTuTkyZN165RqqKrKe++9R9++fQkLC6NVq1b84Q9/4I033qC4uNih/k8//cT48ePp2LEjBoOBtm3b0rNnT55++mmys7Ot9YqKinjrrbfo1asXbdq0ITQ0lA4dOjBq1Cg2bNjQYO9HNG06VzdACHeSnZ3NgAEDCA4OZvTo0fz+++989tlnjBw5kv/9739MmzaNK1euMHjwYHJzc/nkk08YO3YsN9xwA7feeqt1OyUlJYwcOZLdu3cTHR3NuHHjKC4uZtOmTTz55JPs3buXt99+2+61ExMTmTlzJgEBAdx///0EBQWxfft2+vfvT0BAQKXtXbNmDVOmTMHT05NBgwZxww03cPLkST755BO2bNnCpk2b6NSpU73308SJE1m7di2tW7fmT3/6Ex4eHmzZsoW///3vfPnll3zyySfodJY/L8nJyfTv3x9FURg4cCA33ngjeXl5nDlzhlWrVvHYY48RGBgIwKRJk/jPf/5DXFwcf/zjH/Hz8+P8+fP88MMPbNq0iWHDhtX7exFNnwSdEDZ+/vlnHn30URYuXIiiKAC88sorzJs3j3vuuYfevXuzYsUKPDw8AOjTpw+PPPIIr732Gh9++KF1O2+88Qa7d++mT58+rF69Gk9PTwBmzZrFwIEDWb16NQMHDuTee+8FLCPKuXPnEhAQwNdff02bNm0AmDNnDuPGjat01Hjy5EmeeOIJwsLC2Lx5M61bt7au27VrF/feey+PP/44X3/9db320bp161i7di0JCQn897//tYbwnDlzGDVqFF999RVvvfUWTz75JACrV6+mqKiIlStXMnToULtt5ebmWvsmOzubTz/9lM6dO7Nt2zZrUJbJzMys1/chrh+y61IIG35+fsyePdsacgB//OMfAcjJyeGFF16whhzAfffdh4eHB4cOHbLbzgcffADAiy++aP1DDhAYGMjs2bMBeP/9963la9eupbi4mEceecQacgAajYZ//OMfaLVah7a+++67FBUVMX/+fLuQA7jjjjsYNGgQycnJHD16tLbdUK2y9zZnzhy7kaanpyfz588H7N+bRmP5M+Pr6+uwLX9/f7y8vKz1VFXFy8ur0vfbokWL+nsT4roiIzohbERFReHn52dXFhoaCkBQUBDh4eF267RaLXq9nt9//91alpuby8mTJwkJCaF9+/YOr3HnnXcCluNWZcoe33777Q7127Rpww033MCZM2fsyvfv3w/A3r177bZV5uLFiwCcOHGi0nZcq7LXuuOOOxzWdejQAb1ez6+//kpeXh7NmjVj5MiRvP322/z5z39m2LBh9OrVi27dutGuXTu75/r7+zN48GA2b97M7bffzj333MNtt93GrbfeSrNmzeqt/eL6I0EnhA1/f3+HsrJdaJWtA0vYGY1G63JOTg4AISEhldb39fUlICDAWs/2OXq9vtLnhISEOATdpUuXAHjzzTcrfU6Z/Pz8atfXVk5ODgEBAfj4+FS63mAwcPHiRXJycmjWrBk33XQTW7duZcmSJWzatIk1a9YAEBERwbRp0xg3bpz1uf/617944403WLt2LS+99BIAHh4eDBw4kBdeeIHIyMh6fS/i+iBBJ0Q9K9udl56eXun6K1eukJOTQ/PmzR2eUzYKq6iybZU959SpUwQHB9epzbUREBDA5cuXKSgoqDTs0tLS7NoH0LVrVz766COKi4tJTk5m+/btLF++nL/+9a/4+voyZswYALy9vZk+fTrTp0/n/Pnz7Nu3jzVr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\n",
179 | "text/plain": [
180 | ""
181 | ]
182 | },
183 | "metadata": {},
184 | "output_type": "display_data"
185 | }
186 | ],
187 | "source": [
188 | "plt.plot(history.history['loss'])\n",
189 | "plt.plot(history.history['val_loss'])\n",
190 | "plt.title('model loss')\n",
191 | "plt.ylabel('loss')\n",
192 | "plt.xlabel('epoch')\n",
193 | "plt.legend(['train', 'test'], loc='upper left')\n",
194 | "plt.show()"
195 | ]
196 | },
197 | {
198 | "cell_type": "code",
199 | "execution_count": 30,
200 | "metadata": {},
201 | "outputs": [],
202 | "source": [
203 | "# Forecasting using test data\n",
204 | "y_pred = model.predict(X_test)"
205 | ]
206 | },
207 | {
208 | "cell_type": "code",
209 | "execution_count": 31,
210 | "metadata": {},
211 | "outputs": [
212 | {
213 | "data": {
214 | "image/png": "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\n",
215 | "text/plain": [
216 | ""
217 | ]
218 | },
219 | "metadata": {},
220 | "output_type": "display_data"
221 | }
222 | ],
223 | "source": [
224 | "fig,ax=plt.subplots()\n",
225 | "pd.DataFrame({'Date':test.index[:y_test.shape[0]],'Views':y_test}).plot('Date',ax=ax)\n",
226 | "pd.DataFrame({'Date':test.index[:y_pred.shape[0]],'Views':y_pred.flatten()}).plot('Date',ax=ax)\n",
227 | "plt.legend(['test', 'forecast'], loc='upper left')\n",
228 | "plt.ylabel('Views (in million)')\n",
229 | "plt.show()"
230 | ]
231 | },
232 | {
233 | "cell_type": "code",
234 | "execution_count": 32,
235 | "metadata": {},
236 | "outputs": [
237 | {
238 | "name": "stdout",
239 | "output_type": "stream",
240 | "text": [
241 | "RMSE:4.173544036830901\n"
242 | ]
243 | }
244 | ],
245 | "source": [
246 | "print('RMSE:'+str(np.sqrt(np.mean(np.square(y_pred.flatten() - y_test)))))"
247 | ]
248 | }
249 | ],
250 | "metadata": {
251 | "kernelspec": {
252 | "display_name": "Python 3",
253 | "language": "python",
254 | "name": "python3"
255 | },
256 | "language_info": {
257 | "codemirror_mode": {
258 | "name": "ipython",
259 | "version": 3
260 | },
261 | "file_extension": ".py",
262 | "mimetype": "text/x-python",
263 | "name": "python",
264 | "nbconvert_exporter": "python",
265 | "pygments_lexer": "ipython3",
266 | "version": "3.7.6"
267 | }
268 | },
269 | "nbformat": 4,
270 | "nbformat_minor": 2
271 | }
272 |
--------------------------------------------------------------------------------
/model/arima_model.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/model/arima_model.pkl
--------------------------------------------------------------------------------
/model/arma_model.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/model/arma_model.pkl
--------------------------------------------------------------------------------
/model/auto_arima_model.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/model/auto_arima_model.pkl
--------------------------------------------------------------------------------
/model/exp_smoothing_model.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/model/exp_smoothing_model.pkl
--------------------------------------------------------------------------------
/model/prophet_model.pkl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/model/prophet_model.pkl
--------------------------------------------------------------------------------
/req.txt:
--------------------------------------------------------------------------------
1 | # This file may be used to create an environment using:
2 | # $ conda create --name --file
3 | # platform: osx-64
4 | blas=1.0=mkl
5 | ca-certificates=2020.1.1=0
6 | cctools=927.0.2=h5ba7a2e_4
7 | certifi=2020.4.5.2=py37_0
8 | clang=9.0.1=default_hf57f61e_0
9 | clang-tools=9.0.1=default_hf57f61e_0
10 | clang_osx-64=9.0.1=h05bbb7f_0
11 | clangxx=9.0.1=default_hf57f61e_0
12 | clangxx_osx-64=9.0.1=h05bbb7f_2
13 | click=7.1.2=py_0
14 | compiler-rt=9.0.1=h6a512c6_3
15 | compiler-rt_osx-64=9.0.1=h99342c6_3
16 | convertdate=2.2.1=pyh9f0ad1d_0
17 | cycler=0.10.0=py_2
18 | cython=0.29.20=py37h570ac47_0
19 | ephem=3.7.7.1=py37h0b31af3_0
20 | fbprophet=0.6=py37h4a8c4bd_0
21 | flask=1.1.2=py_0
22 | freetype=2.10.2=h8da9a1a_0
23 | holidays=0.10.2=pyh9f0ad1d_0
24 | intel-openmp=2019.4=233
25 | itsdangerous=1.1.0=py37_0
26 | jinja2=2.11.2=py_0
27 | joblib=0.15.1=py_0
28 | kiwisolver=1.2.0=py37ha1cc60f_0
29 | korean_lunar_calendar=0.2.1=pyh9f0ad1d_0
30 | ld64=450.3=h3c32e8a_4
31 | libcxx=10.0.0=1
32 | libedit=3.1.20191231=haf1e3a3_0
33 | libffi=3.3=h0a44026_1
34 | libgfortran=3.0.1=h93005f0_2
35 | libllvm9=9.0.1=h7475705_1
36 | libpng=1.6.37=hbbe82c9_1
37 | llvm-openmp=10.0.0=h28b9765_0
38 | lunarcalendar=0.0.9=py_0
39 | markupsafe=1.1.1=py37h1de35cc_0
40 | matplotlib=3.2.1=0
41 | matplotlib-base=3.2.1=py37hddda452_0
42 | mkl=2019.4=233
43 | mkl-service=2.3.0=py37hfbe908c_0
44 | mkl_fft=1.1.0=py37hc64f4ea_0
45 | mkl_random=1.1.1=py37h959d312_0
46 | ncurses=6.2=h0a44026_1
47 | numpy=1.18.1=py37h7241aed_0
48 | numpy-base=1.18.1=py37h3304bdc_1
49 | openssl=1.1.1g=h1de35cc_0
50 | pandas=1.0.4=py37h959d312_0
51 | patsy=0.5.1=py37_0
52 | pip=20.1.1=py37_1
53 | pmdarima=1.2.0=py37h56e435c_7
54 | pymeeus=0.3.7=pyh9f0ad1d_0
55 | pyparsing=2.4.7=pyh9f0ad1d_0
56 | pystan=2.17.1.0=py37h1702cab_1003
57 | python=3.7.7=hf48f09d_4
58 | python-dateutil=2.8.1=py_0
59 | python_abi=3.7=1_cp37m
60 | pytz=2020.1=py_0
61 | readline=8.0=h1de35cc_0
62 | scikit-learn=0.22.1=py37h27c97d8_0
63 | scipy=1.4.1=py37h9fa6033_0
64 | setuptools=47.3.0=py37_0
65 | six=1.15.0=py_0
66 | sqlite=3.32.2=hffcf06c_0
67 | statsmodels=0.11.1=py37haf1e3a3_0
68 | tapi=1000.10.8=ha1b3eb9_4
69 | tk=8.6.10=hb0a8c7a_0
70 | tornado=6.0.4=py37h9bfed18_1
71 | werkzeug=1.0.1=py_0
72 | wheel=0.34.2=py37_0
73 | xz=5.2.5=h1de35cc_0
74 | zlib=1.2.11=h1de35cc_3
75 |
--------------------------------------------------------------------------------
/static/arima_plot_1591687174.918447.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/static/arima_plot_1591687174.918447.png
--------------------------------------------------------------------------------
/static/arma_plot_1591687215.727288.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/static/arma_plot_1591687215.727288.png
--------------------------------------------------------------------------------
/static/auto_arima_plot_1591687207.990299.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/static/auto_arima_plot_1591687207.990299.png
--------------------------------------------------------------------------------
/static/exp_plot_1591687185.701119.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/static/exp_plot_1591687185.701119.png
--------------------------------------------------------------------------------
/static/plot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/static/plot.png
--------------------------------------------------------------------------------
/static/prophet_plot_1591687195.249861.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Subikshaa/Time-Series-Forecasting-on-Web-Traffic-Dataset/bffc37233ef1f913a9e1e6c8bbb6a1d77008f2c6/static/prophet_plot_1591687195.249861.png
--------------------------------------------------------------------------------
/static/style.css:
--------------------------------------------------------------------------------
1 | /* Style inputs, select elements and textareas */
2 | input[type=text], select, textarea{
3 | font-size: 16px;
4 | width: 100%;
5 | padding: 12px;
6 | border: 1px solid #ccc;
7 | border-radius: 4px;
8 | box-sizing: border-box;
9 | resize: vertical;
10 | }
11 |
12 | /* Style the label to display next to the inputs */
13 | label {
14 | font-size: 12px;
15 | padding: 12px 12px 12px 0;
16 | display: inline-block;
17 | }
18 |
19 | /* Style the submit button */
20 | input[type=submit] {
21 | background-color: #4CAF50;
22 | color: white;
23 | padding: 12px 20px;
24 | border: none;
25 | border-radius: 4px;
26 | cursor: pointer;
27 | float: center;
28 | }
29 |
30 | /* Style the container */
31 | .container {
32 | border-radius: 5px;
33 | background-color: #f2f2f2;
34 | padding: 20px;
35 | width: 90%;
36 | margin: auto;
37 | }
38 |
39 | /* Floating column for labels: 25% width */
40 | .col-25 {
41 | float: left;
42 | width: 25%;
43 | margin-top: 6px;
44 | }
45 |
46 | /* Floating column for inputs: 75% width */
47 | .col-75 {
48 | float: left;
49 | width: 75%;
50 | margin-top: 6px;
51 | }
52 |
53 | /* Clear floats after the columns */
54 | .row:after {
55 | content: "";
56 | display: table;
57 | clear: both;
58 | }
59 |
60 | /* Responsive layout - when the screen is less than 600px wide, make the two columns stack on top of each other instead of next to each other */
61 | @media screen and (max-width: 600px) {
62 | .col-25, .col-75, input[type=submit] {
63 | width: 100%;
64 | margin-top: 0;
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ML API
6 |
7 |
13 |
14 |
15 |
16 |
17 |
Time series forecasting
18 |
33 |
34 | {% if fcast %}
35 | Forecasting using {{ forecast }}
36 |
37 |
38 |

39 |
40 | {% endif %}
41 |
42 |
43 |
--------------------------------------------------------------------------------