$$P^3$$

Probabilistic Precipitation Prediction


Imports


In [22]:
%matplotlib inline
import os

import datetime as dt
import numpy as np
import pandas as pd
import statsmodels as sm

from IPython.display import display, HTML
import matplotlib.pyplot as plt

Directories


In [23]:
# Setup directories
CWD = os.getcwd()

DATA_DIR = CWD + "/data/"
CLEAN_DATA_DIR = DATA_DIR + "clean/"
OUT_DIR = CWD + "/output/"

Preview Data


In [24]:
f = open(DATA_DIR+"eng-daily-01012016-12312016.csv", "r")
lines = f.readlines()
lines = lines[25:]
f.close()

f = open(CLEAN_DATA_DIR+"eng-daily-01012016-12312016.csv", "w+")
f.writelines(lines)
f.truncate()
f.close()

prev = pd.read_csv(CLEAN_DATA_DIR+"eng-daily-01012016-12312016.csv")
# display(prev)

Build Training Set


In [25]:
def clean_data(in_dir, out_dir, filename):
    """
    
    """
    f = open(in_dir+filename, "r")
    lines = f.readlines()
    lines = lines[25:]
    f.close()

    f = open(out_dir+filename, "w+")
    f.writelines(lines)
    f.truncate()
    f.close()

In [26]:
frames = []

for filename in os.listdir(DATA_DIR):
    if filename != "clean":
        clean_data(DATA_DIR, CLEAN_DATA_DIR, filename) 
        frames.append(pd.read_csv(CLEAN_DATA_DIR+filename))

train_data = pd.concat(frames)
train_data["Date/Time"] = pd.to_datetime(train_data["Date/Time"], format="%Y-%m-%d")
train_data.sort_values("Date/Time", ascending=True, inplace=True)
display(train_data)


Date/Time Year Month Day Data Quality Max Temp (°C) Max Temp Flag Min Temp (°C) Min Temp Flag Mean Temp (°C) ... Total Snow (cm) Total Snow Flag Total Precip (mm) Total Precip Flag Snow on Grnd (cm) Snow on Grnd Flag Dir of Max Gust (10s deg) Dir of Max Gust Flag Spd of Max Gust (km/h) Spd of Max Gust Flag
0 1953-01-01 1953 1 1 NaN 0.6 NaN -6.7 NaN -3.1 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
1 1953-01-02 1953 1 2 NaN 1.7 NaN -1.1 NaN 0.3 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
2 1953-01-03 1953 1 3 NaN 1.7 NaN -2.2 NaN -0.3 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
3 1953-01-04 1953 1 4 NaN -2.2 NaN -11.7 NaN -7.0 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
4 1953-01-05 1953 1 5 NaN -1.1 NaN -6.7 NaN -3.9 ... 0.5 NaN 0.5 NaN NaN NaN NaN NaN NaN NaN
5 1953-01-06 1953 1 6 NaN -5.6 NaN -11.7 NaN -8.7 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
6 1953-01-07 1953 1 7 NaN -10.0 NaN -15.6 NaN -12.8 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
7 1953-01-08 1953 1 8 NaN -5.6 NaN -12.8 NaN -9.2 ... 7.6 NaN 7.6 NaN NaN NaN NaN NaN NaN NaN
8 1953-01-09 1953 1 9 NaN -2.8 NaN -10.6 NaN -6.7 ... 0.0 NaN 0.0 T NaN NaN NaN NaN NaN NaN
9 1953-01-10 1953 1 10 NaN 1.1 NaN -3.9 NaN -1.4 ... 5.1 NaN 12.2 NaN NaN NaN NaN NaN NaN NaN
10 1953-01-11 1953 1 11 NaN 1.7 NaN -6.1 NaN -2.2 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
11 1953-01-12 1953 1 12 NaN 1.7 NaN -12.2 NaN -5.3 ... 0.0 NaN 0.0 NaN NaN NaN NaN NaN NaN NaN
12 1953-01-13 1953 1 13 NaN 4.4 NaN -1.7 NaN 1.4 ... 0.0 NaN 0.0 NaN NaN NaN NaN NaN NaN NaN
13 1953-01-14 1953 1 14 NaN 5.0 NaN -6.7 NaN -0.9 ... 0.0 NaN 0.0 T NaN NaN NaN NaN NaN NaN
14 1953-01-15 1953 1 15 NaN 10.6 NaN 0.6 NaN 5.6 ... 0.0 T 1.3 NaN NaN NaN NaN NaN NaN NaN
15 1953-01-16 1953 1 16 NaN -0.6 NaN -8.9 NaN -4.8 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
16 1953-01-17 1953 1 17 NaN 3.9 NaN -12.2 NaN -4.2 ... 0.0 T 9.1 NaN NaN NaN NaN NaN NaN NaN
17 1953-01-18 1953 1 18 NaN 2.8 NaN -2.2 NaN 0.3 ... 0.0 NaN 0.0 NaN NaN NaN NaN NaN NaN NaN
18 1953-01-19 1953 1 19 NaN 1.1 NaN -1.1 NaN 0.0 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
19 1953-01-20 1953 1 20 NaN 1.1 NaN -4.4 NaN -1.7 ... 0.0 NaN 0.0 NaN NaN NaN NaN NaN NaN NaN
20 1953-01-21 1953 1 21 NaN 0.6 NaN -5.6 NaN -2.5 ... 0.0 NaN 0.0 NaN NaN NaN NaN NaN NaN NaN
21 1953-01-22 1953 1 22 NaN 2.8 NaN -6.1 NaN -1.7 ... 0.0 NaN 0.0 NaN NaN NaN NaN NaN NaN NaN
22 1953-01-23 1953 1 23 NaN 5.6 NaN -2.2 NaN 1.7 ... 0.0 NaN 7.4 NaN NaN NaN NaN NaN NaN NaN
23 1953-01-24 1953 1 24 NaN 7.2 NaN 0.0 NaN 3.6 ... 0.0 T 0.3 NaN NaN NaN NaN NaN NaN NaN
24 1953-01-25 1953 1 25 NaN -3.9 NaN -8.3 NaN -6.1 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
25 1953-01-26 1953 1 26 NaN -1.7 NaN -13.3 NaN -7.5 ... 0.0 NaN 0.0 NaN NaN NaN NaN NaN NaN NaN
26 1953-01-27 1953 1 27 NaN 2.8 NaN -7.8 NaN -2.5 ... 2.5 NaN 2.5 NaN NaN NaN NaN NaN NaN NaN
27 1953-01-28 1953 1 28 NaN 0.6 NaN -4.4 NaN -1.9 ... 0.5 NaN 0.5 NaN NaN NaN NaN NaN NaN NaN
28 1953-01-29 1953 1 29 NaN -1.7 NaN -7.2 NaN -4.5 ... 0.0 T 0.0 T NaN NaN NaN NaN NaN NaN
29 1953-01-30 1953 1 30 NaN 0.0 NaN -7.2 NaN -3.6 ... 0.5 NaN 0.5 NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
335 2017-12-02 2017 12 2 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
336 2017-12-03 2017 12 3 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
337 2017-12-04 2017 12 4 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
338 2017-12-05 2017 12 5 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
339 2017-12-06 2017 12 6 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
340 2017-12-07 2017 12 7 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
341 2017-12-08 2017 12 8 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
342 2017-12-09 2017 12 9 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
343 2017-12-10 2017 12 10 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
344 2017-12-11 2017 12 11 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
345 2017-12-12 2017 12 12 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
346 2017-12-13 2017 12 13 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
347 2017-12-14 2017 12 14 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
348 2017-12-15 2017 12 15 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
349 2017-12-16 2017 12 16 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
350 2017-12-17 2017 12 17 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
351 2017-12-18 2017 12 18 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
352 2017-12-19 2017 12 19 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
353 2017-12-20 2017 12 20 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
354 2017-12-21 2017 12 21 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
355 2017-12-22 2017 12 22 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
356 2017-12-23 2017 12 23 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
357 2017-12-24 2017 12 24 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
358 2017-12-25 2017 12 25 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
359 2017-12-26 2017 12 26 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
360 2017-12-27 2017 12 27 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
361 2017-12-28 2017 12 28 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
362 2017-12-29 2017 12 29 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
363 2017-12-30 2017 12 30 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
364 2017-12-31 2017 12 31 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

23741 rows × 27 columns


In [28]:
plt.figure(figsize=(17, 9))
plt.plot_date(train_data["Date/Time"], train_data["Total Precip (mm)"], fmt='b-')
plt.ylabel("Precipitation [mm]")
plt.xlabel("Day")
plt.title("Toronto Pearson Daily Precipitation from 1953 to 2017")


Out[28]:
<matplotlib.text.Text at 0x7fa1d4bfb080>

In [ ]: