In [1]:
from __future__ import absolute_import, division, print_function, unicode_literals
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib notebook
In [2]:
# The following code is adopted from Pat's Rolling Rain N-Year Threshold.pynb
# Loading in hourly rain data from CSV, parsing the timestamp, and adding it as an index so it's more useful
rain_df = pd.read_csv('data/ohare_full_precip_hourly.csv')
rain_df['datetime'] = pd.to_datetime(rain_df['datetime'])
rain_df = rain_df.set_index(pd.DatetimeIndex(rain_df['datetime']))
rain_df = rain_df['19700101':]
chi_rain_series = rain_df['HOURLYPrecip'].resample('1H').max()
print(rain_df.shape)
In [3]:
n_year_threshes = pd.read_csv('data/n_year_definitions.csv')
n_year_threshes = n_year_threshes.set_index('Duration')
n_year_threshes
Out[3]:
In [4]:
n_year_threshes.loc['5-min', '1-year']
Out[4]:
In [5]:
dur_str_to_hours = {
'5-min':5/60.0,
'10-min':10/60.0,
'15-min':15/60.0,
'30-min':0.5,
'1-hr':1.0,
'2-hr':2.0,
'3-hr':3.0,
'6-hr':6.0,
'12-hr':12.0,
'18-hr':18.0,
'24-hr':24.0,
'48-hr':48.0,
'72-hr':72.0,
'5-day':5*24.0,
'10-day':10*24.0
}
def plot_thresh(duration_str, n_years, ax=None):
'''
TODO
'''
global rain_df
global n_year_threshes
if ax is None:
plt.figure()
ax = plt.gca()
ax.hold(True)
thresh = n_year_threshes.loc[duration_str, str(n_years) + '-year']
duration = dur_str_to_hours[duration_str]
duration = max(duration, 1) # cannot upsample to more frequent than hourly
# TODO: want to throw warning?
rain_line = chi_rain_series.rolling(window=int(duration), min_periods=0).sum().plot(ax=ax)
x_limits = ax.get_xlim()
thresh_line = ax.plot(x_limits, [thresh, thresh])
ax.set_ylim([0, ax.get_ylim()[1]])
ax.legend(['moving cumulative rain', str(n_years) + '-year ' + duration_str + ' threshold'],
loc='best')
In [6]:
plot_thresh('48-hr', 100)
In [ ]:
In [ ]:
In [ ]:
In [ ]: