├── Data └── Sunspots.csv ├── LICENSE ├── README.md ├── SampleCode ├── Readme.md ├── S+P_Week_1_Lesson_2.ipynb ├── S+P_Week_1_Lesson_3_Notebook.ipynb ├── S+P_Week_2_Exercise_Answer_ts_prediction_with_DNN.ipynb ├── S+P_Week_2_Lesson_1_ts_data_preparation_for_ML.ipynb ├── S+P_Week_2_Lesson_2_linear_regression_ts_data.ipynb ├── S+P_Week_2_Lesson_3_ts_prediction_with_DNN.ipynb ├── S+P_Week_3_Exercise_Answer_with_RNN_LSTM.ipynb ├── S+P_Week_3_Lesson_2_RNN_with_ts.ipynb ├── S+P_Week_3_Lesson_4_LSTM_with_ts.ipynb ├── S+P_Week_4_Exercise_Answer_temp_pred_using_DNN.ipynb ├── S+P_Week_4_Lesson_1.ipynb ├── S+P_Week_4_Lesson_3_Sunspot_prediction_using_DNN.ipynb └── Week_1_Exercise_Answer.ipynb └── Time_Series_Forecasting_with_DNN.ipynb /Data/Sunspots.csv: -------------------------------------------------------------------------------- 1 | ,Date,Monthly Mean Total Sunspot Number 2 | 0,1749-01-31,96.7 3 | 1,1749-02-28,104.3 4 | 2,1749-03-31,116.7 5 | 3,1749-04-30,92.8 6 | 4,1749-05-31,141.7 7 | 5,1749-06-30,139.2 8 | 6,1749-07-31,158.0 9 | 7,1749-08-31,110.5 10 | 8,1749-09-30,126.5 11 | 9,1749-10-31,125.8 12 | 10,1749-11-30,264.3 13 | 11,1749-12-31,142.0 14 | 12,1750-01-31,122.2 15 | 13,1750-02-28,126.5 16 | 14,1750-03-31,148.7 17 | 15,1750-04-30,147.2 18 | 16,1750-05-31,150.0 19 | 17,1750-06-30,166.7 20 | 18,1750-07-31,142.3 21 | 19,1750-08-31,171.7 22 | 20,1750-09-30,152.0 23 | 21,1750-10-31,109.5 24 | 22,1750-11-30,105.5 25 | 23,1750-12-31,125.7 26 | 24,1751-01-31,116.7 27 | 25,1751-02-28,72.5 28 | 26,1751-03-31,75.5 29 | 27,1751-04-30,94.0 30 | 28,1751-05-31,101.2 31 | 29,1751-06-30,84.5 32 | 30,1751-07-31,110.5 33 | 31,1751-08-31,99.7 34 | 32,1751-09-30,39.2 35 | 33,1751-10-31,38.7 36 | 34,1751-11-30,47.5 37 | 35,1751-12-31,73.3 38 | 36,1752-01-31,58.3 39 | 37,1752-02-29,83.3 40 | 38,1752-03-31,118.3 41 | 39,1752-04-30,98.8 42 | 40,1752-05-31,99.5 43 | 41,1752-06-30,66.0 44 | 42,1752-07-31,130.7 45 | 43,1752-08-31,48.8 46 | 44,1752-09-30,45.2 47 | 45,1752-10-31,77.7 48 | 46,1752-11-30,62.7 49 | 47,1752-12-31,66.7 50 | 48,1753-01-31,73.3 51 | 49,1753-02-28,53.3 52 | 50,1753-03-31,76.2 53 | 51,1753-04-30,63.3 54 | 52,1753-05-31,60.0 55 | 53,1753-06-30,52.8 56 | 54,1753-07-31,36.7 57 | 55,1753-08-31,65.0 58 | 56,1753-09-30,46.7 59 | 57,1753-10-31,41.7 60 | 58,1753-11-30,33.3 61 | 59,1753-12-31,11.2 62 | 60,1754-01-31,0.0 63 | 61,1754-02-28,5.0 64 | 62,1754-03-31,2.8 65 | 63,1754-04-30,22.8 66 | 64,1754-05-31,34.5 67 | 65,1754-06-30,44.5 68 | 66,1754-07-31,31.3 69 | 67,1754-08-31,20.5 70 | 68,1754-09-30,13.7 71 | 69,1754-10-31,40.2 72 | 70,1754-11-30,22.0 73 | 71,1754-12-31,7.0 74 | 72,1755-01-31,17.0 75 | 73,1755-02-28,18.7 76 | 74,1755-03-31,11.3 77 | 75,1755-04-30,10.8 78 | 76,1755-05-31,0.0 79 | 77,1755-06-30,0.0 80 | 78,1755-07-31,14.3 81 | 79,1755-08-31,5.3 82 | 80,1755-09-30,29.7 83 | 81,1755-10-31,39.5 84 | 82,1755-11-30,11.3 85 | 83,1755-12-31,33.3 86 | 84,1756-01-31,20.8 87 | 85,1756-02-29,11.8 88 | 86,1756-03-31,9.0 89 | 87,1756-04-30,15.7 90 | 88,1756-05-31,20.8 91 | 89,1756-06-30,21.5 92 | 90,1756-07-31,6.0 93 | 91,1756-08-31,10.7 94 | 92,1756-09-30,19.7 95 | 93,1756-10-31,23.8 96 | 94,1756-11-30,28.3 97 | 95,1756-12-31,15.7 98 | 96,1757-01-31,23.5 99 | 97,1757-02-28,35.3 100 | 98,1757-03-31,43.7 101 | 99,1757-04-30,50.0 102 | 100,1757-05-31,63.5 103 | 101,1757-06-30,21.3 104 | 102,1757-07-31,41.7 105 | 103,1757-08-31,85.5 106 | 104,1757-09-30,66.2 107 | 105,1757-10-31,54.2 108 | 106,1757-11-30,107.8 109 | 107,1757-12-31,55.8 110 | 108,1758-01-31,62.7 111 | 109,1758-02-28,86.7 112 | 110,1758-03-31,81.7 113 | 111,1758-04-30,120.5 114 | 112,1758-05-31,77.3 115 | 113,1758-06-30,75.0 116 | 114,1758-07-31,73.3 117 | 115,1758-08-31,64.5 118 | 116,1758-09-30,104.2 119 | 117,1758-10-31,62.8 120 | 118,1758-11-30,71.7 121 | 119,1758-12-31,71.7 122 | 120,1759-01-31,80.5 123 | 121,1759-02-28,73.3 124 | 122,1759-03-31,78.0 125 | 123,1759-04-30,78.3 126 | 124,1759-05-31,81.7 127 | 125,1759-06-30,83.3 128 | 126,1759-07-31,85.0 129 | 127,1759-08-31,118.8 130 | 128,1759-09-30,128.7 131 | 129,1759-10-31,99.5 132 | 130,1759-11-30,77.2 133 | 131,1759-12-31,95.0 134 | 132,1760-01-31,112.2 135 | 133,1760-02-29,99.2 136 | 134,1760-03-31,124.5 137 | 135,1760-04-30,97.2 138 | 136,1760-05-31,120.0 139 | 137,1760-06-30,80.5 140 | 138,1760-07-31,110.0 141 | 139,1760-08-31,126.0 142 | 140,1760-09-30,102.2 143 | 141,1760-10-31,84.3 144 | 142,1760-11-30,99.5 145 | 143,1760-12-31,101.7 146 | 144,1761-01-31,116.7 147 | 145,1761-02-28,151.7 148 | 146,1761-03-31,134.5 149 | 147,1761-04-30,119.5 150 | 148,1761-05-31,178.7 151 | 149,1761-06-30,165.5 152 | 150,1761-07-31,156.8 153 | 151,1761-08-31,151.8 154 | 152,1761-09-30,167.8 155 | 153,1761-10-31,147.8 156 | 154,1761-11-30,149.5 157 | 155,1761-12-31,76.7 158 | 156,1762-01-31,73.0 159 | 157,1762-02-28,121.3 160 | 158,1762-03-31,76.2 161 | 159,1762-04-30,100.3 162 | 160,1762-05-31,66.5 163 | 161,1762-06-30,128.5 164 | 162,1762-07-31,56.3 165 | 163,1762-08-31,112.8 166 | 164,1762-09-30,114.2 167 | 165,1762-10-31,115.5 168 | 166,1762-11-30,129.7 169 | 167,1762-12-31,128.7 170 | 168,1763-01-31,94.2 171 | 169,1763-02-28,53.2 172 | 170,1763-03-31,57.0 173 | 171,1763-04-30,54.8 174 | 172,1763-05-31,54.5 175 | 173,1763-06-30,59.7 176 | 174,1763-07-31,90.3 177 | 175,1763-08-31,44.2 178 | 176,1763-09-30,113.5 179 | 177,1763-10-31,77.2 180 | 178,1763-11-30,101.5 181 | 179,1763-12-31,102.3 182 | 180,1764-01-31,99.5 183 | 181,1764-02-29,99.5 184 | 182,1764-03-31,67.0 185 | 183,1764-04-30,57.3 186 | 184,1764-05-31,73.8 187 | 185,1764-06-30,50.0 188 | 186,1764-07-31,50.0 189 | 187,1764-08-31,50.0 190 | 188,1764-09-30,47.0 191 | 189,1764-10-31,46.7 192 | 190,1764-11-30,43.3 193 | 191,1764-12-31,42.8 194 | 192,1765-01-31,40.0 195 | 193,1765-02-28,43.3 196 | 194,1765-03-31,41.7 197 | 195,1765-04-30,36.7 198 | 196,1765-05-31,33.7 199 | 197,1765-06-30,33.3 200 | 198,1765-07-31,45.0 201 | 199,1765-08-31,49.5 202 | 200,1765-09-30,26.7 203 | 201,1765-10-31,23.3 204 | 202,1765-11-30,23.3 205 | 203,1765-12-31,21.7 206 | 204,1766-01-31,20.0 207 | 205,1766-02-28,18.3 208 | 206,1766-03-31,61.0 209 | 207,1766-04-30,10.0 210 | 208,1766-05-31,44.7 211 | 209,1766-06-30,5.0 212 | 210,1766-07-31,5.5 213 | 211,1766-08-31,6.7 214 | 212,1766-09-30,7.2 215 | 213,1766-10-31,8.3 216 | 214,1766-11-30,9.5 217 | 215,1766-12-31,32.0 218 | 216,1767-01-31,45.7 219 | 217,1767-02-28,50.0 220 | 218,1767-03-31,71.7 221 | 219,1767-04-30,54.8 222 | 220,1767-05-31,49.7 223 | 221,1767-06-30,55.5 224 | 222,1767-07-31,36.5 225 | 223,1767-08-31,68.0 226 | 224,1767-09-30,71.2 227 | 225,1767-10-31,73.5 228 | 226,1767-11-30,91.2 229 | 227,1767-12-31,88.8 230 | 228,1768-01-31,89.2 231 | 229,1768-02-29,110.2 232 | 230,1768-03-31,77.2 233 | 231,1768-04-30,71.2 234 | 232,1768-05-31,129.5 235 | 233,1768-06-30,129.0 236 | 234,1768-07-31,87.7 237 | 235,1768-08-31,111.3 238 | 236,1768-09-30,124.7 239 | 237,1768-10-31,129.7 240 | 238,1768-11-30,151.0 241 | 239,1768-12-31,186.3 242 | 240,1769-01-31,123.2 243 | 241,1769-02-28,107.0 244 | 242,1769-03-31,107.2 245 | 243,1769-04-30,161.2 246 | 244,1769-05-31,122.7 247 | 245,1769-06-30,157.3 248 | 246,1769-07-31,197.7 249 | 247,1769-08-31,200.5 250 | 248,1769-09-30,248.0 251 | 249,1769-10-31,263.7 252 | 250,1769-11-30,246.8 253 | 251,1769-12-31,186.7 254 | 252,1770-01-31,173.3 255 | 253,1770-02-28,237.5 256 | 254,1770-03-31,133.5 257 | 255,1770-04-30,85.0 258 | 256,1770-05-31,116.8 259 | 257,1770-06-30,138.8 260 | 258,1770-07-31,183.0 261 | 259,1770-08-31,210.5 262 | 260,1770-09-30,174.0 263 | 261,1770-10-31,172.7 264 | 262,1770-11-30,220.3 265 | 263,1770-12-31,170.5 266 | 264,1771-01-31,60.0 267 | 265,1771-02-28,77.0 268 | 266,1771-03-31,77.8 269 | 267,1771-04-30,108.2 270 | 268,1771-05-31,254.5 271 | 269,1771-06-30,199.2 272 | 270,1771-07-31,112.8 273 | 271,1771-08-31,97.5 274 | 272,1771-09-30,169.0 275 | 273,1771-10-31,150.0 276 | 274,1771-11-30,166.2 277 | 275,1771-12-31,159.5 278 | 276,1772-01-31,168.2 279 | 277,1772-02-29,151.3 280 | 278,1772-03-31,51.8 281 | 279,1772-04-30,153.7 282 | 280,1772-05-31,63.3 283 | 281,1772-06-30,95.0 284 | 282,1772-07-31,128.8 285 | 283,1772-08-31,93.7 286 | 284,1772-09-30,84.2 287 | 285,1772-10-31,131.0 288 | 286,1772-11-30,102.2 289 | 287,1772-12-31,106.7 290 | 288,1773-01-31,91.0 291 | 289,1773-02-28,48.3 292 | 290,1773-03-31,85.3 293 | 291,1773-04-30,54.8 294 | 292,1773-05-31,68.5 295 | 293,1773-06-30,47.3 296 | 294,1773-07-31,46.2 297 | 295,1773-08-31,21.2 298 | 296,1773-09-30,48.8 299 | 297,1773-10-31,43.8 300 | 298,1773-11-30,68.2 301 | 299,1773-12-31,72.0 302 | 300,1774-01-31,78.0 303 | 301,1774-02-28,109.0 304 | 302,1774-03-31,92.8 305 | 303,1774-04-30,73.0 306 | 304,1774-05-31,85.5 307 | 305,1774-06-30,47.5 308 | 306,1774-07-31,29.2 309 | 307,1774-08-31,11.0 310 | 308,1774-09-30,13.2 311 | 309,1774-10-31,23.3 312 | 310,1774-11-30,29.5 313 | 311,1774-12-31,20.3 314 | 312,1775-01-31,7.3 315 | 313,1775-02-28,0.0 316 | 314,1775-03-31,19.3 317 | 315,1775-04-30,18.7 318 | 316,1775-05-31,6.5 319 | 317,1775-06-30,20.5 320 | 318,1775-07-31,1.7 321 | 319,1775-08-31,13.2 322 | 320,1775-09-30,5.3 323 | 321,1775-10-31,9.3 324 | 322,1775-11-30,25.2 325 | 323,1775-12-31,13.2 326 | 324,1776-01-31,36.2 327 | 325,1776-02-29,19.3 328 | 326,1776-03-31,10.5 329 | 327,1776-04-30,36.3 330 | 328,1776-05-31,18.7 331 | 329,1776-06-30,31.7 332 | 330,1776-07-31,1.7 333 | 331,1776-08-31,40.3 334 | 332,1776-09-30,26.7 335 | 333,1776-10-31,50.0 336 | 334,1776-11-30,58.3 337 | 335,1776-12-31,66.7 338 | 336,1777-01-31,75.0 339 | 337,1777-02-28,60.8 340 | 338,1777-03-31,65.0 341 | 339,1777-04-30,159.2 342 | 340,1777-05-31,133.8 343 | 341,1777-06-30,134.5 344 | 342,1777-07-31,158.3 345 | 343,1777-08-31,186.7 346 | 344,1777-09-30,193.7 347 | 345,1777-10-31,177.5 348 | 346,1777-11-30,243.3 349 | 347,1777-12-31,262.2 350 | 348,1778-01-31,295.5 351 | 349,1778-02-28,182.2 352 | 350,1778-03-31,223.3 353 | 351,1778-04-30,241.7 354 | 352,1778-05-31,398.2 355 | 353,1778-06-30,286.0 356 | 354,1778-07-31,255.0 357 | 355,1778-08-31,233.3 358 | 356,1778-09-30,286.2 359 | 357,1778-10-31,260.5 360 | 358,1778-11-30,250.5 361 | 359,1778-12-31,175.0 362 | 360,1779-01-31,191.2 363 | 361,1779-02-28,276.2 364 | 362,1779-03-31,196.7 365 | 363,1779-04-30,241.7 366 | 364,1779-05-31,233.3 367 | 365,1779-06-30,189.5 368 | 366,1779-07-31,238.3 369 | 367,1779-08-31,186.7 370 | 368,1779-09-30,185.0 371 | 369,1779-10-31,206.7 372 | 370,1779-11-30,190.0 373 | 371,1779-12-31,183.3 374 | 372,1780-01-31,116.7 375 | 373,1780-02-29,163.3 376 | 374,1780-03-31,163.3 377 | 375,1780-04-30,158.3 378 | 376,1780-05-31,178.7 379 | 377,1780-06-30,146.7 380 | 378,1780-07-31,143.3 381 | 379,1780-08-31,143.3 382 | 380,1780-09-30,156.2 383 | 381,1780-10-31,128.3 384 | 382,1780-11-30,100.0 385 | 383,1780-12-31,97.8 386 | 384,1781-01-31,164.5 387 | 385,1781-02-28,124.5 388 | 386,1781-03-31,88.3 389 | 387,1781-04-30,113.8 390 | 388,1781-05-31,174.5 391 | 389,1781-06-30,162.8 392 | 390,1781-07-31,122.5 393 | 391,1781-08-31,110.0 394 | 392,1781-09-30,85.0 395 | 393,1781-10-31,45.5 396 | 394,1781-11-30,111.7 397 | 395,1781-12-31,58.7 398 | 396,1782-01-31,90.0 399 | 397,1782-02-28,62.5 400 | 398,1782-03-31,61.7 401 | 399,1782-04-30,68.3 402 | 400,1782-05-31,90.5 403 | 401,1782-06-30,63.3 404 | 402,1782-07-31,61.7 405 | 403,1782-08-31,73.3 406 | 404,1782-09-30,56.7 407 | 405,1782-10-31,38.7 408 | 406,1782-11-30,52.5 409 | 407,1782-12-31,50.0 410 | 408,1783-01-31,46.7 411 | 409,1783-02-28,64.5 412 | 410,1783-03-31,44.5 413 | 411,1783-04-30,47.2 414 | 412,1783-05-31,38.3 415 | 413,1783-06-30,42.0 416 | 414,1783-07-31,53.7 417 | 415,1783-08-31,33.3 418 | 416,1783-09-30,30.0 419 | 417,1783-10-31,13.3 420 | 418,1783-11-30,25.0 421 | 419,1783-12-31,17.5 422 | 420,1784-01-31,21.7 423 | 421,1784-02-29,13.3 424 | 422,1784-03-31,18.3 425 | 423,1784-04-30,16.7 426 | 424,1784-05-31,10.0 427 | 425,1784-06-30,15.0 428 | 426,1784-07-31,10.0 429 | 427,1784-08-31,16.7 430 | 428,1784-09-30,16.7 431 | 429,1784-10-31,13.3 432 | 430,1784-11-30,28.3 433 | 431,1784-12-31,23.3 434 | 432,1785-01-31,10.8 435 | 433,1785-02-28,13.3 436 | 434,1785-03-31,15.0 437 | 435,1785-04-30,26.2 438 | 436,1785-05-31,34.5 439 | 437,1785-06-30,43.8 440 | 438,1785-07-31,60.5 441 | 439,1785-08-31,33.3 442 | 440,1785-09-30,53.3 443 | 441,1785-10-31,78.7 444 | 442,1785-11-30,67.0 445 | 443,1785-12-31,45.5 446 | 444,1786-01-31,62.0 447 | 445,1786-02-28,79.3 448 | 446,1786-03-31,79.5 449 | 447,1786-04-30,142.3 450 | 448,1786-05-31,153.8 451 | 449,1786-06-30,98.3 452 | 450,1786-07-31,138.3 453 | 451,1786-08-31,149.5 454 | 452,1786-09-30,185.8 455 | 453,1786-10-31,187.2 456 | 454,1786-11-30,193.3 457 | 455,1786-12-31,187.8 458 | 456,1787-01-31,224.5 459 | 457,1787-02-28,176.7 460 | 458,1787-03-31,145.7 461 | 459,1787-04-30,212.0 462 | 460,1787-05-31,224.7 463 | 461,1787-06-30,165.3 464 | 462,1787-07-31,213.3 465 | 463,1787-08-31,228.7 466 | 464,1787-09-30,262.2 467 | 465,1787-10-31,261.7 468 | 466,1787-11-30,235.8 469 | 467,1787-12-31,290.0 470 | 468,1788-01-31,230.0 471 | 469,1788-02-29,215.3 472 | 470,1788-03-31,238.8 473 | 471,1788-04-30,180.8 474 | 472,1788-05-31,188.3 475 | 473,1788-06-30,257.0 476 | 474,1788-07-31,235.8 477 | 475,1788-08-31,226.7 478 | 476,1788-09-30,235.0 479 | 477,1788-10-31,236.7 480 | 478,1788-11-30,157.8 481 | 479,1788-12-31,215.8 482 | 480,1789-01-31,190.0 483 | 481,1789-02-28,208.8 484 | 482,1789-03-31,200.0 485 | 483,1789-04-30,205.5 486 | 484,1789-05-31,205.8 487 | 485,1789-06-30,200.0 488 | 486,1789-07-31,195.0 489 | 487,1789-08-31,171.7 490 | 488,1789-09-30,186.7 491 | 489,1789-10-31,149.5 492 | 490,1789-11-30,223.3 493 | 491,1789-12-31,225.8 494 | 492,1790-01-31,171.7 495 | 493,1790-02-28,212.5 496 | 494,1790-03-31,160.5 497 | 495,1790-04-30,156.7 498 | 496,1790-05-31,155.0 499 | 497,1790-06-30,151.7 500 | 498,1790-07-31,115.5 501 | 499,1790-08-31,145.0 502 | 500,1790-09-30,128.8 503 | 501,1790-10-31,140.5 504 | 502,1790-11-30,136.7 505 | 503,1790-12-31,123.3 506 | 504,1791-01-31,121.2 507 | 505,1791-02-28,103.3 508 | 506,1791-03-31,123.3 509 | 507,1791-04-30,128.7 510 | 508,1791-05-31,122.8 511 | 509,1791-06-30,107.0 512 | 510,1791-07-31,118.3 513 | 511,1791-08-31,71.7 514 | 512,1791-09-30,110.8 515 | 513,1791-10-31,102.8 516 | 514,1791-11-30,111.7 517 | 515,1791-12-31,110.0 518 | 516,1792-01-31,96.7 519 | 517,1792-02-29,106.7 520 | 518,1792-03-31,105.0 521 | 519,1792-04-30,126.2 522 | 520,1792-05-31,103.3 523 | 521,1792-06-30,101.7 524 | 522,1792-07-31,76.3 525 | 523,1792-08-31,100.0 526 | 524,1792-09-30,98.3 527 | 525,1792-10-31,98.3 528 | 526,1792-11-30,95.0 529 | 527,1792-12-31,93.3 530 | 528,1793-01-31,93.3 531 | 529,1793-02-28,91.7 532 | 530,1793-03-31,92.5 533 | 531,1793-04-30,88.3 534 | 532,1793-05-31,87.2 535 | 533,1793-06-30,85.0 536 | 534,1793-07-31,83.3 537 | 535,1793-08-31,48.8 538 | 536,1793-09-30,40.0 539 | 537,1793-10-31,78.3 540 | 538,1793-11-30,73.3 541 | 539,1793-12-31,76.2 542 | 540,1794-01-31,75.0 543 | 541,1794-02-28,73.3 544 | 542,1794-03-31,63.3 545 | 543,1794-04-30,47.3 546 | 544,1794-05-31,92.8 547 | 545,1794-06-30,69.2 548 | 546,1794-07-31,68.3 549 | 547,1794-08-31,66.7 550 | 548,1794-09-30,18.5 551 | 549,1794-10-31,47.5 552 | 550,1794-11-30,112.3 553 | 551,1794-12-31,85.7 554 | 552,1795-01-31,35.7 555 | 553,1795-02-28,66.5 556 | 554,1795-03-31,21.0 557 | 555,1795-04-30,31.0 558 | 556,1795-05-31,51.7 559 | 557,1795-06-30,28.5 560 | 558,1795-07-31,21.5 561 | 559,1795-08-31,42.8 562 | 560,1795-09-30,22.5 563 | 561,1795-10-31,32.5 564 | 562,1795-11-30,41.7 565 | 563,1795-12-31,30.0 566 | 564,1796-01-31,36.7 567 | 565,1796-02-29,39.7 568 | 566,1796-03-31,26.2 569 | 567,1796-04-30,52.8 570 | 568,1796-05-31,35.0 571 | 569,1796-06-30,11.2 572 | 570,1796-07-31,44.8 573 | 571,1796-08-31,2.5 574 | 572,1796-09-30,30.7 575 | 573,1796-10-31,18.3 576 | 574,1796-11-30,14.0 577 | 575,1796-12-31,8.5 578 | 576,1797-01-31,24.0 579 | 577,1797-02-28,7.0 580 | 578,1797-03-31,6.7 581 | 579,1797-04-30,6.7 582 | 580,1797-05-31,12.2 583 | 581,1797-06-30,18.5 584 | 582,1797-07-31,7.2 585 | 583,1797-08-31,10.0 586 | 584,1797-09-30,9.5 587 | 585,1797-10-31,11.5 588 | 586,1797-11-30,9.7 589 | 587,1797-12-31,5.0 590 | 588,1798-01-31,3.3 591 | 589,1798-02-28,6.7 592 | 590,1798-03-31,20.7 593 | 591,1798-04-30,1.8 594 | 592,1798-05-31,0.0 595 | 593,1798-06-30,0.0 596 | 594,1798-07-31,0.0 597 | 595,1798-08-31,5.0 598 | 596,1798-09-30,4.0 599 | 597,1798-10-31,2.5 600 | 598,1798-11-30,20.8 601 | 599,1798-12-31,16.5 602 | 600,1799-01-31,2.7 603 | 601,1799-02-28,21.0 604 | 602,1799-03-31,36.2 605 | 603,1799-04-30,14.0 606 | 604,1799-05-31,13.7 607 | 605,1799-06-30,17.7 608 | 606,1799-07-31,3.5 609 | 607,1799-08-31,0.0 610 | 608,1799-09-30,0.0 611 | 609,1799-10-31,7.7 612 | 610,1799-11-30,4.5 613 | 611,1799-12-31,14.3 614 | 612,1800-01-31,11.5 615 | 613,1800-02-28,15.5 616 | 614,1800-03-31,23.2 617 | 615,1800-04-30,0.0 618 | 616,1800-05-31,8.3 619 | 617,1800-06-30,39.5 620 | 618,1800-07-31,35.0 621 | 619,1800-08-31,32.5 622 | 620,1800-09-30,19.2 623 | 621,1800-10-31,20.5 624 | 622,1800-11-30,17.5 625 | 623,1800-12-31,66.8 626 | 624,1801-01-31,45.0 627 | 625,1801-02-28,48.3 628 | 626,1801-03-31,50.0 629 | 627,1801-04-30,51.7 630 | 628,1801-05-31,53.3 631 | 629,1801-06-30,52.0 632 | 630,1801-07-31,58.3 633 | 631,1801-08-31,64.5 634 | 632,1801-09-30,55.8 635 | 633,1801-10-31,54.3 636 | 634,1801-11-30,66.3 637 | 635,1801-12-31,80.3 638 | 636,1802-01-31,79.7 639 | 637,1802-02-28,78.3 640 | 638,1802-03-31,68.0 641 | 639,1802-04-30,70.0 642 | 640,1802-05-31,73.3 643 | 641,1802-06-30,76.7 644 | 642,1802-07-31,80.0 645 | 643,1802-08-31,83.3 646 | 644,1802-09-30,86.3 647 | 645,1802-10-31,64.2 648 | 646,1802-11-30,57.5 649 | 647,1802-12-31,83.3 650 | 648,1803-01-31,83.3 651 | 649,1803-02-28,84.7 652 | 650,1803-03-31,49.2 653 | 651,1803-04-30,41.7 654 | 652,1803-05-31,73.8 655 | 653,1803-06-30,60.0 656 | 654,1803-07-31,80.5 657 | 655,1803-08-31,56.8 658 | 656,1803-09-30,75.5 659 | 657,1803-10-31,90.5 660 | 658,1803-11-30,85.0 661 | 659,1803-12-31,80.0 662 | 660,1804-01-31,75.5 663 | 661,1804-02-29,80.5 664 | 662,1804-03-31,80.0 665 | 663,1804-04-30,84.3 666 | 664,1804-05-31,55.7 667 | 665,1804-06-30,58.0 668 | 666,1804-07-31,49.7 669 | 667,1804-08-31,71.8 670 | 668,1804-09-30,88.3 671 | 669,1804-10-31,103.8 672 | 670,1804-11-30,101.7 673 | 671,1804-12-31,100.0 674 | 672,1805-01-31,101.7 675 | 673,1805-02-28,73.5 676 | 674,1805-03-31,85.7 677 | 675,1805-04-30,62.5 678 | 676,1805-05-31,65.0 679 | 677,1805-06-30,67.5 680 | 678,1805-07-31,62.7 681 | 679,1805-08-31,71.2 682 | 680,1805-09-30,74.0 683 | 681,1805-10-31,49.0 684 | 682,1805-11-30,68.3 685 | 683,1805-12-31,63.8 686 | 684,1806-01-31,65.0 687 | 685,1806-02-28,49.3 688 | 686,1806-03-31,54.5 689 | 687,1806-04-30,46.2 690 | 688,1806-05-31,44.0 691 | 689,1806-06-30,42.7 692 | 690,1806-07-31,50.0 693 | 691,1806-08-31,43.8 694 | 692,1806-09-30,40.0 695 | 693,1806-10-31,45.0 696 | 694,1806-11-30,41.7 697 | 695,1806-12-31,40.0 698 | 696,1807-01-31,20.0 699 | 697,1807-02-28,20.3 700 | 698,1807-03-31,16.0 701 | 699,1807-04-30,39.7 702 | 700,1807-05-31,16.7 703 | 701,1807-06-30,20.0 704 | 702,1807-07-31,21.2 705 | 703,1807-08-31,20.0 706 | 704,1807-09-30,9.5 707 | 705,1807-10-31,13.3 708 | 706,1807-11-30,4.3 709 | 707,1807-12-31,0.0 710 | 708,1808-01-31,0.0 711 | 709,1808-02-29,7.5 712 | 710,1808-03-31,0.0 713 | 711,1808-04-30,20.5 714 | 712,1808-05-31,22.5 715 | 713,1808-06-30,22.5 716 | 714,1808-07-31,11.2 717 | 715,1808-08-31,13.3 718 | 716,1808-09-30,19.5 719 | 717,1808-10-31,7.8 720 | 718,1808-11-30,17.5 721 | 719,1808-12-31,20.5 722 | 720,1809-01-31,12.0 723 | 721,1809-02-28,15.3 724 | 722,1809-03-31,1.5 725 | 723,1809-04-30,4.2 726 | 724,1809-05-31,3.3 727 | 725,1809-06-30,12.8 728 | 726,1809-07-31,0.5 729 | 727,1809-08-31,0.3 730 | 728,1809-09-30,0.7 731 | 729,1809-10-31,0.0 732 | 730,1809-11-30,0.0 733 | 731,1809-12-31,0.0 734 | 732,1810-01-31,0.0 735 | 733,1810-02-28,0.0 736 | 734,1810-03-31,0.0 737 | 735,1810-04-30,0.0 738 | 736,1810-05-31,0.0 739 | 737,1810-06-30,0.0 740 | 738,1810-07-31,0.0 741 | 739,1810-08-31,0.0 742 | 740,1810-09-30,0.0 743 | 741,1810-10-31,0.0 744 | 742,1810-11-30,0.0 745 | 743,1810-12-31,0.0 746 | 744,1811-01-31,0.0 747 | 745,1811-02-28,0.0 748 | 746,1811-03-31,0.0 749 | 747,1811-04-30,0.0 750 | 748,1811-05-31,0.0 751 | 749,1811-06-30,0.0 752 | 750,1811-07-31,11.0 753 | 751,1811-08-31,0.0 754 | 752,1811-09-30,4.0 755 | 753,1811-10-31,10.2 756 | 754,1811-11-30,1.3 757 | 755,1811-12-31,1.8 758 | 756,1812-01-31,18.8 759 | 757,1812-02-29,3.2 760 | 758,1812-03-31,1.2 761 | 759,1812-04-30,0.0 762 | 760,1812-05-31,1.7 763 | 761,1812-06-30,2.2 764 | 762,1812-07-31,0.8 765 | 763,1812-08-31,26.0 766 | 764,1812-09-30,8.7 767 | 765,1812-10-31,6.5 768 | 766,1812-11-30,13.2 769 | 767,1812-12-31,16.8 770 | 768,1813-01-31,0.0 771 | 769,1813-02-28,17.2 772 | 770,1813-03-31,3.2 773 | 771,1813-04-30,27.7 774 | 772,1813-05-31,9.2 775 | 773,1813-06-30,18.7 776 | 774,1813-07-31,30.5 777 | 775,1813-08-31,14.0 778 | 776,1813-09-30,25.5 779 | 777,1813-10-31,46.3 780 | 778,1813-11-30,27.8 781 | 779,1813-12-31,23.8 782 | 780,1814-01-31,37.0 783 | 781,1814-02-28,20.0 784 | 782,1814-03-31,9.5 785 | 783,1814-04-30,39.7 786 | 784,1814-05-31,9.7 787 | 785,1814-06-30,24.8 788 | 786,1814-07-31,30.8 789 | 787,1814-08-31,3.8 790 | 788,1814-09-30,13.5 791 | 789,1814-10-31,32.2 792 | 790,1814-11-30,24.2 793 | 791,1814-12-31,33.5 794 | 792,1815-01-31,32.0 795 | 793,1815-02-28,53.7 796 | 794,1815-03-31,43.7 797 | 795,1815-04-30,52.7 798 | 796,1815-05-31,16.3 799 | 797,1815-06-30,93.2 800 | 798,1815-07-31,59.2 801 | 799,1815-08-31,78.7 802 | 800,1815-09-30,52.5 803 | 801,1815-10-31,55.8 804 | 802,1815-11-30,62.0 805 | 803,1815-12-31,108.3 806 | 804,1816-01-31,43.8 807 | 805,1816-02-29,114.7 808 | 806,1816-03-31,122.8 809 | 807,1816-04-30,98.0 810 | 808,1816-05-31,73.8 811 | 809,1816-06-30,72.7 812 | 810,1816-07-31,64.7 813 | 811,1816-08-31,38.7 814 | 812,1816-09-30,79.7 815 | 813,1816-10-31,94.0 816 | 814,1816-11-30,63.5 817 | 815,1816-12-31,49.8 818 | 816,1817-01-31,60.7 819 | 817,1817-02-28,96.5 820 | 818,1817-03-31,160.3 821 | 819,1817-04-30,44.0 822 | 820,1817-05-31,35.3 823 | 821,1817-06-30,66.7 824 | 822,1817-07-31,83.3 825 | 823,1817-08-31,75.0 826 | 824,1817-09-30,61.2 827 | 825,1817-10-31,42.7 828 | 826,1817-11-30,48.2 829 | 827,1817-12-31,47.3 830 | 828,1818-01-31,58.1 831 | 829,1818-02-28,37.4 832 | 830,1818-03-31,42.4 833 | 831,1818-04-30,57.5 834 | 832,1818-05-31,88.5 835 | 833,1818-06-30,60.8 836 | 834,1818-07-31,46.8 837 | 835,1818-08-31,52.6 838 | 836,1818-09-30,43.4 839 | 837,1818-10-31,52.8 840 | 838,1818-11-30,18.3 841 | 839,1818-12-31,43.0 842 | 840,1819-01-31,54.7 843 | 841,1819-02-28,34.6 844 | 842,1819-03-31,6.3 845 | 843,1819-04-30,33.7 846 | 844,1819-05-31,32.6 847 | 845,1819-06-30,58.3 848 | 846,1819-07-31,52.5 849 | 847,1819-08-31,43.5 850 | 848,1819-09-30,24.8 851 | 849,1819-10-31,45.9 852 | 850,1819-11-30,41.8 853 | 851,1819-12-31,50.9 854 | 852,1820-01-31,32.0 855 | 853,1820-02-29,44.4 856 | 854,1820-03-31,7.5 857 | 855,1820-04-30,32.3 858 | 856,1820-05-31,48.9 859 | 857,1820-06-30,17.9 860 | 858,1820-07-31,34.1 861 | 859,1820-08-31,43.1 862 | 860,1820-09-30,8.6 863 | 861,1820-10-31,14.9 864 | 862,1820-11-30,13.2 865 | 863,1820-12-31,15.1 866 | 864,1821-01-31,36.0 867 | 865,1821-02-28,7.0 868 | 866,1821-03-31,9.5 869 | 867,1821-04-30,15.2 870 | 868,1821-05-31,2.8 871 | 869,1821-06-30,3.0 872 | 870,1821-07-31,4.3 873 | 871,1821-08-31,8.0 874 | 872,1821-09-30,7.3 875 | 873,1821-10-31,31.4 876 | 874,1821-11-30,7.3 877 | 875,1821-12-31,0.4 878 | 876,1822-01-31,0.0 879 | 877,1822-02-28,1.5 880 | 878,1822-03-31,26.9 881 | 879,1822-04-30,21.7 882 | 880,1822-05-31,2.4 883 | 881,1822-06-30,9.3 884 | 882,1822-07-31,13.2 885 | 883,1822-08-31,3.4 886 | 884,1822-09-30,0.0 887 | 885,1822-10-31,0.6 888 | 886,1822-11-30,0.0 889 | 887,1822-12-31,0.0 890 | 888,1823-01-31,0.0 891 | 889,1823-02-28,0.0 892 | 890,1823-03-31,1.0 893 | 891,1823-04-30,0.0 894 | 892,1823-05-31,0.0 895 | 893,1823-06-30,0.0 896 | 894,1823-07-31,0.8 897 | 895,1823-08-31,0.0 898 | 896,1823-09-30,0.0 899 | 897,1823-10-31,0.0 900 | 898,1823-11-30,0.0 901 | 899,1823-12-31,34.0 902 | 900,1824-01-31,36.0 903 | 901,1824-02-29,18.0 904 | 902,1824-03-31,0.0 905 | 903,1824-04-30,32.3 906 | 904,1824-05-31,4.6 907 | 905,1824-06-30,0.0 908 | 906,1824-07-31,0.0 909 | 907,1824-08-31,2.3 910 | 908,1824-09-30,34.3 911 | 909,1824-10-31,42.0 912 | 910,1824-11-30,0.0 913 | 911,1824-12-31,1.4 914 | 912,1825-01-31,8.4 915 | 913,1825-02-28,25.9 916 | 914,1825-03-31,37.4 917 | 915,1825-04-30,6.2 918 | 916,1825-05-31,25.8 919 | 917,1825-06-30,25.6 920 | 918,1825-07-31,51.5 921 | 919,1825-08-31,42.8 922 | 920,1825-09-30,26.2 923 | 921,1825-10-31,26.0 924 | 922,1825-11-30,19.6 925 | 923,1825-12-31,36.7 926 | 924,1826-01-31,29.4 927 | 925,1826-02-28,30.2 928 | 926,1826-03-31,61.3 929 | 927,1826-04-30,40.0 930 | 928,1826-05-31,53.9 931 | 929,1826-06-30,61.7 932 | 930,1826-07-31,87.5 933 | 931,1826-08-31,66.0 934 | 932,1826-09-30,31.6 935 | 933,1826-10-31,84.4 936 | 934,1826-11-30,65.8 937 | 935,1826-12-31,113.6 938 | 936,1827-01-31,57.7 939 | 937,1827-02-28,79.0 940 | 938,1827-03-31,96.3 941 | 939,1827-04-30,76.7 942 | 940,1827-05-31,93.8 943 | 941,1827-06-30,94.4 944 | 942,1827-07-31,70.4 945 | 943,1827-08-31,89.4 946 | 944,1827-09-30,82.6 947 | 945,1827-10-31,93.5 948 | 946,1827-11-30,80.4 949 | 947,1827-12-31,76.8 950 | 948,1828-01-31,88.0 951 | 949,1828-02-29,107.3 952 | 950,1828-03-31,108.5 953 | 951,1828-04-30,101.9 954 | 952,1828-05-31,148.6 955 | 953,1828-06-30,163.4 956 | 954,1828-07-31,90.4 957 | 955,1828-08-31,127.3 958 | 956,1828-09-30,83.9 959 | 957,1828-10-31,91.1 960 | 958,1828-11-30,95.0 961 | 959,1828-12-31,78.1 962 | 960,1829-01-31,71.6 963 | 961,1829-02-28,82.3 964 | 962,1829-03-31,120.6 965 | 963,1829-04-30,158.4 966 | 964,1829-05-31,112.3 967 | 965,1829-06-30,123.2 968 | 966,1829-07-31,151.5 969 | 967,1829-08-31,129.3 970 | 968,1829-09-30,88.0 971 | 969,1829-10-31,95.3 972 | 970,1829-11-30,112.7 973 | 971,1829-12-31,94.1 974 | 972,1830-01-31,87.0 975 | 973,1830-02-28,120.1 976 | 974,1830-03-31,141.0 977 | 975,1830-04-30,177.3 978 | 976,1830-05-31,110.5 979 | 977,1830-06-30,108.4 980 | 978,1830-07-31,73.2 981 | 979,1830-08-31,84.6 982 | 980,1830-09-30,103.4 983 | 981,1830-10-31,140.6 984 | 982,1830-11-30,135.4 985 | 983,1830-12-31,136.8 986 | 984,1831-01-31,79.0 987 | 985,1831-02-28,83.6 988 | 986,1831-03-31,155.8 989 | 987,1831-04-30,90.9 990 | 988,1831-05-31,63.4 991 | 989,1831-06-30,55.6 992 | 990,1831-07-31,75.4 993 | 991,1831-08-31,91.6 994 | 992,1831-09-30,63.2 995 | 993,1831-10-31,77.1 996 | 994,1831-11-30,72.5 997 | 995,1831-12-31,48.3 998 | 996,1832-01-31,51.5 999 | 997,1832-02-29,92.6 1000 | 998,1832-03-31,91.9 1001 | 999,1832-04-30,44.8 1002 | 1000,1832-05-31,68.9 1003 | 1001,1832-06-30,44.5 1004 | 1002,1832-07-31,23.3 1005 | 1003,1832-08-31,14.8 1006 | 1004,1832-09-30,13.7 1007 | 1005,1832-10-31,35.2 1008 | 1006,1832-11-30,23.8 1009 | 1007,1832-12-31,45.8 1010 | 1008,1833-01-31,18.7 1011 | 1009,1833-02-28,24.9 1012 | 1010,1833-03-31,19.6 1013 | 1011,1833-04-30,4.6 1014 | 1012,1833-05-31,21.5 1015 | 1013,1833-06-30,1.7 1016 | 1014,1833-07-31,11.6 1017 | 1015,1833-08-31,9.5 1018 | 1016,1833-09-30,19.3 1019 | 1017,1833-10-31,12.5 1020 | 1018,1833-11-30,9.8 1021 | 1019,1833-12-31,16.6 1022 | 1020,1834-01-31,8.2 1023 | 1021,1834-02-28,30.1 1024 | 1022,1834-03-31,6.5 1025 | 1023,1834-04-30,2.4 1026 | 1024,1834-05-31,14.8 1027 | 1025,1834-06-30,13.1 1028 | 1026,1834-07-31,14.4 1029 | 1027,1834-08-31,6.6 1030 | 1028,1834-09-30,19.2 1031 | 1029,1834-10-31,41.3 1032 | 1030,1834-11-30,50.9 1033 | 1031,1834-12-31,57.5 1034 | 1032,1835-01-31,12.4 1035 | 1033,1835-02-28,40.7 1036 | 1034,1835-03-31,32.7 1037 | 1035,1835-04-30,102.4 1038 | 1036,1835-05-31,72.6 1039 | 1037,1835-06-30,55.2 1040 | 1038,1835-07-31,99.6 1041 | 1039,1835-08-31,98.5 1042 | 1040,1835-09-30,168.0 1043 | 1041,1835-10-31,158.6 1044 | 1042,1835-11-30,166.7 1045 | 1043,1835-12-31,129.3 1046 | 1044,1836-01-31,147.6 1047 | 1045,1836-02-29,179.4 1048 | 1046,1836-03-31,163.7 1049 | 1047,1836-04-30,238.0 1050 | 1048,1836-05-31,185.7 1051 | 1049,1836-06-30,207.9 1052 | 1050,1836-07-31,194.6 1053 | 1051,1836-08-31,179.6 1054 | 1052,1836-09-30,158.5 1055 | 1053,1836-10-31,228.9 1056 | 1054,1836-11-30,201.5 1057 | 1055,1836-12-31,343.8 1058 | 1056,1837-01-31,313.4 1059 | 1057,1837-02-28,292.6 1060 | 1058,1837-03-31,224.3 1061 | 1059,1837-04-30,230.3 1062 | 1060,1837-05-31,186.1 1063 | 1061,1837-06-30,263.4 1064 | 1062,1837-07-31,271.2 1065 | 1063,1837-08-31,223.5 1066 | 1064,1837-09-30,160.4 1067 | 1065,1837-10-31,206.2 1068 | 1066,1837-11-30,178.4 1069 | 1067,1837-12-31,216.1 1070 | 1068,1838-01-31,241.5 1071 | 1069,1838-02-28,141.3 1072 | 1070,1838-03-31,234.5 1073 | 1071,1838-04-30,211.1 1074 | 1072,1838-05-31,229.4 1075 | 1073,1838-06-30,157.6 1076 | 1074,1838-07-31,180.4 1077 | 1075,1838-08-31,131.3 1078 | 1076,1838-09-30,122.7 1079 | 1077,1838-10-31,151.5 1080 | 1078,1838-11-30,129.2 1081 | 1079,1838-12-31,132.9 1082 | 1080,1839-01-31,175.9 1083 | 1081,1839-02-28,170.8 1084 | 1082,1839-03-31,129.5 1085 | 1083,1839-04-30,102.9 1086 | 1084,1839-05-31,89.6 1087 | 1085,1839-06-30,91.2 1088 | 1086,1839-07-31,141.3 1089 | 1087,1839-08-31,218.8 1090 | 1088,1839-09-30,221.1 1091 | 1089,1839-10-31,151.5 1092 | 1090,1839-11-30,114.7 1093 | 1091,1839-12-31,106.2 1094 | 1092,1840-01-31,135.4 1095 | 1093,1840-02-29,146.1 1096 | 1094,1840-03-31,112.9 1097 | 1095,1840-04-30,109.8 1098 | 1096,1840-05-31,115.4 1099 | 1097,1840-06-30,80.9 1100 | 1098,1840-07-31,101.0 1101 | 1099,1840-08-31,96.4 1102 | 1100,1840-09-30,123.3 1103 | 1101,1840-10-31,91.7 1104 | 1102,1840-11-30,90.4 1105 | 1103,1840-12-31,89.5 1106 | 1104,1841-01-31,40.1 1107 | 1105,1841-02-28,49.9 1108 | 1106,1841-03-31,49.6 1109 | 1107,1841-04-30,66.9 1110 | 1108,1841-05-31,112.4 1111 | 1109,1841-06-30,92.8 1112 | 1110,1841-07-31,51.4 1113 | 1111,1841-08-31,65.4 1114 | 1112,1841-09-30,60.9 1115 | 1113,1841-10-31,47.4 1116 | 1114,1841-11-30,32.9 1117 | 1115,1841-12-31,64.8 1118 | 1116,1842-01-31,34.0 1119 | 1117,1842-02-28,36.8 1120 | 1118,1842-03-31,36.2 1121 | 1119,1842-04-30,44.9 1122 | 1120,1842-05-31,41.4 1123 | 1121,1842-06-30,34.2 1124 | 1122,1842-07-31,21.0 1125 | 1123,1842-08-31,44.4 1126 | 1124,1842-09-30,30.6 1127 | 1125,1842-10-31,63.5 1128 | 1126,1842-11-30,67.5 1129 | 1127,1842-12-31,29.3 1130 | 1128,1843-01-31,22.2 1131 | 1129,1843-02-28,5.9 1132 | 1130,1843-03-31,13.9 1133 | 1131,1843-04-30,15.8 1134 | 1132,1843-05-31,35.1 1135 | 1133,1843-06-30,17.6 1136 | 1134,1843-07-31,15.9 1137 | 1135,1843-08-31,19.6 1138 | 1136,1843-09-30,6.9 1139 | 1137,1843-10-31,8.9 1140 | 1138,1843-11-30,31.7 1141 | 1139,1843-12-31,21.2 1142 | 1140,1844-01-31,15.7 1143 | 1141,1844-02-29,24.5 1144 | 1142,1844-03-31,22.5 1145 | 1143,1844-04-30,34.6 1146 | 1144,1844-05-31,19.2 1147 | 1145,1844-06-30,6.2 1148 | 1146,1844-07-31,35.2 1149 | 1147,1844-08-31,39.7 1150 | 1148,1844-09-30,11.6 1151 | 1149,1844-10-31,35.9 1152 | 1150,1844-11-30,17.9 1153 | 1151,1844-12-31,36.0 1154 | 1152,1845-01-31,42.8 1155 | 1153,1845-02-28,72.8 1156 | 1154,1845-03-31,72.1 1157 | 1155,1845-04-30,95.0 1158 | 1156,1845-05-31,79.7 1159 | 1157,1845-06-30,51.8 1160 | 1158,1845-07-31,51.0 1161 | 1159,1845-08-31,53.9 1162 | 1160,1845-09-30,49.3 1163 | 1161,1845-10-31,67.8 1164 | 1162,1845-11-30,65.7 1165 | 1163,1845-12-31,99.5 1166 | 1164,1846-01-31,64.6 1167 | 1165,1846-02-28,84.9 1168 | 1166,1846-03-31,106.5 1169 | 1167,1846-04-30,115.5 1170 | 1168,1846-05-31,99.9 1171 | 1169,1846-06-30,108.4 1172 | 1170,1846-07-31,77.5 1173 | 1171,1846-08-31,91.3 1174 | 1172,1846-09-30,178.6 1175 | 1173,1846-10-31,93.4 1176 | 1174,1846-11-30,100.6 1177 | 1175,1846-12-31,109.1 1178 | 1176,1847-01-31,104.4 1179 | 1177,1847-02-28,74.9 1180 | 1178,1847-03-31,143.0 1181 | 1179,1847-04-30,74.6 1182 | 1180,1847-05-31,125.7 1183 | 1181,1847-06-30,142.2 1184 | 1182,1847-07-31,87.1 1185 | 1183,1847-08-31,234.3 1186 | 1184,1847-09-30,268.2 1187 | 1185,1847-10-31,300.6 1188 | 1186,1847-11-30,231.5 1189 | 1187,1847-12-31,182.6 1190 | 1188,1848-01-31,265.2 1191 | 1189,1848-02-29,186.4 1192 | 1190,1848-03-31,181.2 1193 | 1191,1848-04-30,178.6 1194 | 1192,1848-05-31,170.5 1195 | 1193,1848-06-30,214.9 1196 | 1194,1848-07-31,232.0 1197 | 1195,1848-08-31,220.9 1198 | 1196,1848-09-30,167.3 1199 | 1197,1848-10-31,220.6 1200 | 1198,1848-11-30,191.0 1201 | 1199,1848-12-31,265.8 1202 | 1200,1849-01-31,298.3 1203 | 1201,1849-02-28,250.3 1204 | 1202,1849-03-31,182.7 1205 | 1203,1849-04-30,194.7 1206 | 1204,1849-05-31,153.2 1207 | 1205,1849-06-30,154.2 1208 | 1206,1849-07-31,148.2 1209 | 1207,1849-08-31,128.6 1210 | 1208,1849-09-30,178.0 1211 | 1209,1849-10-31,135.7 1212 | 1210,1849-11-30,188.2 1213 | 1211,1849-12-31,184.3 1214 | 1212,1850-01-31,148.2 1215 | 1213,1850-02-28,169.8 1216 | 1214,1850-03-31,156.8 1217 | 1215,1850-04-30,83.8 1218 | 1216,1850-05-31,117.0 1219 | 1217,1850-06-30,133.0 1220 | 1218,1850-07-31,74.3 1221 | 1219,1850-08-31,117.0 1222 | 1220,1850-09-30,163.7 1223 | 1221,1850-10-31,134.9 1224 | 1222,1850-11-30,104.1 1225 | 1223,1850-12-31,115.9 1226 | 1224,1851-01-31,143.5 1227 | 1225,1851-02-28,200.1 1228 | 1226,1851-03-31,122.8 1229 | 1227,1851-04-30,107.3 1230 | 1228,1851-05-31,118.9 1231 | 1229,1851-06-30,120.0 1232 | 1230,1851-07-31,68.6 1233 | 1231,1851-08-31,109.0 1234 | 1232,1851-09-30,128.9 1235 | 1233,1851-10-31,118.7 1236 | 1234,1851-11-30,96.8 1237 | 1235,1851-12-31,135.5 1238 | 1236,1852-01-31,129.9 1239 | 1237,1852-02-29,126.2 1240 | 1238,1852-03-31,116.2 1241 | 1239,1852-04-30,124.3 1242 | 1240,1852-05-31,104.3 1243 | 1241,1852-06-30,89.0 1244 | 1242,1852-07-31,80.0 1245 | 1243,1852-08-31,75.3 1246 | 1244,1852-09-30,71.2 1247 | 1245,1852-10-31,127.9 1248 | 1246,1852-11-30,103.1 1249 | 1247,1852-12-31,86.1 1250 | 1248,1853-01-31,77.9 1251 | 1249,1853-02-28,81.5 1252 | 1250,1853-03-31,71.6 1253 | 1251,1853-04-30,90.4 1254 | 1252,1853-05-31,65.9 1255 | 1253,1853-06-30,76.0 1256 | 1254,1853-07-31,87.2 1257 | 1255,1853-08-31,95.8 1258 | 1256,1853-09-30,63.7 1259 | 1257,1853-10-31,80.5 1260 | 1258,1853-11-30,54.7 1261 | 1259,1853-12-31,44.5 1262 | 1260,1854-01-31,29.3 1263 | 1261,1854-02-28,38.0 1264 | 1262,1854-03-31,39.4 1265 | 1263,1854-04-30,50.3 1266 | 1264,1854-05-31,45.6 1267 | 1265,1854-06-30,40.1 1268 | 1266,1854-07-31,35.5 1269 | 1267,1854-08-31,30.1 1270 | 1268,1854-09-30,42.6 1271 | 1269,1854-10-31,24.1 1272 | 1270,1854-11-30,53.5 1273 | 1271,1854-12-31,41.1 1274 | 1272,1855-01-31,23.4 1275 | 1273,1855-02-28,21.6 1276 | 1274,1855-03-31,33.0 1277 | 1275,1855-04-30,8.4 1278 | 1276,1855-05-31,17.3 1279 | 1277,1855-06-30,10.0 1280 | 1278,1855-07-31,0.7 1281 | 1279,1855-08-31,5.9 1282 | 1280,1855-09-30,0.0 1283 | 1281,1855-10-31,18.3 1284 | 1282,1855-11-30,7.9 1285 | 1283,1855-12-31,5.8 1286 | 1284,1856-01-31,1.0 1287 | 1285,1856-02-29,9.3 1288 | 1286,1856-03-31,0.7 1289 | 1287,1856-04-30,12.4 1290 | 1288,1856-05-31,0.0 1291 | 1289,1856-06-30,9.8 1292 | 1290,1856-07-31,8.8 1293 | 1291,1856-08-31,11.3 1294 | 1292,1856-09-30,8.4 1295 | 1293,1856-10-31,8.5 1296 | 1294,1856-11-30,14.7 1297 | 1295,1856-12-31,13.7 1298 | 1296,1857-01-31,26.0 1299 | 1297,1857-02-28,14.2 1300 | 1298,1857-03-31,10.0 1301 | 1299,1857-04-30,21.1 1302 | 1300,1857-05-31,54.2 1303 | 1301,1857-06-30,30.5 1304 | 1302,1857-07-31,42.2 1305 | 1303,1857-08-31,32.0 1306 | 1304,1857-09-30,80.6 1307 | 1305,1857-10-31,77.1 1308 | 1306,1857-11-30,59.6 1309 | 1307,1857-12-31,70.7 1310 | 1308,1858-01-31,74.2 1311 | 1309,1858-02-28,66.3 1312 | 1310,1858-03-31,109.2 1313 | 1311,1858-04-30,72.8 1314 | 1312,1858-05-31,78.6 1315 | 1313,1858-06-30,84.5 1316 | 1314,1858-07-31,107.7 1317 | 1315,1858-08-31,104.9 1318 | 1316,1858-09-30,152.2 1319 | 1317,1858-10-31,173.2 1320 | 1318,1858-11-30,98.6 1321 | 1319,1858-12-31,127.0 1322 | 1320,1859-01-31,159.0 1323 | 1321,1859-02-28,166.4 1324 | 1322,1859-03-31,171.5 1325 | 1323,1859-04-30,162.9 1326 | 1324,1859-05-31,172.8 1327 | 1325,1859-06-30,165.2 1328 | 1326,1859-07-31,180.7 1329 | 1327,1859-08-31,203.0 1330 | 1328,1859-09-30,200.9 1331 | 1329,1859-10-31,217.8 1332 | 1330,1859-11-30,184.6 1333 | 1331,1859-12-31,153.9 1334 | 1332,1860-01-31,156.6 1335 | 1333,1860-02-29,167.9 1336 | 1334,1860-03-31,188.0 1337 | 1335,1860-04-30,135.7 1338 | 1336,1860-05-31,203.5 1339 | 1337,1860-06-30,206.3 1340 | 1338,1860-07-31,221.9 1341 | 1339,1860-08-31,190.5 1342 | 1340,1860-09-30,175.2 1343 | 1341,1860-10-31,171.1 1344 | 1342,1860-11-30,186.0 1345 | 1343,1860-12-31,181.7 1346 | 1344,1861-01-31,118.5 1347 | 1345,1861-02-28,147.5 1348 | 1346,1861-03-31,192.0 1349 | 1347,1861-04-30,187.1 1350 | 1348,1861-05-31,107.8 1351 | 1349,1861-06-30,167.5 1352 | 1350,1861-07-31,148.2 1353 | 1351,1861-08-31,156.7 1354 | 1352,1861-09-30,151.9 1355 | 1353,1861-10-31,127.7 1356 | 1354,1861-11-30,102.0 1357 | 1355,1861-12-31,152.8 1358 | 1356,1862-01-31,119.9 1359 | 1357,1862-02-28,122.4 1360 | 1358,1862-03-31,82.7 1361 | 1359,1862-04-30,102.1 1362 | 1360,1862-05-31,122.4 1363 | 1361,1862-06-30,159.7 1364 | 1362,1862-07-31,139.5 1365 | 1363,1862-08-31,118.7 1366 | 1364,1862-09-30,126.4 1367 | 1365,1862-10-31,79.8 1368 | 1366,1862-11-30,96.0 1369 | 1367,1862-12-31,77.6 1370 | 1368,1863-01-31,91.8 1371 | 1369,1863-02-28,107.7 1372 | 1370,1863-03-31,126.0 1373 | 1371,1863-04-30,77.1 1374 | 1372,1863-05-31,102.1 1375 | 1373,1863-06-30,77.6 1376 | 1374,1863-07-31,62.0 1377 | 1375,1863-08-31,91.3 1378 | 1376,1863-09-30,41.7 1379 | 1377,1863-10-31,75.7 1380 | 1378,1863-11-30,71.6 1381 | 1379,1863-12-31,78.1 1382 | 1380,1864-01-31,109.7 1383 | 1381,1864-02-29,89.5 1384 | 1382,1864-03-31,125.9 1385 | 1383,1864-04-30,68.1 1386 | 1384,1864-05-31,77.1 1387 | 1385,1864-06-30,109.9 1388 | 1386,1864-07-31,103.8 1389 | 1387,1864-08-31,104.1 1390 | 1388,1864-09-30,54.2 1391 | 1389,1864-10-31,64.4 1392 | 1390,1864-11-30,109.3 1393 | 1391,1864-12-31,54.3 1394 | 1392,1865-01-31,92.5 1395 | 1393,1865-02-28,74.6 1396 | 1394,1865-03-31,75.0 1397 | 1395,1865-04-30,55.9 1398 | 1396,1865-05-31,65.6 1399 | 1397,1865-06-30,63.8 1400 | 1398,1865-07-31,50.8 1401 | 1399,1865-08-31,71.8 1402 | 1400,1865-09-30,41.0 1403 | 1401,1865-10-31,32.5 1404 | 1402,1865-11-30,46.7 1405 | 1403,1865-12-31,24.3 1406 | 1404,1866-01-31,60.0 1407 | 1405,1866-02-28,72.9 1408 | 1406,1866-03-31,46.6 1409 | 1407,1866-04-30,33.5 1410 | 1408,1866-05-31,24.6 1411 | 1409,1866-06-30,31.4 1412 | 1410,1866-07-31,17.6 1413 | 1411,1866-08-31,24.2 1414 | 1412,1866-09-30,13.9 1415 | 1413,1866-10-31,26.8 1416 | 1414,1866-11-30,17.2 1417 | 1415,1866-12-31,2.9 1418 | 1416,1867-01-31,0.0 1419 | 1417,1867-02-28,1.4 1420 | 1418,1867-03-31,17.4 1421 | 1419,1867-04-30,9.7 1422 | 1420,1867-05-31,5.5 1423 | 1421,1867-06-30,2.8 1424 | 1422,1867-07-31,9.5 1425 | 1423,1867-08-31,9.1 1426 | 1424,1867-09-30,18.7 1427 | 1425,1867-10-31,25.5 1428 | 1426,1867-11-30,18.1 1429 | 1427,1867-12-31,47.9 1430 | 1428,1868-01-31,25.9 1431 | 1429,1868-02-29,26.3 1432 | 1430,1868-03-31,44.0 1433 | 1431,1868-04-30,61.1 1434 | 1432,1868-05-31,44.5 1435 | 1433,1868-06-30,51.8 1436 | 1434,1868-07-31,48.3 1437 | 1435,1868-08-31,57.3 1438 | 1436,1868-09-30,78.7 1439 | 1437,1868-10-31,102.8 1440 | 1438,1868-11-30,98.7 1441 | 1439,1868-12-31,112.8 1442 | 1440,1869-01-31,101.6 1443 | 1441,1869-02-28,99.9 1444 | 1442,1869-03-31,88.0 1445 | 1443,1869-04-30,68.4 1446 | 1444,1869-05-31,173.4 1447 | 1445,1869-06-30,180.7 1448 | 1446,1869-07-31,98.8 1449 | 1447,1869-08-31,132.7 1450 | 1448,1869-09-30,134.5 1451 | 1449,1869-10-31,99.0 1452 | 1450,1869-11-30,130.2 1453 | 1451,1869-12-31,174.1 1454 | 1452,1870-01-31,129.0 1455 | 1453,1870-02-28,191.7 1456 | 1454,1870-03-31,262.7 1457 | 1455,1870-04-30,266.9 1458 | 1456,1870-05-31,293.6 1459 | 1457,1870-06-30,226.3 1460 | 1458,1870-07-31,220.9 1461 | 1459,1870-08-31,256.5 1462 | 1460,1870-09-30,226.8 1463 | 1461,1870-10-31,244.3 1464 | 1462,1870-11-30,246.0 1465 | 1463,1870-12-31,216.7 1466 | 1464,1871-01-31,147.2 1467 | 1465,1871-02-28,209.0 1468 | 1466,1871-03-31,238.7 1469 | 1467,1871-04-30,270.9 1470 | 1468,1871-05-31,242.6 1471 | 1469,1871-06-30,152.9 1472 | 1470,1871-07-31,171.8 1473 | 1471,1871-08-31,183.7 1474 | 1472,1871-09-30,133.9 1475 | 1473,1871-10-31,148.5 1476 | 1474,1871-11-30,175.7 1477 | 1475,1871-12-31,150.8 1478 | 1476,1872-01-31,132.7 1479 | 1477,1872-02-29,200.3 1480 | 1478,1872-03-31,147.5 1481 | 1479,1872-04-30,170.4 1482 | 1480,1872-05-31,179.5 1483 | 1481,1872-06-30,183.3 1484 | 1482,1872-07-31,176.0 1485 | 1483,1872-08-31,155.0 1486 | 1484,1872-09-30,191.1 1487 | 1485,1872-10-31,171.2 1488 | 1486,1872-11-30,186.8 1489 | 1487,1872-12-31,139.9 1490 | 1488,1873-01-31,144.6 1491 | 1489,1873-02-28,178.4 1492 | 1490,1873-03-31,164.0 1493 | 1491,1873-04-30,127.1 1494 | 1492,1873-05-31,80.0 1495 | 1493,1873-06-30,74.8 1496 | 1494,1873-07-31,111.7 1497 | 1495,1873-08-31,113.8 1498 | 1496,1873-09-30,78.7 1499 | 1497,1873-10-31,78.6 1500 | 1498,1873-11-30,92.5 1501 | 1499,1873-12-31,82.0 1502 | 1500,1874-01-31,101.4 1503 | 1501,1874-02-28,107.1 1504 | 1502,1874-03-31,77.5 1505 | 1503,1874-04-30,53.5 1506 | 1504,1874-05-31,74.6 1507 | 1505,1874-06-30,63.8 1508 | 1506,1874-07-31,113.2 1509 | 1507,1874-08-31,102.3 1510 | 1508,1874-09-30,46.8 1511 | 1509,1874-10-31,57.4 1512 | 1510,1874-11-30,48.2 1513 | 1511,1874-12-31,48.8 1514 | 1512,1875-01-31,24.4 1515 | 1513,1875-02-28,35.9 1516 | 1514,1875-03-31,56.4 1517 | 1515,1875-04-30,48.6 1518 | 1516,1875-05-31,19.2 1519 | 1517,1875-06-30,39.9 1520 | 1518,1875-07-31,20.9 1521 | 1519,1875-08-31,24.4 1522 | 1520,1875-09-30,4.0 1523 | 1521,1875-10-31,21.3 1524 | 1522,1875-11-30,29.6 1525 | 1523,1875-12-31,16.5 1526 | 1524,1876-01-31,23.9 1527 | 1525,1876-02-29,25.1 1528 | 1526,1876-03-31,51.1 1529 | 1527,1876-04-30,3.9 1530 | 1528,1876-05-31,8.5 1531 | 1529,1876-06-30,2.7 1532 | 1530,1876-07-31,25.5 1533 | 1531,1876-08-31,14.8 1534 | 1532,1876-09-30,16.6 1535 | 1533,1876-10-31,23.9 1536 | 1534,1876-11-30,16.6 1537 | 1535,1876-12-31,13.6 1538 | 1536,1877-01-31,40.6 1539 | 1537,1877-02-28,14.5 1540 | 1538,1877-03-31,19.9 1541 | 1539,1877-04-30,26.3 1542 | 1540,1877-05-31,36.1 1543 | 1541,1877-06-30,23.6 1544 | 1542,1877-07-31,10.0 1545 | 1543,1877-08-31,10.5 1546 | 1544,1877-09-30,28.1 1547 | 1545,1877-10-31,11.2 1548 | 1546,1877-11-30,23.6 1549 | 1547,1877-12-31,3.5 1550 | 1548,1878-01-31,5.5 1551 | 1549,1878-02-28,11.0 1552 | 1550,1878-03-31,13.1 1553 | 1551,1878-04-30,0.2 1554 | 1552,1878-05-31,9.9 1555 | 1553,1878-06-30,10.7 1556 | 1554,1878-07-31,0.2 1557 | 1555,1878-08-31,0.0 1558 | 1556,1878-09-30,8.8 1559 | 1557,1878-10-31,1.9 1560 | 1558,1878-11-30,6.8 1561 | 1559,1878-12-31,0.9 1562 | 1560,1879-01-31,1.6 1563 | 1561,1879-02-28,0.9 1564 | 1562,1879-03-31,0.0 1565 | 1563,1879-04-30,10.4 1566 | 1564,1879-05-31,4.0 1567 | 1565,1879-06-30,8.0 1568 | 1566,1879-07-31,12.6 1569 | 1567,1879-08-31,17.9 1570 | 1568,1879-09-30,10.1 1571 | 1569,1879-10-31,20.4 1572 | 1570,1879-11-30,21.9 1573 | 1571,1879-12-31,12.2 1574 | 1572,1880-01-31,40.1 1575 | 1573,1880-02-29,45.4 1576 | 1574,1880-03-31,32.1 1577 | 1575,1880-04-30,32.4 1578 | 1576,1880-05-31,39.1 1579 | 1577,1880-06-30,56.9 1580 | 1578,1880-07-31,36.5 1581 | 1579,1880-08-31,80.3 1582 | 1580,1880-09-30,110.1 1583 | 1581,1880-10-31,71.7 1584 | 1582,1880-11-30,51.1 1585 | 1583,1880-12-31,49.4 1586 | 1584,1881-01-31,60.6 1587 | 1585,1881-02-28,88.6 1588 | 1586,1881-03-31,85.8 1589 | 1587,1881-04-30,86.1 1590 | 1588,1881-05-31,72.5 1591 | 1589,1881-06-30,100.8 1592 | 1590,1881-07-31,128.2 1593 | 1591,1881-08-31,97.3 1594 | 1592,1881-09-30,88.6 1595 | 1593,1881-10-31,107.3 1596 | 1594,1881-11-30,91.5 1597 | 1595,1881-12-31,78.8 1598 | 1596,1882-01-31,75.0 1599 | 1597,1882-02-28,115.9 1600 | 1598,1882-03-31,111.5 1601 | 1599,1882-04-30,159.6 1602 | 1600,1882-05-31,106.9 1603 | 1601,1882-06-30,75.4 1604 | 1602,1882-07-31,75.7 1605 | 1603,1882-08-31,67.5 1606 | 1604,1882-09-30,96.1 1607 | 1605,1882-10-31,98.6 1608 | 1606,1882-11-30,140.6 1609 | 1607,1882-12-31,69.7 1610 | 1608,1883-01-31,101.0 1611 | 1609,1883-02-28,78.2 1612 | 1610,1883-03-31,71.3 1613 | 1611,1883-04-30,136.8 1614 | 1612,1883-05-31,52.5 1615 | 1613,1883-06-30,127.2 1616 | 1614,1883-07-31,134.4 1617 | 1615,1883-08-31,76.6 1618 | 1616,1883-09-30,87.8 1619 | 1617,1883-10-31,139.6 1620 | 1618,1883-11-30,140.8 1621 | 1619,1883-12-31,126.5 1622 | 1620,1884-01-31,152.6 1623 | 1621,1884-02-29,144.8 1624 | 1622,1884-03-31,145.8 1625 | 1623,1884-04-30,126.9 1626 | 1624,1884-05-31,110.9 1627 | 1625,1884-06-30,85.3 1628 | 1626,1884-07-31,88.5 1629 | 1627,1884-08-31,93.1 1630 | 1628,1884-09-30,103.1 1631 | 1629,1884-10-31,79.6 1632 | 1630,1884-11-30,60.9 1633 | 1631,1884-12-31,78.6 1634 | 1632,1885-01-31,71.4 1635 | 1633,1885-02-28,119.7 1636 | 1634,1885-03-31,82.9 1637 | 1635,1885-04-30,91.7 1638 | 1636,1885-05-31,121.6 1639 | 1637,1885-06-30,139.5 1640 | 1638,1885-07-31,110.9 1641 | 1639,1885-08-31,83.5 1642 | 1640,1885-09-30,66.0 1643 | 1641,1885-10-31,64.5 1644 | 1642,1885-11-30,51.6 1645 | 1643,1885-12-31,36.3 1646 | 1644,1886-01-31,49.8 1647 | 1645,1886-02-28,43.2 1648 | 1646,1886-03-31,95.5 1649 | 1647,1886-04-30,72.9 1650 | 1648,1886-05-31,51.2 1651 | 1649,1886-06-30,45.3 1652 | 1650,1886-07-31,50.4 1653 | 1651,1886-08-31,28.1 1654 | 1652,1886-09-30,35.7 1655 | 1653,1886-10-31,14.4 1656 | 1654,1886-11-30,0.6 1657 | 1655,1886-12-31,21.7 1658 | 1656,1887-01-31,17.0 1659 | 1657,1887-02-28,22.0 1660 | 1658,1887-03-31,7.1 1661 | 1659,1887-04-30,11.6 1662 | 1660,1887-05-31,33.4 1663 | 1661,1887-06-30,26.1 1664 | 1662,1887-07-31,38.9 1665 | 1663,1887-08-31,35.7 1666 | 1664,1887-09-30,12.4 1667 | 1665,1887-10-31,11.0 1668 | 1666,1887-11-30,11.5 1669 | 1667,1887-12-31,34.5 1670 | 1668,1888-01-31,21.2 1671 | 1669,1888-02-29,11.8 1672 | 1670,1888-03-31,13.1 1673 | 1671,1888-04-30,8.5 1674 | 1672,1888-05-31,11.7 1675 | 1673,1888-06-30,11.8 1676 | 1674,1888-07-31,5.0 1677 | 1675,1888-08-31,4.6 1678 | 1676,1888-09-30,14.6 1679 | 1677,1888-10-31,3.4 1680 | 1678,1888-11-30,17.9 1681 | 1679,1888-12-31,11.1 1682 | 1680,1889-01-31,1.3 1683 | 1681,1889-02-28,14.2 1684 | 1682,1889-03-31,11.1 1685 | 1683,1889-04-30,7.3 1686 | 1684,1889-05-31,4.0 1687 | 1685,1889-06-30,10.8 1688 | 1686,1889-07-31,15.8 1689 | 1687,1889-08-31,34.3 1690 | 1688,1889-09-30,10.9 1691 | 1689,1889-10-31,3.4 1692 | 1690,1889-11-30,0.3 1693 | 1691,1889-12-31,11.2 1694 | 1692,1890-01-31,8.8 1695 | 1693,1890-02-28,1.1 1696 | 1694,1890-03-31,8.5 1697 | 1695,1890-04-30,2.7 1698 | 1696,1890-05-31,7.9 1699 | 1697,1890-06-30,2.2 1700 | 1698,1890-07-31,19.3 1701 | 1699,1890-08-31,14.2 1702 | 1700,1890-09-30,28.6 1703 | 1701,1890-10-31,18.6 1704 | 1702,1890-11-30,15.9 1705 | 1703,1890-12-31,13.1 1706 | 1704,1891-01-31,22.5 1707 | 1705,1891-02-28,36.9 1708 | 1706,1891-03-31,17.2 1709 | 1707,1891-04-30,34.2 1710 | 1708,1891-05-31,68.5 1711 | 1709,1891-06-30,80.4 1712 | 1710,1891-07-31,98.0 1713 | 1711,1891-08-31,55.1 1714 | 1712,1891-09-30,89.7 1715 | 1713,1891-10-31,86.0 1716 | 1714,1891-11-30,69.8 1717 | 1715,1891-12-31,54.3 1718 | 1716,1892-01-31,115.2 1719 | 1717,1892-02-29,126.1 1720 | 1718,1892-03-31,83.3 1721 | 1719,1892-04-30,116.0 1722 | 1720,1892-05-31,132.7 1723 | 1721,1892-06-30,127.3 1724 | 1722,1892-07-31,127.6 1725 | 1723,1892-08-31,169.0 1726 | 1724,1892-09-30,104.7 1727 | 1725,1892-10-31,117.5 1728 | 1726,1892-11-30,108.9 1729 | 1727,1892-12-31,131.0 1730 | 1728,1893-01-31,125.0 1731 | 1729,1893-02-28,121.6 1732 | 1730,1893-03-31,109.5 1733 | 1731,1893-04-30,146.8 1734 | 1732,1893-05-31,141.3 1735 | 1733,1893-06-30,149.8 1736 | 1734,1893-07-31,147.6 1737 | 1735,1893-08-31,215.4 1738 | 1736,1893-09-30,129.9 1739 | 1737,1893-10-31,133.3 1740 | 1738,1893-11-30,125.2 1741 | 1739,1893-12-31,156.4 1742 | 1740,1894-01-31,138.6 1743 | 1741,1894-02-28,141.0 1744 | 1742,1894-03-31,87.1 1745 | 1743,1894-04-30,136.0 1746 | 1744,1894-05-31,168.7 1747 | 1745,1894-06-30,164.8 1748 | 1746,1894-07-31,176.7 1749 | 1747,1894-08-31,117.1 1750 | 1748,1894-09-30,110.0 1751 | 1749,1894-10-31,125.7 1752 | 1750,1894-11-30,94.3 1753 | 1751,1894-12-31,100.1 1754 | 1752,1895-01-31,105.4 1755 | 1753,1895-02-28,112.0 1756 | 1754,1895-03-31,101.6 1757 | 1755,1895-04-30,128.2 1758 | 1756,1895-05-31,112.5 1759 | 1757,1895-06-30,119.1 1760 | 1758,1895-07-31,79.7 1761 | 1759,1895-08-31,114.9 1762 | 1760,1895-09-30,96.1 1763 | 1761,1895-10-31,113.2 1764 | 1762,1895-11-30,78.6 1765 | 1763,1895-12-31,117.9 1766 | 1764,1896-01-31,48.4 1767 | 1765,1896-02-29,95.7 1768 | 1766,1896-03-31,86.5 1769 | 1767,1896-04-30,73.0 1770 | 1768,1896-05-31,46.1 1771 | 1769,1896-06-30,81.7 1772 | 1770,1896-07-31,75.2 1773 | 1771,1896-08-31,45.4 1774 | 1772,1896-09-30,102.2 1775 | 1773,1896-10-31,47.9 1776 | 1774,1896-11-30,63.3 1777 | 1775,1896-12-31,71.0 1778 | 1776,1897-01-31,67.6 1779 | 1777,1897-02-28,49.0 1780 | 1778,1897-03-31,48.7 1781 | 1779,1897-04-30,51.7 1782 | 1780,1897-05-31,33.3 1783 | 1781,1897-06-30,18.9 1784 | 1782,1897-07-31,46.1 1785 | 1783,1897-08-31,36.4 1786 | 1784,1897-09-30,80.4 1787 | 1785,1897-10-31,23.9 1788 | 1786,1897-11-30,14.0 1789 | 1787,1897-12-31,55.5 1790 | 1788,1898-01-31,50.4 1791 | 1789,1898-02-28,60.7 1792 | 1790,1898-03-31,63.9 1793 | 1791,1898-04-30,24.2 1794 | 1792,1898-05-31,43.0 1795 | 1793,1898-06-30,37.1 1796 | 1794,1898-07-31,15.0 1797 | 1795,1898-08-31,52.3 1798 | 1796,1898-09-30,58.1 1799 | 1797,1898-10-31,57.1 1800 | 1798,1898-11-30,51.6 1801 | 1799,1898-12-31,21.1 1802 | 1800,1899-01-31,32.4 1803 | 1801,1899-02-28,15.3 1804 | 1802,1899-03-31,30.3 1805 | 1803,1899-04-30,23.6 1806 | 1804,1899-05-31,12.9 1807 | 1805,1899-06-30,34.1 1808 | 1806,1899-07-31,22.5 1809 | 1807,1899-08-31,4.9 1810 | 1808,1899-09-30,14.0 1811 | 1809,1899-10-31,21.7 1812 | 1810,1899-11-30,13.0 1813 | 1811,1899-12-31,17.6 1814 | 1812,1900-01-31,15.7 1815 | 1813,1900-02-28,22.8 1816 | 1814,1900-03-31,14.4 1817 | 1815,1900-04-30,26.8 1818 | 1816,1900-05-31,25.3 1819 | 1817,1900-06-30,20.1 1820 | 1818,1900-07-31,13.9 1821 | 1819,1900-08-31,7.1 1822 | 1820,1900-09-30,13.9 1823 | 1821,1900-10-31,21.6 1824 | 1822,1900-11-30,7.5 1825 | 1823,1900-12-31,0.5 1826 | 1824,1901-01-31,0.4 1827 | 1825,1901-02-28,4.0 1828 | 1826,1901-03-31,7.4 1829 | 1827,1901-04-30,0.0 1830 | 1828,1901-05-31,17.0 1831 | 1829,1901-06-30,9.7 1832 | 1830,1901-07-31,1.2 1833 | 1831,1901-08-31,1.7 1834 | 1832,1901-09-30,0.9 1835 | 1833,1901-10-31,6.3 1836 | 1834,1901-11-30,6.4 1837 | 1835,1901-12-31,0.0 1838 | 1836,1902-01-31,9.3 1839 | 1837,1902-02-28,0.0 1840 | 1838,1902-03-31,20.7 1841 | 1839,1902-04-30,0.0 1842 | 1840,1902-05-31,4.7 1843 | 1841,1902-06-30,2.4 1844 | 1842,1902-07-31,1.5 1845 | 1843,1902-08-31,3.8 1846 | 1844,1902-09-30,12.6 1847 | 1845,1902-10-31,27.2 1848 | 1846,1902-11-30,17.2 1849 | 1847,1902-12-31,1.8 1850 | 1848,1903-01-31,13.9 1851 | 1849,1903-02-28,28.4 1852 | 1850,1903-03-31,22.5 1853 | 1851,1903-04-30,43.5 1854 | 1852,1903-05-31,24.3 1855 | 1853,1903-06-30,27.2 1856 | 1854,1903-07-31,46.4 1857 | 1855,1903-08-31,48.0 1858 | 1856,1903-09-30,18.5 1859 | 1857,1903-10-31,64.8 1860 | 1858,1903-11-30,74.2 1861 | 1859,1903-12-31,76.2 1862 | 1860,1904-01-31,52.6 1863 | 1861,1904-02-29,40.8 1864 | 1862,1904-03-31,61.9 1865 | 1863,1904-04-30,71.6 1866 | 1864,1904-05-31,65.7 1867 | 1865,1904-06-30,69.8 1868 | 1866,1904-07-31,84.3 1869 | 1867,1904-08-31,97.1 1870 | 1868,1904-09-30,50.2 1871 | 1869,1904-10-31,90.4 1872 | 1870,1904-11-30,63.4 1873 | 1871,1904-12-31,91.1 1874 | 1872,1905-01-31,91.2 1875 | 1873,1905-02-28,143.0 1876 | 1874,1905-03-31,94.3 1877 | 1875,1905-04-30,65.5 1878 | 1876,1905-05-31,79.9 1879 | 1877,1905-06-30,81.6 1880 | 1878,1905-07-31,121.6 1881 | 1879,1905-08-31,98.1 1882 | 1880,1905-09-30,91.8 1883 | 1881,1905-10-31,131.2 1884 | 1882,1905-11-30,178.7 1885 | 1883,1905-12-31,92.5 1886 | 1884,1906-01-31,75.8 1887 | 1885,1906-02-28,52.3 1888 | 1886,1906-03-31,107.4 1889 | 1887,1906-04-30,92.2 1890 | 1888,1906-05-31,96.2 1891 | 1889,1906-06-30,105.3 1892 | 1890,1906-07-31,172.7 1893 | 1891,1906-08-31,79.6 1894 | 1892,1906-09-30,93.5 1895 | 1893,1906-10-31,29.7 1896 | 1894,1906-11-30,64.8 1897 | 1895,1906-12-31,108.0 1898 | 1896,1907-01-31,127.4 1899 | 1897,1907-02-28,180.3 1900 | 1898,1907-03-31,101.1 1901 | 1899,1907-04-30,87.6 1902 | 1900,1907-05-31,71.4 1903 | 1901,1907-06-30,67.2 1904 | 1902,1907-07-31,82.9 1905 | 1903,1907-08-31,90.5 1906 | 1904,1907-09-30,141.7 1907 | 1905,1907-10-31,109.1 1908 | 1906,1907-11-30,102.5 1909 | 1907,1907-12-31,78.9 1910 | 1908,1908-01-31,65.4 1911 | 1909,1908-02-29,56.6 1912 | 1910,1908-03-31,47.9 1913 | 1911,1908-04-30,96.1 1914 | 1912,1908-05-31,68.0 1915 | 1913,1908-06-30,80.2 1916 | 1914,1908-07-31,65.8 1917 | 1915,1908-08-31,150.9 1918 | 1916,1908-09-30,144.9 1919 | 1917,1908-10-31,53.9 1920 | 1918,1908-11-30,75.9 1921 | 1919,1908-12-31,65.9 1922 | 1920,1909-01-31,94.6 1923 | 1921,1909-02-28,77.6 1924 | 1922,1909-03-31,110.5 1925 | 1923,1909-04-30,53.7 1926 | 1924,1909-05-31,60.0 1927 | 1925,1909-06-30,37.8 1928 | 1926,1909-07-31,59.6 1929 | 1927,1909-08-31,38.5 1930 | 1928,1909-09-30,64.7 1931 | 1929,1909-10-31,97.4 1932 | 1930,1909-11-30,93.0 1933 | 1931,1909-12-31,90.2 1934 | 1932,1910-01-31,44.0 1935 | 1933,1910-02-28,52.5 1936 | 1934,1910-03-31,35.7 1937 | 1935,1910-04-30,14.1 1938 | 1936,1910-05-31,36.9 1939 | 1937,1910-06-30,20.5 1940 | 1938,1910-07-31,23.5 1941 | 1939,1910-08-31,19.3 1942 | 1940,1910-09-30,43.7 1943 | 1941,1910-10-31,63.9 1944 | 1942,1910-11-30,8.3 1945 | 1943,1910-12-31,9.6 1946 | 1944,1911-01-31,5.6 1947 | 1945,1911-02-28,15.0 1948 | 1946,1911-03-31,13.0 1949 | 1947,1911-04-30,27.6 1950 | 1948,1911-05-31,15.1 1951 | 1949,1911-06-30,3.7 1952 | 1950,1911-07-31,5.9 1953 | 1951,1911-08-31,6.7 1954 | 1952,1911-09-30,6.7 1955 | 1953,1911-10-31,4.5 1956 | 1954,1911-11-30,7.0 1957 | 1955,1911-12-31,3.7 1958 | 1956,1912-01-31,0.4 1959 | 1957,1912-02-29,0.0 1960 | 1958,1912-03-31,8.2 1961 | 1959,1912-04-30,7.6 1962 | 1960,1912-05-31,7.4 1963 | 1961,1912-06-30,6.9 1964 | 1962,1912-07-31,4.9 1965 | 1963,1912-08-31,0.5 1966 | 1964,1912-09-30,15.9 1967 | 1965,1912-10-31,7.6 1968 | 1966,1912-11-30,1.9 1969 | 1967,1912-12-31,10.6 1970 | 1968,1913-01-31,3.8 1971 | 1969,1913-02-28,4.8 1972 | 1970,1913-03-31,0.8 1973 | 1971,1913-04-30,1.6 1974 | 1972,1913-05-31,0.0 1975 | 1973,1913-06-30,0.0 1976 | 1974,1913-07-31,2.9 1977 | 1975,1913-08-31,0.4 1978 | 1976,1913-09-30,2.0 1979 | 1977,1913-10-31,5.2 1980 | 1978,1913-11-30,1.2 1981 | 1979,1913-12-31,6.3 1982 | 1980,1914-01-31,4.7 1983 | 1981,1914-02-28,4.4 1984 | 1982,1914-03-31,5.3 1985 | 1983,1914-04-30,28.9 1986 | 1984,1914-05-31,8.7 1987 | 1985,1914-06-30,19.1 1988 | 1986,1914-07-31,9.1 1989 | 1987,1914-08-31,12.9 1990 | 1988,1914-09-30,21.2 1991 | 1989,1914-10-31,13.7 1992 | 1990,1914-11-30,27.3 1993 | 1991,1914-12-31,37.3 1994 | 1992,1915-01-31,38.5 1995 | 1993,1915-02-28,70.4 1996 | 1994,1915-03-31,64.8 1997 | 1995,1915-04-30,68.9 1998 | 1996,1915-05-31,55.1 1999 | 1997,1915-06-30,114.7 2000 | 1998,1915-07-31,119.4 2001 | 1999,1915-08-31,116.0 2002 | 2000,1915-09-30,82.4 2003 | 2001,1915-10-31,89.1 2004 | 2002,1915-11-30,70.9 2005 | 2003,1915-12-31,57.5 2006 | 2004,1916-01-31,75.5 2007 | 2005,1916-02-29,92.4 2008 | 2006,1916-03-31,111.7 2009 | 2007,1916-04-30,119.8 2010 | 2008,1916-05-31,124.0 2011 | 2009,1916-06-30,112.9 2012 | 2010,1916-07-31,89.3 2013 | 2011,1916-08-31,58.6 2014 | 2012,1916-09-30,75.1 2015 | 2013,1916-10-31,84.5 2016 | 2014,1916-11-30,109.5 2017 | 2015,1916-12-31,88.3 2018 | 2016,1917-01-31,124.5 2019 | 2017,1917-02-28,119.9 2020 | 2018,1917-03-31,158.0 2021 | 2019,1917-04-30,124.6 2022 | 2020,1917-05-31,190.2 2023 | 2021,1917-06-30,191.4 2024 | 2022,1917-07-31,199.7 2025 | 2023,1917-08-31,257.7 2026 | 2024,1917-09-30,215.6 2027 | 2025,1917-10-31,120.3 2028 | 2026,1917-11-30,160.7 2029 | 2027,1917-12-31,215.5 2030 | 2028,1918-01-31,160.0 2031 | 2029,1918-02-28,108.7 2032 | 2030,1918-03-31,120.4 2033 | 2031,1918-04-30,134.1 2034 | 2032,1918-05-31,127.9 2035 | 2033,1918-06-30,99.0 2036 | 2034,1918-07-31,179.5 2037 | 2035,1918-08-31,169.6 2038 | 2036,1918-09-30,133.2 2039 | 2037,1918-10-31,141.7 2040 | 2038,1918-11-30,139.0 2041 | 2039,1918-12-31,98.5 2042 | 2040,1919-01-31,80.2 2043 | 2041,1919-02-28,132.5 2044 | 2042,1919-03-31,110.9 2045 | 2043,1919-04-30,86.3 2046 | 2044,1919-05-31,146.9 2047 | 2045,1919-06-30,185.3 2048 | 2046,1919-07-31,107.8 2049 | 2047,1919-08-31,115.1 2050 | 2048,1919-09-30,91.1 2051 | 2049,1919-10-31,88.0 2052 | 2050,1919-11-30,69.9 2053 | 2051,1919-12-31,58.0 2054 | 2052,1920-01-31,85.3 2055 | 2053,1920-02-29,89.8 2056 | 2054,1920-03-31,116.9 2057 | 2055,1920-04-30,24.7 2058 | 2056,1920-05-31,55.4 2059 | 2057,1920-06-30,64.6 2060 | 2058,1920-07-31,45.7 2061 | 2059,1920-08-31,31.9 2062 | 2060,1920-09-30,60.5 2063 | 2061,1920-10-31,82.7 2064 | 2062,1920-11-30,45.3 2065 | 2063,1920-12-31,49.8 2066 | 2064,1921-01-31,52.5 2067 | 2065,1921-02-28,47.1 2068 | 2066,1921-03-31,44.5 2069 | 2067,1921-04-30,54.0 2070 | 2068,1921-05-31,37.0 2071 | 2069,1921-06-30,56.2 2072 | 2070,1921-07-31,69.7 2073 | 2071,1921-08-31,38.0 2074 | 2072,1921-09-30,29.6 2075 | 2073,1921-10-31,30.3 2076 | 2074,1921-11-30,29.6 2077 | 2075,1921-12-31,33.9 2078 | 2076,1922-01-31,19.7 2079 | 2077,1922-02-28,43.9 2080 | 2078,1922-03-31,91.3 2081 | 2079,1922-04-30,18.3 2082 | 2080,1922-05-31,13.4 2083 | 2081,1922-06-30,9.8 2084 | 2082,1922-07-31,18.3 2085 | 2083,1922-08-31,10.9 2086 | 2084,1922-09-30,7.8 2087 | 2085,1922-10-31,10.4 2088 | 2086,1922-11-30,12.2 2089 | 2087,1922-12-31,29.0 2090 | 2088,1923-01-31,7.5 2091 | 2089,1923-02-28,2.5 2092 | 2090,1923-03-31,5.5 2093 | 2091,1923-04-30,10.2 2094 | 2092,1923-05-31,5.3 2095 | 2093,1923-06-30,15.3 2096 | 2094,1923-07-31,5.9 2097 | 2095,1923-08-31,0.8 2098 | 2096,1923-09-30,22.1 2099 | 2097,1923-10-31,19.5 2100 | 2098,1923-11-30,16.7 2101 | 2099,1923-12-31,4.6 2102 | 2100,1924-01-31,0.8 2103 | 2101,1924-02-29,8.5 2104 | 2102,1924-03-31,3.0 2105 | 2103,1924-04-30,18.9 2106 | 2104,1924-05-31,34.6 2107 | 2105,1924-06-30,40.0 2108 | 2106,1924-07-31,46.9 2109 | 2107,1924-08-31,32.1 2110 | 2108,1924-09-30,41.9 2111 | 2109,1924-10-31,42.6 2112 | 2110,1924-11-30,37.5 2113 | 2111,1924-12-31,27.5 2114 | 2112,1925-01-31,9.1 2115 | 2113,1925-02-28,38.6 2116 | 2114,1925-03-31,30.0 2117 | 2115,1925-04-30,53.0 2118 | 2116,1925-05-31,71.4 2119 | 2117,1925-06-30,79.1 2120 | 2118,1925-07-31,64.2 2121 | 2119,1925-08-31,63.3 2122 | 2120,1925-09-30,100.3 2123 | 2121,1925-10-31,115.3 2124 | 2122,1925-11-30,97.6 2125 | 2123,1925-12-31,164.4 2126 | 2124,1926-01-31,119.7 2127 | 2125,1926-02-28,116.4 2128 | 2126,1926-03-31,104.2 2129 | 2127,1926-04-30,64.2 2130 | 2128,1926-05-31,107.0 2131 | 2129,1926-06-30,122.4 2132 | 2130,1926-07-31,87.2 2133 | 2131,1926-08-31,102.7 2134 | 2132,1926-09-30,101.4 2135 | 2133,1926-10-31,119.3 2136 | 2134,1926-11-30,100.8 2137 | 2135,1926-12-31,132.4 2138 | 2136,1927-01-31,136.0 2139 | 2137,1927-02-28,155.1 2140 | 2138,1927-03-31,116.1 2141 | 2139,1927-04-30,155.8 2142 | 2140,1927-05-31,131.9 2143 | 2141,1927-06-30,98.5 2144 | 2142,1927-07-31,91.6 2145 | 2143,1927-08-31,89.6 2146 | 2144,1927-09-30,114.1 2147 | 2145,1927-10-31,105.2 2148 | 2146,1927-11-30,112.1 2149 | 2147,1927-12-31,75.3 2150 | 2148,1928-01-31,139.2 2151 | 2149,1928-02-29,122.4 2152 | 2150,1928-03-31,142.4 2153 | 2151,1928-04-30,134.3 2154 | 2152,1928-05-31,128.3 2155 | 2153,1928-06-30,152.4 2156 | 2154,1928-07-31,163.4 2157 | 2155,1928-08-31,139.6 2158 | 2156,1928-09-30,149.6 2159 | 2157,1928-10-31,102.3 2160 | 2158,1928-11-30,83.9 2161 | 2159,1928-12-31,98.3 2162 | 2160,1929-01-31,114.8 2163 | 2161,1929-02-28,104.7 2164 | 2162,1929-03-31,83.8 2165 | 2163,1929-04-30,87.9 2166 | 2164,1929-05-31,97.0 2167 | 2165,1929-06-30,119.9 2168 | 2166,1929-07-31,117.1 2169 | 2167,1929-08-31,109.6 2170 | 2168,1929-09-30,57.3 2171 | 2169,1929-10-31,90.1 2172 | 2170,1929-11-30,135.1 2173 | 2171,1929-12-31,179.9 2174 | 2172,1930-01-31,108.8 2175 | 2173,1930-02-28,83.1 2176 | 2174,1930-03-31,58.4 2177 | 2175,1930-04-30,63.7 2178 | 2176,1930-05-31,61.4 2179 | 2177,1930-06-30,48.0 2180 | 2178,1930-07-31,36.5 2181 | 2179,1930-08-31,41.5 2182 | 2180,1930-09-30,53.5 2183 | 2181,1930-10-31,57.2 2184 | 2182,1930-11-30,59.4 2185 | 2183,1930-12-31,43.0 2186 | 2184,1931-01-31,24.4 2187 | 2185,1931-02-28,71.8 2188 | 2186,1931-03-31,50.1 2189 | 2187,1931-04-30,52.0 2190 | 2188,1931-05-31,40.8 2191 | 2189,1931-06-30,25.5 2192 | 2190,1931-07-31,29.0 2193 | 2191,1931-08-31,21.6 2194 | 2192,1931-09-30,31.7 2195 | 2193,1931-10-31,16.6 2196 | 2194,1931-11-30,31.2 2197 | 2195,1931-12-31,29.7 2198 | 2196,1932-01-31,20.1 2199 | 2197,1932-02-29,17.6 2200 | 2198,1932-03-31,18.8 2201 | 2199,1932-04-30,18.7 2202 | 2200,1932-05-31,29.7 2203 | 2201,1932-06-30,36.9 2204 | 2202,1932-07-31,16.0 2205 | 2203,1932-08-31,11.3 2206 | 2204,1932-09-30,6.6 2207 | 2205,1932-10-31,14.8 2208 | 2206,1932-11-30,13.7 2209 | 2207,1932-12-31,18.5 2210 | 2208,1933-01-31,20.4 2211 | 2209,1933-02-28,36.9 2212 | 2210,1933-03-31,16.8 2213 | 2211,1933-04-30,4.9 2214 | 2212,1933-05-31,5.3 2215 | 2213,1933-06-30,8.7 2216 | 2214,1933-07-31,4.7 2217 | 2215,1933-08-31,0.4 2218 | 2216,1933-09-30,8.5 2219 | 2217,1933-10-31,5.0 2220 | 2218,1933-11-30,1.0 2221 | 2219,1933-12-31,0.4 2222 | 2220,1934-01-31,5.7 2223 | 2221,1934-02-28,12.9 2224 | 2222,1934-03-31,7.2 2225 | 2223,1934-04-30,18.8 2226 | 2224,1934-05-31,32.9 2227 | 2225,1934-06-30,11.2 2228 | 2226,1934-07-31,15.3 2229 | 2227,1934-08-31,13.9 2230 | 2228,1934-09-30,6.7 2231 | 2229,1934-10-31,9.5 2232 | 2230,1934-11-30,14.5 2233 | 2231,1934-12-31,25.7 2234 | 2232,1935-01-31,31.1 2235 | 2233,1935-02-28,34.1 2236 | 2234,1935-03-31,38.5 2237 | 2235,1935-04-30,20.4 2238 | 2236,1935-05-31,45.4 2239 | 2237,1935-06-30,76.2 2240 | 2238,1935-07-31,56.5 2241 | 2239,1935-08-31,50.2 2242 | 2240,1935-09-30,70.1 2243 | 2241,1935-10-31,88.7 2244 | 2242,1935-11-30,107.0 2245 | 2243,1935-12-31,102.5 2246 | 2244,1936-01-31,104.7 2247 | 2245,1936-02-29,123.9 2248 | 2246,1936-03-31,128.4 2249 | 2247,1936-04-30,124.8 2250 | 2248,1936-05-31,90.9 2251 | 2249,1936-06-30,116.7 2252 | 2250,1936-07-31,87.2 2253 | 2251,1936-08-31,145.0 2254 | 2252,1936-09-30,126.7 2255 | 2253,1936-10-31,148.2 2256 | 2254,1936-11-30,192.3 2257 | 2255,1936-12-31,205.6 2258 | 2256,1937-01-31,220.9 2259 | 2257,1937-02-28,214.1 2260 | 2258,1937-03-31,139.7 2261 | 2259,1937-04-30,182.2 2262 | 2260,1937-05-31,194.4 2263 | 2261,1937-06-30,217.1 2264 | 2262,1937-07-31,241.8 2265 | 2263,1937-08-31,229.5 2266 | 2264,1937-09-30,167.9 2267 | 2265,1937-10-31,208.2 2268 | 2266,1937-11-30,123.9 2269 | 2267,1937-12-31,147.9 2270 | 2268,1938-01-31,164.0 2271 | 2269,1938-02-28,198.6 2272 | 2270,1938-03-31,144.2 2273 | 2271,1938-04-30,168.4 2274 | 2272,1938-05-31,212.3 2275 | 2273,1938-06-30,162.6 2276 | 2274,1938-07-31,275.6 2277 | 2275,1938-08-31,192.8 2278 | 2276,1938-09-30,149.3 2279 | 2277,1938-10-31,165.3 2280 | 2278,1938-11-30,203.6 2281 | 2279,1938-12-31,154.7 2282 | 2280,1939-01-31,133.9 2283 | 2281,1939-02-28,129.0 2284 | 2282,1939-03-31,107.8 2285 | 2283,1939-04-30,181.9 2286 | 2284,1939-05-31,197.3 2287 | 2285,1939-06-30,168.3 2288 | 2286,1939-07-31,162.6 2289 | 2287,1939-08-31,176.3 2290 | 2288,1939-09-30,187.7 2291 | 2289,1939-10-31,146.9 2292 | 2290,1939-11-30,113.7 2293 | 2291,1939-12-31,70.2 2294 | 2292,1940-01-31,84.1 2295 | 2293,1940-02-29,99.1 2296 | 2294,1940-03-31,138.9 2297 | 2295,1940-04-30,101.1 2298 | 2296,1940-05-31,90.6 2299 | 2297,1940-06-30,139.8 2300 | 2298,1940-07-31,112.5 2301 | 2299,1940-08-31,175.9 2302 | 2300,1940-09-30,110.8 2303 | 2301,1940-10-31,91.5 2304 | 2302,1940-11-30,97.4 2305 | 2303,1940-12-31,113.8 2306 | 2304,1941-01-31,76.1 2307 | 2305,1941-02-28,74.3 2308 | 2306,1941-03-31,77.5 2309 | 2307,1941-04-30,54.6 2310 | 2308,1941-05-31,49.0 2311 | 2309,1941-06-30,99.6 2312 | 2310,1941-07-31,111.4 2313 | 2311,1941-08-31,100.1 2314 | 2312,1941-09-30,109.8 2315 | 2313,1941-10-31,77.2 2316 | 2314,1941-11-30,64.0 2317 | 2315,1941-12-31,56.2 2318 | 2316,1942-01-31,59.5 2319 | 2317,1942-02-28,87.9 2320 | 2318,1942-03-31,90.4 2321 | 2319,1942-04-30,101.2 2322 | 2320,1942-05-31,41.8 2323 | 2321,1942-06-30,18.9 2324 | 2322,1942-07-31,29.6 2325 | 2323,1942-08-31,33.7 2326 | 2324,1942-09-30,28.7 2327 | 2325,1942-10-31,32.0 2328 | 2326,1942-11-30,51.3 2329 | 2327,1942-12-31,37.6 2330 | 2328,1943-01-31,20.7 2331 | 2329,1943-02-28,48.1 2332 | 2330,1943-03-31,45.7 2333 | 2331,1943-04-30,43.5 2334 | 2332,1943-05-31,23.6 2335 | 2333,1943-06-30,12.7 2336 | 2334,1943-07-31,22.0 2337 | 2335,1943-08-31,32.3 2338 | 2336,1943-09-30,16.7 2339 | 2337,1943-10-31,13.0 2340 | 2338,1943-11-30,17.0 2341 | 2339,1943-12-31,31.4 2342 | 2340,1944-01-31,6.1 2343 | 2341,1944-02-29,0.8 2344 | 2342,1944-03-31,18.3 2345 | 2343,1944-04-30,0.4 2346 | 2344,1944-05-31,4.1 2347 | 2345,1944-06-30,8.2 2348 | 2346,1944-07-31,8.5 2349 | 2347,1944-08-31,27.9 2350 | 2348,1944-09-30,23.7 2351 | 2349,1944-10-31,28.1 2352 | 2350,1944-11-30,17.9 2353 | 2351,1944-12-31,47.4 2354 | 2352,1945-01-31,30.8 2355 | 2353,1945-02-28,21.2 2356 | 2354,1945-03-31,35.9 2357 | 2355,1945-04-30,53.4 2358 | 2356,1945-05-31,51.0 2359 | 2357,1945-06-30,60.2 2360 | 2358,1945-07-31,71.0 2361 | 2359,1945-08-31,43.1 2362 | 2360,1945-09-30,58.1 2363 | 2361,1945-10-31,114.5 2364 | 2362,1945-11-30,76.6 2365 | 2363,1945-12-31,45.7 2366 | 2364,1946-01-31,79.3 2367 | 2365,1946-02-28,143.8 2368 | 2366,1946-03-31,127.7 2369 | 2367,1946-04-30,126.1 2370 | 2368,1946-05-31,141.6 2371 | 2369,1946-06-30,122.6 2372 | 2370,1946-07-31,193.7 2373 | 2371,1946-08-31,178.7 2374 | 2372,1946-09-30,157.4 2375 | 2373,1946-10-31,170.5 2376 | 2374,1946-11-30,206.3 2377 | 2375,1946-12-31,202.9 2378 | 2376,1947-01-31,163.7 2379 | 2377,1947-02-28,188.9 2380 | 2378,1947-03-31,183.8 2381 | 2379,1947-04-30,212.1 2382 | 2380,1947-05-31,285.0 2383 | 2381,1947-06-30,232.1 2384 | 2382,1947-07-31,223.5 2385 | 2383,1947-08-31,267.4 2386 | 2384,1947-09-30,239.9 2387 | 2385,1947-10-31,231.7 2388 | 2386,1947-11-30,181.3 2389 | 2387,1947-12-31,164.9 2390 | 2388,1948-01-31,153.6 2391 | 2389,1948-02-29,122.0 2392 | 2390,1948-03-31,134.3 2393 | 2391,1948-04-30,268.5 2394 | 2392,1948-05-31,246.4 2395 | 2393,1948-06-30,237.5 2396 | 2394,1948-07-31,201.4 2397 | 2395,1948-08-31,223.7 2398 | 2396,1948-09-30,202.9 2399 | 2397,1948-10-31,192.9 2400 | 2398,1948-11-30,135.6 2401 | 2399,1948-12-31,195.3 2402 | 2400,1949-01-31,168.6 2403 | 2401,1949-02-28,258.0 2404 | 2402,1949-03-31,223.0 2405 | 2403,1949-04-30,208.1 2406 | 2404,1949-05-31,150.4 2407 | 2405,1949-06-30,172.4 2408 | 2406,1949-07-31,178.3 2409 | 2407,1949-08-31,175.3 2410 | 2408,1949-09-30,205.8 2411 | 2409,1949-10-31,186.3 2412 | 2410,1949-11-30,203.2 2413 | 2411,1949-12-31,166.6 2414 | 2412,1950-01-31,143.9 2415 | 2413,1950-02-28,134.3 2416 | 2414,1950-03-31,155.4 2417 | 2415,1950-04-30,160.6 2418 | 2416,1950-05-31,150.5 2419 | 2417,1950-06-30,118.3 2420 | 2418,1950-07-31,128.9 2421 | 2419,1950-08-31,120.6 2422 | 2420,1950-09-30,72.7 2423 | 2421,1950-10-31,87.0 2424 | 2422,1950-11-30,77.7 2425 | 2423,1950-12-31,76.7 2426 | 2424,1951-01-31,85.0 2427 | 2425,1951-02-28,84.8 2428 | 2426,1951-03-31,79.3 2429 | 2427,1951-04-30,131.7 2430 | 2428,1951-05-31,153.7 2431 | 2429,1951-06-30,142.4 2432 | 2430,1951-07-31,87.2 2433 | 2431,1951-08-31,86.5 2434 | 2432,1951-09-30,117.7 2435 | 2433,1951-10-31,73.3 2436 | 2434,1951-11-30,74.2 2437 | 2435,1951-12-31,65.0 2438 | 2436,1952-01-31,57.9 2439 | 2437,1952-02-29,32.4 2440 | 2438,1952-03-31,31.5 2441 | 2439,1952-04-30,41.7 2442 | 2440,1952-05-31,33.6 2443 | 2441,1952-06-30,52.0 2444 | 2442,1952-07-31,56.1 2445 | 2443,1952-08-31,77.8 2446 | 2444,1952-09-30,40.4 2447 | 2445,1952-10-31,34.2 2448 | 2446,1952-11-30,31.8 2449 | 2447,1952-12-31,48.9 2450 | 2448,1953-01-31,37.9 2451 | 2449,1953-02-28,5.9 2452 | 2450,1953-03-31,14.7 2453 | 2451,1953-04-30,39.6 2454 | 2452,1953-05-31,18.3 2455 | 2453,1953-06-30,31.5 2456 | 2454,1953-07-31,12.7 2457 | 2455,1953-08-31,33.6 2458 | 2456,1953-09-30,28.0 2459 | 2457,1953-10-31,12.3 2460 | 2458,1953-11-30,2.5 2461 | 2459,1953-12-31,3.9 2462 | 2460,1954-01-31,0.4 2463 | 2461,1954-02-28,0.8 2464 | 2462,1954-03-31,15.8 2465 | 2463,1954-04-30,2.7 2466 | 2464,1954-05-31,1.2 2467 | 2465,1954-06-30,0.4 2468 | 2466,1954-07-31,7.3 2469 | 2467,1954-08-31,12.6 2470 | 2468,1954-09-30,2.3 2471 | 2469,1954-10-31,10.5 2472 | 2470,1954-11-30,13.4 2473 | 2471,1954-12-31,11.3 2474 | 2472,1955-01-31,33.4 2475 | 2473,1955-02-28,29.9 2476 | 2474,1955-03-31,7.3 2477 | 2475,1955-04-30,16.4 2478 | 2476,1955-05-31,41.3 2479 | 2477,1955-06-30,45.2 2480 | 2478,1955-07-31,38.2 2481 | 2479,1955-08-31,58.0 2482 | 2480,1955-09-30,60.8 2483 | 2481,1955-10-31,83.0 2484 | 2482,1955-11-30,126.3 2485 | 2483,1955-12-31,108.8 2486 | 2484,1956-01-31,104.1 2487 | 2485,1956-02-29,175.6 2488 | 2486,1956-03-31,167.7 2489 | 2487,1956-04-30,156.7 2490 | 2488,1956-05-31,193.4 2491 | 2489,1956-06-30,165.1 2492 | 2490,1956-07-31,182.7 2493 | 2491,1956-08-31,240.2 2494 | 2492,1956-09-30,245.4 2495 | 2493,1956-10-31,219.9 2496 | 2494,1956-11-30,285.0 2497 | 2495,1956-12-31,272.0 2498 | 2496,1957-01-31,233.7 2499 | 2497,1957-02-28,184.5 2500 | 2498,1957-03-31,222.8 2501 | 2499,1957-04-30,248.0 2502 | 2500,1957-05-31,233.0 2503 | 2501,1957-06-30,284.3 2504 | 2502,1957-07-31,265.1 2505 | 2503,1957-08-31,223.7 2506 | 2504,1957-09-30,334.0 2507 | 2505,1957-10-31,359.4 2508 | 2506,1957-11-30,298.6 2509 | 2507,1957-12-31,339.0 2510 | 2508,1958-01-31,286.7 2511 | 2509,1958-02-28,233.6 2512 | 2510,1958-03-31,270.0 2513 | 2511,1958-04-30,277.6 2514 | 2512,1958-05-31,248.2 2515 | 2513,1958-06-30,242.9 2516 | 2514,1958-07-31,271.0 2517 | 2515,1958-08-31,283.5 2518 | 2516,1958-09-30,285.1 2519 | 2517,1958-10-31,256.9 2520 | 2518,1958-11-30,215.6 2521 | 2519,1958-12-31,265.7 2522 | 2520,1959-01-31,307.7 2523 | 2521,1959-02-28,202.6 2524 | 2522,1959-03-31,263.0 2525 | 2523,1959-04-30,231.3 2526 | 2524,1959-05-31,243.6 2527 | 2525,1959-06-30,238.9 2528 | 2526,1959-07-31,211.9 2529 | 2527,1959-08-31,282.6 2530 | 2528,1959-09-30,205.6 2531 | 2529,1959-10-31,157.7 2532 | 2530,1959-11-30,175.6 2533 | 2531,1959-12-31,177.1 2534 | 2532,1960-01-31,207.2 2535 | 2533,1960-02-29,149.9 2536 | 2534,1960-03-31,144.6 2537 | 2535,1960-04-30,172.7 2538 | 2536,1960-05-31,169.3 2539 | 2537,1960-06-30,156.0 2540 | 2538,1960-07-31,172.4 2541 | 2539,1960-08-31,190.0 2542 | 2540,1960-09-30,180.1 2543 | 2541,1960-10-31,117.3 2544 | 2542,1960-11-30,126.9 2545 | 2543,1960-12-31,121.2 2546 | 2544,1961-01-31,82.1 2547 | 2545,1961-02-28,65.4 2548 | 2546,1961-03-31,75.2 2549 | 2547,1961-04-30,86.9 2550 | 2548,1961-05-31,72.3 2551 | 2549,1961-06-30,109.5 2552 | 2550,1961-07-31,99.3 2553 | 2551,1961-08-31,79.2 2554 | 2552,1961-09-30,90.1 2555 | 2553,1961-10-31,53.7 2556 | 2554,1961-11-30,46.5 2557 | 2555,1961-12-31,56.9 2558 | 2556,1962-01-31,55.1 2559 | 2557,1962-02-28,71.7 2560 | 2558,1962-03-31,64.9 2561 | 2559,1962-04-30,65.9 2562 | 2560,1962-05-31,61.9 2563 | 2561,1962-06-30,59.6 2564 | 2562,1962-07-31,31.4 2565 | 2563,1962-08-31,31.5 2566 | 2564,1962-09-30,72.7 2567 | 2565,1962-10-31,56.1 2568 | 2566,1962-11-30,38.8 2569 | 2567,1962-12-31,33.2 2570 | 2568,1963-01-31,28.7 2571 | 2569,1963-02-28,35.2 2572 | 2570,1963-03-31,24.8 2573 | 2571,1963-04-30,41.7 2574 | 2572,1963-05-31,61.1 2575 | 2573,1963-06-30,51.2 2576 | 2574,1963-07-31,28.7 2577 | 2575,1963-08-31,47.5 2578 | 2576,1963-09-30,55.2 2579 | 2577,1963-10-31,50.1 2580 | 2578,1963-11-30,33.7 2581 | 2579,1963-12-31,21.6 2582 | 2580,1964-01-31,22.6 2583 | 2581,1964-02-29,25.3 2584 | 2582,1964-03-31,24.1 2585 | 2583,1964-04-30,12.9 2586 | 2584,1964-05-31,14.3 2587 | 2585,1964-06-30,13.5 2588 | 2586,1964-07-31,4.8 2589 | 2587,1964-08-31,13.8 2590 | 2588,1964-09-30,7.0 2591 | 2589,1964-10-31,9.2 2592 | 2590,1964-11-30,11.1 2593 | 2591,1964-12-31,22.1 2594 | 2592,1965-01-31,25.4 2595 | 2593,1965-02-28,20.8 2596 | 2594,1965-03-31,17.5 2597 | 2595,1965-04-30,10.2 2598 | 2596,1965-05-31,34.5 2599 | 2597,1965-06-30,23.3 2600 | 2598,1965-07-31,17.3 2601 | 2599,1965-08-31,13.3 2602 | 2600,1965-09-30,24.5 2603 | 2601,1965-10-31,29.1 2604 | 2602,1965-11-30,22.8 2605 | 2603,1965-12-31,24.7 2606 | 2604,1966-01-31,40.3 2607 | 2605,1966-02-28,35.3 2608 | 2606,1966-03-31,36.4 2609 | 2607,1966-04-30,69.0 2610 | 2608,1966-05-31,64.2 2611 | 2609,1966-06-30,67.7 2612 | 2610,1966-07-31,80.2 2613 | 2611,1966-08-31,72.6 2614 | 2612,1966-09-30,71.1 2615 | 2613,1966-10-31,81.2 2616 | 2614,1966-11-30,81.0 2617 | 2615,1966-12-31,99.8 2618 | 2616,1967-01-31,157.0 2619 | 2617,1967-02-28,132.6 2620 | 2618,1967-03-31,158.3 2621 | 2619,1967-04-30,98.4 2622 | 2620,1967-05-31,122.5 2623 | 2621,1967-06-30,95.4 2624 | 2622,1967-07-31,129.5 2625 | 2623,1967-08-31,151.8 2626 | 2624,1967-09-30,108.7 2627 | 2625,1967-10-31,125.0 2628 | 2626,1967-11-30,133.6 2629 | 2627,1967-12-31,179.0 2630 | 2628,1968-01-31,172.5 2631 | 2629,1968-02-29,158.5 2632 | 2630,1968-03-31,130.5 2633 | 2631,1968-04-30,115.0 2634 | 2632,1968-05-31,180.0 2635 | 2633,1968-06-30,156.2 2636 | 2634,1968-07-31,136.2 2637 | 2635,1968-08-31,154.8 2638 | 2636,1968-09-30,166.0 2639 | 2637,1968-10-31,152.5 2640 | 2638,1968-11-30,121.7 2641 | 2639,1968-12-31,155.5 2642 | 2640,1969-01-31,147.8 2643 | 2641,1969-02-28,170.5 2644 | 2642,1969-03-31,192.3 2645 | 2643,1969-04-30,151.1 2646 | 2644,1969-05-31,169.9 2647 | 2645,1969-06-30,150.1 2648 | 2646,1969-07-31,137.1 2649 | 2647,1969-08-31,138.8 2650 | 2648,1969-09-30,129.3 2651 | 2649,1969-10-31,135.4 2652 | 2650,1969-11-30,132.4 2653 | 2651,1969-12-31,138.6 2654 | 2652,1970-01-31,157.9 2655 | 2653,1970-02-28,180.8 2656 | 2654,1970-03-31,145.7 2657 | 2655,1970-04-30,155.1 2658 | 2656,1970-05-31,180.5 2659 | 2657,1970-06-30,151.3 2660 | 2658,1970-07-31,159.3 2661 | 2659,1970-08-31,131.7 2662 | 2660,1970-09-30,140.8 2663 | 2661,1970-10-31,122.6 2664 | 2662,1970-11-30,134.8 2665 | 2663,1970-12-31,118.2 2666 | 2664,1971-01-31,129.2 2667 | 2665,1971-02-28,111.8 2668 | 2666,1971-03-31,85.9 2669 | 2667,1971-04-30,101.6 2670 | 2668,1971-05-31,81.5 2671 | 2669,1971-06-30,70.7 2672 | 2670,1971-07-31,114.7 2673 | 2671,1971-08-31,87.0 2674 | 2672,1971-09-30,71.3 2675 | 2673,1971-10-31,73.4 2676 | 2674,1971-11-30,89.5 2677 | 2675,1971-12-31,116.5 2678 | 2676,1972-01-31,87.0 2679 | 2677,1972-02-29,125.3 2680 | 2678,1972-03-31,113.5 2681 | 2679,1972-04-30,89.6 2682 | 2680,1972-05-31,113.9 2683 | 2681,1972-06-30,124.7 2684 | 2682,1972-07-31,108.3 2685 | 2683,1972-08-31,108.9 2686 | 2684,1972-09-30,90.7 2687 | 2685,1972-10-31,86.9 2688 | 2686,1972-11-30,59.2 2689 | 2687,1972-12-31,64.3 2690 | 2688,1973-01-31,61.8 2691 | 2689,1973-02-28,60.9 2692 | 2690,1973-03-31,65.4 2693 | 2691,1973-04-30,81.8 2694 | 2692,1973-05-31,60.3 2695 | 2693,1973-06-30,56.1 2696 | 2694,1973-07-31,33.2 2697 | 2695,1973-08-31,36.6 2698 | 2696,1973-09-30,84.1 2699 | 2697,1973-10-31,43.7 2700 | 2698,1973-11-30,34.3 2701 | 2699,1973-12-31,33.3 2702 | 2700,1974-01-31,39.4 2703 | 2701,1974-02-28,37.3 2704 | 2702,1974-03-31,30.9 2705 | 2703,1974-04-30,57.5 2706 | 2704,1974-05-31,56.3 2707 | 2705,1974-06-30,51.5 2708 | 2706,1974-07-31,79.1 2709 | 2707,1974-08-31,47.9 2710 | 2708,1974-09-30,57.2 2711 | 2709,1974-10-31,67.2 2712 | 2710,1974-11-30,35.9 2713 | 2711,1974-12-31,29.6 2714 | 2712,1975-01-31,27.3 2715 | 2713,1975-02-28,16.7 2716 | 2714,1975-03-31,16.9 2717 | 2715,1975-04-30,7.7 2718 | 2716,1975-05-31,13.1 2719 | 2717,1975-06-30,16.7 2720 | 2718,1975-07-31,40.4 2721 | 2719,1975-08-31,56.7 2722 | 2720,1975-09-30,20.3 2723 | 2721,1975-10-31,13.6 2724 | 2722,1975-11-30,27.9 2725 | 2723,1975-12-31,11.6 2726 | 2724,1976-01-31,11.9 2727 | 2725,1976-02-29,6.4 2728 | 2726,1976-03-31,31.5 2729 | 2727,1976-04-30,27.3 2730 | 2728,1976-05-31,18.2 2731 | 2729,1976-06-30,17.9 2732 | 2730,1976-07-31,2.9 2733 | 2731,1976-08-31,24.1 2734 | 2732,1976-09-30,20.0 2735 | 2733,1976-10-31,29.7 2736 | 2734,1976-11-30,7.9 2737 | 2735,1976-12-31,22.3 2738 | 2736,1977-01-31,23.8 2739 | 2737,1977-02-28,33.3 2740 | 2738,1977-03-31,13.0 2741 | 2739,1977-04-30,19.0 2742 | 2740,1977-05-31,27.0 2743 | 2741,1977-06-30,54.9 2744 | 2742,1977-07-31,30.6 2745 | 2743,1977-08-31,43.0 2746 | 2744,1977-09-30,62.4 2747 | 2745,1977-10-31,62.1 2748 | 2746,1977-11-30,41.6 2749 | 2747,1977-12-31,61.4 2750 | 2748,1978-01-31,73.7 2751 | 2749,1978-02-28,132.6 2752 | 2750,1978-03-31,108.4 2753 | 2751,1978-04-30,141.2 2754 | 2752,1978-05-31,117.1 2755 | 2753,1978-06-30,134.6 2756 | 2754,1978-07-31,99.7 2757 | 2755,1978-08-31,82.4 2758 | 2756,1978-09-30,195.7 2759 | 2757,1978-10-31,177.1 2760 | 2758,1978-11-30,138.5 2761 | 2759,1978-12-31,173.9 2762 | 2760,1979-01-31,235.9 2763 | 2761,1979-02-28,194.7 2764 | 2762,1979-03-31,195.3 2765 | 2763,1979-04-30,143.7 2766 | 2764,1979-05-31,190.3 2767 | 2765,1979-06-30,211.7 2768 | 2766,1979-07-31,225.7 2769 | 2767,1979-08-31,201.4 2770 | 2768,1979-09-30,266.9 2771 | 2769,1979-10-31,263.6 2772 | 2770,1979-11-30,259.5 2773 | 2771,1979-12-31,249.6 2774 | 2772,1980-01-31,226.1 2775 | 2773,1980-02-29,219.4 2776 | 2774,1980-03-31,178.7 2777 | 2775,1980-04-30,232.2 2778 | 2776,1980-05-31,254.7 2779 | 2777,1980-06-30,222.7 2780 | 2778,1980-07-31,192.9 2781 | 2779,1980-08-31,191.7 2782 | 2780,1980-09-30,219.6 2783 | 2781,1980-10-31,233.3 2784 | 2782,1980-11-30,209.5 2785 | 2783,1980-12-31,246.9 2786 | 2784,1981-01-31,156.6 2787 | 2785,1981-02-28,189.9 2788 | 2786,1981-03-31,196.6 2789 | 2787,1981-04-30,225.3 2790 | 2788,1981-05-31,194.7 2791 | 2789,1981-06-30,131.6 2792 | 2790,1981-07-31,205.3 2793 | 2791,1981-08-31,242.5 2794 | 2792,1981-09-30,245.3 2795 | 2793,1981-10-31,216.2 2796 | 2794,1981-11-30,186.0 2797 | 2795,1981-12-31,195.4 2798 | 2796,1982-01-31,149.8 2799 | 2797,1982-02-28,230.9 2800 | 2798,1982-03-31,221.1 2801 | 2799,1982-04-30,170.3 2802 | 2800,1982-05-31,119.3 2803 | 2801,1982-06-30,163.7 2804 | 2802,1982-07-31,139.4 2805 | 2803,1982-08-31,161.9 2806 | 2804,1982-09-30,167.4 2807 | 2805,1982-10-31,134.3 2808 | 2806,1982-11-30,127.5 2809 | 2807,1982-12-31,169.0 2810 | 2808,1983-01-31,115.5 2811 | 2809,1983-02-28,73.1 2812 | 2810,1983-03-31,88.7 2813 | 2811,1983-04-30,109.6 2814 | 2812,1983-05-31,132.5 2815 | 2813,1983-06-30,131.5 2816 | 2814,1983-07-31,108.9 2817 | 2815,1983-08-31,96.0 2818 | 2816,1983-09-30,69.9 2819 | 2817,1983-10-31,72.5 2820 | 2818,1983-11-30,45.7 2821 | 2819,1983-12-31,45.6 2822 | 2820,1984-01-31,74.8 2823 | 2821,1984-02-29,110.2 2824 | 2822,1984-03-31,116.7 2825 | 2823,1984-04-30,90.4 2826 | 2824,1984-05-31,96.9 2827 | 2825,1984-06-30,65.1 2828 | 2826,1984-07-31,55.7 2829 | 2827,1984-08-31,35.0 2830 | 2828,1984-09-30,22.6 2831 | 2829,1984-10-31,12.6 2832 | 2830,1984-11-30,26.5 2833 | 2831,1984-12-31,21.4 2834 | 2832,1985-01-31,17.8 2835 | 2833,1985-02-28,20.7 2836 | 2834,1985-03-31,16.9 2837 | 2835,1985-04-30,20.4 2838 | 2836,1985-05-31,32.4 2839 | 2837,1985-06-30,28.3 2840 | 2838,1985-07-31,39.9 2841 | 2839,1985-08-31,10.1 2842 | 2840,1985-09-30,4.3 2843 | 2841,1985-10-31,22.0 2844 | 2842,1985-11-30,17.9 2845 | 2843,1985-12-31,15.8 2846 | 2844,1986-01-31,2.8 2847 | 2845,1986-02-28,27.9 2848 | 2846,1986-03-31,13.8 2849 | 2847,1986-04-30,22.4 2850 | 2848,1986-05-31,16.1 2851 | 2849,1986-06-30,0.6 2852 | 2850,1986-07-31,18.1 2853 | 2851,1986-08-31,9.9 2854 | 2852,1986-09-30,5.1 2855 | 2853,1986-10-31,40.1 2856 | 2854,1986-11-30,15.4 2857 | 2855,1986-12-31,5.8 2858 | 2856,1987-01-31,9.8 2859 | 2857,1987-02-28,3.4 2860 | 2858,1987-03-31,17.4 2861 | 2859,1987-04-30,46.0 2862 | 2860,1987-05-31,39.1 2863 | 2861,1987-06-30,18.8 2864 | 2862,1987-07-31,38.2 2865 | 2863,1987-08-31,47.9 2866 | 2864,1987-09-30,42.2 2867 | 2865,1987-10-31,63.4 2868 | 2866,1987-11-30,48.8 2869 | 2867,1987-12-31,29.1 2870 | 2868,1988-01-31,70.5 2871 | 2869,1988-02-29,45.4 2872 | 2870,1988-03-31,91.2 2873 | 2871,1988-04-30,108.8 2874 | 2872,1988-05-31,74.2 2875 | 2873,1988-06-30,124.3 2876 | 2874,1988-07-31,131.4 2877 | 2875,1988-08-31,139.4 2878 | 2876,1988-09-30,142.7 2879 | 2877,1988-10-31,156.5 2880 | 2878,1988-11-30,156.8 2881 | 2879,1988-12-31,231.2 2882 | 2880,1989-01-31,210.1 2883 | 2881,1989-02-28,208.7 2884 | 2882,1989-03-31,170.4 2885 | 2883,1989-04-30,166.3 2886 | 2884,1989-05-31,195.4 2887 | 2885,1989-06-30,284.5 2888 | 2886,1989-07-31,180.5 2889 | 2887,1989-08-31,232.0 2890 | 2888,1989-09-30,225.1 2891 | 2889,1989-10-31,212.2 2892 | 2890,1989-11-30,238.2 2893 | 2891,1989-12-31,211.4 2894 | 2892,1990-01-31,227.4 2895 | 2893,1990-02-28,171.8 2896 | 2894,1990-03-31,191.7 2897 | 2895,1990-04-30,189.7 2898 | 2896,1990-05-31,175.2 2899 | 2897,1990-06-30,153.3 2900 | 2898,1990-07-31,191.1 2901 | 2899,1990-08-31,252.1 2902 | 2900,1990-09-30,169.1 2903 | 2901,1990-10-31,199.4 2904 | 2902,1990-11-30,178.8 2905 | 2903,1990-12-31,197.1 2906 | 2904,1991-01-31,195.3 2907 | 2905,1991-02-28,240.3 2908 | 2906,1991-03-31,197.0 2909 | 2907,1991-04-30,197.6 2910 | 2908,1991-05-31,166.9 2911 | 2909,1991-06-30,224.7 2912 | 2910,1991-07-31,240.2 2913 | 2911,1991-08-31,240.8 2914 | 2912,1991-09-30,168.9 2915 | 2913,1991-10-31,197.1 2916 | 2914,1991-11-30,159.5 2917 | 2915,1991-12-31,212.6 2918 | 2916,1992-01-31,198.3 2919 | 2917,1992-02-29,230.7 2920 | 2918,1992-03-31,151.0 2921 | 2919,1992-04-30,142.2 2922 | 2920,1992-05-31,94.3 2923 | 2921,1992-06-30,98.5 2924 | 2922,1992-07-31,114.2 2925 | 2923,1992-08-31,91.9 2926 | 2924,1992-09-30,94.0 2927 | 2925,1992-10-31,133.4 2928 | 2926,1992-11-30,129.6 2929 | 2927,1992-12-31,122.0 2930 | 2928,1993-01-31,81.4 2931 | 2929,1993-02-28,127.8 2932 | 2930,1993-03-31,102.4 2933 | 2931,1993-04-30,94.4 2934 | 2932,1993-05-31,78.8 2935 | 2933,1993-06-30,69.6 2936 | 2934,1993-07-31,80.4 2937 | 2935,1993-08-31,62.5 2938 | 2936,1993-09-30,31.2 2939 | 2937,1993-10-31,71.1 2940 | 2938,1993-11-30,48.2 2941 | 2939,1993-12-31,68.4 2942 | 2940,1994-01-31,84.9 2943 | 2941,1994-02-28,54.9 2944 | 2942,1994-03-31,47.5 2945 | 2943,1994-04-30,27.4 2946 | 2944,1994-05-31,29.8 2947 | 2945,1994-06-30,39.7 2948 | 2946,1994-07-31,50.6 2949 | 2947,1994-08-31,34.3 2950 | 2948,1994-09-30,40.5 2951 | 2949,1994-10-31,67.1 2952 | 2950,1994-11-30,29.5 2953 | 2951,1994-12-31,32.2 2954 | 2952,1995-01-31,32.6 2955 | 2953,1995-02-28,45.8 2956 | 2954,1995-03-31,46.3 2957 | 2955,1995-04-30,21.6 2958 | 2956,1995-05-31,19.4 2959 | 2957,1995-06-30,22.5 2960 | 2958,1995-07-31,20.4 2961 | 2959,1995-08-31,18.2 2962 | 2960,1995-09-30,15.7 2963 | 2961,1995-10-31,30.6 2964 | 2962,1995-11-30,14.0 2965 | 2963,1995-12-31,14.9 2966 | 2964,1996-01-31,13.3 2967 | 2965,1996-02-29,7.7 2968 | 2966,1996-03-31,12.6 2969 | 2967,1996-04-30,6.8 2970 | 2968,1996-05-31,7.6 2971 | 2969,1996-06-30,16.5 2972 | 2970,1996-07-31,11.8 2973 | 2971,1996-08-31,19.7 2974 | 2972,1996-09-30,3.0 2975 | 2973,1996-10-31,0.7 2976 | 2974,1996-11-30,24.9 2977 | 2975,1996-12-31,14.0 2978 | 2976,1997-01-31,7.4 2979 | 2977,1997-02-28,11.0 2980 | 2978,1997-03-31,12.1 2981 | 2979,1997-04-30,23.0 2982 | 2980,1997-05-31,25.4 2983 | 2981,1997-06-30,20.8 2984 | 2982,1997-07-31,12.9 2985 | 2983,1997-08-31,35.7 2986 | 2984,1997-09-30,59.7 2987 | 2985,1997-10-31,32.8 2988 | 2986,1997-11-30,50.4 2989 | 2987,1997-12-31,55.5 2990 | 2988,1998-01-31,44.5 2991 | 2989,1998-02-28,50.2 2992 | 2990,1998-03-31,82.0 2993 | 2991,1998-04-30,70.6 2994 | 2992,1998-05-31,74.0 2995 | 2993,1998-06-30,90.5 2996 | 2994,1998-07-31,96.7 2997 | 2995,1998-08-31,121.1 2998 | 2996,1998-09-30,132.0 2999 | 2997,1998-10-31,78.5 3000 | 2998,1998-11-30,97.3 3001 | 2999,1998-12-31,119.2 3002 | 3000,1999-01-31,86.0 3003 | 3001,1999-02-28,98.0 3004 | 3002,1999-03-31,103.5 3005 | 3003,1999-04-30,93.6 3006 | 3004,1999-05-31,149.6 3007 | 3005,1999-06-30,207.2 3008 | 3006,1999-07-31,173.5 3009 | 3007,1999-08-31,142.3 3010 | 3008,1999-09-30,106.3 3011 | 3009,1999-10-31,168.7 3012 | 3010,1999-11-30,188.3 3013 | 3011,1999-12-31,116.8 3014 | 3012,2000-01-31,133.1 3015 | 3013,2000-02-29,165.7 3016 | 3014,2000-03-31,217.7 3017 | 3015,2000-04-30,191.5 3018 | 3016,2000-05-31,165.9 3019 | 3017,2000-06-30,188.0 3020 | 3018,2000-07-31,244.3 3021 | 3019,2000-08-31,180.5 3022 | 3020,2000-09-30,156.0 3023 | 3021,2000-10-31,141.6 3024 | 3022,2000-11-30,158.1 3025 | 3023,2000-12-31,143.3 3026 | 3024,2001-01-31,142.6 3027 | 3025,2001-02-28,121.5 3028 | 3026,2001-03-31,165.8 3029 | 3027,2001-04-30,161.7 3030 | 3028,2001-05-31,142.1 3031 | 3029,2001-06-30,202.9 3032 | 3030,2001-07-31,123.0 3033 | 3031,2001-08-31,161.5 3034 | 3032,2001-09-30,238.2 3035 | 3033,2001-10-31,194.1 3036 | 3034,2001-11-30,176.6 3037 | 3035,2001-12-31,213.4 3038 | 3036,2002-01-31,184.6 3039 | 3037,2002-02-28,170.2 3040 | 3038,2002-03-31,147.1 3041 | 3039,2002-04-30,186.9 3042 | 3040,2002-05-31,187.5 3043 | 3041,2002-06-30,128.8 3044 | 3042,2002-07-31,161.0 3045 | 3043,2002-08-31,175.6 3046 | 3044,2002-09-30,187.9 3047 | 3045,2002-10-31,151.2 3048 | 3046,2002-11-30,147.2 3049 | 3047,2002-12-31,135.3 3050 | 3048,2003-01-31,133.5 3051 | 3049,2003-02-28,75.7 3052 | 3050,2003-03-31,100.7 3053 | 3051,2003-04-30,97.9 3054 | 3052,2003-05-31,86.8 3055 | 3053,2003-06-30,118.7 3056 | 3054,2003-07-31,128.3 3057 | 3055,2003-08-31,115.4 3058 | 3056,2003-09-30,78.5 3059 | 3057,2003-10-31,97.8 3060 | 3058,2003-11-30,82.9 3061 | 3059,2003-12-31,72.2 3062 | 3060,2004-01-31,60.6 3063 | 3061,2004-02-29,74.6 3064 | 3062,2004-03-31,74.8 3065 | 3063,2004-04-30,59.2 3066 | 3064,2004-05-31,72.8 3067 | 3065,2004-06-30,66.5 3068 | 3066,2004-07-31,83.8 3069 | 3067,2004-08-31,69.7 3070 | 3068,2004-09-30,48.8 3071 | 3069,2004-10-31,74.2 3072 | 3070,2004-11-30,70.1 3073 | 3071,2004-12-31,28.9 3074 | 3072,2005-01-31,48.1 3075 | 3073,2005-02-28,43.5 3076 | 3074,2005-03-31,39.6 3077 | 3075,2005-04-30,38.7 3078 | 3076,2005-05-31,61.9 3079 | 3077,2005-06-30,56.8 3080 | 3078,2005-07-31,62.4 3081 | 3079,2005-08-31,60.5 3082 | 3080,2005-09-30,37.2 3083 | 3081,2005-10-31,13.2 3084 | 3082,2005-11-30,27.5 3085 | 3083,2005-12-31,59.3 3086 | 3084,2006-01-31,20.9 3087 | 3085,2006-02-28,5.7 3088 | 3086,2006-03-31,17.3 3089 | 3087,2006-04-30,50.3 3090 | 3088,2006-05-31,37.2 3091 | 3089,2006-06-30,24.5 3092 | 3090,2006-07-31,22.2 3093 | 3091,2006-08-31,20.8 3094 | 3092,2006-09-30,23.7 3095 | 3093,2006-10-31,14.9 3096 | 3094,2006-11-30,35.7 3097 | 3095,2006-12-31,22.3 3098 | 3096,2007-01-31,29.3 3099 | 3097,2007-02-28,18.4 3100 | 3098,2007-03-31,7.2 3101 | 3099,2007-04-30,5.4 3102 | 3100,2007-05-31,19.5 3103 | 3101,2007-06-30,21.3 3104 | 3102,2007-07-31,15.1 3105 | 3103,2007-08-31,9.8 3106 | 3104,2007-09-30,4.0 3107 | 3105,2007-10-31,1.5 3108 | 3106,2007-11-30,2.8 3109 | 3107,2007-12-31,17.3 3110 | 3108,2008-01-31,4.1 3111 | 3109,2008-02-29,2.9 3112 | 3110,2008-03-31,15.5 3113 | 3111,2008-04-30,3.6 3114 | 3112,2008-05-31,4.6 3115 | 3113,2008-06-30,5.2 3116 | 3114,2008-07-31,0.6 3117 | 3115,2008-08-31,0.3 3118 | 3116,2008-09-30,1.2 3119 | 3117,2008-10-31,4.2 3120 | 3118,2008-11-30,6.6 3121 | 3119,2008-12-31,1.0 3122 | 3120,2009-01-31,1.3 3123 | 3121,2009-02-28,1.2 3124 | 3122,2009-03-31,0.6 3125 | 3123,2009-04-30,1.2 3126 | 3124,2009-05-31,2.9 3127 | 3125,2009-06-30,6.3 3128 | 3126,2009-07-31,5.5 3129 | 3127,2009-08-31,0.0 3130 | 3128,2009-09-30,7.1 3131 | 3129,2009-10-31,7.7 3132 | 3130,2009-11-30,6.9 3133 | 3131,2009-12-31,16.3 3134 | 3132,2010-01-31,19.5 3135 | 3133,2010-02-28,28.5 3136 | 3134,2010-03-31,24.0 3137 | 3135,2010-04-30,10.4 3138 | 3136,2010-05-31,13.9 3139 | 3137,2010-06-30,18.8 3140 | 3138,2010-07-31,25.2 3141 | 3139,2010-08-31,29.6 3142 | 3140,2010-09-30,36.4 3143 | 3141,2010-10-31,33.6 3144 | 3142,2010-11-30,34.4 3145 | 3143,2010-12-31,24.5 3146 | 3144,2011-01-31,27.3 3147 | 3145,2011-02-28,48.3 3148 | 3146,2011-03-31,78.6 3149 | 3147,2011-04-30,76.1 3150 | 3148,2011-05-31,58.2 3151 | 3149,2011-06-30,56.1 3152 | 3150,2011-07-31,64.5 3153 | 3151,2011-08-31,65.8 3154 | 3152,2011-09-30,120.1 3155 | 3153,2011-10-31,125.7 3156 | 3154,2011-11-30,139.1 3157 | 3155,2011-12-31,109.3 3158 | 3156,2012-01-31,94.4 3159 | 3157,2012-02-29,47.8 3160 | 3158,2012-03-31,86.6 3161 | 3159,2012-04-30,85.9 3162 | 3160,2012-05-31,96.5 3163 | 3161,2012-06-30,92.0 3164 | 3162,2012-07-31,100.1 3165 | 3163,2012-08-31,94.8 3166 | 3164,2012-09-30,93.7 3167 | 3165,2012-10-31,76.5 3168 | 3166,2012-11-30,87.6 3169 | 3167,2012-12-31,56.8 3170 | 3168,2013-01-31,96.1 3171 | 3169,2013-02-28,60.9 3172 | 3170,2013-03-31,78.3 3173 | 3171,2013-04-30,107.3 3174 | 3172,2013-05-31,120.2 3175 | 3173,2013-06-30,76.7 3176 | 3174,2013-07-31,86.2 3177 | 3175,2013-08-31,91.8 3178 | 3176,2013-09-30,54.5 3179 | 3177,2013-10-31,114.4 3180 | 3178,2013-11-30,113.9 3181 | 3179,2013-12-31,124.2 3182 | 3180,2014-01-31,117.0 3183 | 3181,2014-02-28,146.1 3184 | 3182,2014-03-31,128.7 3185 | 3183,2014-04-30,112.5 3186 | 3184,2014-05-31,112.5 3187 | 3185,2014-06-30,102.9 3188 | 3186,2014-07-31,100.2 3189 | 3187,2014-08-31,106.9 3190 | 3188,2014-09-30,130.0 3191 | 3189,2014-10-31,90.0 3192 | 3190,2014-11-30,103.6 3193 | 3191,2014-12-31,112.9 3194 | 3192,2015-01-31,93.0 3195 | 3193,2015-02-28,66.7 3196 | 3194,2015-03-31,54.5 3197 | 3195,2015-04-30,75.3 3198 | 3196,2015-05-31,88.8 3199 | 3197,2015-06-30,66.5 3200 | 3198,2015-07-31,65.8 3201 | 3199,2015-08-31,64.4 3202 | 3200,2015-09-30,78.6 3203 | 3201,2015-10-31,63.6 3204 | 3202,2015-11-30,62.2 3205 | 3203,2015-12-31,58.0 3206 | 3204,2016-01-31,57.0 3207 | 3205,2016-02-29,56.4 3208 | 3206,2016-03-31,54.1 3209 | 3207,2016-04-30,37.9 3210 | 3208,2016-05-31,51.5 3211 | 3209,2016-06-30,20.5 3212 | 3210,2016-07-31,32.4 3213 | 3211,2016-08-31,50.2 3214 | 3212,2016-09-30,44.6 3215 | 3213,2016-10-31,33.4 3216 | 3214,2016-11-30,21.4 3217 | 3215,2016-12-31,18.5 3218 | 3216,2017-01-31,26.1 3219 | 3217,2017-02-28,26.4 3220 | 3218,2017-03-31,17.7 3221 | 3219,2017-04-30,32.3 3222 | 3220,2017-05-31,18.9 3223 | 3221,2017-06-30,19.2 3224 | 3222,2017-07-31,17.8 3225 | 3223,2017-08-31,32.6 3226 | 3224,2017-09-30,43.7 3227 | 3225,2017-10-31,13.2 3228 | 3226,2017-11-30,5.7 3229 | 3227,2017-12-31,8.2 3230 | 3228,2018-01-31,6.8 3231 | 3229,2018-02-28,10.7 3232 | 3230,2018-03-31,2.5 3233 | 3231,2018-04-30,8.9 3234 | 3232,2018-05-31,13.2 3235 | 3233,2018-06-30,15.9 3236 | 3234,2018-07-31,1.6 3237 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Aditya Bhattacharya 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TimeSeries-Using-TensorFlow 2 | 3 | ![Time Series Forecasting with TensorFlow](https://i0.wp.com/aditya-bhattacharya.net/wp-content/uploads/2020/12/image.png) 4 | 5 | Visit my website for a detailed explanation and code walkthrough. [Time Series Forecasting using Deep Learning with TensorFlow](https://aditya-bhattacharya.net/2020/07/11/time-series-tips-and-tricks/2/) 6 | 7 | Read the medium post for [Time Series Forecasting using TensorFlow and Deep Hybrid Learning](https://adib0073.medium.com/time-series-forecasting-using-tensorflow-and-deep-hybrid-learning-5088ad76dd55) 8 | 9 | -------------------------------------------------------------------------------- /SampleCode/Readme.md: -------------------------------------------------------------------------------- 1 | Referred notebooks from https://www.coursera.org/learn/tensorflow-sequences-time-series-and-prediction/ 2 | -------------------------------------------------------------------------------- /SampleCode/S+P_Week_1_Lesson_3_Notebook.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "accelerator": "GPU", 6 | "colab": { 7 | "name": "S+P Week 1 - Lesson 3 - Notebook.ipynb", 8 | "provenance": [], 9 | "collapsed_sections": [], 10 | "toc_visible": true 11 | }, 12 | "kernelspec": { 13 | "display_name": "Python 3", 14 | "name": "python3" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "code", 20 | "metadata": { 21 | "id": "zX4Kg8DUTKWO" 22 | }, 23 | "source": [ 24 | "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", 25 | "# you may not use this file except in compliance with the License.\n", 26 | "# You may obtain a copy of the License at\n", 27 | "#\n", 28 | "# https://www.apache.org/licenses/LICENSE-2.0\n", 29 | "#\n", 30 | "# Unless required by applicable law or agreed to in writing, software\n", 31 | "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", 32 | "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 33 | "# See the License for the specific language governing permissions and\n", 34 | "# limitations under the License." 35 | ], 36 | "execution_count": null, 37 | "outputs": [] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": { 42 | "id": "view-in-github" 43 | }, 44 | "source": [ 45 | "\"Open" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "metadata": { 51 | "id": "y7QztBIVR1tb" 52 | }, 53 | "source": [ 54 | "try:\n", 55 | " # %tensorflow_version only exists in Colab.\n", 56 | " %tensorflow_version 2.x\n", 57 | "except Exception:\n", 58 | " pass\n" 59 | ], 60 | "execution_count": null, 61 | "outputs": [] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "metadata": { 66 | "id": "t9HrvPfrSlzS" 67 | }, 68 | "source": [ 69 | "import tensorflow as tf\n", 70 | "print(tf.__version__)\n" 71 | ], 72 | "execution_count": null, 73 | "outputs": [] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": { 78 | "id": "I9x4GjlEVTQN" 79 | }, 80 | "source": [ 81 | "The next code block will set up the time series with seasonality, trend and a bit of noise. " 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "metadata": { 87 | "id": "gqWabzlJ63nL" 88 | }, 89 | "source": [ 90 | "import numpy as np\n", 91 | "import matplotlib.pyplot as plt\n", 92 | "import tensorflow as tf\n", 93 | "from tensorflow import keras\n", 94 | "\n", 95 | "def plot_series(time, series, format=\"-\", start=0, end=None):\n", 96 | " plt.plot(time[start:end], series[start:end], format)\n", 97 | " plt.xlabel(\"Time\")\n", 98 | " plt.ylabel(\"Value\")\n", 99 | " plt.grid(True)\n", 100 | "\n", 101 | "def trend(time, slope=0):\n", 102 | " return slope * time\n", 103 | "\n", 104 | "def seasonal_pattern(season_time):\n", 105 | " \"\"\"Just an arbitrary pattern, you can change it if you wish\"\"\"\n", 106 | " return np.where(season_time < 0.4,\n", 107 | " np.cos(season_time * 2 * np.pi),\n", 108 | " 1 / np.exp(3 * season_time))\n", 109 | "\n", 110 | "def seasonality(time, period, amplitude=1, phase=0):\n", 111 | " \"\"\"Repeats the same pattern at each period\"\"\"\n", 112 | " season_time = ((time + phase) % period) / period\n", 113 | " return amplitude * seasonal_pattern(season_time)\n", 114 | "\n", 115 | "def noise(time, noise_level=1, seed=None):\n", 116 | " rnd = np.random.RandomState(seed)\n", 117 | " return rnd.randn(len(time)) * noise_level\n", 118 | "\n", 119 | "time = np.arange(4 * 365 + 1, dtype=\"float32\")\n", 120 | "baseline = 10\n", 121 | "series = trend(time, 0.1) \n", 122 | "baseline = 10\n", 123 | "amplitude = 40\n", 124 | "slope = 0.05\n", 125 | "noise_level = 5\n", 126 | "\n", 127 | "# Create the series\n", 128 | "series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)\n", 129 | "# Update with noise\n", 130 | "series += noise(time, noise_level, seed=42)\n", 131 | "\n", 132 | "plt.figure(figsize=(10, 6))\n", 133 | "plot_series(time, series)\n", 134 | "plt.show()" 135 | ], 136 | "execution_count": null, 137 | "outputs": [] 138 | }, 139 | { 140 | "cell_type": "markdown", 141 | "metadata": { 142 | "id": "UfdyqJJ1VZVu" 143 | }, 144 | "source": [ 145 | "Now that we have the time series, let's split it so we can start forecasting" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "metadata": { 151 | "id": "_w0eKap5uFNP" 152 | }, 153 | "source": [ 154 | "split_time = 1000\n", 155 | "time_train = time[:split_time]\n", 156 | "x_train = series[:split_time]\n", 157 | "time_valid = time[split_time:]\n", 158 | "x_valid = series[split_time:]\n", 159 | "plt.figure(figsize=(10, 6))\n", 160 | "plot_series(time_train, x_train)\n", 161 | "plt.show()\n", 162 | "\n", 163 | "plt.figure(figsize=(10, 6))\n", 164 | "plot_series(time_valid, x_valid)\n", 165 | "plt.show()" 166 | ], 167 | "execution_count": null, 168 | "outputs": [] 169 | }, 170 | { 171 | "cell_type": "markdown", 172 | "metadata": { 173 | "id": "bjD8ncEZbjEW" 174 | }, 175 | "source": [ 176 | "# Naive Forecast" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "metadata": { 182 | "id": "Pj_-uCeYxcAb" 183 | }, 184 | "source": [ 185 | "naive_forecast = series[split_time - 1:-1]" 186 | ], 187 | "execution_count": null, 188 | "outputs": [] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "metadata": { 193 | "id": "JtxwHj9Ig0jT" 194 | }, 195 | "source": [ 196 | "plt.figure(figsize=(10, 6))\n", 197 | "plot_series(time_valid, x_valid)\n", 198 | "plot_series(time_valid, naive_forecast)" 199 | ], 200 | "execution_count": null, 201 | "outputs": [] 202 | }, 203 | { 204 | "cell_type": "markdown", 205 | "metadata": { 206 | "id": "fw1SP5WeuixH" 207 | }, 208 | "source": [ 209 | "Let's zoom in on the start of the validation period:" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "metadata": { 215 | "id": "D0MKg7FNug9V" 216 | }, 217 | "source": [ 218 | "plt.figure(figsize=(10, 6))\n", 219 | "plot_series(time_valid, x_valid, start=0, end=150)\n", 220 | "plot_series(time_valid, naive_forecast, start=1, end=151)" 221 | ], 222 | "execution_count": null, 223 | "outputs": [] 224 | }, 225 | { 226 | "cell_type": "markdown", 227 | "metadata": { 228 | "id": "35gIlQLfu0TT" 229 | }, 230 | "source": [ 231 | "You can see that the naive forecast lags 1 step behind the time series." 232 | ] 233 | }, 234 | { 235 | "cell_type": "markdown", 236 | "metadata": { 237 | "id": "Uh_7244Gsxfx" 238 | }, 239 | "source": [ 240 | "Now let's compute the mean squared error and the mean absolute error between the forecasts and the predictions in the validation period:" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "metadata": { 246 | "id": "byNnC7IbsnMZ" 247 | }, 248 | "source": [ 249 | "print(keras.metrics.mean_squared_error(x_valid, naive_forecast).numpy())\n", 250 | "print(keras.metrics.mean_absolute_error(x_valid, naive_forecast).numpy())" 251 | ], 252 | "execution_count": null, 253 | "outputs": [] 254 | }, 255 | { 256 | "cell_type": "markdown", 257 | "metadata": { 258 | "id": "WGPBC9QttI1u" 259 | }, 260 | "source": [ 261 | "That's our baseline, now let's try a moving average:" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "metadata": { 267 | "id": "YGz5UsUdf2tV" 268 | }, 269 | "source": [ 270 | "def moving_average_forecast(series, window_size):\n", 271 | " \"\"\"Forecasts the mean of the last few values.\n", 272 | " If window_size=1, then this is equivalent to naive forecast\"\"\"\n", 273 | " forecast = []\n", 274 | " for time in range(len(series) - window_size):\n", 275 | " forecast.append(series[time:time + window_size].mean())\n", 276 | " return np.array(forecast)" 277 | ], 278 | "execution_count": null, 279 | "outputs": [] 280 | }, 281 | { 282 | "cell_type": "code", 283 | "metadata": { 284 | "id": "HHFhGXQji7_r" 285 | }, 286 | "source": [ 287 | "moving_avg = moving_average_forecast(series, 30)[split_time - 30:]\n", 288 | "\n", 289 | "plt.figure(figsize=(10, 6))\n", 290 | "plot_series(time_valid, x_valid)\n", 291 | "plot_series(time_valid, moving_avg)" 292 | ], 293 | "execution_count": null, 294 | "outputs": [] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "metadata": { 299 | "id": "wG7pTAd7z0e8" 300 | }, 301 | "source": [ 302 | "print(keras.metrics.mean_squared_error(x_valid, moving_avg).numpy())\n", 303 | "print(keras.metrics.mean_absolute_error(x_valid, moving_avg).numpy())" 304 | ], 305 | "execution_count": null, 306 | "outputs": [] 307 | }, 308 | { 309 | "cell_type": "markdown", 310 | "metadata": { 311 | "id": "JMYPnJqwz8nS" 312 | }, 313 | "source": [ 314 | "That's worse than naive forecast! The moving average does not anticipate trend or seasonality, so let's try to remove them by using differencing. Since the seasonality period is 365 days, we will subtract the value at time *t* – 365 from the value at time *t*." 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "metadata": { 320 | "id": "5pqySF7-rJR4" 321 | }, 322 | "source": [ 323 | "diff_series = (series[365:] - series[:-365])\n", 324 | "diff_time = time[365:]\n", 325 | "\n", 326 | "plt.figure(figsize=(10, 6))\n", 327 | "plot_series(diff_time, diff_series)\n", 328 | "plt.show()" 329 | ], 330 | "execution_count": null, 331 | "outputs": [] 332 | }, 333 | { 334 | "cell_type": "markdown", 335 | "metadata": { 336 | "id": "xPlPlS7DskWg" 337 | }, 338 | "source": [ 339 | "Great, the trend and seasonality seem to be gone, so now we can use the moving average:" 340 | ] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "metadata": { 345 | "id": "QmZpz7arsjbb" 346 | }, 347 | "source": [ 348 | "diff_moving_avg = moving_average_forecast(diff_series, 50)[split_time - 365 - 50:]\n", 349 | "\n", 350 | "plt.figure(figsize=(10, 6))\n", 351 | "plot_series(time_valid, diff_series[split_time - 365:])\n", 352 | "plot_series(time_valid, diff_moving_avg)\n", 353 | "plt.show()" 354 | ], 355 | "execution_count": null, 356 | "outputs": [] 357 | }, 358 | { 359 | "cell_type": "markdown", 360 | "metadata": { 361 | "id": "Gno9S2lyecnc" 362 | }, 363 | "source": [ 364 | "Now let's bring back the trend and seasonality by adding the past values from t – 365:" 365 | ] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "metadata": { 370 | "id": "Dv6RWFq7TFGB" 371 | }, 372 | "source": [ 373 | "diff_moving_avg_plus_past = series[split_time - 365:-365] + diff_moving_avg\n", 374 | "\n", 375 | "plt.figure(figsize=(10, 6))\n", 376 | "plot_series(time_valid, x_valid)\n", 377 | "plot_series(time_valid, diff_moving_avg_plus_past)\n", 378 | "plt.show()" 379 | ], 380 | "execution_count": null, 381 | "outputs": [] 382 | }, 383 | { 384 | "cell_type": "code", 385 | "metadata": { 386 | "id": "59jmBrwcTFCx" 387 | }, 388 | "source": [ 389 | "print(keras.metrics.mean_squared_error(x_valid, diff_moving_avg_plus_past).numpy())\n", 390 | "print(keras.metrics.mean_absolute_error(x_valid, diff_moving_avg_plus_past).numpy())" 391 | ], 392 | "execution_count": null, 393 | "outputs": [] 394 | }, 395 | { 396 | "cell_type": "markdown", 397 | "metadata": { 398 | "id": "vx9Et1Hkeusl" 399 | }, 400 | "source": [ 401 | "Better than naive forecast, good. However the forecasts look a bit too random, because we're just adding past values, which were noisy. Let's use a moving averaging on past values to remove some of the noise:" 402 | ] 403 | }, 404 | { 405 | "cell_type": "code", 406 | "metadata": { 407 | "id": "K81dtROoTE_r" 408 | }, 409 | "source": [ 410 | "diff_moving_avg_plus_smooth_past = moving_average_forecast(series[split_time - 370:-360], 10) + diff_moving_avg\n", 411 | "\n", 412 | "plt.figure(figsize=(10, 6))\n", 413 | "plot_series(time_valid, x_valid)\n", 414 | "plot_series(time_valid, diff_moving_avg_plus_smooth_past)\n", 415 | "plt.show()" 416 | ], 417 | "execution_count": null, 418 | "outputs": [] 419 | }, 420 | { 421 | "cell_type": "code", 422 | "metadata": { 423 | "id": "iN2MsBxWTE3m" 424 | }, 425 | "source": [ 426 | "print(keras.metrics.mean_squared_error(x_valid, diff_moving_avg_plus_smooth_past).numpy())\n", 427 | "print(keras.metrics.mean_absolute_error(x_valid, diff_moving_avg_plus_smooth_past).numpy())" 428 | ], 429 | "execution_count": null, 430 | "outputs": [] 431 | } 432 | ] 433 | } -------------------------------------------------------------------------------- /SampleCode/S+P_Week_2_Exercise_Answer_ts_prediction_with_DNN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "accelerator": "GPU", 6 | "colab": { 7 | "name": "S+P_Week_2_Exercise_Answer.ipynb", 8 | "provenance": [], 9 | "toc_visible": true 10 | }, 11 | "kernelspec": { 12 | "display_name": "Python 3", 13 | "name": "python3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "code", 19 | "metadata": { 20 | "id": "zX4Kg8DUTKWO" 21 | }, 22 | "source": [ 23 | "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", 24 | "# you may not use this file except in compliance with the License.\n", 25 | "# You may obtain a copy of the License at\n", 26 | "#\n", 27 | "# https://www.apache.org/licenses/LICENSE-2.0\n", 28 | "#\n", 29 | "# Unless required by applicable law or agreed to in writing, software\n", 30 | "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", 31 | "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 32 | "# See the License for the specific language governing permissions and\n", 33 | "# limitations under the License." 34 | ], 35 | "execution_count": null, 36 | "outputs": [] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "metadata": { 41 | "cellView": "both", 42 | "id": "D1J15Vh_1Jih" 43 | }, 44 | "source": [ 45 | "!pip install tf-nightly-2.0-preview\n" 46 | ], 47 | "execution_count": null, 48 | "outputs": [] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "metadata": { 53 | "id": "BOjujz601HcS" 54 | }, 55 | "source": [ 56 | "import tensorflow as tf\n", 57 | "import numpy as np\n", 58 | "import matplotlib.pyplot as plt\n", 59 | "print(tf.__version__)" 60 | ], 61 | "execution_count": null, 62 | "outputs": [] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "metadata": { 67 | "id": "Zswl7jRtGzkk" 68 | }, 69 | "source": [ 70 | "def plot_series(time, series, format=\"-\", start=0, end=None):\n", 71 | " plt.plot(time[start:end], series[start:end], format)\n", 72 | " plt.xlabel(\"Time\")\n", 73 | " plt.ylabel(\"Value\")\n", 74 | " plt.grid(False)\n", 75 | "\n", 76 | "def trend(time, slope=0):\n", 77 | " return slope * time\n", 78 | "\n", 79 | "def seasonal_pattern(season_time):\n", 80 | " \"\"\"Just an arbitrary pattern, you can change it if you wish\"\"\"\n", 81 | " return np.where(season_time < 0.1,\n", 82 | " np.cos(season_time * 6 * np.pi),\n", 83 | " 2 / np.exp(9 * season_time))\n", 84 | "\n", 85 | "def seasonality(time, period, amplitude=1, phase=0):\n", 86 | " \"\"\"Repeats the same pattern at each period\"\"\"\n", 87 | " season_time = ((time + phase) % period) / period\n", 88 | " return amplitude * seasonal_pattern(season_time)\n", 89 | "\n", 90 | "def noise(time, noise_level=1, seed=None):\n", 91 | " rnd = np.random.RandomState(seed)\n", 92 | " return rnd.randn(len(time)) * noise_level\n", 93 | "\n", 94 | "time = np.arange(10 * 365 + 1, dtype=\"float32\")\n", 95 | "baseline = 10\n", 96 | "series = trend(time, 0.1) \n", 97 | "baseline = 10\n", 98 | "amplitude = 40\n", 99 | "slope = 0.005\n", 100 | "noise_level = 3\n", 101 | "\n", 102 | "# Create the series\n", 103 | "series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)\n", 104 | "# Update with noise\n", 105 | "series += noise(time, noise_level, seed=51)\n", 106 | "\n", 107 | "split_time = 3000\n", 108 | "time_train = time[:split_time]\n", 109 | "x_train = series[:split_time]\n", 110 | "time_valid = time[split_time:]\n", 111 | "x_valid = series[split_time:]\n", 112 | "\n", 113 | "window_size = 20\n", 114 | "batch_size = 32\n", 115 | "shuffle_buffer_size = 1000\n", 116 | "\n", 117 | "plot_series(time, series)" 118 | ], 119 | "execution_count": null, 120 | "outputs": [] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "metadata": { 125 | "id": "4sTTIOCbyShY" 126 | }, 127 | "source": [ 128 | "def windowed_dataset(series, window_size, batch_size, shuffle_buffer):\n", 129 | " dataset = tf.data.Dataset.from_tensor_slices(series)\n", 130 | " dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)\n", 131 | " dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))\n", 132 | " dataset = dataset.shuffle(shuffle_buffer).map(lambda window: (window[:-1], window[-1]))\n", 133 | " dataset = dataset.batch(batch_size).prefetch(1)\n", 134 | " return dataset" 135 | ], 136 | "execution_count": null, 137 | "outputs": [] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "metadata": { 142 | "id": "TW-vT7eLYAdb" 143 | }, 144 | "source": [ 145 | "dataset = windowed_dataset(x_train, window_size, batch_size, shuffle_buffer_size)\n", 146 | "\n", 147 | "\n", 148 | "model = tf.keras.models.Sequential([\n", 149 | " tf.keras.layers.Dense(100, input_shape=[window_size], activation=\"relu\"), \n", 150 | " tf.keras.layers.Dense(10, activation=\"relu\"), \n", 151 | " tf.keras.layers.Dense(1)\n", 152 | "])\n", 153 | "\n", 154 | "model.compile(loss=\"mse\", optimizer=tf.keras.optimizers.SGD(lr=1e-6, momentum=0.9))\n", 155 | "model.fit(dataset,epochs=100,verbose=0)\n" 156 | ], 157 | "execution_count": null, 158 | "outputs": [] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "metadata": { 163 | "id": "efhco2rYyIFF" 164 | }, 165 | "source": [ 166 | "forecast = []\n", 167 | "for time in range(len(series) - window_size):\n", 168 | " forecast.append(model.predict(series[time:time + window_size][np.newaxis]))\n", 169 | "\n", 170 | "forecast = forecast[split_time-window_size:]\n", 171 | "results = np.array(forecast)[:, 0, 0]\n", 172 | "\n", 173 | "\n", 174 | "plt.figure(figsize=(10, 6))\n", 175 | "\n", 176 | "plot_series(time_valid, x_valid)\n", 177 | "plot_series(time_valid, results)" 178 | ], 179 | "execution_count": null, 180 | "outputs": [] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "metadata": { 185 | "id": "-kT6j186YO6K" 186 | }, 187 | "source": [ 188 | "tf.keras.metrics.mean_absolute_error(x_valid, results).numpy()" 189 | ], 190 | "execution_count": null, 191 | "outputs": [] 192 | } 193 | ] 194 | } -------------------------------------------------------------------------------- /SampleCode/S+P_Week_2_Lesson_1_ts_data_preparation_for_ML.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "accelerator": "GPU", 6 | "colab": { 7 | "name": "S+P Week 2 Lesson 1.ipynb", 8 | "provenance": [], 9 | "toc_visible": true 10 | }, 11 | "kernelspec": { 12 | "display_name": "Python 3", 13 | "name": "python3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "code", 19 | "metadata": { 20 | "id": "zX4Kg8DUTKWO" 21 | }, 22 | "source": [ 23 | "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", 24 | "# you may not use this file except in compliance with the License.\n", 25 | "# You may obtain a copy of the License at\n", 26 | "#\n", 27 | "# https://www.apache.org/licenses/LICENSE-2.0\n", 28 | "#\n", 29 | "# Unless required by applicable law or agreed to in writing, software\n", 30 | "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", 31 | "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 32 | "# See the License for the specific language governing permissions and\n", 33 | "# limitations under the License." 34 | ], 35 | "execution_count": null, 36 | "outputs": [] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "metadata": { 41 | "id": "s6eq-RBcQ_Zr" 42 | }, 43 | "source": [ 44 | "try:\n", 45 | " # %tensorflow_version only exists in Colab.\n", 46 | " %tensorflow_version 2.x\n", 47 | "except Exception:\n", 48 | " pass" 49 | ], 50 | "execution_count": null, 51 | "outputs": [] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "metadata": { 56 | "id": "BOjujz601HcS" 57 | }, 58 | "source": [ 59 | "import tensorflow as tf\n", 60 | "import numpy as np\n", 61 | "import matplotlib.pyplot as plt\n", 62 | "print(tf.__version__)" 63 | ], 64 | "execution_count": null, 65 | "outputs": [] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "metadata": { 70 | "id": "asEdslR_05O_" 71 | }, 72 | "source": [ 73 | "dataset = tf.data.Dataset.range(10)\n", 74 | "for val in dataset:\n", 75 | " print(val.numpy())" 76 | ], 77 | "execution_count": null, 78 | "outputs": [] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "metadata": { 83 | "id": "Lrv_ghSt1lgQ" 84 | }, 85 | "source": [ 86 | "dataset = tf.data.Dataset.range(10)\n", 87 | "dataset = dataset.window(5, shift=1)\n", 88 | "for window_dataset in dataset:\n", 89 | " for val in window_dataset:\n", 90 | " print(val.numpy(), end=\" \")\n", 91 | " print()" 92 | ], 93 | "execution_count": null, 94 | "outputs": [] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "metadata": { 99 | "id": "QLEq6MG-2DN2" 100 | }, 101 | "source": [ 102 | "dataset = tf.data.Dataset.range(10)\n", 103 | "dataset = dataset.window(5, shift=1, drop_remainder=True)\n", 104 | "for window_dataset in dataset:\n", 105 | " for val in window_dataset:\n", 106 | " print(val.numpy(), end=\" \")\n", 107 | " print()" 108 | ], 109 | "execution_count": null, 110 | "outputs": [] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "metadata": { 115 | "id": "PJ9CAHlJ2ODe" 116 | }, 117 | "source": [ 118 | "dataset = tf.data.Dataset.range(10)\n", 119 | "dataset = dataset.window(5, shift=1, drop_remainder=True)\n", 120 | "dataset = dataset.flat_map(lambda window: window.batch(5))\n", 121 | "for window in dataset:\n", 122 | " print(window.numpy())\n" 123 | ], 124 | "execution_count": null, 125 | "outputs": [] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "metadata": { 130 | "id": "DryEZ2Mz2nNV" 131 | }, 132 | "source": [ 133 | "dataset = tf.data.Dataset.range(10)\n", 134 | "dataset = dataset.window(5, shift=1, drop_remainder=True)\n", 135 | "dataset = dataset.flat_map(lambda window: window.batch(5))\n", 136 | "dataset = dataset.map(lambda window: (window[:-1], window[-1:]))\n", 137 | "for x,y in dataset:\n", 138 | " print(x.numpy(), y.numpy())" 139 | ], 140 | "execution_count": null, 141 | "outputs": [] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "metadata": { 146 | "id": "1tl-0BOKkEtk" 147 | }, 148 | "source": [ 149 | "dataset = tf.data.Dataset.range(10)\n", 150 | "dataset = dataset.window(5, shift=1, drop_remainder=True)\n", 151 | "dataset = dataset.flat_map(lambda window: window.batch(5))\n", 152 | "dataset = dataset.map(lambda window: (window[:-1], window[-1:]))\n", 153 | "dataset = dataset.shuffle(buffer_size=10)\n", 154 | "for x,y in dataset:\n", 155 | " print(x.numpy(), y.numpy())\n" 156 | ], 157 | "execution_count": null, 158 | "outputs": [] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "metadata": { 163 | "id": "Wa0PNwxMGapy" 164 | }, 165 | "source": [ 166 | "dataset = tf.data.Dataset.range(10)\n", 167 | "dataset = dataset.window(5, shift=1, drop_remainder=True)\n", 168 | "dataset = dataset.flat_map(lambda window: window.batch(5))\n", 169 | "dataset = dataset.map(lambda window: (window[:-1], window[-1:]))\n", 170 | "dataset = dataset.shuffle(buffer_size=10)\n", 171 | "dataset = dataset.batch(2).prefetch(1)\n", 172 | "for x,y in dataset:\n", 173 | " print(\"x = \", x.numpy())\n", 174 | " print(\"y = \", y.numpy())\n" 175 | ], 176 | "execution_count": null, 177 | "outputs": [] 178 | } 179 | ] 180 | } -------------------------------------------------------------------------------- /SampleCode/S+P_Week_2_Lesson_2_linear_regression_ts_data.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "S+P Week 2 Lesson 2.ipynb", 7 | "provenance": [], 8 | "toc_visible": true 9 | }, 10 | "kernelspec": { 11 | "display_name": "Python 3", 12 | "name": "python3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "code", 18 | "metadata": { 19 | "id": "zX4Kg8DUTKWO" 20 | }, 21 | "source": [ 22 | "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", 23 | "# you may not use this file except in compliance with the License.\n", 24 | "# You may obtain a copy of the License at\n", 25 | "#\n", 26 | "# https://www.apache.org/licenses/LICENSE-2.0\n", 27 | "#\n", 28 | "# Unless required by applicable law or agreed to in writing, software\n", 29 | "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", 30 | "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 31 | "# See the License for the specific language governing permissions and\n", 32 | "# limitations under the License." 33 | ], 34 | "execution_count": null, 35 | "outputs": [] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "metadata": { 40 | "id": "view-in-github" 41 | }, 42 | "source": [ 43 | "\"Open" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "metadata": { 49 | "id": "-pwam8szRReT" 50 | }, 51 | "source": [ 52 | "try:\n", 53 | " # %tensorflow_version only exists in Colab.\n", 54 | " %tensorflow_version 2.x\n", 55 | "except Exception:\n", 56 | " pass" 57 | ], 58 | "execution_count": null, 59 | "outputs": [] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "metadata": { 64 | "id": "BOjujz601HcS" 65 | }, 66 | "source": [ 67 | "import tensorflow as tf\n", 68 | "import numpy as np\n", 69 | "import matplotlib.pyplot as plt\n", 70 | "print(tf.__version__)" 71 | ], 72 | "execution_count": null, 73 | "outputs": [] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "metadata": { 78 | "id": "Zswl7jRtGzkk" 79 | }, 80 | "source": [ 81 | "def plot_series(time, series, format=\"-\", start=0, end=None):\n", 82 | " plt.plot(time[start:end], series[start:end], format)\n", 83 | " plt.xlabel(\"Time\")\n", 84 | " plt.ylabel(\"Value\")\n", 85 | " plt.grid(True)\n", 86 | "\n", 87 | "def trend(time, slope=0):\n", 88 | " return slope * time\n", 89 | "\n", 90 | "def seasonal_pattern(season_time):\n", 91 | " \"\"\"Just an arbitrary pattern, you can change it if you wish\"\"\"\n", 92 | " return np.where(season_time < 0.4,\n", 93 | " np.cos(season_time * 2 * np.pi),\n", 94 | " 1 / np.exp(3 * season_time))\n", 95 | "\n", 96 | "def seasonality(time, period, amplitude=1, phase=0):\n", 97 | " \"\"\"Repeats the same pattern at each period\"\"\"\n", 98 | " season_time = ((time + phase) % period) / period\n", 99 | " return amplitude * seasonal_pattern(season_time)\n", 100 | "\n", 101 | "def noise(time, noise_level=1, seed=None):\n", 102 | " rnd = np.random.RandomState(seed)\n", 103 | " return rnd.randn(len(time)) * noise_level\n", 104 | "\n", 105 | "time = np.arange(4 * 365 + 1, dtype=\"float32\")\n", 106 | "baseline = 10\n", 107 | "series = trend(time, 0.1) \n", 108 | "baseline = 10\n", 109 | "amplitude = 40\n", 110 | "slope = 0.05\n", 111 | "noise_level = 5\n", 112 | "\n", 113 | "# Create the series\n", 114 | "series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)\n", 115 | "# Update with noise\n", 116 | "series += noise(time, noise_level, seed=42)\n", 117 | "\n", 118 | "split_time = 1000\n", 119 | "time_train = time[:split_time]\n", 120 | "x_train = series[:split_time]\n", 121 | "time_valid = time[split_time:]\n", 122 | "x_valid = series[split_time:]\n", 123 | "\n", 124 | "window_size = 20\n", 125 | "batch_size = 32\n", 126 | "shuffle_buffer_size = 1000" 127 | ], 128 | "execution_count": null, 129 | "outputs": [] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "metadata": { 134 | "id": "4sTTIOCbyShY" 135 | }, 136 | "source": [ 137 | "def windowed_dataset(series, window_size, batch_size, shuffle_buffer):\n", 138 | " dataset = tf.data.Dataset.from_tensor_slices(series)\n", 139 | " dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)\n", 140 | " dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))\n", 141 | " dataset = dataset.shuffle(shuffle_buffer).map(lambda window: (window[:-1], window[-1]))\n", 142 | " dataset = dataset.batch(batch_size).prefetch(1)\n", 143 | " return dataset" 144 | ], 145 | "execution_count": null, 146 | "outputs": [] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "metadata": { 151 | "id": "ou-WmE2AXu6B" 152 | }, 153 | "source": [ 154 | "dataset = windowed_dataset(x_train, window_size, batch_size, shuffle_buffer_size)\n", 155 | "print(dataset)\n", 156 | "l0 = tf.keras.layers.Dense(1, input_shape=[window_size])\n", 157 | "model = tf.keras.models.Sequential([l0])\n", 158 | "\n", 159 | "\n", 160 | "model.compile(loss=\"mse\", optimizer=tf.keras.optimizers.SGD(lr=1e-6, momentum=0.9))\n", 161 | "model.fit(dataset,epochs=100,verbose=0)\n", 162 | "\n", 163 | "print(\"Layer weights {}\".format(l0.get_weights()))\n" 164 | ], 165 | "execution_count": null, 166 | "outputs": [] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "metadata": { 171 | "id": "-gtVJuLVxR-M" 172 | }, 173 | "source": [ 174 | "forecast = []\n", 175 | "\n", 176 | "for time in range(len(series) - window_size):\n", 177 | " forecast.append(model.predict(series[time:time + window_size][np.newaxis]))\n", 178 | "\n", 179 | "forecast = forecast[split_time-window_size:]\n", 180 | "results = np.array(forecast)[:, 0, 0]\n", 181 | "\n", 182 | "\n", 183 | "plt.figure(figsize=(10, 6))\n", 184 | "\n", 185 | "plot_series(time_valid, x_valid)\n", 186 | "plot_series(time_valid, results)" 187 | ], 188 | "execution_count": null, 189 | "outputs": [] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "metadata": { 194 | "id": "hR2BO0Dai_ZT" 195 | }, 196 | "source": [ 197 | "tf.keras.metrics.mean_absolute_error(x_valid, results).numpy()" 198 | ], 199 | "execution_count": null, 200 | "outputs": [] 201 | } 202 | ] 203 | } -------------------------------------------------------------------------------- /SampleCode/S+P_Week_2_Lesson_3_ts_prediction_with_DNN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "S+P Week 2 Lesson 3.ipynb", 7 | "provenance": [], 8 | "toc_visible": true 9 | }, 10 | "kernelspec": { 11 | "display_name": "Python 3", 12 | "name": "python3" 13 | } 14 | }, 15 | "cells": [ 16 | { 17 | "cell_type": "code", 18 | "metadata": { 19 | "id": "zX4Kg8DUTKWO" 20 | }, 21 | "source": [ 22 | "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", 23 | "# you may not use this file except in compliance with the License.\n", 24 | "# You may obtain a copy of the License at\n", 25 | "#\n", 26 | "# https://www.apache.org/licenses/LICENSE-2.0\n", 27 | "#\n", 28 | "# Unless required by applicable law or agreed to in writing, software\n", 29 | "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", 30 | "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 31 | "# See the License for the specific language governing permissions and\n", 32 | "# limitations under the License." 33 | ], 34 | "execution_count": null, 35 | "outputs": [] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "metadata": { 40 | "id": "view-in-github" 41 | }, 42 | "source": [ 43 | "\"Open" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "metadata": { 49 | "cellView": "both", 50 | "id": "D1J15Vh_1Jih" 51 | }, 52 | "source": [ 53 | "try:\n", 54 | " # %tensorflow_version only exists in Colab.\n", 55 | " %tensorflow_version 2.x\n", 56 | "except Exception:\n", 57 | " pass\n" 58 | ], 59 | "execution_count": null, 60 | "outputs": [] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "metadata": { 65 | "id": "BOjujz601HcS" 66 | }, 67 | "source": [ 68 | "import tensorflow as tf\n", 69 | "import numpy as np\n", 70 | "import matplotlib.pyplot as plt\n", 71 | "print(tf.__version__)" 72 | ], 73 | "execution_count": null, 74 | "outputs": [] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "metadata": { 79 | "id": "Zswl7jRtGzkk" 80 | }, 81 | "source": [ 82 | "def plot_series(time, series, format=\"-\", start=0, end=None):\n", 83 | " plt.plot(time[start:end], series[start:end], format)\n", 84 | " plt.xlabel(\"Time\")\n", 85 | " plt.ylabel(\"Value\")\n", 86 | " plt.grid(True)\n", 87 | "\n", 88 | "def trend(time, slope=0):\n", 89 | " return slope * time\n", 90 | "\n", 91 | "def seasonal_pattern(season_time):\n", 92 | " \"\"\"Just an arbitrary pattern, you can change it if you wish\"\"\"\n", 93 | " return np.where(season_time < 0.4,\n", 94 | " np.cos(season_time * 2 * np.pi),\n", 95 | " 1 / np.exp(3 * season_time))\n", 96 | "\n", 97 | "def seasonality(time, period, amplitude=1, phase=0):\n", 98 | " \"\"\"Repeats the same pattern at each period\"\"\"\n", 99 | " season_time = ((time + phase) % period) / period\n", 100 | " return amplitude * seasonal_pattern(season_time)\n", 101 | "\n", 102 | "def noise(time, noise_level=1, seed=None):\n", 103 | " rnd = np.random.RandomState(seed)\n", 104 | " return rnd.randn(len(time)) * noise_level\n", 105 | "\n", 106 | "time = np.arange(4 * 365 + 1, dtype=\"float32\")\n", 107 | "baseline = 10\n", 108 | "series = trend(time, 0.1) \n", 109 | "baseline = 10\n", 110 | "amplitude = 20\n", 111 | "slope = 0.09\n", 112 | "noise_level = 5\n", 113 | "\n", 114 | "# Create the series\n", 115 | "series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)\n", 116 | "# Update with noise\n", 117 | "series += noise(time, noise_level, seed=42)\n", 118 | "\n", 119 | "split_time = 1000\n", 120 | "time_train = time[:split_time]\n", 121 | "x_train = series[:split_time]\n", 122 | "time_valid = time[split_time:]\n", 123 | "x_valid = series[split_time:]\n", 124 | "\n", 125 | "window_size = 20\n", 126 | "batch_size = 32\n", 127 | "shuffle_buffer_size = 1000" 128 | ], 129 | "execution_count": null, 130 | "outputs": [] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "metadata": { 135 | "id": "tVH2XEt4yA4m" 136 | }, 137 | "source": [ 138 | "plt.figure(figsize=(10, 6))\n", 139 | "plot_series(time_valid, x_valid)\n" 140 | ], 141 | "execution_count": null, 142 | "outputs": [] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "metadata": { 147 | "id": "4sTTIOCbyShY" 148 | }, 149 | "source": [ 150 | "def windowed_dataset(series, window_size, batch_size, shuffle_buffer):\n", 151 | " dataset = tf.data.Dataset.from_tensor_slices(series)\n", 152 | " dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)\n", 153 | " dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))\n", 154 | " dataset = dataset.shuffle(shuffle_buffer).map(lambda window: (window[:-1], window[-1]))\n", 155 | " dataset = dataset.batch(batch_size).prefetch(1)\n", 156 | " return dataset" 157 | ], 158 | "execution_count": null, 159 | "outputs": [] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "metadata": { 164 | "id": "TW-vT7eLYAdb" 165 | }, 166 | "source": [ 167 | "dataset = windowed_dataset(x_train, window_size, batch_size, shuffle_buffer_size)\n", 168 | "\n", 169 | "\n", 170 | "model = tf.keras.models.Sequential([\n", 171 | " tf.keras.layers.Dense(10, input_shape=[window_size], activation=\"relu\"), \n", 172 | " tf.keras.layers.Dense(10, activation=\"relu\"), \n", 173 | " tf.keras.layers.Dense(1)\n", 174 | "])\n", 175 | "\n", 176 | "model.compile(loss=\"mse\", optimizer=tf.keras.optimizers.SGD(lr=1e-6, momentum=0.9))\n", 177 | "model.fit(dataset,epochs=100,verbose=0)\n" 178 | ], 179 | "execution_count": null, 180 | "outputs": [] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "metadata": { 185 | "id": "efhco2rYyIFF" 186 | }, 187 | "source": [ 188 | "forecast = []\n", 189 | "for time in range(len(series) - window_size):\n", 190 | " forecast.append(model.predict(series[time:time + window_size][np.newaxis]))\n", 191 | "\n", 192 | "forecast = forecast[split_time-window_size:]\n", 193 | "results = np.array(forecast)[:, 0, 0]\n", 194 | "\n", 195 | "\n", 196 | "plt.figure(figsize=(10, 6))\n", 197 | "\n", 198 | "plot_series(time_valid, x_valid)\n", 199 | "plot_series(time_valid, results)" 200 | ], 201 | "execution_count": null, 202 | "outputs": [] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "metadata": { 207 | "id": "-kT6j186YO6K" 208 | }, 209 | "source": [ 210 | "tf.keras.metrics.mean_absolute_error(x_valid, results).numpy()" 211 | ], 212 | "execution_count": null, 213 | "outputs": [] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "metadata": { 218 | "id": "tnCe_nBKu7RB" 219 | }, 220 | "source": [ 221 | "dataset = windowed_dataset(x_train, window_size, batch_size, shuffle_buffer_size)\n", 222 | "\n", 223 | "\n", 224 | "model = tf.keras.models.Sequential([\n", 225 | " tf.keras.layers.Dense(10, input_shape=[window_size], activation=\"relu\"), \n", 226 | " tf.keras.layers.Dense(10, activation=\"relu\"), \n", 227 | " tf.keras.layers.Dense(1)\n", 228 | "])\n", 229 | "\n", 230 | "lr_schedule = tf.keras.callbacks.LearningRateScheduler(\n", 231 | " lambda epoch: 1e-8 * 10**(epoch / 20))\n", 232 | "optimizer = tf.keras.optimizers.SGD(lr=1e-8, momentum=0.9)\n", 233 | "model.compile(loss=\"mse\", optimizer=optimizer)\n", 234 | "history = model.fit(dataset, epochs=100, callbacks=[lr_schedule], verbose=0)" 235 | ], 236 | "execution_count": null, 237 | "outputs": [] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "metadata": { 242 | "id": "2ZaNsM2IgCd_" 243 | }, 244 | "source": [ 245 | "lrs = 1e-8 * (10 ** (np.arange(100) / 20))\n", 246 | "plt.semilogx(lrs, history.history[\"loss\"])\n", 247 | "plt.axis([1e-8, 1e-3, 0, 300])" 248 | ], 249 | "execution_count": null, 250 | "outputs": [] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "metadata": { 255 | "id": "QDwW0Q7ovYK1" 256 | }, 257 | "source": [ 258 | "window_size = 30\n", 259 | "dataset = windowed_dataset(x_train, window_size, batch_size, shuffle_buffer_size)\n", 260 | "\n", 261 | "model = tf.keras.models.Sequential([\n", 262 | " tf.keras.layers.Dense(10, activation=\"relu\", input_shape=[window_size]),\n", 263 | " tf.keras.layers.Dense(10, activation=\"relu\"),\n", 264 | " tf.keras.layers.Dense(1)\n", 265 | "])\n", 266 | "\n", 267 | "optimizer = tf.keras.optimizers.SGD(lr=8e-6, momentum=0.9)\n", 268 | "model.compile(loss=\"mse\", optimizer=optimizer)\n", 269 | "history = model.fit(dataset, epochs=500, verbose=0)" 270 | ], 271 | "execution_count": null, 272 | "outputs": [] 273 | }, 274 | { 275 | "cell_type": "code", 276 | "metadata": { 277 | "id": "iXBMO1HM9AHX" 278 | }, 279 | "source": [ 280 | "loss = history.history['loss']\n", 281 | "epochs = range(len(loss))\n", 282 | "plt.plot(epochs, loss, 'b', label='Training Loss')\n", 283 | "plt.show()" 284 | ], 285 | "execution_count": null, 286 | "outputs": [] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "metadata": { 291 | "id": "xakiRU7R7WAo" 292 | }, 293 | "source": [ 294 | "# Plot all but the first 10\n", 295 | "loss = history.history['loss']\n", 296 | "epochs = range(10, len(loss))\n", 297 | "plot_loss = loss[10:]\n", 298 | "print(plot_loss)\n", 299 | "plt.plot(epochs, plot_loss, 'b', label='Training Loss')\n", 300 | "plt.show()" 301 | ], 302 | "execution_count": null, 303 | "outputs": [] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "metadata": { 308 | "id": "YUOPUeHWvvBG" 309 | }, 310 | "source": [ 311 | "forecast = []\n", 312 | "for time in range(len(series) - window_size):\n", 313 | " forecast.append(model.predict(series[time:time + window_size][np.newaxis]))\n", 314 | "\n", 315 | "forecast = forecast[split_time-window_size:]\n", 316 | "results = np.array(forecast)[:, 0, 0]\n", 317 | "\n", 318 | "\n", 319 | "plt.figure(figsize=(10, 6))\n", 320 | "\n", 321 | "plot_series(time_valid, x_valid)\n", 322 | "plot_series(time_valid, results)" 323 | ], 324 | "execution_count": null, 325 | "outputs": [] 326 | }, 327 | { 328 | "cell_type": "code", 329 | "metadata": { 330 | "id": "W-GPjL2wv0yc" 331 | }, 332 | "source": [ 333 | "tf.keras.metrics.mean_absolute_error(x_valid, results).numpy()" 334 | ], 335 | "execution_count": null, 336 | "outputs": [] 337 | } 338 | ] 339 | } -------------------------------------------------------------------------------- /SampleCode/S+P_Week_3_Lesson_2_RNN_with_ts.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "S+P Week 3 Lesson 2 - RNN.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "toc_visible": true 10 | }, 11 | "kernelspec": { 12 | "display_name": "Python 3", 13 | "name": "python3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "code", 19 | "metadata": { 20 | "id": "zX4Kg8DUTKWO" 21 | }, 22 | "source": [ 23 | "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", 24 | "# you may not use this file except in compliance with the License.\n", 25 | "# You may obtain a copy of the License at\n", 26 | "#\n", 27 | "# https://www.apache.org/licenses/LICENSE-2.0\n", 28 | "#\n", 29 | "# Unless required by applicable law or agreed to in writing, software\n", 30 | "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", 31 | "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 32 | "# See the License for the specific language governing permissions and\n", 33 | "# limitations under the License." 34 | ], 35 | "execution_count": null, 36 | "outputs": [] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "view-in-github" 42 | }, 43 | "source": [ 44 | "\"Open" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "metadata": { 50 | "cellView": "both", 51 | "id": "D1J15Vh_1Jih" 52 | }, 53 | "source": [ 54 | "try:\n", 55 | " # %tensorflow_version only exists in Colab.\n", 56 | " %tensorflow_version 2.x\n", 57 | "except Exception:\n", 58 | " pass\n" 59 | ], 60 | "execution_count": null, 61 | "outputs": [] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "metadata": { 66 | "id": "BOjujz601HcS" 67 | }, 68 | "source": [ 69 | "import tensorflow as tf\n", 70 | "import numpy as np\n", 71 | "import matplotlib.pyplot as plt\n", 72 | "print(tf.__version__)" 73 | ], 74 | "execution_count": null, 75 | "outputs": [] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "metadata": { 80 | "id": "Zswl7jRtGzkk" 81 | }, 82 | "source": [ 83 | "def plot_series(time, series, format=\"-\", start=0, end=None):\n", 84 | " plt.plot(time[start:end], series[start:end], format)\n", 85 | " plt.xlabel(\"Time\")\n", 86 | " plt.ylabel(\"Value\")\n", 87 | " plt.grid(True)\n", 88 | "\n", 89 | "def trend(time, slope=0):\n", 90 | " return slope * time\n", 91 | "\n", 92 | "def seasonal_pattern(season_time):\n", 93 | " \"\"\"Just an arbitrary pattern, you can change it if you wish\"\"\"\n", 94 | " return np.where(season_time < 0.4,\n", 95 | " np.cos(season_time * 2 * np.pi),\n", 96 | " 1 / np.exp(3 * season_time))\n", 97 | "\n", 98 | "def seasonality(time, period, amplitude=1, phase=0):\n", 99 | " \"\"\"Repeats the same pattern at each period\"\"\"\n", 100 | " season_time = ((time + phase) % period) / period\n", 101 | " return amplitude * seasonal_pattern(season_time)\n", 102 | "\n", 103 | "def noise(time, noise_level=1, seed=None):\n", 104 | " rnd = np.random.RandomState(seed)\n", 105 | " return rnd.randn(len(time)) * noise_level\n", 106 | "\n", 107 | "time = np.arange(4 * 365 + 1, dtype=\"float32\")\n", 108 | "baseline = 10\n", 109 | "series = trend(time, 0.1) \n", 110 | "baseline = 10\n", 111 | "amplitude = 40\n", 112 | "slope = 0.05\n", 113 | "noise_level = 5\n", 114 | "\n", 115 | "# Create the series\n", 116 | "series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)\n", 117 | "# Update with noise\n", 118 | "series += noise(time, noise_level, seed=42)\n", 119 | "\n", 120 | "split_time = 1000\n", 121 | "time_train = time[:split_time]\n", 122 | "x_train = series[:split_time]\n", 123 | "time_valid = time[split_time:]\n", 124 | "x_valid = series[split_time:]\n", 125 | "\n", 126 | "window_size = 20\n", 127 | "batch_size = 32\n", 128 | "shuffle_buffer_size = 1000" 129 | ], 130 | "execution_count": null, 131 | "outputs": [] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "metadata": { 136 | "id": "4sTTIOCbyShY" 137 | }, 138 | "source": [ 139 | "def windowed_dataset(series, window_size, batch_size, shuffle_buffer):\n", 140 | " dataset = tf.data.Dataset.from_tensor_slices(series)\n", 141 | " dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)\n", 142 | " dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))\n", 143 | " dataset = dataset.shuffle(shuffle_buffer).map(lambda window: (window[:-1], window[-1]))\n", 144 | " dataset = dataset.batch(batch_size).prefetch(1)\n", 145 | " return dataset" 146 | ], 147 | "execution_count": null, 148 | "outputs": [] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "metadata": { 153 | "id": "L4nblWkqg1NL" 154 | }, 155 | "source": [ 156 | "tf.keras.backend.clear_session()\n", 157 | "tf.random.set_seed(51)\n", 158 | "np.random.seed(51)\n", 159 | "\n", 160 | "train_set = windowed_dataset(x_train, window_size, batch_size=128, shuffle_buffer=shuffle_buffer_size)\n", 161 | "\n", 162 | "model = tf.keras.models.Sequential([\n", 163 | " tf.keras.layers.Lambda(lambda x: tf.expand_dims(x, axis=-1),\n", 164 | " input_shape=[None]),\n", 165 | " tf.keras.layers.SimpleRNN(40, return_sequences=True),\n", 166 | " tf.keras.layers.SimpleRNN(40),\n", 167 | " tf.keras.layers.Dense(1),\n", 168 | " tf.keras.layers.Lambda(lambda x: x * 100.0)\n", 169 | "])\n", 170 | "\n", 171 | "lr_schedule = tf.keras.callbacks.LearningRateScheduler(\n", 172 | " lambda epoch: 1e-8 * 10**(epoch / 20))\n", 173 | "optimizer = tf.keras.optimizers.SGD(lr=1e-8, momentum=0.9)\n", 174 | "model.compile(loss=tf.keras.losses.Huber(),\n", 175 | " optimizer=optimizer,\n", 176 | " metrics=[\"mae\"])\n", 177 | "history = model.fit(train_set, epochs=100, callbacks=[lr_schedule])" 178 | ], 179 | "execution_count": null, 180 | "outputs": [] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "metadata": { 185 | "id": "5He3pp-Hj758" 186 | }, 187 | "source": [ 188 | "plt.semilogx(history.history[\"lr\"], history.history[\"loss\"])\n", 189 | "plt.axis([1e-8, 1e-4, 0, 30])" 190 | ], 191 | "execution_count": null, 192 | "outputs": [] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "metadata": { 197 | "id": "6y1KMowRkHkC" 198 | }, 199 | "source": [ 200 | "tf.keras.backend.clear_session()\n", 201 | "tf.random.set_seed(51)\n", 202 | "np.random.seed(51)\n", 203 | "\n", 204 | "dataset = windowed_dataset(x_train, window_size, batch_size=128, shuffle_buffer=shuffle_buffer_size)\n", 205 | "\n", 206 | "model = tf.keras.models.Sequential([\n", 207 | " tf.keras.layers.Lambda(lambda x: tf.expand_dims(x, axis=-1),\n", 208 | " input_shape=[None]),\n", 209 | " tf.keras.layers.SimpleRNN(40, return_sequences=True),\n", 210 | " tf.keras.layers.SimpleRNN(40),\n", 211 | " tf.keras.layers.Dense(1),\n", 212 | " tf.keras.layers.Lambda(lambda x: x * 100.0)\n", 213 | "])\n", 214 | "\n", 215 | "optimizer = tf.keras.optimizers.SGD(lr=5e-5, momentum=0.9)\n", 216 | "model.compile(loss=tf.keras.losses.Huber(),\n", 217 | " optimizer=optimizer,\n", 218 | " metrics=[\"mae\"])\n", 219 | "history = model.fit(dataset,epochs=400)" 220 | ], 221 | "execution_count": null, 222 | "outputs": [] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "metadata": { 227 | "id": "ejBynEKekaKw" 228 | }, 229 | "source": [ 230 | "forecast=[]\n", 231 | "for time in range(len(series) - window_size):\n", 232 | " forecast.append(model.predict(series[time:time + window_size][np.newaxis]))\n", 233 | "\n", 234 | "forecast = forecast[split_time-window_size:]\n", 235 | "results = np.array(forecast)[:, 0, 0]\n", 236 | "\n", 237 | "\n", 238 | "plt.figure(figsize=(10, 6))\n", 239 | "\n", 240 | "plot_series(time_valid, x_valid)\n", 241 | "plot_series(time_valid, results)" 242 | ], 243 | "execution_count": null, 244 | "outputs": [] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "metadata": { 249 | "id": "hR2BO0Dai_ZT" 250 | }, 251 | "source": [ 252 | "tf.keras.metrics.mean_absolute_error(x_valid, results).numpy()" 253 | ], 254 | "execution_count": null, 255 | "outputs": [] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "metadata": { 260 | "id": "vXaFHOaJqE6M" 261 | }, 262 | "source": [ 263 | "import matplotlib.image as mpimg\n", 264 | "import matplotlib.pyplot as plt\n", 265 | "\n", 266 | "#-----------------------------------------------------------\n", 267 | "# Retrieve a list of list results on training and test data\n", 268 | "# sets for each training epoch\n", 269 | "#-----------------------------------------------------------\n", 270 | "mae=history.history['mae']\n", 271 | "loss=history.history['loss']\n", 272 | "\n", 273 | "epochs=range(len(loss)) # Get number of epochs\n", 274 | "\n", 275 | "#------------------------------------------------\n", 276 | "# Plot MAE and Loss\n", 277 | "#------------------------------------------------\n", 278 | "plt.plot(epochs, mae, 'r')\n", 279 | "plt.plot(epochs, loss, 'b')\n", 280 | "plt.title('MAE and Loss')\n", 281 | "plt.xlabel(\"Epochs\")\n", 282 | "plt.ylabel(\"Accuracy\")\n", 283 | "plt.legend([\"MAE\", \"Loss\"])\n", 284 | "\n", 285 | "plt.figure()\n", 286 | "\n", 287 | "epochs_zoom = epochs[200:]\n", 288 | "mae_zoom = mae[200:]\n", 289 | "loss_zoom = loss[200:]\n", 290 | "\n", 291 | "#------------------------------------------------\n", 292 | "# Plot Zoomed MAE and Loss\n", 293 | "#------------------------------------------------\n", 294 | "plt.plot(epochs_zoom, mae_zoom, 'r')\n", 295 | "plt.plot(epochs_zoom, loss_zoom, 'b')\n", 296 | "plt.title('MAE and Loss')\n", 297 | "plt.xlabel(\"Epochs\")\n", 298 | "plt.ylabel(\"Accuracy\")\n", 299 | "plt.legend([\"MAE\", \"Loss\"])\n", 300 | "\n", 301 | "plt.figure()" 302 | ], 303 | "execution_count": null, 304 | "outputs": [] 305 | } 306 | ] 307 | } -------------------------------------------------------------------------------- /SampleCode/S+P_Week_4_Lesson_1.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "S+P Week 4 Lesson 1.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "toc_visible": true 10 | }, 11 | "kernelspec": { 12 | "display_name": "Python 3", 13 | "name": "python3" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "code", 19 | "metadata": { 20 | "id": "zX4Kg8DUTKWO" 21 | }, 22 | "source": [ 23 | "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", 24 | "# you may not use this file except in compliance with the License.\n", 25 | "# You may obtain a copy of the License at\n", 26 | "#\n", 27 | "# https://www.apache.org/licenses/LICENSE-2.0\n", 28 | "#\n", 29 | "# Unless required by applicable law or agreed to in writing, software\n", 30 | "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", 31 | "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 32 | "# See the License for the specific language governing permissions and\n", 33 | "# limitations under the License." 34 | ], 35 | "execution_count": null, 36 | "outputs": [] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": { 41 | "id": "view-in-github" 42 | }, 43 | "source": [ 44 | "\"Open" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "metadata": { 50 | "cellView": "both", 51 | "id": "D1J15Vh_1Jih" 52 | }, 53 | "source": [ 54 | "try:\n", 55 | " # %tensorflow_version only exists in Colab.\n", 56 | " %tensorflow_version 2.x\n", 57 | "except Exception:\n", 58 | " pass\n" 59 | ], 60 | "execution_count": null, 61 | "outputs": [] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "metadata": { 66 | "id": "BOjujz601HcS" 67 | }, 68 | "source": [ 69 | "import tensorflow as tf\n", 70 | "import numpy as np\n", 71 | "import matplotlib.pyplot as plt\n", 72 | "print(tf.__version__)" 73 | ], 74 | "execution_count": null, 75 | "outputs": [] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "metadata": { 80 | "id": "Zswl7jRtGzkk" 81 | }, 82 | "source": [ 83 | "def plot_series(time, series, format=\"-\", start=0, end=None):\n", 84 | " plt.plot(time[start:end], series[start:end], format)\n", 85 | " plt.xlabel(\"Time\")\n", 86 | " plt.ylabel(\"Value\")\n", 87 | " plt.grid(True)\n", 88 | "\n", 89 | "def trend(time, slope=0):\n", 90 | " return slope * time\n", 91 | "\n", 92 | "def seasonal_pattern(season_time):\n", 93 | " \"\"\"Just an arbitrary pattern, you can change it if you wish\"\"\"\n", 94 | " return np.where(season_time < 0.4,\n", 95 | " np.cos(season_time * 2 * np.pi),\n", 96 | " 1 / np.exp(3 * season_time))\n", 97 | "\n", 98 | "def seasonality(time, period, amplitude=1, phase=0):\n", 99 | " \"\"\"Repeats the same pattern at each period\"\"\"\n", 100 | " season_time = ((time + phase) % period) / period\n", 101 | " return amplitude * seasonal_pattern(season_time)\n", 102 | "\n", 103 | "def noise(time, noise_level=1, seed=None):\n", 104 | " rnd = np.random.RandomState(seed)\n", 105 | " return rnd.randn(len(time)) * noise_level\n", 106 | "\n", 107 | "time = np.arange(4 * 365 + 1, dtype=\"float32\")\n", 108 | "baseline = 10\n", 109 | "series = trend(time, 0.1) \n", 110 | "baseline = 10\n", 111 | "amplitude = 40\n", 112 | "slope = 0.05\n", 113 | "noise_level = 5\n", 114 | "\n", 115 | "# Create the series\n", 116 | "series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)\n", 117 | "# Update with noise\n", 118 | "series += noise(time, noise_level, seed=42)\n", 119 | "\n", 120 | "split_time = 1000\n", 121 | "time_train = time[:split_time]\n", 122 | "x_train = series[:split_time]\n", 123 | "time_valid = time[split_time:]\n", 124 | "x_valid = series[split_time:]\n", 125 | "\n", 126 | "window_size = 20\n", 127 | "batch_size = 32\n", 128 | "shuffle_buffer_size = 1000" 129 | ], 130 | "execution_count": null, 131 | "outputs": [] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "metadata": { 136 | "id": "4sTTIOCbyShY" 137 | }, 138 | "source": [ 139 | "def windowed_dataset(series, window_size, batch_size, shuffle_buffer):\n", 140 | " series = tf.expand_dims(series, axis=-1)\n", 141 | " ds = tf.data.Dataset.from_tensor_slices(series)\n", 142 | " ds = ds.window(window_size + 1, shift=1, drop_remainder=True)\n", 143 | " ds = ds.flat_map(lambda w: w.batch(window_size + 1))\n", 144 | " ds = ds.shuffle(shuffle_buffer)\n", 145 | " ds = ds.map(lambda w: (w[:-1], w[1:]))\n", 146 | " return ds.batch(batch_size).prefetch(1)" 147 | ], 148 | "execution_count": null, 149 | "outputs": [] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "metadata": { 154 | "id": "_eaAX9g_jS5W" 155 | }, 156 | "source": [ 157 | "def model_forecast(model, series, window_size):\n", 158 | " ds = tf.data.Dataset.from_tensor_slices(series)\n", 159 | " ds = ds.window(window_size, shift=1, drop_remainder=True)\n", 160 | " ds = ds.flat_map(lambda w: w.batch(window_size))\n", 161 | " ds = ds.batch(32).prefetch(1)\n", 162 | " forecast = model.predict(ds)\n", 163 | " return forecast" 164 | ], 165 | "execution_count": null, 166 | "outputs": [] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "metadata": { 171 | "id": "Yqc2GTsps0qf" 172 | }, 173 | "source": [ 174 | "tf.keras.backend.clear_session()\n", 175 | "tf.random.set_seed(51)\n", 176 | "np.random.seed(51)\n", 177 | "\n", 178 | "window_size = 30\n", 179 | "train_set = windowed_dataset(x_train, window_size, batch_size=128, shuffle_buffer=shuffle_buffer_size)\n", 180 | "\n", 181 | "model = tf.keras.models.Sequential([\n", 182 | " tf.keras.layers.Conv1D(filters=32, kernel_size=5,\n", 183 | " strides=1, padding=\"causal\",\n", 184 | " activation=\"relu\",\n", 185 | " input_shape=[None, 1]),\n", 186 | " tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32, return_sequences=True)),\n", 187 | " tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32, return_sequences=True)),\n", 188 | " tf.keras.layers.Dense(1),\n", 189 | " tf.keras.layers.Lambda(lambda x: x * 200)\n", 190 | "])\n", 191 | "lr_schedule = tf.keras.callbacks.LearningRateScheduler(\n", 192 | " lambda epoch: 1e-8 * 10**(epoch / 20))\n", 193 | "optimizer = tf.keras.optimizers.SGD(lr=1e-8, momentum=0.9)\n", 194 | "model.compile(loss=tf.keras.losses.Huber(),\n", 195 | " optimizer=optimizer,\n", 196 | " metrics=[\"mae\"])\n", 197 | "history = model.fit(train_set, epochs=100, callbacks=[lr_schedule])" 198 | ], 199 | "execution_count": null, 200 | "outputs": [] 201 | }, 202 | { 203 | "cell_type": "code", 204 | "metadata": { 205 | "id": "MjTvASUns0qh" 206 | }, 207 | "source": [ 208 | "plt.semilogx(history.history[\"lr\"], history.history[\"loss\"])\n", 209 | "plt.axis([1e-8, 1e-4, 0, 30])" 210 | ], 211 | "execution_count": null, 212 | "outputs": [] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "metadata": { 217 | "id": "4uh-97bpLZCA" 218 | }, 219 | "source": [ 220 | "tf.keras.backend.clear_session()\n", 221 | "tf.random.set_seed(51)\n", 222 | "np.random.seed(51)\n", 223 | "#batch_size = 16\n", 224 | "dataset = windowed_dataset(x_train, window_size, batch_size, shuffle_buffer_size)\n", 225 | "\n", 226 | "model = tf.keras.models.Sequential([\n", 227 | " tf.keras.layers.Conv1D(filters=32, kernel_size=3,\n", 228 | " strides=1, padding=\"causal\",\n", 229 | " activation=\"relu\",\n", 230 | " input_shape=[None, 1]),\n", 231 | " tf.keras.layers.LSTM(32, return_sequences=True),\n", 232 | " tf.keras.layers.LSTM(32, return_sequences=True),\n", 233 | " tf.keras.layers.Dense(1),\n", 234 | " tf.keras.layers.Lambda(lambda x: x * 200)\n", 235 | "])\n", 236 | "\n", 237 | "optimizer = tf.keras.optimizers.SGD(lr=1e-5, momentum=0.9)\n", 238 | "model.compile(loss=tf.keras.losses.Huber(),\n", 239 | " optimizer=optimizer,\n", 240 | " metrics=[\"mae\"])\n", 241 | "history = model.fit(dataset,epochs=500)" 242 | ], 243 | "execution_count": null, 244 | "outputs": [] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "metadata": { 249 | "id": "MKkic-mLdkRZ" 250 | }, 251 | "source": [ 252 | "rnn_forecast = model_forecast(model, series[..., np.newaxis], window_size)\n", 253 | "rnn_forecast = rnn_forecast[split_time - window_size:-1, -1, 0]" 254 | ], 255 | "execution_count": null, 256 | "outputs": [] 257 | }, 258 | { 259 | "cell_type": "code", 260 | "metadata": { 261 | "id": "4N1toSetdnQq" 262 | }, 263 | "source": [ 264 | "plt.figure(figsize=(10, 6))\n", 265 | "plot_series(time_valid, x_valid)\n", 266 | "plot_series(time_valid, rnn_forecast)" 267 | ], 268 | "execution_count": null, 269 | "outputs": [] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "metadata": { 274 | "id": "ULKO3JINdqkp" 275 | }, 276 | "source": [ 277 | "tf.keras.metrics.mean_absolute_error(x_valid, rnn_forecast).numpy()" 278 | ], 279 | "execution_count": null, 280 | "outputs": [] 281 | }, 282 | { 283 | "cell_type": "code", 284 | "metadata": { 285 | "id": "ok8LjNbbkig4" 286 | }, 287 | "source": [ 288 | "import matplotlib.image as mpimg\n", 289 | "import matplotlib.pyplot as plt\n", 290 | "\n", 291 | "#-----------------------------------------------------------\n", 292 | "# Retrieve a list of list results on training and test data\n", 293 | "# sets for each training epoch\n", 294 | "#-----------------------------------------------------------\n", 295 | "mae=history.history['mae']\n", 296 | "loss=history.history['loss']\n", 297 | "\n", 298 | "epochs=range(len(loss)) # Get number of epochs\n", 299 | "\n", 300 | "#------------------------------------------------\n", 301 | "# Plot MAE and Loss\n", 302 | "#------------------------------------------------\n", 303 | "plt.plot(epochs, mae, 'r')\n", 304 | "plt.plot(epochs, loss, 'b')\n", 305 | "plt.title('MAE and Loss')\n", 306 | "plt.xlabel(\"Epochs\")\n", 307 | "plt.ylabel(\"Accuracy\")\n", 308 | "plt.legend([\"MAE\", \"Loss\"])\n", 309 | "\n", 310 | "plt.figure()\n", 311 | "\n", 312 | "epochs_zoom = epochs[200:]\n", 313 | "mae_zoom = mae[200:]\n", 314 | "loss_zoom = loss[200:]\n", 315 | "\n", 316 | "#------------------------------------------------\n", 317 | "# Plot Zoomed MAE and Loss\n", 318 | "#------------------------------------------------\n", 319 | "plt.plot(epochs_zoom, mae_zoom, 'r')\n", 320 | "plt.plot(epochs_zoom, loss_zoom, 'b')\n", 321 | "plt.title('MAE and Loss')\n", 322 | "plt.xlabel(\"Epochs\")\n", 323 | "plt.ylabel(\"Accuracy\")\n", 324 | "plt.legend([\"MAE\", \"Loss\"])\n", 325 | "\n", 326 | "plt.figure()" 327 | ], 328 | "execution_count": null, 329 | "outputs": [] 330 | } 331 | ] 332 | } -------------------------------------------------------------------------------- /SampleCode/Week_1_Exercise_Answer.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "accelerator": "GPU", 6 | "colab": { 7 | "name": "Week 1 Exercise Answer.ipynb", 8 | "provenance": [], 9 | "collapsed_sections": [], 10 | "toc_visible": true 11 | }, 12 | "kernelspec": { 13 | "display_name": "Python 3", 14 | "name": "python3" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "code", 20 | "metadata": { 21 | "id": "zX4Kg8DUTKWO" 22 | }, 23 | "source": [ 24 | "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", 25 | "# you may not use this file except in compliance with the License.\n", 26 | "# You may obtain a copy of the License at\n", 27 | "#\n", 28 | "# https://www.apache.org/licenses/LICENSE-2.0\n", 29 | "#\n", 30 | "# Unless required by applicable law or agreed to in writing, software\n", 31 | "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", 32 | "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", 33 | "# See the License for the specific language governing permissions and\n", 34 | "# limitations under the License." 35 | ], 36 | "execution_count": null, 37 | "outputs": [] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "metadata": { 42 | "id": "t9HrvPfrSlzS" 43 | }, 44 | "source": [ 45 | "import tensorflow as tf\n", 46 | "print(tf.__version__)\n" 47 | ], 48 | "execution_count": null, 49 | "outputs": [] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "metadata": { 54 | "id": "gqWabzlJ63nL" 55 | }, 56 | "source": [ 57 | "import numpy as np\n", 58 | "import matplotlib.pyplot as plt\n", 59 | "import tensorflow as tf\n", 60 | "from tensorflow import keras\n", 61 | "\n", 62 | "def plot_series(time, series, format=\"-\", start=0, end=None):\n", 63 | " plt.plot(time[start:end], series[start:end], format)\n", 64 | " plt.xlabel(\"Time\")\n", 65 | " plt.ylabel(\"Value\")\n", 66 | " plt.grid(True)\n", 67 | "\n", 68 | "def trend(time, slope=0):\n", 69 | " return slope * time\n", 70 | "\n", 71 | "def seasonal_pattern(season_time):\n", 72 | " \"\"\"Just an arbitrary pattern, you can change it if you wish\"\"\"\n", 73 | " return np.where(season_time < 0.1,\n", 74 | " np.cos(season_time * 7 * np.pi),\n", 75 | " 1 / np.exp(5 * season_time))\n", 76 | "\n", 77 | "def seasonality(time, period, amplitude=1, phase=0):\n", 78 | " \"\"\"Repeats the same pattern at each period\"\"\"\n", 79 | " season_time = ((time + phase) % period) / period\n", 80 | " return amplitude * seasonal_pattern(season_time)\n", 81 | "\n", 82 | "def noise(time, noise_level=1, seed=None):\n", 83 | " rnd = np.random.RandomState(seed)\n", 84 | " return rnd.randn(len(time)) * noise_level\n", 85 | "\n", 86 | "time = np.arange(4 * 365 + 1, dtype=\"float32\")\n", 87 | "baseline = 10\n", 88 | "series = trend(time, 0.1) \n", 89 | "baseline = 10\n", 90 | "amplitude = 40\n", 91 | "slope = 0.01\n", 92 | "noise_level = 2\n", 93 | "\n", 94 | "# Create the series\n", 95 | "series = baseline + trend(time, slope) + seasonality(time, period=365, amplitude=amplitude)\n", 96 | "# Update with noise\n", 97 | "series += noise(time, noise_level, seed=42)\n", 98 | "\n", 99 | "plt.figure(figsize=(10, 6))\n", 100 | "plot_series(time, series)\n", 101 | "plt.show()" 102 | ], 103 | "execution_count": null, 104 | "outputs": [] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": { 109 | "id": "UfdyqJJ1VZVu" 110 | }, 111 | "source": [ 112 | "Now that we have the time series, let's split it so we can start forecasting" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "metadata": { 118 | "id": "_w0eKap5uFNP" 119 | }, 120 | "source": [ 121 | "split_time = 1100\n", 122 | "time_train = time[:split_time]\n", 123 | "x_train = series[:split_time]\n", 124 | "time_valid = time[split_time:]\n", 125 | "x_valid = series[split_time:]\n", 126 | "plt.figure(figsize=(10, 6))\n", 127 | "plot_series(time_train, x_train)\n", 128 | "plt.show()\n", 129 | "\n", 130 | "plt.figure(figsize=(10, 6))\n", 131 | "plot_series(time_valid, x_valid)\n", 132 | "plt.show()" 133 | ], 134 | "execution_count": null, 135 | "outputs": [] 136 | }, 137 | { 138 | "cell_type": "markdown", 139 | "metadata": { 140 | "id": "bjD8ncEZbjEW" 141 | }, 142 | "source": [ 143 | "# Naive Forecast" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "metadata": { 149 | "id": "Pj_-uCeYxcAb" 150 | }, 151 | "source": [ 152 | "naive_forecast = series[split_time - 1:-1]" 153 | ], 154 | "execution_count": null, 155 | "outputs": [] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "metadata": { 160 | "id": "JtxwHj9Ig0jT" 161 | }, 162 | "source": [ 163 | "plt.figure(figsize=(10, 6))\n", 164 | "plot_series(time_valid, x_valid)\n", 165 | "plot_series(time_valid, naive_forecast)" 166 | ], 167 | "execution_count": null, 168 | "outputs": [] 169 | }, 170 | { 171 | "cell_type": "markdown", 172 | "metadata": { 173 | "id": "fw1SP5WeuixH" 174 | }, 175 | "source": [ 176 | "Let's zoom in on the start of the validation period:" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "metadata": { 182 | "id": "D0MKg7FNug9V" 183 | }, 184 | "source": [ 185 | "plt.figure(figsize=(10, 6))\n", 186 | "plot_series(time_valid, x_valid, start=0, end=150)\n", 187 | "plot_series(time_valid, naive_forecast, start=1, end=151)" 188 | ], 189 | "execution_count": null, 190 | "outputs": [] 191 | }, 192 | { 193 | "cell_type": "markdown", 194 | "metadata": { 195 | "id": "35gIlQLfu0TT" 196 | }, 197 | "source": [ 198 | "You can see that the naive forecast lags 1 step behind the time series." 199 | ] 200 | }, 201 | { 202 | "cell_type": "markdown", 203 | "metadata": { 204 | "id": "Uh_7244Gsxfx" 205 | }, 206 | "source": [ 207 | "Now let's compute the mean squared error and the mean absolute error between the forecasts and the predictions in the validation period:" 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "metadata": { 213 | "id": "byNnC7IbsnMZ" 214 | }, 215 | "source": [ 216 | "print(keras.metrics.mean_squared_error(x_valid, naive_forecast).numpy())\n", 217 | "print(keras.metrics.mean_absolute_error(x_valid, naive_forecast).numpy())" 218 | ], 219 | "execution_count": null, 220 | "outputs": [] 221 | }, 222 | { 223 | "cell_type": "markdown", 224 | "metadata": { 225 | "id": "WGPBC9QttI1u" 226 | }, 227 | "source": [ 228 | "That's our baseline, now let's try a moving average:" 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "metadata": { 234 | "id": "YGz5UsUdf2tV" 235 | }, 236 | "source": [ 237 | "def moving_average_forecast(series, window_size):\n", 238 | " \"\"\"Forecasts the mean of the last few values.\n", 239 | " If window_size=1, then this is equivalent to naive forecast\"\"\"\n", 240 | " forecast = []\n", 241 | " for time in range(len(series) - window_size):\n", 242 | " forecast.append(series[time:time + window_size].mean())\n", 243 | " return np.array(forecast)" 244 | ], 245 | "execution_count": null, 246 | "outputs": [] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "metadata": { 251 | "id": "HHFhGXQji7_r" 252 | }, 253 | "source": [ 254 | "moving_avg = moving_average_forecast(series, 30)[split_time - 30:]\n", 255 | "\n", 256 | "plt.figure(figsize=(10, 6))\n", 257 | "plot_series(time_valid, x_valid)\n", 258 | "plot_series(time_valid, moving_avg)" 259 | ], 260 | "execution_count": null, 261 | "outputs": [] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "metadata": { 266 | "id": "wG7pTAd7z0e8" 267 | }, 268 | "source": [ 269 | "print(keras.metrics.mean_squared_error(x_valid, moving_avg).numpy())\n", 270 | "print(keras.metrics.mean_absolute_error(x_valid, moving_avg).numpy())" 271 | ], 272 | "execution_count": null, 273 | "outputs": [] 274 | }, 275 | { 276 | "cell_type": "markdown", 277 | "metadata": { 278 | "id": "JMYPnJqwz8nS" 279 | }, 280 | "source": [ 281 | "That's worse than naive forecast! The moving average does not anticipate trend or seasonality, so let's try to remove them by using differencing. Since the seasonality period is 365 days, we will subtract the value at time *t* – 365 from the value at time *t*." 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "metadata": { 287 | "id": "5pqySF7-rJR4" 288 | }, 289 | "source": [ 290 | "diff_series = (series[365:] - series[:-365])\n", 291 | "diff_time = time[365:]\n", 292 | "\n", 293 | "plt.figure(figsize=(10, 6))\n", 294 | "plot_series(diff_time, diff_series)\n", 295 | "plt.show()" 296 | ], 297 | "execution_count": null, 298 | "outputs": [] 299 | }, 300 | { 301 | "cell_type": "markdown", 302 | "metadata": { 303 | "id": "xPlPlS7DskWg" 304 | }, 305 | "source": [ 306 | "Great, the trend and seasonality seem to be gone, so now we can use the moving average:" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "metadata": { 312 | "id": "QmZpz7arsjbb" 313 | }, 314 | "source": [ 315 | "diff_moving_avg = moving_average_forecast(diff_series, 50)[split_time - 365 - 50:]\n", 316 | "\n", 317 | "plt.figure(figsize=(10, 6))\n", 318 | "plot_series(time_valid, diff_series[split_time - 365:])\n", 319 | "plot_series(time_valid, diff_moving_avg)\n", 320 | "plt.show()" 321 | ], 322 | "execution_count": null, 323 | "outputs": [] 324 | }, 325 | { 326 | "cell_type": "markdown", 327 | "metadata": { 328 | "id": "Gno9S2lyecnc" 329 | }, 330 | "source": [ 331 | "Now let's bring back the trend and seasonality by adding the past values from t – 365:" 332 | ] 333 | }, 334 | { 335 | "cell_type": "code", 336 | "metadata": { 337 | "id": "Dv6RWFq7TFGB" 338 | }, 339 | "source": [ 340 | "diff_moving_avg_plus_past = series[split_time - 365:-365] + diff_moving_avg\n", 341 | "\n", 342 | "plt.figure(figsize=(10, 6))\n", 343 | "plot_series(time_valid, x_valid)\n", 344 | "plot_series(time_valid, diff_moving_avg_plus_past)\n", 345 | "plt.show()" 346 | ], 347 | "execution_count": null, 348 | "outputs": [] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "metadata": { 353 | "id": "59jmBrwcTFCx" 354 | }, 355 | "source": [ 356 | "print(keras.metrics.mean_squared_error(x_valid, diff_moving_avg_plus_past).numpy())\n", 357 | "print(keras.metrics.mean_absolute_error(x_valid, diff_moving_avg_plus_past).numpy())" 358 | ], 359 | "execution_count": null, 360 | "outputs": [] 361 | }, 362 | { 363 | "cell_type": "markdown", 364 | "metadata": { 365 | "id": "vx9Et1Hkeusl" 366 | }, 367 | "source": [ 368 | "Better than naive forecast, good. However the forecasts look a bit too random, because we're just adding past values, which were noisy. Let's use a moving averaging on past values to remove some of the noise:" 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "metadata": { 374 | "id": "K81dtROoTE_r" 375 | }, 376 | "source": [ 377 | "diff_moving_avg_plus_smooth_past = moving_average_forecast(series[split_time - 370:-360], 10) + diff_moving_avg\n", 378 | "\n", 379 | "plt.figure(figsize=(10, 6))\n", 380 | "plot_series(time_valid, x_valid)\n", 381 | "plot_series(time_valid, diff_moving_avg_plus_smooth_past)\n", 382 | "plt.show()" 383 | ], 384 | "execution_count": null, 385 | "outputs": [] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "metadata": { 390 | "id": "iN2MsBxWTE3m" 391 | }, 392 | "source": [ 393 | "print(keras.metrics.mean_squared_error(x_valid, diff_moving_avg_plus_smooth_past).numpy())\n", 394 | "print(keras.metrics.mean_absolute_error(x_valid, diff_moving_avg_plus_smooth_past).numpy())" 395 | ], 396 | "execution_count": null, 397 | "outputs": [] 398 | } 399 | ] 400 | } --------------------------------------------------------------------------------