diff --git a/ASCE_CSD_WDM_wErr.ipynb b/ASCE_CSD_WDM_wErr.ipynb new file mode 100644 index 0000000..0233eb9 --- /dev/null +++ b/ASCE_CSD_WDM_wErr.ipynb @@ -0,0 +1,3308 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn import linear_model\n", + "from sklearn.model_selection import GridSearchCV\n", + "from sklearn.metrics import mean_absolute_error\n", + "from sklearn. metrics import accuracy_score\n", + "from sklearn import metrics\n", + "from sklearn.metrics import r2_score\n", + "from sklearn.metrics import classification_report\n", + "from sklearn.metrics import mean_absolute_percentage_error\n", + "from sklearn import metrics\n", + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.utils import resample\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.model_selection import LeaveOneOut\n", + "from sklearn import preprocessing\n", + "import matplotlib.dates as mdates\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "from sklearn.pipeline import make_pipeline\n", + "import seaborn as sns; sns.set()\n", + "import joblib\n", + "from sklearn.linear_model import LassoCV\n", + "from sklearn.datasets import make_regression\n", + "from pathlib import Path\n", + "import copy\n", + "\n", + "#Trying out recusive feature elimination to compare with step wise regression\n", + "from sklearn.feature_selection import RFE\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.model_selection import GridSearchCV\n", + "from sklearn.pipeline import make_pipeline\n", + "import sklearn\n", + "\n", + "import statsmodels.api as sm\n", + "\n", + "from progressbar import ProgressBar\n", + "\n", + "\n", + "\n", + "import datetime\n", + "import calendar\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "%matplotlib inline\n", + "\n", + "#custom functions\n", + "def NSC(y_pred,y_true):\n", + " \"\"\"\n", + " Nash-Sutcliffe Coefficient\n", + " \"\"\"\n", + " return 1 - sum((y_pred-y_true)**2)/sum((y_true-np.mean(y_true))**2)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#This is the final dataset to make predictions on\n", + "p = Path('C:/Users/rjohnson18/Box/Dissertation/Paper1/Data/Processed_Training_Data')\n", + "#dir_data = 'C:/Users/rjohnson18/Box/Dissertation/Paper1/Data/Model_Input_Data/Monthly/Input/FinalVars'\n", + "\n", + "slc = {i.stem[0:3] : pd.read_excel(i) for i in p.glob('**/*.xlsx')}\n", + "\n", + "#rename the gpcd column\n", + "for i in slc:\n", + " slc[i].rename(columns={i+'_gpcd': 'Obs_gpcd'}, inplace=True)\n", + " slc[i]=slc[i].set_index('Year')\n", + "snow=pd.read_excel('C:/Users/rjohnson18/Box/Dissertation/Paper1/Data/Alta_LCC_snow.xlsx')\n", + "snow=snow.set_index('Year')\n", + "#need to remove certain features\n", + "'''\n", + "lots of colinearity between mountain and valley, since we are focused on the valley we will use valley conditions.\n", + "meantemp and maxtemps days > are good predictors, however, they will be difficult to predict into the future.\n", + "Mill creek and city creek show high colinarity. Since city creek is a source we will remove mill creek.\n", + "Removing red butte and emigration creeks as they are not supply streams and show co-linearity\n", + "!!! removing the aggregated Seven canyons streamflow. There appears to be a unique climate signial that very well helps\n", + "demand forecasting by including the supply streamflows!!!!\n", + "Precipitation days is removed as they will be difficult to predict with certainity in the future.\n", + "Days above max, mean is removed as its colinear with mean temp and is difficult to predict into future.\n", + "Percent are selected, sqmi is basicaly the same\n", + "Removed reshousingdensity at it is highly coorelated wiht respopulationdensity\n", + "removed Urban_Area_Perc as it has high colinearity with res pop dens\n", + "Residential_Area_Perc removed as colinear wiht res pop dens)\n", + "'''\n", + "colrem= ['Dem_AF', 'seven', 'meantemp_days', 'maxtemp_days', 'mean_max', 'mill', 'precip_days', \n", + " 'Days_abovemax','Days_abovemean', 'red' , 'emig', 'sqmi','max_Days_WO',\n", + " 'mtn','ResHouseDensity', 'Urban_Area_Perc','Residential_Area_Perc', 'IrrPopulationDensity',\n", + " 'Irrigated_Area_Perc','CityCrk_AcFt_WR_Mar', 'LitCotCrk_AcFt_WR_Jun']#, 'AcFt', 'WO', 'days', 'days', 'above' , 'Perc']\n", + "\n", + "\n", + "for i in slc:\n", + " for j in colrem:\n", + " slc[i]=slc[i].loc[:,~slc[i].columns.str.contains(j , case=False)] \n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "#Create training and testing data, use most recent low, average, and high water years\n", + "slc_train=copy.deepcopy(slc)\n", + "slc_test=copy.deepcopy(slc)\n", + "\n", + "#2008 is a high year\n", + "#2011 and 2017 are average years\n", + "#2014 and 2016 are below average years\n", + "#2015 is a very low year\n", + "\n", + "IN_WY_Months = ['Jan' , 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug','Sep', 'Oct']\n", + "Prior_YR_WY_Months = ['Nov', 'Dec']\n", + "testWYyrs = [2008,2015,2017]\n", + "#testPrioWYyrs = [2007,2014,2016]\n", + "\n", + "\n", + "for i in slc:\n", + " #Select the training/testing dataframes\n", + " slc_train[i]=slc_train[i][~slc_train[i].index.isin(testWYyrs)]\n", + " slc_test[i]=slc_test[i][slc_test[i].index.isin(testWYyrs)]\n", + " \n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + " \n", + "\n", + "#Determine the indoor mean to subtract from outdoor\n", + "I_mean_train=(slc_train['Jan']['Obs_gpcd']+\n", + " slc_train['Feb']['Obs_gpcd']+\n", + " slc_train['Mar']['Obs_gpcd']+\n", + " slc_train['Nov']['Obs_gpcd']+\n", + " slc_train['Dec']['Obs_gpcd'])/5\n", + "I_mean_test=(slc_test['Jan']['Obs_gpcd']+\n", + " slc_test['Feb']['Obs_gpcd']+\n", + " slc_test['Mar']['Obs_gpcd']+\n", + " slc_test['Nov']['Obs_gpcd']+\n", + " slc_test['Dec']['Obs_gpcd'])/5\n", + "#This uses total demand for irrigation seasons\n", + "#I_mean_train=np.zeros(23)\n", + "#I_mean_test=np.zeros(10)\n", + "\n", + "for i in slc_train:\n", + " slc_train[i]['Iave']=I_mean_train\n", + " #for now include testing years\n", + " slc_test[i]['Iave']=I_mean_test\n", + "\n", + "IrrSeason= ['Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct']\n", + "Indoor=['Jan', 'Feb', 'Mar', 'Nov', 'Dec']\n", + "colrem=['Iave', 'Obs_gpcd']\n", + "#set the target gpcd to indoor for indoor and total-indoor for outdoor\n", + "#change to indoor to separate outdoor demands from total\n", + "for i in Indoor:\n", + " slc_train[i]['Target_gpcd']=slc_train[i]['Obs_gpcd']\n", + " slc_train[i]= slc_train[i].drop(columns=colrem)\n", + " #for now include testing years\n", + " slc_test[i]['Target_gpcd']=slc_test[i]['Obs_gpcd']\n", + " slc_test[i]= slc_test[i].drop(columns=colrem)\n", + " \n", + "\n", + "#Establish outdoor conservation thresholds\n", + "O_cons = 0.25\n", + "time = 20\n", + "\n", + "\n", + "for i in IrrSeason:\n", + " slc_train[i]['Target_gpcd']=slc_train[i]['Obs_gpcd']-slc_train[i]['Iave']\n", + " slc_train[i].loc[slc_train[i]['Target_gpcd'] < 0, 'Target_gpcd'] = 0\n", + " \n", + " #add in snow info\n", + " slc_train[i]=pd.concat([slc_train[i], snow], axis=1, join=\"inner\")\n", + " \n", + " slc_train[i]= slc_train[i].drop(columns=colrem)\n", + " #for now include testing years\n", + " slc_test[i]=pd.concat([slc_test[i], snow], axis=1, join=\"inner\")\n", + " slc_test[i]['Target_gpcd']=slc_test[i]['Obs_gpcd']-slc_test[i]['Iave']\n", + " slc_test[i].loc[slc_test[i]['Target_gpcd'] < 0, 'Target_gpcd'] = 0\n", + " \n", + " #create monthly historical mean and conservation trends\n", + " Out_mean = np.mean(slc_train[i]['Target_gpcd'].loc[2000:])\n", + " goal = (1-O_cons)*Out_mean\n", + " O_cons_rate = (Out_mean -goal)/time\n", + " \n", + "\n", + "\n", + " slc_train[i]['cons_goal'] = Out_mean- ((slc_train[i].index-2000)*O_cons_rate)\n", + " slc_train[i].loc[ slc_train[i].index <2000, ['cons_goal']] = Out_mean\n", + " \n", + " t=slc_train[i]['Target_gpcd'].copy()\n", + " c=slc_train[i]['cons_goal'].copy()\n", + " slc_train[i] = slc_train[i].drop(columns=['Target_gpcd', 'cons_goal'])\n", + " slc_train[i]['Target_gpcd'] = t\n", + " slc_train[i]['cons_goal'] = c\n", + " \n", + " slc_test[i]['cons_goal'] = Out_mean - ((slc_test[i].index-2000)*O_cons_rate) \n", + " \n", + " \n", + " \n", + " \n", + " slc_test[i]= slc_test[i].drop(columns=colrem)\n", + "\n", + " \n", + "#Determine the historical indoor mean to apply conservation strategies too\n", + "Indmean = np.mean(slc_train['Jan']['Target_gpcd'].loc[2000:]+\n", + " slc_train['Feb']['Target_gpcd'].loc[2000:]+\n", + " slc_train['Mar']['Target_gpcd'].loc[2000:]+\n", + " slc_train['Nov']['Target_gpcd'].loc[2000:]+\n", + " slc_train['Dec']['Target_gpcd'].loc[2000:])/5\n", + "'''Per UDWR 2001, Utah's Water Resources: Planning for the future, the govenor ordered a\n", + "25% reduction in water use by 2025\n", + "'''\n", + "cons = 0.28\n", + "\n", + "goal = (1-cons)*Indmean\n", + "\n", + "time = 20\n", + "\n", + "cons_rate = (Indmean -goal)/time\n", + "\n", + "#print(cons_rate , goal)\n", + "\n", + "#create feature called cons_goal!\n", + "for i in Indoor:\n", + " slc_test[i]['cons_goal'] = Indmean-((slc_test[i].index-2000)*cons_rate) \n", + " slc_train[i]['cons_goal'] = Indmean-((slc_train[i].index-2000)*cons_rate) \n", + " \n", + " slc_train[i].loc[ slc_train[i].index <2000, ['cons_goal']] = Indmean\n", + " \n", + " \n", + "Cons_mean_test=(slc_test['Jan']['cons_goal']+\n", + " slc_test['Feb']['cons_goal']+\n", + " slc_test['Mar']['cons_goal']+\n", + " slc_test['Nov']['cons_goal']+\n", + " slc_test['Dec']['cons_goal'])/5\n", + "\n", + "#split training and testing data into features and targets\n", + "slc_train_target=copy.deepcopy(slc_train)\n", + "slc_train_features=copy.deepcopy(slc_train)\n", + "\n", + "slc_test_target=copy.deepcopy(slc_test)\n", + "slc_test_features=copy.deepcopy(slc_test)\n", + "\n", + "\n", + "target=['Target_gpcd','Housing']\n", + "for i in slc_train_target:\n", + " slc_train_target[i]=slc_train_target[i]['Target_gpcd']\n", + " #for now include testing years\n", + " slc_test_target[i]=slc_test_target[i]['Target_gpcd']\n", + "\n", + "\n", + " slc_train_features[i]= slc_train_features[i].drop(columns=target)\n", + " #for now include testing years\n", + " slc_test_features[i]= slc_test_features[i].drop(columns=target)\n", + " \n", + "#need to remove year from the list to run plots below\n", + "for i in slc_train:\n", + " slc_train[i]=slc_train[i].drop(columns=['Housing', 'Population', 'PopulationDensity'])\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "'''\n", + "We want to see the trends for the training data,# and will want to have them modeled into the future based\n", + "on consevation goals\n", + "\n", + "From plots, There appears to be very little trends in training data. The last 10 years do show decreasing trends\n", + "likely due to conservation goals estabished in 2005\n", + "\n", + "\n", + "Thinking of a stepwise process:\n", + "1) identify any trends (training and testing): check, no trends in training. however in 2000, Utah established a \n", + " conservation goal. To reduce the gpcd water use by 25% by 2025. Evaluating water use from 2005-2017 shows a decline\n", + " in water use.\n", + "2) Determine conservation goals (annual reduction /yr, slope), over 25yrs a 75 gpcd reduction is requested (3gpcd/yr), check\n", + "3) Separately model indoor and outdoor demands per year. check \n", + "4) Training Outdoor demand (Apr-Oct) will be that month's total demand minus that years Jan-Mar mean indoor demand\n", + "5) Final model = modeled indoor demand - conservation reduction + Outdoor demand (if Apr-Oct).\n", + "'''\n", + "\n", + "def Outdoor_Demand_Model(TrainDF, month, X_train_features, y_train_target, X_test_features, y_test_target,\n", + " snowfeatures, conservation, cor_threshold, colinearity_thresh, cv_splits,\n", + " model_type, scoring ):\n", + " \n", + "\n", + "#subset these features out of main DF and put into cute heatmap plot\n", + " \n", + " DFcor = copy.deepcopy(TrainDF[month])\n", + " \n", + " #if snowfeatures is True:\n", + " # print('LCC Snowfeatures are being used')\n", + " Indoor=['Jan', 'Feb', 'Mar', 'Nov', 'Dec']\n", + " if snowfeatures is False:\n", + " if month in Indoor:\n", + " DFcor=DFcor\n", + " else:\n", + " snow=['Nov_snow_in','Dec_snow_in', 'Jan_snow_in','Feb_snow_in', \n", + " 'Mar_snow_in','Apr_snow_in', 'Total_snow_in', 'Snow_shortage']\n", + " DFcor=DFcor.drop(columns=snow)\n", + "\n", + " \n", + " cor=DFcor.copy()\n", + " if conservation is False:\n", + " del cor['cons_goal']\n", + " cor = cor.corr()\n", + " cor =cor.iloc[:,-1:]\n", + " if conservation is True:\n", + " cor = cor.corr()\n", + " cor =cor.iloc[:,-2:]\n", + " del cor['cons_goal']\n", + " \n", + " cor['Target_gpcd']=np.abs(cor['Target_gpcd'])\n", + " cor=cor.sort_values(by=['Target_gpcd'], ascending=False)\n", + " cor=cor.dropna()\n", + "\n", + "#Selecting highly correlated features\n", + " relevant_features = cor[cor['Target_gpcd']>cor_threshold]\n", + " CorFeat = list(relevant_features.index)\n", + "\n", + " CorDF= DFcor[CorFeat]\n", + " cor = np.abs(CorDF.corr())\n", + " cor = cor.mask(np.tril(np.ones(cor.shape)).astype(np.bool))\n", + " #remove colinearity\n", + " cor = cor[cor.columns[cor.max() < colinearity_thresh]]\n", + " CorFeat=cor.columns\n", + " cor = cor.T\n", + " cor = cor[CorFeat]\n", + " \n", + " #print('Remaining features are', CorFeat)\n", + "\n", + " \n", + " #Set up training and testing data \n", + " X_train = X_train_features[month][CorFeat].copy()\n", + "#X_train = slc_train_features['Jul'][JulF]\n", + " y_train = y_train_target[month].copy()\n", + "\n", + " X_test = X_test_features[month][CorFeat].copy()\n", + "#X_test = slc_test_features['Jul'][JulF]\n", + " y_test = y_test_target[month].copy()\n", + "\n", + " # step-1: create a cross-validation scheme\n", + " folds = KFold(n_splits = cv_splits, shuffle = True, random_state = 42)\n", + "\n", + "# step-2: specify range of hyperparameters to tune\n", + " if len(CorFeat) > 1 :\n", + " hyper_params = [{'n_features_to_select': list(range(1, len(CorFeat)))}]\n", + " \n", + "\n", + "# step-3: perform grid search\n", + "# 3.1 specify model, key to set intercept to false\n", + " trainmodel = model_type\n", + " trainmodel.fit(X_train, y_train)\n", + " rfe = RFE(trainmodel) \n", + "\n", + "# 3.2 call GridSearchCV()\n", + " model_cv = GridSearchCV(estimator = rfe, \n", + " param_grid = hyper_params, \n", + " scoring= scoring, \n", + " cv = folds, \n", + " verbose = 0,\n", + " return_train_score=True) \n", + "\n", + "# fit the model\n", + " model_cv.fit(X_train, y_train)\n", + "\n", + "# create a KFold object with 5 splits \n", + " folds = KFold(n_splits = cv_splits, shuffle = True, random_state = 42)\n", + " scores = cross_val_score(trainmodel, X_train, y_train, scoring=scoring, cv=folds)\n", + " # print('CV scores = ', scores) \n", + "\n", + "# cv results\n", + " cv_results = pd.DataFrame(model_cv.cv_results_)\n", + "\n", + " \n", + " #code to select features for final model, tell how many features\n", + " N_feat=cv_results.loc[cv_results['mean_test_score'].idxmax()]\n", + " N_feat=N_feat['param_n_features_to_select']\n", + " #print('Number of features to select is ', N_feat)\n", + " # intermediate model\n", + " n_features_optimal = N_feat\n", + "\n", + " Int_model = model_type\n", + " Int_model.fit(X_train, y_train)\n", + "\n", + " rfe = RFE(Int_model, n_features_to_select=n_features_optimal) \n", + " rfe = rfe.fit(X_train, y_train)\n", + "\n", + "#make the final model with rfe features\n", + "\n", + "# tuples of (feature name, whether selected, ranking)\n", + "# note that the 'rank' is > 1 for non-selected features\n", + "\n", + " Features =list(zip(X_train.columns,rfe.support_,rfe.ranking_))\n", + " FeaturesDF=pd.DataFrame(Features, columns=['Feature', 'Important', 'Score'])\n", + " FeaturesDF = FeaturesDF[FeaturesDF.Score<=1]\n", + " RFE_features = list(FeaturesDF['Feature'])\n", + " # print('The final features are ', RFE_features)\n", + " \n", + " #select only RFE features for model training/validation\n", + " X_train = X_train[RFE_features]\n", + " X_test = X_test[RFE_features]\n", + "\n", + " \n", + " #plot of selected features to make sure not colinear\n", + " CorDF= X_train.copy()\n", + " CorDF['Target_gpcd']=slc_train[month]['Target_gpcd']\n", + "\n", + " Final_model = model_type\n", + " Final_model.fit(X_train, y_train)\n", + " \n", + " #grab uncertainty stats\n", + " \n", + " # Uncertainty = sm.OLS(y_train, X_train).fit()\n", + " # print(Uncertainty.summary())\n", + " \n", + " \n", + " else:\n", + " \n", + " #Set up training and testing data to have a random non-correlated feature then\n", + " X_train = X_train_features[month]['HousingDensity'].copy()\n", + " X_test = X_test_features[month]['HousingDensity'].copy()\n", + " cv_results = 0\n", + " cor = 0\n", + " \n", + " len1 = len(X_train)\n", + " len2 = len(X_test)\n", + " \n", + " X_train = np.array(X_train).reshape(len1, 1)\n", + " X_test = np.array(X_test).reshape(len2, 1)\n", + " \n", + " Final_model = model_type\n", + " Final_model.fit(X_train, y_train)\n", + " \n", + " # Uncertainty = sm.OLS(y_train, X_train).fit()\n", + " # print(Uncertainty.summary())\n", + " \n", + " \n", + " # Get training data model performance to tune hyperparameters\n", + " yt_pred = Final_model.predict(X_train)\n", + " \n", + " yt_pred = [0 if x < 0 else x for x in yt_pred]\n", + " O_r2_train = sklearn.metrics.r2_score(y_train, yt_pred)\n", + " O_rmse_train = sklearn.metrics.mean_squared_error(y_train, yt_pred, squared = False)\n", + " \n", + "# predict X_test\n", + " y_pred = Final_model.predict(X_test)\n", + " \n", + " y_pred = [0 if x < 0 else x for x in y_pred]\n", + " O_r2_test = sklearn.metrics.r2_score(y_test, y_pred)\n", + " O_rmse_test = sklearn.metrics.mean_squared_error(y_test, y_pred, squared = False)\n", + " \n", + " \n", + "\n", + "#plot the predictions\n", + " PerfDF=pd.DataFrame(list(zip(y_pred, y_test)), columns=['y_pred', 'y_test'])\n", + "\n", + "#Add indoor demands\n", + " Indoor=['Jan', 'Feb', 'Mar', 'Nov', 'Dec']\n", + " if month in Indoor:\n", + " PerfDF['y_test_tot']=PerfDF['y_test']\n", + " PerfDF['y_pred_tot']=PerfDF['y_pred']\n", + " else:\n", + " PerfDF['y_test_tot']=PerfDF['y_test']+list(I_mean_test)\n", + " PerfDF['y_pred_tot']=PerfDF['y_pred']+list(Cons_mean_test)\n", + "\n", + " T_r2 = sklearn.metrics.r2_score(PerfDF['y_test_tot'], PerfDF['y_pred_tot'])\n", + " T_rmse= sklearn.metrics.mean_squared_error(PerfDF['y_test_tot'], PerfDF['y_pred_tot'], \n", + " squared = False)\n", + "\n", + " #print('Total R2 is ', T_r2)\n", + " #print('Total rmse is ', T_rmse)\n", + " \n", + "\n", + " PerfDF['Year'] = list(slc_test['Jul'].index)\n", + " PerfDF=PerfDF.set_index('Year')\n", + " \n", + "\n", + " datetime_object = datetime.datetime.strptime(month, \"%b\")\n", + " PerfDF['month'] = datetime_object.month\n", + " PerfDF['Year']=PerfDF.index\n", + " \n", + " \n", + " #set up dates so all months can be combined and sorted\n", + " day=[]\n", + " for index, row in PerfDF.iterrows():\n", + " day.append(calendar.monthrange(int(row['Year']), int(row['month']))[1])\n", + " \n", + " PerfDF['Day']=day\n", + " \n", + " PerfDF['Date'] = pd.to_datetime(PerfDF[['Year', 'month', 'Day']])\n", + " \n", + " #PerfDF=PerfDF.set_index('Date')\n", + " PerfDF=PerfDF.drop(columns=['Year', 'month', 'Day'])\n", + " PerfDF=PerfDF.reset_index()\n", + " \n", + " params = [snowfeatures, conservation, cor_threshold, colinearity_thresh]\n", + " \n", + " return X_test, PerfDF, O_rmse_train, O_r2_train ,O_rmse_test, O_r2_test , params, cv_results, cor , Final_model.coef_" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "'''\n", + "We want to see the trends for the training data,# and will want to have them modeled into the future based\n", + "on consevation goals\n", + "\n", + "From plots, There appears to be very little trends in training data. The last 10 years do show decreasing trends\n", + "likely due to conservation goals estabished in 2005\n", + "\n", + "\n", + "Thinking of a stepwise process:\n", + "1) identify any trends (training and testing): check, no trends in training. however in 2000, Utah established a \n", + " conservation goal. To reduce the gpcd water use by 25% by 2025. Evaluating water use from 2005-2017 shows a decline\n", + " in water use.\n", + "2) Determine conservation goals (annual reduction /yr, slope), over 25yrs a 75 gpcd reduction is requested (3gpcd/yr), check\n", + "3) Separately model indoor and outdoor demands per year. check \n", + "4) Training Outdoor demand (Apr-Oct) will be that month's total demand minus that years Jan-Mar mean indoor demand\n", + "5) Final model = modeled indoor demand - conservation reduction + Outdoor demand (if Apr-Oct).\n", + "'''\n", + "\n", + "def Outdoor_Demand_ModelFinal(TrainDF, month, X_train_features, y_train_target, X_test_features, y_test_target,\n", + " snowfeatures, conservation, cor_threshold, colinearity_thresh, cv_splits,\n", + " model_type, scoring ):\n", + " \n", + "\n", + "#subset these features out of main DF and put into cute heatmap plot\n", + " \n", + " DFcor = copy.deepcopy(TrainDF[month])\n", + " \n", + " #if snowfeatures is True:\n", + " # print('LCC Snowfeatures are being used')\n", + " Indoor=['Jan', 'Feb', 'Mar', 'Nov', 'Dec']\n", + " if snowfeatures is False:\n", + " if month in Indoor:\n", + " DFcor=DFcor\n", + " else:\n", + " snow=['Nov_snow_in','Dec_snow_in', 'Jan_snow_in','Feb_snow_in', \n", + " 'Mar_snow_in','Apr_snow_in', 'Total_snow_in', 'Snow_shortage']\n", + " DFcor=DFcor.drop(columns=snow)\n", + "\n", + " \n", + " cor=DFcor.copy()\n", + " if conservation is False:\n", + " del cor['cons_goal']\n", + " cor = cor.corr()\n", + " cor =cor.iloc[:,-1:]\n", + " if conservation is True:\n", + " cor = cor.corr()\n", + " cor =cor.iloc[:,-2:]\n", + " del cor['cons_goal']\n", + " \n", + " cor['Target_gpcd']=np.abs(cor['Target_gpcd'])\n", + " cor=cor.sort_values(by=['Target_gpcd'], ascending=False)\n", + " cor=cor.dropna()\n", + "\n", + "#Selecting highly correlated features\n", + " relevant_features = cor[cor['Target_gpcd']>cor_threshold]\n", + " CorFeat = list(relevant_features.index)\n", + "\n", + " CorDF= DFcor[CorFeat]\n", + " cor = np.abs(CorDF.corr())\n", + " cor = cor.mask(np.tril(np.ones(cor.shape)).astype(np.bool))\n", + " #remove colinearity\n", + " cor = cor[cor.columns[cor.max() < colinearity_thresh]]\n", + " CorFeat=cor.columns\n", + " cor = cor.T\n", + " cor = cor[CorFeat]\n", + " \n", + " #print('Remaining features are', CorFeat)\n", + "\n", + " \n", + " #Set up training and testing data \n", + " X_train = X_train_features[month][CorFeat].copy()\n", + "#X_train = slc_train_features['Jul'][JulF]\n", + " y_train = y_train_target[month].copy()\n", + "\n", + " X_test = X_test_features[month][CorFeat].copy()\n", + "#X_test = slc_test_features['Jul'][JulF]\n", + " y_test = y_test_target[month].copy()\n", + "\n", + " # step-1: create a cross-validation scheme\n", + " folds = KFold(n_splits = cv_splits, shuffle = True, random_state = 42)\n", + "\n", + "# step-2: specify range of hyperparameters to tune\n", + " if len(CorFeat) > 1 :\n", + " hyper_params = [{'n_features_to_select': list(range(1, len(CorFeat)))}]\n", + " \n", + "\n", + "# step-3: perform grid search\n", + "# 3.1 specify model, key to set intercept to false\n", + " trainmodel = model_type\n", + " trainmodel.fit(X_train, y_train)\n", + " rfe = RFE(trainmodel) \n", + "\n", + "# 3.2 call GridSearchCV()\n", + " model_cv = GridSearchCV(estimator = rfe, \n", + " param_grid = hyper_params, \n", + " scoring= scoring, \n", + " cv = folds, \n", + " verbose = 0,\n", + " return_train_score=True) \n", + "\n", + "# fit the model\n", + " model_cv.fit(X_train, y_train)\n", + "\n", + "# create a KFold object with 5 splits \n", + " folds = KFold(n_splits = cv_splits, shuffle = True, random_state = 42)\n", + " scores = cross_val_score(trainmodel, X_train, y_train, scoring=scoring, cv=folds)\n", + " # print('CV scores = ', scores) \n", + "\n", + "# cv results\n", + " cv_results = pd.DataFrame(model_cv.cv_results_)\n", + "\n", + " \n", + " #code to select features for final model, tell how many features\n", + " N_feat=cv_results.loc[cv_results['mean_test_score'].idxmax()]\n", + " N_feat=N_feat['param_n_features_to_select']\n", + " #print('Number of features to select is ', N_feat)\n", + " # intermediate model\n", + " n_features_optimal = N_feat\n", + "\n", + " Int_model = model_type\n", + " Int_model.fit(X_train, y_train)\n", + "\n", + " rfe = RFE(Int_model, n_features_to_select=n_features_optimal) \n", + " rfe = rfe.fit(X_train, y_train)\n", + "\n", + "#make the final model with rfe features\n", + "\n", + "# tuples of (feature name, whether selected, ranking)\n", + "# note that the 'rank' is > 1 for non-selected features\n", + "\n", + " Features =list(zip(X_train.columns,rfe.support_,rfe.ranking_))\n", + " FeaturesDF=pd.DataFrame(Features, columns=['Feature', 'Important', 'Score'])\n", + " FeaturesDF = FeaturesDF[FeaturesDF.Score<=1]\n", + " RFE_features = list(FeaturesDF['Feature'])\n", + " # print('The final features are ', RFE_features)\n", + " \n", + " #select only RFE features for model training/validation\n", + " X_train = X_train[RFE_features]\n", + " X_test = X_test[RFE_features]\n", + "\n", + " \n", + " #plot of selected features to make sure not colinear\n", + " CorDF= X_train.copy()\n", + " CorDF['Target_gpcd']=slc_train[month]['Target_gpcd']\n", + "\n", + " Final_model = model_type\n", + " Final_model.fit(X_train, y_train)\n", + " \n", + " #grab uncertainty stats\n", + " \n", + " Uncertainty = sm.OLS(y_train, X_train).fit()\n", + " print(Uncertainty.summary())\n", + " \n", + " \n", + " else:\n", + " \n", + " #Set up training and testing data to have a random non-correlated feature then\n", + " X_train = X_train_features[month]['HousingDensity'].copy()\n", + " X_test = X_test_features[month]['HousingDensity'].copy()\n", + " cv_results = 0\n", + " cor = 0\n", + " \n", + " len1 = len(X_train)\n", + " len2 = len(X_test)\n", + " \n", + " X_train = np.array(X_train).reshape(len1, 1)\n", + " X_test = np.array(X_test).reshape(len2, 1)\n", + " \n", + " Final_model = model_type\n", + " Final_model.fit(X_train, y_train)\n", + " \n", + " Uncertainty = sm.OLS(y_train, X_train).fit()\n", + " print(Uncertainty.summary())\n", + " \n", + " \n", + " # Get training data model performance to tune hyperparameters\n", + " yt_pred = Final_model.predict(X_train)\n", + " \n", + " yt_pred = [0 if x < 0 else x for x in yt_pred]\n", + " O_r2_train = sklearn.metrics.r2_score(y_train, yt_pred)\n", + " O_rmse_train = sklearn.metrics.mean_squared_error(y_train, yt_pred, squared = False)\n", + " \n", + "# predict X_test\n", + " y_pred = Final_model.predict(X_test)\n", + " \n", + " y_pred = [0 if x < 0 else x for x in y_pred]\n", + " O_r2_test = sklearn.metrics.r2_score(y_test, y_pred)\n", + " O_rmse_test = sklearn.metrics.mean_squared_error(y_test, y_pred, squared = False)\n", + "\n", + "\n", + "#Predict using uncertainties\n", + " Uy_pred = Uncertainty.get_prediction(X_test)\n", + " Uy_pred = Uy_pred.summary_frame()\n", + " print(Uy_pred)\n", + " lower = np.array(Uy_pred['mean_ci_lower'])\n", + " #cannot have values below zero\n", + " lower = [0 if x < 0 else x for x in lower]\n", + " \n", + " upper = np.array(Uy_pred['mean_ci_upper'])\n", + " \n", + " #plot the predictions\n", + " PerfDF=pd.DataFrame(list(zip(y_test, y_pred)), columns=['y_test', 'y_pred'])\n", + " PerfDF['y_pred_lower'] = lower\n", + " PerfDF['y_pred_upper'] = upper\n", + " \n", + " \n", + " \n", + "\n", + "#Add indoor demands\n", + " Indoor=['Jan', 'Feb', 'Mar', 'Nov', 'Dec']\n", + " if month in Indoor:\n", + " PerfDF['y_test_tot']=PerfDF['y_test']\n", + " PerfDF['y_pred_tot']=PerfDF['y_pred']\n", + " else:\n", + " PerfDF['y_test_tot']=PerfDF['y_test']+list(I_mean_test)\n", + " PerfDF['y_pred_tot']=PerfDF['y_pred']+list(Cons_mean_test)\n", + " PerfDF['y_pred_lower_tot']=PerfDF['y_pred_lower']+list(Cons_mean_test)\n", + " PerfDF['y_pred_upper_tot']=PerfDF['y_pred_upper']+list(Cons_mean_test)\n", + "\n", + " T_r2 = sklearn.metrics.r2_score(PerfDF['y_test_tot'], PerfDF['y_pred_tot'])\n", + " T_rmse= sklearn.metrics.mean_squared_error(PerfDF['y_test_tot'], PerfDF['y_pred_tot'], \n", + " squared = False)\n", + "\n", + "\n", + " PerfDF['Year'] = list(slc_test['Jul'].index)\n", + " PerfDF=PerfDF.set_index('Year')\n", + " \n", + "\n", + " datetime_object = datetime.datetime.strptime(month, \"%b\")\n", + " PerfDF['month'] = datetime_object.month\n", + " PerfDF['Year']=PerfDF.index\n", + " \n", + " \n", + " #set up dates so all months can be combined and sorted\n", + " day=[]\n", + " for index, row in PerfDF.iterrows():\n", + " day.append(calendar.monthrange(int(row['Year']), int(row['month']))[1])\n", + " \n", + " PerfDF['Day']=day\n", + " \n", + " PerfDF['Date'] = pd.to_datetime(PerfDF[['Year', 'month', 'Day']])\n", + " \n", + " #PerfDF=PerfDF.set_index('Date')\n", + " PerfDF=PerfDF.drop(columns=['Year', 'month', 'Day'])\n", + " PerfDF=PerfDF.reset_index()\n", + " \n", + " \n", + " params = [snowfeatures, conservation, cor_threshold, colinearity_thresh]\n", + " return X_test, PerfDF, O_rmse_train, O_r2_train ,O_rmse_test, O_r2_test , params, cv_results, cor , Final_model.coef_" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "def Indoor_Demand_Model(df, month):\n", + " #Make matching indoor demand model\n", + " datetime_object = datetime.datetime.strptime(month, \"%b\")\n", + " df[month]['month'] = datetime_object.month\n", + " \n", + " df[month]['Year']=df[month].index\n", + " \n", + " #set up dates so all months can be combined and sorted\n", + " day=[]\n", + " for index, row in df[month].iterrows():\n", + " day.append(calendar.monthrange(int(row['Year']), int(row['month']))[1])\n", + " \n", + " df[month]['Day']=day\n", + " \n", + " \n", + " df[month]['Date'] = pd.to_datetime(df[month][['Year', 'month', 'Day']])\n", + " \n", + " #PerfDF=PerfDF.set_index('Date')\n", + " df[month]=df[month].drop(columns=['month', 'Day'])\n", + " df[month]=df[month].reset_index(drop=True)\n", + " \n", + " \n", + " colrem = slc_test[i].columns\n", + " df[month]['y_pred'] = df[month]['cons_goal']\n", + " df[month]['y_test'] = df[month]['Target_gpcd']\n", + " df[month]['y_pred_tot'] = df[month]['cons_goal']\n", + " df[month]['y_test_tot'] = df[month]['Target_gpcd']\n", + " \n", + " df[month] = df[month].set_index('Date')\n", + " \n", + " df[month] = df[month].drop(columns=colrem)\n", + " \n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "plt.rcParams[\"axes.grid\"] = False\n", + "plt.rcParams[\"axes.facecolor\"] ='white'\n", + "#plt.rcParams[\"axes.edgecolor\"]['bottom'] = 'black'\n", + "\n", + "def gradientbars_sliced(bars):\n", + " ax = bars[0].axes\n", + " xmin, xmax = ax.get_xlim()\n", + " ymin, ymax = ax.get_ylim()\n", + " for bar in bars:\n", + " bar.set_zorder(1)\n", + " bar.set_facecolor(\"none\")\n", + " x, y = bar.get_xy()\n", + " w, h = bar.get_width(), bar.get_height()\n", + " grad = np.linspace(y, y + h, 256).reshape(256, 1)\n", + " ax.imshow(grad, extent=[x, x + w, y, y + h], aspect=\"auto\", zorder=0, origin='lower',\n", + " vmin= - max(np.abs(ymin), ymax), vmax=max(np.abs(ymin), ymax), cmap='Spectral')\n", + " ax.axis([xmin, xmax, ymin, ymax])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "def model_plots(PerfDF, cv_results,cor, X_test_RFE, coef, scoring, month):\n", + " \n", + " plotmin = PerfDF[['y_pred', 'y_test']].min().min()\n", + " plotmax = PerfDF[['y_pred', 'y_test']].max().max()\n", + " \n", + " plotmin_tot = PerfDF[['y_pred_tot', 'y_test_tot']].min().min()\n", + " plotmax_tot = PerfDF[['y_pred_tot', 'y_test_tot']].max().max()\n", + " \n", + " # plotting cv results\n", + " plt.figure(figsize=(12,10))\n", + " sns.heatmap(cor, annot=True, cmap=plt.cm.Reds)\n", + " plt.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/' + month + '_corMatrix.pdf')\n", + " plt.show()\n", + " \n", + " fig, ax = plt.subplots(3,3, constrained_layout=True)\n", + " fig.set_size_inches(9,10)\n", + "\n", + "\n", + " ax[0,0].plot(cv_results[\"param_n_features_to_select\"], cv_results[\"mean_test_score\"])\n", + " ax[0,0].plot(cv_results[\"param_n_features_to_select\"], cv_results[\"mean_train_score\"])\n", + " ax[0,0].set_xlabel('number of features')\n", + " ax[0,0].set_ylabel(scoring)\n", + " ax[0,0].set_title(\"Optimal Number of Features\")\n", + " ax[0,0].legend(['test score', 'train score'], loc='upper left')\n", + " ax[0,0].spines['bottom'].set_color('black')\n", + " ax[0,0].spines['left'].set_color('black')\n", + "\n", + " ax[0,1].scatter(PerfDF['y_test'], PerfDF['y_pred'],color='blue', alpha=0.5)\n", + " ax[0,1].set_ylabel('Predicted')\n", + " ax[0,1].set_xlabel('Observed')\n", + " ax[0,1].set_ylim(plotmin-5,plotmax+5)\n", + " ax[0,1].set_xlim(plotmin-5,plotmax+5)\n", + " ax[0,1].set_title('Outdoor Model Performance')\n", + " ax[0,1].plot([plotmin,plotmax],[plotmin,plotmax], color='red', linestyle='--' )\n", + " ax[0,1].spines['bottom'].set_color('black')\n", + " ax[0,1].spines['left'].set_color('black')\n", + " \n", + " ax[0,2].scatter(PerfDF['y_test_tot'], PerfDF['y_pred_tot'],color='blue', alpha=0.5)\n", + " ax[0,2].set_ylabel('Predicted')\n", + " ax[0,2].set_xlabel('Observed')\n", + " ax[0,2].set_ylim(plotmin_tot-5,plotmax_tot+5)\n", + " ax[0,2].set_xlim(plotmin_tot-5,plotmax_tot+5)\n", + " ax[0,2].set_title('Indoor and Outdoor \\n Model Performance')\n", + " ax[0,2].plot([plotmin_tot,plotmax_tot],[plotmin_tot,plotmax_tot], color='red', linestyle='--' )\n", + " ax[0,2].spines['bottom'].set_color('black')\n", + " ax[0,2].spines['left'].set_color('black')\n", + "\n", + " \n", + " \n", + " \n", + " gs = ax[1, 1].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[1,0].remove()\n", + " ax[1,1].remove()\n", + " ax[1,2].remove()\n", + "\n", + " PerfDF['Error'] = (PerfDF['y_pred']-PerfDF['y_test'])\n", + " axbig1 = fig.add_subplot(gs[1, :])\n", + " axbig1.set_title(month+' Outdoor demand Timeline Evaluation')\n", + " axbig1.axhline(y = 0 , color = 'black')\n", + " #axbig1.bar(PerfDF.index, PerfDF['y_pred'], color='orange', label='Predicted')\n", + " Error1 = axbig1.bar(PerfDF.index, PerfDF['Error'],color='blue', label='Prediction Error')\n", + " axbig1.set_xlabel('Year')\n", + " axbig1.set_ylabel('Error (GPCD)')\n", + " axbig1.spines['bottom'].set_color('black')\n", + " axbig1.spines['left'].set_color('black')\n", + " gradientbars_sliced(Error1)\n", + " \n", + " \n", + " gs2 = ax[2, 1].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[2,0].remove()\n", + " ax[2,1].remove()\n", + " ax[2,2].remove()\n", + "\n", + " #create error value\n", + " PerfDF['Error_tot'] = (PerfDF['y_pred_tot']-PerfDF['y_test_tot'])\n", + " \n", + " axbig2 = fig.add_subplot(gs2[2, :])\n", + " axbig2.set_title(month+' Total Demand Error Timeline Evaluation')\n", + " Error2 = axbig2.bar(PerfDF.index, PerfDF['Error_tot'], color='blue', label='Predicted')\n", + " axbig2.axhline(y = 0 , color = 'black')\n", + " #axbig2.bar(PerfDF.index, PerfDF['y_test_tot'],color='blue', label='Observed')\n", + " axbig2.set_xlabel('Year')\n", + " axbig2.set_ylabel('Error (GPCD)')\n", + " axbig2.spines['bottom'].set_color('black')\n", + " axbig2.spines['left'].set_color('black')\n", + " gradientbars_sliced(Error2)\n", + " \n", + " fig.suptitle(month+ ' Evaluation', size = 16)\n", + " fig.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/' + month + '_demand.pdf') \n", + " \n", + " O_r2 = sklearn.metrics.r2_score(PerfDF['y_test'],PerfDF['y_pred'])\n", + " O_rmse= sklearn.metrics.mean_squared_error(PerfDF['y_test'],PerfDF['y_pred'], squared = False)\n", + " O_mae= sklearn.metrics.mean_absolute_error(PerfDF['y_test'],PerfDF['y_pred'])\n", + " O_mape= sklearn.metrics.mean_absolute_percentage_error(PerfDF['y_test'],PerfDF['y_pred'])\n", + " \n", + " T_r2 = sklearn.metrics.r2_score(PerfDF['y_test_tot'],PerfDF['y_pred_tot'])\n", + " T_rmse= sklearn.metrics.mean_squared_error(PerfDF['y_test_tot'],PerfDF['y_pred_tot'], squared = False)\n", + " T_mae= sklearn.metrics.mean_absolute_error(PerfDF['y_test_tot'],PerfDF['y_pred_tot'])\n", + " T_mape= sklearn.metrics.mean_absolute_percentage_error(PerfDF['y_test_tot'],PerfDF['y_pred_tot'])\n", + " \n", + " print('The outdoor Demand prediction RMSE is ', O_rmse)\n", + " print('The outdoor Demand prediction R2 is ', O_r2)\n", + " \n", + " print('The Total Demand prediction RMSE is ', T_rmse)\n", + " print('The Total Demand prediction R2 is ', T_r2)\n", + " print('The Total Demand prediction MAE is ', T_mae)\n", + " print('The Total Demand prediction MAPE is ', T_mape, '%') \n", + " \n", + " print('The final set of features for ' + month + ' are', list(X_test_RFE.columns))\n", + " print('The coefficients for each feature are', coef)\n", + " #set DF up so that all months can be easily combined, basically year-month index" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [], + "source": [ + "#make an optimization function\n", + "#put in your parameter dictionary, month of interest, and scoring method (RMSE or R2)\n", + "def Demand_Optimization(Param_dict, month, scoring):\n", + " print('The automated algorithm automatically optimizes the respective model by looping over input parameters within')\n", + " print('the training data. In addiiton, the algorithm checks for colinearity between features, removing the one with')\n", + " print('less correlation to the target.')\n", + " param_list = []\n", + " performance_list=[]\n", + " for i in Param_dict['snowfeatures']:\n", + " # print('Snowfeatures is ' + str(i))\n", + " for j in Param_dict['conservation']:\n", + " # print('Conservation is ' + str(j))\n", + " for k in Param_dict['cor_threshold']:\n", + " # print('Correlation threshold: ', k)\n", + " #pbar = ProgressBar()\n", + " for l in Param_dict['colinearity_thresh']:\n", + " # print('Colinearity threshold: ', l)\n", + " X_test_RFE, PerfDF, O_rmse_train,O_r2_train, O_rmse_test, O_r2_test, params, cv_results, cor, coef = Outdoor_Demand_Model(slc_train, month, \n", + " slc_train_features, slc_train_target, slc_test_features,slc_test_target, \n", + " snowfeatures= i, conservation = j, cor_threshold = k, colinearity_thresh = l, cv_splits = 5,\n", + " model_type = linear_model.Ridge(fit_intercept = False, alpha=1), \n", + " scoring = 'neg_root_mean_squared_error')\n", + " param_list.append(params)\n", + " if scoring =='R2':\n", + " performance_list.append(O_r2_test)\n", + " if scoring =='RMSE':\n", + " performance_list.append(O_rmse_test)\n", + " \n", + " \n", + " \n", + " #take model performances and put into DF so they can be joined and sorted \n", + " ParamDF = pd.DataFrame(param_list, columns =list(Param_dict.keys()))\n", + " PerfDF = pd.DataFrame(performance_list, columns =[scoring]) \n", + " ParamEval = pd.concat([ParamDF, PerfDF], axis=1) \n", + " \n", + " if scoring =='R2':\n", + " ParamEval = ParamEval.sort_values(by=[scoring], ascending = False)\n", + " else:\n", + " ParamEval = ParamEval.sort_values(by=[scoring])\n", + " \n", + " #select the first row of parameters as this is the one that shows the greatest performance\n", + " ParamEval=ParamEval.head(1)\n", + " \n", + " X_test_RFE, PerfDF, O_rmse_train,O_r2_train,O_rmse_test, O_r2_test, params, cv_results, cor, coef = Outdoor_Demand_ModelFinal(slc_train, month, \n", + " slc_train_features, slc_train_target, slc_test_features,slc_test_target, \n", + " snowfeatures= list(ParamEval['snowfeatures'])[0] , \n", + " conservation = list(ParamEval['conservation'])[0],\n", + " cor_threshold = list(ParamEval['cor_threshold'])[0],\n", + " colinearity_thresh = list(ParamEval['colinearity_thresh'])[0],\n", + " cv_splits = 5, model_type = linear_model.Ridge(fit_intercept = False, alpha=1), \n", + " scoring = 'neg_root_mean_squared_error')\n", + " # model_plots(PerfDF, cv_results, cor, X_test_RFE, coef, scoring, month)\n", + " print('The best training parameters are below with their scoring method: ', scoring)\n", + " print(ParamEval)\n", + " return PerfDF, cv_results, cor, X_test_RFE, coef" + ] + }, + { + "cell_type": "code", + "execution_count": 237, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#Make a function to put all of the predictions together\n", + "def Demand_Forecast(prediction_dictionary, pdict, df, pred, test, units, plotname, model, predcol, obscol):\n", + " FinalDF=pd.DataFrame()\n", + " if pdict is True:\n", + " print('yes')\n", + " for i in prediction_dictionary:\n", + " FinalDF=FinalDF.append(prediction_dictionary[i])\n", + "\n", + " FinalDF=FinalDF.sort_index()\n", + " else:\n", + " print('pdict is not used')\n", + " FinalDF = df\n", + " \n", + " #adjust date range to improve figure\n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2017,12,1), freq='MS')\n", + " #FinalDF['Date'] = Conditions\n", + " \n", + " FinalDF.index = FinalDF['Date']\n", + " del FinalDF['Date']\n", + " \n", + "\n", + "\n", + " plotmin_tot = FinalDF[[pred, test]].min().min()\n", + " plotmax_tot = FinalDF[[pred, test]].max().max()\n", + " \n", + " Xplotmin = FinalDF.index[0]-np.timedelta64(20, 'D')\n", + " Xplotmax = FinalDF.index[-1]+np.timedelta64(33, 'D')\n", + " \n", + " plt.rc_context({ 'xtick.color':'black'})\n", + " fig, ax = plt.subplots(1,6, constrained_layout=True)\n", + " fig.set_size_inches(9,3.5)\n", + "\n", + " gs2 = ax[0].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[0].remove()\n", + " ax[1].remove()\n", + " ax[2].remove()\n", + " ax[3].remove()\n", + " axbig = fig.add_subplot(gs2[:4])\n", + " #axbig.set_title('Total demand Timeline Evaluation')\n", + " # axbig.plot(FinalDF[pred], color='orange', label= model)\n", + " #axbig.plot(FinalDF[test],color='blue', label='Observed')\n", + " axbig.bar(FinalDF.index-np.timedelta64(7, 'D'), FinalDF[pred], color=predcol, label= model ,width = 15, align=\"center\")\n", + " axbig.bar(FinalDF.index+np.timedelta64(8, 'D'), FinalDF[test], color=obscol, label= 'Observed',width = 15, align=\"center\")\n", + " axbig.set_xlabel('Wet Dry Average \\n \\n Supply Scenario')\n", + " axbig.set_ylim(plotmin_tot-.9,plotmax_tot*1.3)\n", + " axbig.set_xlim(Xplotmin, Xplotmax)\n", + " axbig.set_ylabel('Demand ('+ units+')')\n", + " axbig.legend(loc = 'upper left', facecolor = 'white')\n", + " axbig.set_facecolor(\"white\")\n", + " axbig.spines['bottom'].set_color('black')\n", + " axbig.spines['left'].set_color('black')\n", + " axbig.tick_params(axis='both', which='both', length=5, color='red')\n", + " axbig.xaxis.set_major_locator(mdates.MonthLocator())\n", + " # Get only the month to show in the x-axis:\n", + " axbig.xaxis.set_major_formatter(mdates.DateFormatter('%b'))\n", + "\n", + " axbig.annotate('A.', (FinalDF.index[-1], plotmax_tot*1.2), size = 14)\n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " months = [0,5,10,12,17,22,24,29,34]\n", + " \n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " for i,tick in enumerate(xticks):\n", + " #if i%5.5 != 0:\n", + " if i not in months:\n", + " tick.label1.set_visible(False)\n", + " \n", + "\n", + " ax[4].remove()\n", + " ax[5].remove()\n", + "\n", + "\n", + " axbig2 = fig.add_subplot(gs2[4:])\n", + " axbig2.scatter(FinalDF[test], FinalDF[pred],color=predcol, alpha=0.5)\n", + " axbig2.set_ylabel('Predicted (' + units+')' )\n", + " axbig2.set_xlabel('Observed (' + units+')')\n", + " axbig2.set_ylim(plotmin_tot*.95,plotmax_tot*1.2)\n", + " axbig2.set_xlim(plotmin_tot*.95,plotmax_tot*1.2)\n", + " # axbig2.set_title('Indoor and Outdoor \\n Model Performance')\n", + " axbig2.plot([plotmin_tot,plotmax_tot],[plotmin_tot,plotmax_tot], color='black', linestyle='--' )\n", + " #axbig2.set_xticks(np.arange(plotmin_tot, plotmax_tot, 100).round())\n", + " #axbig2.set_yticks(np.arange(plotmin_tot, plotmax_tot, 100).round())\n", + " axbig2.set_facecolor(\"white\")\n", + " axbig2.spines['bottom'].set_color('black')\n", + " axbig2.spines['left'].set_color('black')\n", + " axbig2.annotate('B.', (2050,plotmax_tot*1.1), size = 14)\n", + " axbig2.set_xticks(np.arange(300, 2301, 500))\n", + " axbig2.set_yticks(np.arange(300, 2301, 500))\n", + " fig.tight_layout(pad=0.5)\n", + " \n", + " fig.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/' +str(plotname)+'.png', dpi = 300)\n", + " r2 = sklearn.metrics.r2_score(FinalDF[test], FinalDF[pred])\n", + " MAE= sklearn.metrics.mean_absolute_error(FinalDF[test], FinalDF[pred])\n", + " RMSE= sklearn.metrics.mean_squared_error(FinalDF[test], FinalDF[pred], squared = False)\n", + " MAPE=np.mean(np.abs((FinalDF[test]- FinalDF[pred])/FinalDF[test])*100)\n", + "\n", + " print('Total R2 is ', r2)\n", + " print('Total MAE is ', MAE)\n", + " print('Total RMSE is ', RMSE)\n", + " print('Total MAPE is ', MAPE)\n", + " \n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2018,1,1), freq='M')\n", + " FinalDF.index = FinalDF['Date']\n", + " del FinalDF['Date']\n", + " return FinalDF" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0% | |\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The model is automatically selecting features and calibrating the Apr outdoor demand model.\n", + "The automated algorithm automatically optimizes the respective model by looping over input parameters within\n", + "the training data. In addiiton, the algorithm checks for colinearity between features, removing the one with\n", + "less correlation to the target.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 14% |########## |\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " OLS Regression Results \n", + "=======================================================================================\n", + "Dep. Variable: Target_gpcd R-squared (uncentered): 0.890\n", + "Model: OLS Adj. R-squared (uncentered): 0.873\n", + "Method: Least Squares F-statistic: 52.42\n", + "Date: Tue, 02 Nov 2021 Prob (F-statistic): 4.51e-12\n", + "Time: 12:15:54 Log-Likelihood: -125.98\n", + "No. Observations: 30 AIC: 260.0\n", + "Df Residuals: 26 BIC: 265.6\n", + "Df Model: 4 \n", + "Covariance Type: nonrobust \n", + "===================================================================================================\n", + " coef std err t P>|t| [0.025 0.975]\n", + "---------------------------------------------------------------------------------------------------\n", + "Val_Apr_Monthly_mean_Day_temp_C 5.6739 1.423 3.988 0.000 2.750 8.598\n", + "Val_Apr_Monthly_precip_mm -0.3083 0.091 -3.403 0.002 -0.495 -0.122\n", + "LitCotCrk_AcFt_WR_Apr 0.0073 0.005 1.429 0.165 -0.003 0.018\n", + "LitCotCrk_AcFt_WR_Mar -0.0120 0.006 -2.047 0.051 -0.024 5.2e-05\n", + "==============================================================================\n", + "Omnibus: 0.588 Durbin-Watson: 1.496\n", + "Prob(Omnibus): 0.745 Jarque-Bera (JB): 0.641\n", + "Skew: -0.291 Prob(JB): 0.726\n", + "Kurtosis: 2.581 Cond. No. 1.55e+03\n", + "==============================================================================\n", + "\n", + "Notes:\n", + "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", + "[2] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + "[3] The condition number is large, 1.55e+03. This might indicate that there are\n", + "strong multicollinearity or other numerical problems.\n", + " mean mean_se mean_ci_lower mean_ci_upper obs_ci_lower \\\n", + "Year \n", + "2008 19.529015 2.301277 14.798673 24.259356 -16.383501 \n", + "2015 41.320810 10.015243 20.734183 61.907437 0.197315 \n", + "2017 0.366781 7.873727 -15.817896 16.551459 -38.739183 \n", + "\n", + " obs_ci_upper \n", + "Year \n", + "2008 55.441531 \n", + "2015 82.444306 \n", + "2017 39.472746 \n", + "The best training parameters are below with their scoring method: RMSE\n", + " snowfeatures conservation cor_threshold colinearity_thresh RMSE\n", + "285 False False 0.25 0.8 10.091413\n", + "The model is automatically selecting features and calibrating the May outdoor demand model.\n", + "The automated algorithm automatically optimizes the respective model by looping over input parameters within\n", + "the training data. In addiiton, the algorithm checks for colinearity between features, removing the one with\n", + "less correlation to the target.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 28% |#################### |\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " OLS Regression Results \n", + "=======================================================================================\n", + "Dep. Variable: Target_gpcd R-squared (uncentered): 0.966\n", + "Model: OLS Adj. R-squared (uncentered): 0.963\n", + "Method: Least Squares F-statistic: 396.0\n", + "Date: Tue, 02 Nov 2021 Prob (F-statistic): 2.93e-21\n", + "Time: 12:16:54 Log-Likelihood: -143.30\n", + "No. Observations: 30 AIC: 290.6\n", + "Df Residuals: 28 BIC: 293.4\n", + "Df Model: 2 \n", + "Covariance Type: nonrobust \n", + "===================================================================================================\n", + " coef std err t P>|t| [0.025 0.975]\n", + "---------------------------------------------------------------------------------------------------\n", + "Val_May_Monthly_precip_mm -1.0508 0.144 -7.311 0.000 -1.345 -0.756\n", + "Val_May_Monthly_mean_Day_temp_C 14.2887 0.686 20.821 0.000 12.883 15.695\n", + "==============================================================================\n", + "Omnibus: 2.504 Durbin-Watson: 1.791\n", + "Prob(Omnibus): 0.286 Jarque-Bera (JB): 1.341\n", + "Skew: -0.154 Prob(JB): 0.511\n", + "Kurtosis: 2.011 Cond. No. 9.13\n", + "==============================================================================\n", + "\n", + "Notes:\n", + "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", + "[2] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + " mean mean_se mean_ci_lower mean_ci_upper obs_ci_lower \\\n", + "Year \n", + "2008 126.248484 4.538397 116.951999 135.544969 64.649013 \n", + "2015 39.386196 14.451868 9.782886 68.989506 -28.322195 \n", + "2017 151.272228 5.609640 139.781402 162.763053 89.303612 \n", + "\n", + " obs_ci_upper \n", + "Year \n", + "2008 187.847955 \n", + "2015 107.094587 \n", + "2017 213.240843 \n", + "The best training parameters are below with their scoring method: RMSE\n", + " snowfeatures conservation cor_threshold colinearity_thresh RMSE\n", + "143 True False 0.45 0.9 26.5945\n", + "The model is automatically selecting features and calibrating the Jun outdoor demand model.\n", + "The automated algorithm automatically optimizes the respective model by looping over input parameters within\n", + "the training data. In addiiton, the algorithm checks for colinearity between features, removing the one with\n", + "less correlation to the target.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 42% |############################## |\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " OLS Regression Results \n", + "=======================================================================================\n", + "Dep. Variable: Target_gpcd R-squared (uncentered): 0.986\n", + "Model: OLS Adj. R-squared (uncentered): 0.984\n", + "Method: Least Squares F-statistic: 460.1\n", + "Date: Tue, 02 Nov 2021 Prob (F-statistic): 1.03e-23\n", + "Time: 12:18:10 Log-Likelihood: -150.87\n", + "No. Observations: 30 AIC: 309.7\n", + "Df Residuals: 26 BIC: 315.3\n", + "Df Model: 4 \n", + "Covariance Type: nonrobust \n", + "===================================================================================================\n", + " coef std err t P>|t| [0.025 0.975]\n", + "---------------------------------------------------------------------------------------------------\n", + "Val_Jun_Monthly_precip_mm -1.9853 0.321 -6.189 0.000 -2.645 -1.326\n", + "Val_Apr_Monthly_mean_Day_temp_C 8.8988 5.404 1.647 0.112 -2.209 20.007\n", + "Total_snow_in 0.1184 0.059 2.009 0.055 -0.003 0.240\n", + "Val_May_Monthly_mean_Day_temp_C 14.9764 4.592 3.262 0.003 5.538 24.415\n", + "==============================================================================\n", + "Omnibus: 1.882 Durbin-Watson: 2.115\n", + "Prob(Omnibus): 0.390 Jarque-Bera (JB): 1.595\n", + "Skew: 0.427 Prob(JB): 0.450\n", + "Kurtosis: 2.260 Cond. No. 511.\n", + "==============================================================================\n", + "\n", + "Notes:\n", + "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", + "[2] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + " mean mean_se mean_ci_lower mean_ci_upper obs_ci_lower \\\n", + "Year \n", + "2008 254.089758 19.025383 214.982524 293.196992 163.575060 \n", + "2015 258.924102 15.043521 228.001702 289.846501 171.633039 \n", + "2017 282.112409 23.114831 234.599193 329.625625 187.661149 \n", + "\n", + " obs_ci_upper \n", + "Year \n", + "2008 344.604456 \n", + "2015 346.215165 \n", + "2017 376.563669 \n", + "The best training parameters are below with their scoring method: RMSE\n", + " snowfeatures conservation cor_threshold colinearity_thresh RMSE\n", + "136 True False 0.4 0.85 17.425846\n", + "The model is automatically selecting features and calibrating the Jul outdoor demand model.\n", + "The automated algorithm automatically optimizes the respective model by looping over input parameters within\n", + "the training data. In addiiton, the algorithm checks for colinearity between features, removing the one with\n", + "less correlation to the target.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 57% |######################################### |\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " OLS Regression Results \n", + "=======================================================================================\n", + "Dep. Variable: Target_gpcd R-squared (uncentered): 0.988\n", + "Model: OLS Adj. R-squared (uncentered): 0.986\n", + "Method: Least Squares F-statistic: 522.4\n", + "Date: Tue, 02 Nov 2021 Prob (F-statistic): 2.02e-24\n", + "Time: 12:19:28 Log-Likelihood: -156.68\n", + "No. Observations: 30 AIC: 321.4\n", + "Df Residuals: 26 BIC: 327.0\n", + "Df Model: 4 \n", + "Covariance Type: nonrobust \n", + "===================================================================================================\n", + " coef std err t P>|t| [0.025 0.975]\n", + "---------------------------------------------------------------------------------------------------\n", + "UrbPopulationDensity -0.0769 0.022 -3.538 0.002 -0.122 -0.032\n", + "Val_Jul_Monthly_mean_Day_temp_C 31.6954 6.407 4.947 0.000 18.525 44.866\n", + "Val_Apr_Monthly_mean_Day_temp_C -4.2770 6.276 -0.681 0.502 -17.178 8.624\n", + "Val_May_Monthly_mean_Day_temp_C 9.6645 6.183 1.563 0.130 -3.046 22.375\n", + "==============================================================================\n", + "Omnibus: 1.375 Durbin-Watson: 1.302\n", + "Prob(Omnibus): 0.503 Jarque-Bera (JB): 1.086\n", + "Skew: -0.231 Prob(JB): 0.581\n", + "Kurtosis: 2.191 Cond. No. 5.95e+03\n", + "==============================================================================\n", + "\n", + "Notes:\n", + "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", + "[2] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + "[3] The condition number is large, 5.95e+03. This might indicate that there are\n", + "strong multicollinearity or other numerical problems.\n", + " mean mean_se mean_ci_lower mean_ci_upper obs_ci_lower \\\n", + "Year \n", + "2008 392.298136 24.633336 341.663589 442.932683 281.041420 \n", + "2015 275.899403 29.661024 214.930296 336.868511 159.574722 \n", + "2017 381.050537 26.890024 325.777301 436.323773 267.607467 \n", + "\n", + " obs_ci_upper \n", + "Year \n", + "2008 503.554852 \n", + "2015 392.224085 \n", + "2017 494.493607 \n", + "The best training parameters are below with their scoring method: RMSE\n", + " snowfeatures conservation cor_threshold colinearity_thresh RMSE\n", + "283 False False 0.25 0.7 18.99765\n", + "The model is automatically selecting features and calibrating the Aug outdoor demand model.\n", + "The automated algorithm automatically optimizes the respective model by looping over input parameters within\n", + "the training data. In addiiton, the algorithm checks for colinearity between features, removing the one with\n", + "less correlation to the target.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 71% |################################################### |\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " OLS Regression Results \n", + "=======================================================================================\n", + "Dep. Variable: Target_gpcd R-squared (uncentered): 0.997\n", + "Model: OLS Adj. R-squared (uncentered): 0.995\n", + "Method: Least Squares F-statistic: 424.9\n", + "Date: Tue, 02 Nov 2021 Prob (F-statistic): 1.09e-18\n", + "Time: 12:21:06 Log-Likelihood: -133.17\n", + "No. Observations: 30 AIC: 292.3\n", + "Df Residuals: 17 BIC: 310.6\n", + "Df Model: 13 \n", + "Covariance Type: nonrobust \n", + "===================================================================================================\n", + " coef std err t P>|t| [0.025 0.975]\n", + "---------------------------------------------------------------------------------------------------\n", + "Val_Aug_Monthly_precip_mm -1.8261 0.319 -5.724 0.000 -2.499 -1.153\n", + "UrbPopulationDensity -0.0313 0.016 -1.984 0.064 -0.065 0.002\n", + "LitCotCrk_AcFt_WR_Apr 0.0070 0.013 0.559 0.584 -0.020 0.034\n", + "Val_Apr_Monthly_mean_Day_temp_C 6.0210 6.911 0.871 0.396 -8.559 20.601\n", + "Val_Aug_Monthly_mean_Day_temp_C 15.6568 5.399 2.900 0.010 4.266 27.047\n", + "LitCotCrk_AcFt_WR_Mar 0.0096 0.015 0.659 0.519 -0.021 0.040\n", + "Val_Apr_Monthly_precip_mm -0.2877 0.253 -1.136 0.272 -0.822 0.246\n", + "Val_May_Monthly_mean_Day_temp_C 12.1470 6.661 1.823 0.086 -1.907 26.201\n", + "Val_Jul_Monthly_mean_Day_temp_C 0.9390 5.532 0.170 0.867 -10.732 12.610\n", + "Val_Jun_Monthly_mean_Day_temp_C 0.8265 6.173 0.134 0.895 -12.198 13.851\n", + "Val_Jun_Monthly_precip_mm 0.4139 0.336 1.232 0.235 -0.295 1.123\n", + "BigCotCrk_AcFt_WR_May 0.0141 0.003 4.159 0.001 0.007 0.021\n", + "LitCotCrk_AcFt_WR_May -0.0239 0.005 -4.781 0.000 -0.035 -0.013\n", + "==============================================================================\n", + "Omnibus: 7.473 Durbin-Watson: 1.828\n", + "Prob(Omnibus): 0.024 Jarque-Bera (JB): 5.818\n", + "Skew: -0.851 Prob(JB): 0.0545\n", + "Kurtosis: 4.326 Cond. No. 3.77e+04\n", + "==============================================================================\n", + "\n", + "Notes:\n", + "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", + "[2] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + "[3] The condition number is large, 3.77e+04. This might indicate that there are\n", + "strong multicollinearity or other numerical problems.\n", + " mean mean_se mean_ci_lower mean_ci_upper obs_ci_lower \\\n", + "Year \n", + "2008 387.049874 30.064129 323.620106 450.479642 301.477643 \n", + "2015 240.574230 33.360129 170.190510 310.957951 149.727440 \n", + "2017 212.971075 40.267376 128.014338 297.927812 110.419048 \n", + "\n", + " obs_ci_upper \n", + "Year \n", + "2008 472.622105 \n", + "2015 331.421020 \n", + "2017 315.523102 \n", + "The best training parameters are below with their scoring method: RMSE\n", + " snowfeatures conservation cor_threshold colinearity_thresh RMSE\n", + "255 False False 0.0 0.8 37.759604\n", + "The model is automatically selecting features and calibrating the Sep outdoor demand model.\n", + "The automated algorithm automatically optimizes the respective model by looping over input parameters within\n", + "the training data. In addiiton, the algorithm checks for colinearity between features, removing the one with\n", + "less correlation to the target.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 85% |############################################################# |\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " OLS Regression Results \n", + "=======================================================================================\n", + "Dep. Variable: Target_gpcd R-squared (uncentered): 0.989\n", + "Model: OLS Adj. R-squared (uncentered): 0.985\n", + "Method: Least Squares F-statistic: 292.0\n", + "Date: Tue, 02 Nov 2021 Prob (F-statistic): 6.38e-21\n", + "Time: 12:22:35 Log-Likelihood: -139.05\n", + "No. Observations: 30 AIC: 292.1\n", + "Df Residuals: 23 BIC: 301.9\n", + "Df Model: 7 \n", + "Covariance Type: nonrobust \n", + "===================================================================================================\n", + " coef std err t P>|t| [0.025 0.975]\n", + "---------------------------------------------------------------------------------------------------\n", + "Val_Sep_Monthly_precip_mm -0.9601 0.192 -4.991 0.000 -1.358 -0.562\n", + "Val_Sep_Monthly_mean_Day_temp_C 8.1203 4.372 1.857 0.076 -0.924 17.164\n", + "Val_Aug_Monthly_mean_Day_temp_C 12.2602 4.642 2.641 0.015 2.657 21.864\n", + "Val_May_Monthly_mean_Day_temp_C 3.3190 3.966 0.837 0.411 -4.885 11.523\n", + "Val_Apr_Monthly_mean_Day_temp_C 3.1277 3.945 0.793 0.436 -5.033 11.288\n", + "Val_Jun_Monthly_mean_Day_temp_C -3.9832 4.512 -0.883 0.387 -13.318 5.352\n", + "Val_Jul_Monthly_mean_Day_temp_C -7.5345 3.806 -1.980 0.060 -15.408 0.339\n", + "==============================================================================\n", + "Omnibus: 0.587 Durbin-Watson: 1.809\n", + "Prob(Omnibus): 0.745 Jarque-Bera (JB): 0.452\n", + "Skew: 0.283 Prob(JB): 0.798\n", + "Kurtosis: 2.798 Cond. No. 78.7\n", + "==============================================================================\n", + "\n", + "Notes:\n", + "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", + "[2] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + " mean mean_se mean_ci_lower mean_ci_upper obs_ci_lower \\\n", + "Year \n", + "2008 204.668055 15.490260 172.624009 236.712100 137.621468 \n", + "2015 227.921904 23.350284 179.618162 276.225646 151.753174 \n", + "2017 161.778130 19.782029 120.855884 202.700375 90.063040 \n", + "\n", + " obs_ci_upper \n", + "Year \n", + "2008 271.714642 \n", + "2015 304.090634 \n", + "2017 233.493220 \n", + "The best training parameters are below with their scoring method: RMSE\n", + " snowfeatures conservation cor_threshold colinearity_thresh RMSE\n", + "261 False False 0.05 0.8 11.65712\n", + "The model is automatically selecting features and calibrating the Oct outdoor demand model.\n", + "The automated algorithm automatically optimizes the respective model by looping over input parameters within\n", + "the training data. In addiiton, the algorithm checks for colinearity between features, removing the one with\n", + "less correlation to the target.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100% |########################################################################|\r" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " OLS Regression Results \n", + "=======================================================================================\n", + "Dep. Variable: Target_gpcd R-squared (uncentered): 0.852\n", + "Model: OLS Adj. R-squared (uncentered): 0.835\n", + "Method: Least Squares F-statistic: 51.66\n", + "Date: Tue, 02 Nov 2021 Prob (F-statistic): 2.57e-11\n", + "Time: 12:24:35 Log-Likelihood: -148.21\n", + "No. Observations: 30 AIC: 302.4\n", + "Df Residuals: 27 BIC: 306.6\n", + "Df Model: 3 \n", + "Covariance Type: nonrobust \n", + "===================================================================================================\n", + " coef std err t P>|t| [0.025 0.975]\n", + "---------------------------------------------------------------------------------------------------\n", + "Val_Oct_Monthly_mean_Day_temp_C 5.7781 2.914 1.983 0.058 -0.200 11.756\n", + "Val_Apr_Monthly_mean_Day_temp_C 4.2928 4.313 0.995 0.328 -4.557 13.143\n", + "Val_May_Monthly_mean_Day_temp_C -2.1013 3.453 -0.609 0.548 -9.185 4.983\n", + "==============================================================================\n", + "Omnibus: 2.119 Durbin-Watson: 1.779\n", + "Prob(Omnibus): 0.347 Jarque-Bera (JB): 1.915\n", + "Skew: 0.560 Prob(JB): 0.384\n", + "Kurtosis: 2.472 Cond. No. 16.9\n", + "==============================================================================\n", + "\n", + "Notes:\n", + "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", + "[2] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", + " mean mean_se mean_ci_lower mean_ci_upper obs_ci_lower \\\n", + "Year \n", + "2008 64.061193 15.086653 33.105937 95.016449 -15.380244 \n", + "2015 91.718008 9.468099 72.291073 111.144944 16.020454 \n", + "2017 71.566406 19.816853 30.905583 112.227229 -12.135545 \n", + "\n", + " obs_ci_upper \n", + "Year \n", + "2008 143.502630 \n", + "2015 167.415563 \n", + "2017 155.268357 \n", + "The best training parameters are below with their scoring method: RMSE\n", + " snowfeatures conservation cor_threshold colinearity_thresh RMSE\n", + "259 False False 0.05 0.7 20.247452\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "#Create the list of parameters to search through to optimize model performance\n", + "p_space = {\n", + " 'snowfeatures': [True, False],\n", + " 'conservation': [True, False],\n", + " 'cor_threshold': np.arange(0,0.7, 0.05),\n", + " 'colinearity_thresh': [0.65, 0.7, 0.75, 0.80, 0.85, 0.90]\n", + "}\n", + "\n", + "Outdoor_Months=['Apr', 'May' , 'Jun', 'Jul', 'Aug', 'Sep', 'Oct']\n", + "IndoorMonths = ['Jan', 'Feb', 'Mar', 'Nov', 'Dec']\n", + "#Outdoor_Months=['Jan', 'Feb', 'Mar','Apr', 'May' , 'Jun', \n", + " # 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n", + "\n", + "\n", + "slc_val=copy.deepcopy(slc_test)\n", + "# calibrate and predict with the outdoor model\n", + "pbar = ProgressBar()\n", + "for i in pbar(Outdoor_Months):\n", + " print('The model is automatically selecting features and calibrating the ', i, 'outdoor demand model.' )\n", + " #put the month, use conservation_goal (-1: no, -2: yes) correlation threshold, colineariy threshold, CV, aplpha, model type, tuning method\n", + " #put in the params, month, scoring method (R2, or RMSE for now)\n", + " PerfDF, cv_results, cor, X_test_RFE, coef = Demand_Optimization(p_space, i, 'RMSE')\n", + " \n", + " colrem = slc_test[i].columns\n", + " slc_val[i] = slc_val[i].reset_index(drop=True)\n", + " slc_val[i] = pd.concat([slc_val[i], PerfDF], axis=1, join=\"inner\")\n", + " slc_val[i] = slc_val[i].set_index('Date')\n", + " slc_val[i] = slc_val[i].drop(columns=colrem)\n", + "\n", + "column_names = ['Year','y_test','y_pred', 'y_pred_lower','y_pred_upper', 'y_test_tot',\n", + " 'y_pred_tot', 'y_pred_lower_tot','y_pred_upper_tot']\n", + " \n", + "#Calibrate and predict with the indoor model\n", + "for i in IndoorMonths:\n", + " slc_val = Indoor_Demand_Model(slc_val, i)\n", + " #need to add 'uncertainty' to indoor\n", + " #y_pred_lower\ty_pred_upper y_pred_lower_tot\ty_pred_upper_tot\n", + " slc_val[i]['y_pred_lower'] = 0.9*slc_val[i]['y_pred']\n", + " slc_val[i]['y_pred_upper'] = 1.1*slc_val[i]['y_pred']\n", + " slc_val[i]['y_pred_lower_tot'] = slc_val[i]['y_pred_lower']\n", + " slc_val[i]['y_pred_upper_tot'] = slc_val[i]['y_pred_upper']\n", + " \n", + " \n", + " slc_val[i] = slc_val[i].reindex(columns=column_names)" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": {}, + "outputs": [], + "source": [ + "#save predictions\n", + "np.save('ModelOutput/Slc_Pred_Uncertainty.npy', slc_val) " + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": {}, + "outputs": [], + "source": [ + "slc_val = np.load('ModelOutput/Slc_Pred_Uncertainty.npy', allow_pickle =True).item()\n", + "\n", + "VolumeCols = ['y_test','y_pred','y_pred_lower','y_pred_upper','y_test_tot','y_pred_tot', 'y_pred_lower_tot',\n", + " 'y_pred_upper_tot']\n", + "\n", + "#Need to make figures in liter per capita day\n", + "for i in slc_val:\n", + " for j in VolumeCols:\n", + " slc_val[i][j]=slc_val[i][j]*3.785\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#Make a function to put all of the predictions together\n", + "def Demand_ForecastErr(prediction_dictionary, pdict, df, pred, test, units, plotname, model, predcol, obscol):\n", + " FinalDF=pd.DataFrame()\n", + " if pdict is True:\n", + " print('yes')\n", + " for i in prediction_dictionary:\n", + " FinalDF=FinalDF.append(prediction_dictionary[i])\n", + "\n", + " FinalDF=FinalDF.sort_index()\n", + " else:\n", + " print('pdict is not used')\n", + " FinalDF = df\n", + " \n", + " #adjust date range to improve figure\n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2017,12,1), freq='MS')\n", + " #FinalDF['Date'] = Conditions\n", + " \n", + " FinalDF.index = FinalDF['Date']\n", + " del FinalDF['Date']\n", + " \n", + " #Define Error bars for visualization\n", + " FinalDF['UErr'] = FinalDF['y_pred_upper_tot'] - FinalDF['y_pred_tot']\n", + " FinalDF['LErr'] = FinalDF['y_pred_tot'] - FinalDF['y_pred_lower_tot']\n", + "\n", + " asymmetric_error = [FinalDF['LErr'], FinalDF['UErr'] ]\n", + "\n", + "\n", + " plotmin_tot = FinalDF[[pred, test]].min().min()\n", + " plotmax_tot = FinalDF[[pred, test]].max().max()\n", + " \n", + " Xplotmin = FinalDF.index[0]-np.timedelta64(20, 'D')\n", + " Xplotmax = FinalDF.index[-1]+np.timedelta64(33, 'D')\n", + " \n", + " plt.rc_context({ 'xtick.color':'black'})\n", + " fig, ax = plt.subplots(1,5, constrained_layout=True)\n", + " fig.set_size_inches(10,3.5)\n", + "\n", + " gs2 = ax[0].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[0].remove()\n", + " ax[1].remove()\n", + " ax[2].remove()\n", + " axbig = fig.add_subplot(gs2[:3])\n", + " axbig.set_title('Total demand Timeline Evaluation')\n", + " #axbig.plot(FinalDF['y_pred_lower_tot'], color='steelblue', label= model)\n", + " axbig.plot(FinalDF['y_pred_upper_tot'], color='steelblue', label= model)\n", + " axbig.fill_between(FinalDF.index, FinalDF['y_pred_upper_tot'],FinalDF['y_pred_lower_tot'], color = 'steelblue')\n", + " axbig.plot(FinalDF[test],color='orange', label='Observed')\n", + " axbig.scatter(FinalDF.index, FinalDF['y_pred_tot'], color = 'blue', s = 25)\n", + " # axbig.bar(FinalDF.index-np.timedelta64(7, 'D'), FinalDF[pred], color=predcol, \n", + " # yerr = asymmetric_error,\n", + " # label= model ,width = 15, align=\"center\")\n", + " #axbig.bar(FinalDF.index+np.timedelta64(8, 'D'), FinalDF[test], color=obscol, label= 'Observed',width = 15, align=\"center\")\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " axbig.set_xlabel('Wet Dry Average \\n \\n Supply Scenario')\n", + " axbig.set_ylim(plotmin_tot-.9,plotmax_tot*1.3)\n", + " axbig.set_xlim(Xplotmin, Xplotmax)\n", + " axbig.set_ylabel('Demand ('+ units+')')\n", + " axbig.legend(loc = 'upper right', facecolor = 'white')\n", + " axbig.set_facecolor(\"white\")\n", + " axbig.spines['bottom'].set_color('black')\n", + " axbig.spines['left'].set_color('black')\n", + " axbig.tick_params(axis='both', which='both', length=5, color='red')\n", + " axbig.xaxis.set_major_locator(mdates.MonthLocator())\n", + " # Get only the month to show in the x-axis:\n", + " axbig.xaxis.set_major_formatter(mdates.DateFormatter('%b'))\n", + "\n", + " axbig.annotate('A.', (FinalDF.index[-1], plotmax_tot*1.2), size = 14)\n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " months = [0,5,10,12,17,22,24,29,34]\n", + " \n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " for i,tick in enumerate(xticks):\n", + " #if i%5.5 != 0:\n", + " if i not in months:\n", + " tick.label1.set_visible(False)\n", + " \n", + "\n", + " ax[3].remove()\n", + " ax[4].remove()\n", + "\n", + "\n", + " axbig2 = fig.add_subplot(gs2[3:])\n", + " axbig2.errorbar(FinalDF[test], FinalDF[pred], yerr = asymmetric_error, fmt='.k', ecolor = 'steelblue', mec = 'blue') \n", + " axbig2.set_ylabel('Predicted (' + units+')' )\n", + " axbig2.set_xlabel('Observed (' + units+')')\n", + " axbig2.set_ylim(plotmin_tot*.95,plotmax_tot*1.2)\n", + " axbig2.set_xlim(plotmin_tot*.95,plotmax_tot*1.2)\n", + " # axbig2.set_title('Indoor and Outdoor \\n Model Performance')\n", + " axbig2.plot([plotmin_tot,plotmax_tot],[plotmin_tot,plotmax_tot], color='black', linestyle='--' )\n", + " #axbig2.set_xticks(np.arange(plotmin_tot, plotmax_tot, 100).round())\n", + " #axbig2.set_yticks(np.arange(plotmin_tot, plotmax_tot, 100).round())\n", + " axbig2.set_facecolor(\"white\")\n", + " axbig2.spines['bottom'].set_color('black')\n", + " axbig2.spines['left'].set_color('black')\n", + " axbig2.annotate('B.', (2050,plotmax_tot*1.1), size = 14)\n", + " axbig2.set_xticks(np.arange(300, 2301, 500))\n", + " axbig2.set_yticks(np.arange(300, 2301, 500))\n", + " \n", + " fig.tight_layout(pad=0.5)\n", + "\n", + " #fig.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/' +str(plotname)+'bar.png', dpi = 300)\n", + " r2 = sklearn.metrics.r2_score(FinalDF[test], FinalDF[pred])\n", + " MAE= sklearn.metrics.mean_absolute_error(FinalDF[test], FinalDF[pred])\n", + " RMSE= sklearn.metrics.mean_squared_error(FinalDF[test], FinalDF[pred], squared = False)\n", + " MAPE=np.mean(np.abs((FinalDF[test]- FinalDF[pred])/FinalDF[test])*100)\n", + "\n", + " print('Total R2 is ', r2)\n", + " print('Total MAE is ', MAE)\n", + " print('Total RMSE is ', RMSE)\n", + " print('Total MAPE is ', MAPE)\n", + " \n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2018,1,1), freq='M')\n", + " FinalDF.index = FinalDF['Date']\n", + " del FinalDF['Date']\n", + " return FinalDF" + ] + }, + { + "cell_type": "code", + "execution_count": 223, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#Make a function to put all of the predictions together\n", + "def Demand_ForecastErr2(prediction_dictionary, pdict, df, pred, test, units, plotname, model, predcol, obscol):\n", + " FinalDF=pd.DataFrame()\n", + " if pdict is True:\n", + " print('yes')\n", + " for i in prediction_dictionary:\n", + " FinalDF=FinalDF.append(prediction_dictionary[i])\n", + "\n", + " FinalDF=FinalDF.sort_index()\n", + " else:\n", + " print('pdict is not used')\n", + " FinalDF = df\n", + " \n", + " #adjust date range to improve figure\n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2017,12,1), freq='MS')\n", + " #FinalDF['Date'] = Conditions\n", + " \n", + " FinalDF.index = FinalDF['Date']\n", + " del FinalDF['Date']\n", + " \n", + " #Define Error bars for visualization\n", + " FinalDF['UErr'] = FinalDF['y_pred_upper_tot'] - FinalDF['y_pred_tot']\n", + " FinalDF['LErr'] = FinalDF['y_pred_tot'] - FinalDF['y_pred_lower_tot']\n", + "\n", + " asymmetric_error = [FinalDF['LErr'], FinalDF['UErr'] ]\n", + "\n", + "\n", + " plotmin_tot = FinalDF[[pred, test]].min().min()\n", + " plotmax_tot = FinalDF[[pred, test]].max().max()\n", + " \n", + " Xplotmin = FinalDF.index[0]-np.timedelta64(20, 'D')\n", + " Xplotmax = FinalDF.index[-1]+np.timedelta64(33, 'D')\n", + " \n", + " plt.rc_context({ 'xtick.color':'black'})\n", + " fig, ax = plt.subplots(1,6, constrained_layout=True)\n", + " fig.set_size_inches(9,3.5)\n", + "\n", + " gs2 = ax[0].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[0].remove()\n", + " ax[1].remove()\n", + " ax[2].remove()\n", + " ax[3].remove()\n", + " axbig = fig.add_subplot(gs2[:4])\n", + " #axbig.set_title('Total demand Timeline Evaluation')\n", + " #axbig.plot(FinalDF['y_pred_lower_tot'], color='steelblue', label= model)\n", + " #axbig.plot(FinalDF['y_pred_upper_tot'], color='steelblue', label= model)\n", + " #axbig.fill_between(FinalDF.index, FinalDF['y_pred_upper_tot'],FinalDF['y_pred_lower_tot'], color = 'steelblue')\n", + " #axbig.plot(FinalDF[test],color='orange', label='Observed')\n", + " #axbig.scatter(FinalDF.index, FinalDF['y_pred_tot'], color = 'blue', s = 25)\n", + " axbig.bar(FinalDF.index-np.timedelta64(7, 'D'), FinalDF[pred], \n", + " yerr = asymmetric_error, capsize = 4,\n", + " label= model ,width = 15, align=\"center\", color='blue' )\n", + " axbig.bar(FinalDF.index+np.timedelta64(8, 'D'), FinalDF[test], color=obscol, label= 'Observed',width = 15, align=\"center\")\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " axbig.set_xlabel('Wet Dry Average \\n \\n Supply Scenario')\n", + " axbig.set_ylim(plotmin_tot-.9,plotmax_tot*1.3)\n", + " axbig.set_xlim(Xplotmin, Xplotmax)\n", + " axbig.set_ylabel('Demand ('+ units+')')\n", + " axbig.legend(loc = 'upper left', facecolor = 'white')\n", + " axbig.set_facecolor(\"white\")\n", + " axbig.spines['bottom'].set_color('black')\n", + " axbig.spines['left'].set_color('black')\n", + " axbig.tick_params(axis='both', which='both', length=5, color='red')\n", + " axbig.xaxis.set_major_locator(mdates.MonthLocator())\n", + " # Get only the month to show in the x-axis:\n", + " axbig.xaxis.set_major_formatter(mdates.DateFormatter('%b'))\n", + "\n", + " axbig.annotate('A.', (FinalDF.index[-1], plotmax_tot*1.2), size = 14)\n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " months = [0,5,10,12,17,22,24,29,34]\n", + " \n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " for i,tick in enumerate(xticks):\n", + " #if i%5.5 != 0:\n", + " if i not in months:\n", + " tick.label1.set_visible(False)\n", + " \n", + "\n", + " ax[4].remove()\n", + " ax[5].remove()\n", + "\n", + "\n", + " axbig2 = fig.add_subplot(gs2[4:])\n", + " axbig2.errorbar(FinalDF[test], FinalDF[pred], yerr = asymmetric_error, fmt='.k', ecolor = 'steelblue', mec = 'blue') \n", + " axbig2.set_ylabel('Predicted (' + units+')' )\n", + " axbig2.set_xlabel('Observed (' + units+')')\n", + " axbig2.set_ylim(plotmin_tot*.95,plotmax_tot*1.2)\n", + " axbig2.set_xlim(plotmin_tot*.95,plotmax_tot*1.2)\n", + " # axbig2.set_title('Indoor and Outdoor \\n Model Performance')\n", + " axbig2.plot([plotmin_tot,plotmax_tot],[plotmin_tot,plotmax_tot], color='black', linestyle='--' )\n", + " #axbig2.set_xticks(np.arange(plotmin_tot, plotmax_tot, 100).round())\n", + " #axbig2.set_yticks(np.arange(plotmin_tot, plotmax_tot, 100).round())\n", + " axbig2.set_facecolor(\"white\")\n", + " axbig2.spines['bottom'].set_color('black')\n", + " axbig2.spines['left'].set_color('black')\n", + " axbig2.annotate('B.', (2050,plotmax_tot*1.1), size = 14)\n", + " axbig2.set_xticks(np.arange(300, 2301, 500))\n", + " axbig2.set_yticks(np.arange(300, 2301, 500))\n", + " \n", + " fig.tight_layout(pad=0.5)\n", + "\n", + " fig.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/' +str(plotname)+'.png', dpi = 300)\n", + " r2 = sklearn.metrics.r2_score(FinalDF[test], FinalDF[pred])\n", + " MAE= sklearn.metrics.mean_absolute_error(FinalDF[test], FinalDF[pred])\n", + " RMSE= sklearn.metrics.mean_squared_error(FinalDF[test], FinalDF[pred], squared = False)\n", + " MAPE=np.mean(np.abs((FinalDF[test]- FinalDF[pred])/FinalDF[test])*100)\n", + "\n", + " print('Total R2 is ', r2)\n", + " print('Total MAE is ', MAE)\n", + " print('Total RMSE is ', RMSE)\n", + " print('Total MAPE is ', MAPE)\n", + " \n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2018,1,1), freq='M')\n", + " FinalDF.index = FinalDF['Date']\n", + " del FinalDF['Date']\n", + " return FinalDF" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes\n", + "Total R2 is 0.9766188032681973\n", + "Total MAE is 62.997048498508256\n", + "Total RMSE is 73.98582450398375\n", + "Total MAPE is 8.419832806068381\n" + ] + }, + { + "data": { + "image/png": "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559Bx3V8R6MS5U5I0zTiU3NxubTjOi45u5j+PQNbKSpFUSqNHDmSTz75BLvdjsViqdq+fft2hg0bhsvlwmQyVW13uVyYzWauv/56zjjjDP78809eeOEFdu7cia+vL+ecc05VIltSUlIjCff29gbAarVyxhlnsGzZMn799VfefvttXC4XVquV77//vmr/I0eOEBwcDOjvJaAn9kb1JVpROo2qZNf6JdN/uZrff/drdrL7++92rJbPCQx8gsJCjT//vJVJkwxNH9hBqXe+TuhIfhl5JTbM5uP79e5MOtpKESmKUt3YsWOJiYnh6aefxm63A7B7927eeustbr/9dgB+/PFHQC/TKCkpITIykpkzZ1JSUsL111/P9ddfT3x8PBMmTOC3337j6NGjaJrGY489xscff1zv81544YV8+OGHBAcH06dPHwICAoiKiqpKlNesWcPVV18NwOTJk/nhhx8AWLp0KRUVqjOOonQWy5eDl/VLAgPmYbF8wfLlzTtOSsnHH99IacmlFBQ+gst1DWec0XmTZFAjyp3SntRcAJzNKLmofdxFE6JbIyRFUWp5/fXXefnllznvvPMwmUwEBQXxwgsvMGHCBF5//XVKS0u56KKLMBqNvPjii1gsFu655x4eeOABzGYzvr6+PPnkk0RFRXHHHXdw3XXX4XK5GDJkCLfccku9zzlmzBiKioq46qqrqra98MILPPbYY7z33ntYLBZefvllDAYDjzzyCPfeey9fffUVw4YNw8/Pr61eGkVRWtnUqfDovCspKjLgdF7F1KnNO85ms2GzreC0K37D5fgLz93j36nLLgAMlZfWOhODwRAFJCYmJhIVFeXhaNreq7/sYvHWFI6z8oI+3X354G9ntE5QiuJBCQkJDBkyxNNhdGlN/A6igaS2i8azuvpnlNI+XP3ILlITAnnunsh6k93K5asfvmgoCxYs4Oabbwb0ZPnBL7cA8MLsDpclH/d7jRpR7oT2pOZxIl9/corUpVVF8RSXppFdWEZ3Py8sZlPTBygACCEiAQE4ASmlTPNwSIrSIYTHFBMeU8ykSZEN7nMkMYHRo68lKSmJSZMmMXToUKxWaxtG6XkqUe5kisvtJGcVYTIZcDiPL12usDtV5wtF8ZCScjsFJTYqbE769QjwdDjtnhDir8ATwAAgEbADkUKIA8ATUsrFnoxPUToyl8vF5l+/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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame()\n", + "Pred_Obs = Demand_ForecastErr(slc_val, True, df, 'y_pred_tot', 'y_test_tot', 'LPCD', 'CSD_WDM_lpcd_Unc','CSD-WDM ',\n", + " 'blue', 'orange')" + ] + }, + { + "cell_type": "code", + "execution_count": 231, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes\n", + "Total R2 is 0.9766188032681973\n", + "Total MAE is 62.997048498508256\n", + "Total RMSE is 73.98582450398375\n", + "Total MAPE is 8.419832806068381\n" + ] + }, + { + "data": { + "image/png": "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r7zwwgv07t07YjFU+4QxkpYuXcrmzZu59dZbqVHD9Q7o1KkTEydOJC8vj99++42cnByyverKunXr8tBDD9GqVasij3fCCSdw/vnn89prrx2wrVOnTvzvf/8DYO/evaxevZorrriCJUvccpJfffUVJ510ErVq1TrgsUcccQRDhgxhxowZ+WU9evTgnXfeyb//3nvv0bVr1/K9EMaYamf+/PnEx8dz5plnAtCuXTuaNGnCm2++GdnAjIkSN9xwAyeddBLt27cnNTWVFStWMHjw4IjFYwljBK1YsYLWrVsfMGL7zDPPpFGjRrRu3ZpzzjmHbt260bdvXyZNmkReXh4tWrQo9pjHHnssP/zwwwHljRs3pmHDhqxfv54vv/yS9u3bc9ppp/HFF1+Ql5fH559/TufOnYs9bkpKSoHjtmnThm3btrF161YAFixYwPnnn1/Wl8AYU00Fmp87duzIcccdx/HHH8+WLVvIyMjg119/jXR4xkTcvffem9/6+Nprr9G7d28uu+wy1qxZE5F4LGGMoLi4OBISEkrcZ8KECbz//vsMGDCATZs2cemllxZoCi7M5/ORWEx7eKBZesmSJXTp0oXExESOOeYYVJXPP/+c008/vcRYCh+3R48eLFy4kO3bt7Nz506Sk5NLfLwxxgCsXbuW5cuXc+edd/Lmm2/m355++mlycnKYN29epEM0JuKaNGlCixYtaNGiBSeeeCJ33303jRo14tVXX41IPNVylHS0aNu2LTNmzMDv9xcYPTx58mQ6d+5MdnY2u3fv5oILLuCSSy7hkksu4dVXX2XWrFn06NGjyGOqKscccwzffPMNY8aMyT/PAw88QKdOnfjoo49YtmwZV1xxBQBdunThiy++YPPmzcU2dQcfN9j555/PxIkTqVWrFt27dz/Yl8MYU03MnTuXBg0aMGDAgAI/mlNSUjjppJN444036NevH1lZWfmjRI2JViOmZwIwaUhqpZwvNze3Us5TmNUwRlCHDh1o1KgRjz/+eP5/gA8//JDXX3+dVq1akZiYSHp6Ohs2bADA7/ezcuVK2rRpU+Txvv76a9555x369u3LCSecwOzZs5k9ezYPPPAAAB07duSzzz7D7/fnfwl36dKFV155hZNPPrnYONeuXcuMGTMYMKDg9GKtW7dm69atvPrqq5x33nkH/XoYY6qHefPm0bNnzyJbWAYM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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.DataFrame()\n", + "Pred_Obs = Demand_ForecastErr2(slc_val, True, df, 'y_pred_tot', 'y_test_tot', 'lpcd', 'CSD_WDM_Err','CSD-WDM ',\n", + " 'blue', 'orange')" + ] + }, + { + "cell_type": "code", + "execution_count": 250, + "metadata": {}, + "outputs": [], + "source": [ + "from pandas.tseries.offsets import MonthEnd\n", + "cols = ['y_test_tot', 'y_pred_tot']\n", + "monthorder = ['Jan', 'Feb' , 'Mar', 'Apr', 'May', 'Jun' , 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n", + "#Preds = Pred_Obs[cols]\n", + "\n", + "#input population into DF to calculate total water demands.\n", + "Population = []\n", + "UR_gpcd = []\n", + "\n", + "slc_pred = copy.deepcopy(slc)\n", + "\n", + "for i in monthorder:\n", + " slc_train[i] = copy.deepcopy(slc[i].loc[:2010])\n", + " slc_pred[i] = slc_pred[i].loc[2015:]\n", + " slc_pred[i]['UR_gpcd'] = np.mean(slc_train[i]['Obs_gpcd'])\n", + " Population.append(np.round(slc_pred[i]['Population'],0))\n", + " \n", + "UR=pd.DataFrame()\n", + "for i in slc_pred:\n", + " slc_pred[i]= pd.DataFrame(slc_pred[i]['UR_gpcd'])\n", + " slc_pred[i]=slc_pred[i].reset_index()\n", + " slc_pred[i]['M'] = datetime.datetime.strptime(i, \"%b\").month\n", + " slc_pred[i]['D'] = 1\n", + " slc_pred[i]['Date'] = pd.to_datetime(slc_pred[i].Year*10000+slc_pred[i].M*100+slc_pred[i].D,format='%Y%m%d')+MonthEnd(1)\n", + " slc_pred[i].index = slc_pred[i].Date\n", + " slc_pred[i]=slc_pred[i].drop(columns = ['M', 'D', 'Date', 'Year'])\n", + " UR = UR.append(slc_pred[i])\n", + "\n", + "UR=UR.sort_index()\n", + "Population = np.sort(np.array(Population).reshape(36,))\n", + "\n", + "#place in to prediction df\n", + "Preds['Population'] = Population\n", + "#add 3.785 to make metric\n", + "Preds['UR_gpcd'] = UR['UR_gpcd']*3.785\n", + "\n", + "\n", + "\n", + "#Now we can form some acre-feet predictions.\n", + "#volume_conversion = 3.0689e-6 #gallons to acre-feet\n", + "volume_conversion = 0.001 #L to m3\n", + "daysinmonth = 30\n", + "\n", + "gpcd=['y_test_tot','y_pred_tot','UR_gpcd']\n", + "for i in gpcd:\n", + " Preds[i+str('_M3')] = Preds[i]*Preds['Population']*volume_conversion*daysinmonth\n", + "\n", + " \n", + "remcol=['y_test_tot','y_pred_tot','UR_gpcd', 'Population']\n", + "Ann_Eval = Preds.drop(columns = remcol).copy()\n", + "Ann_Eval = Ann_Eval.resample('Y').sum()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 251, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pdict is not used\n", + "Total R2 is 0.6283371213177069\n", + "Total MAE is 238.5911791239317\n", + "Total RMSE is 294.97807905990385\n", + "Total MAPE is 30.78863740465362\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAowAAAEACAYAAAA5qSfoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABPB0lEQVR4nO3dd3iUZdbH8W8IHaSsiIKArO2AsoAFUeyKuEoVQQXFtuKisuoqiri4CzZUsCu+im1tCxYQaaJixa67gogeG1VRRBAEjASS94/7SQghmUxgJpNkfp/rypXMPU85kyeT58xdM3JzcxERERERKU6VVAcgIiIiIuWbEkYRERERiUkJo4iIiIjEpIRRRERERGJSwigiIiIiMVVNdQDJMHLkyBo1a9bsMGDAgGVNmzbdlOp4REQkITKBJsCHwO8pjiUpdP+SFIr5/qqUCWPNmjU7DB069K1UxyEiIklxODA71UEkg+5fUg4U+f7KqIzzMDZv3nyPzMzMr2fPnk2zZs1SHY6IiCTWnsA3qQ4iGXT/knKgyPdXpaxhXLp06SaAjRs3pjoUERFJvErbVKv7l5QDRb6/NOhFRERERGJSwigiIiIiMVXKJulYcnJyWLp0KevWrUt1KFKJ1KlTh2bNmlGlij6DiYhI5ZN2CeOKFSvIyMjAzHRzl4TIycnhu+++Y8WKFTRu3DjV4YhUeFOnTuXyyy9n6NChnHvuuakOR0RIwybpX375hZ133lnJoiRMlSpV2HnnnVm9enWqQxGpFKZOncpuu+3GpEmTUh2KSFKY2RZfHTt25Oqrr2bt2rWpDq1YaZc1bdq0iWrVqqU6DKlkqlWrplGNIgmwevVqZs+ezeDBg/nyyy+ZP39+qkMSSYo77riD2bNn8+abb3L//fczb948brrpplSHVay0SxgBMjIyUh2CVDL6mxJJjJkzZ1K9enVOPPFEWrZsycSJE1MdkkhS1K9fn5122omdd96Z9u3bc+aZZzJ9+vRUh1WstEwYt5CVlbLjLl26lDZt2tCzZ0969epF165dOeecc/jhhx+269Rr165l5MiRdOvWjZ49ezJgwAA+++yzbT5ez549AZg7dy6jR48u1b4vvvgivXv3pkePHnTv3p0HH3ww/7m77rqLjz76KOb+r732Go888ggA//nPf/jPf/5TyuhLZ+DAgfz4448sWbKEq6++OqnnEpGtTZkyhSOOOIKqVaty7LHHMnXqVLKzs1MdlkjS/eEPf0h1CDEpYaxZEzIyEv9Vs2Zcp2/cuDGTJ0/m+eefZ9q0aZgZt9xyyza/nJycHAYOHEj9+vV5/vnnmTx5MhdddBEDBw5k1apV23TMyZMnA/D111/z888/x73fjz/+yM0338xDDz3ECy+8wPjx45k+fTqzZs0C4MMPP2TTptjz786bNy+/T0e/fv3o16/fNr2GeI0bN46dd96Z77//niVLliT1XCKypR9//JGPPvqIzp07A9ClSxdWrVrFG2+8keLIRJJr5cqVPP744/To0SPVoRQr7UZJl3cdO3bktttuA0KN3qhRo8jKyqJhw4aMHDmS5s2bM2DAAOrXr89XX33FHXfcQevWrfP3f//991m2bBkXX3xx/sCegw8+mFGjRpGTk8PGjRsZMWIEX331FStWrMDMuO2221ixYgUXXHABu+++O19//TVNmzZl9OjRNGjQADPjww8/5K677mL9+vXcd999DBgwgKuvvpoff/yR5cuXc8ghh3DDDTds0TS7atUqsrOzyYpqW+vUqcNNN91EjRo1eP7555k3bx7Dhw/nnnvuYfXq1dx+++1kZWWxZs0ahg0bRsuWLRk/fjwATZs25fvvvwfgb3/7G6+99hp33HEHOTk5NG/enGuvvZZGjRpxzDHH0KNHD2bPns1vv/3GzTffTJs2bfjggw+2On7nzp256qqr+OWXX1i0aBFXXHEF119/PY899hjXX389S5cuZeTIkaxdu5YOHTpwyimnADBgwACGDBlCu3btkv8HIZJGpk+fTmZmJkceeSQA7dq1o3Hjxjz//PP5SaRIZTFo0CAyMzPJzc3lt99+o0GDBgwfPjzVYRVLNYzlSHZ2NjNnzqR9+/Zs2LCB4cOHc+uttzJp0iTOOeccrrnmmvxtzYyZM2dukSwCzJ8/n1atWm01CvzII49kxx135H//+x/VqlVjwoQJvPzyy/z666/5n96//PJL+vfvz7Rp09hjjz2455578vevV68eF198MccccwwXXHABr7/+Oq1bt2bChAnMnDmTDz/8cKtm71atWnHsscfSuXNn+vTpw+jRo8nJyWG33XajV69etGnThuuvvx4z44knnuD6669n0qRJXH/99dx5553sueeenHbaaZx22mmcfPLJ+cf9+eef+ec//8m9997L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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "Pred_UR_GPCD = Demand_Forecast(slc_val, False, Preds, 'UR_gpcd',\n", + " 'y_test_tot', 'lpcd', 'Stationary_Demand_Forecast_lpcd', 'Per-Capita Stationarity','red', 'orange')" + ] + }, + { + "cell_type": "code", + "execution_count": 252, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
y_test_tot_M3y_pred_tot_M3StationaryErrorSLCWDMErrorStationaryErrorM3SLCWDMErrorM3CSD_WDM_lower_totCSD_WDM_upper_totS_PerrorSLCWDM_Perror
Date
2015-12-311.223144e+081.149160e+08139.858017-112.8897661.484940e+07-7.398335e+061.035828e+081.263722e+0812.140357-6.048623
2016-12-319.931921e+079.912215e+07512.5222364.6030963.944983e+07-1.970593e+058.584292e+071.122861e+0839.720245-0.198410
2017-12-311.052296e+081.017418e+08455.384862-48.8589693.514516e+07-3.487753e+068.837882e+071.156782e+0833.398563-3.314424
\n", + "
" + ], + "text/plain": [ + " y_test_tot_M3 y_pred_tot_M3 StationaryError SLCWDMError \\\n", + "Date \n", + "2015-12-31 1.223144e+08 1.149160e+08 139.858017 -112.889766 \n", + "2016-12-31 9.931921e+07 9.912215e+07 512.522236 4.603096 \n", + "2017-12-31 1.052296e+08 1.017418e+08 455.384862 -48.858969 \n", + "\n", + " StationaryErrorM3 SLCWDMErrorM3 CSD_WDM_lower_tot \\\n", + "Date \n", + "2015-12-31 1.484940e+07 -7.398335e+06 1.035828e+08 \n", + "2016-12-31 3.944983e+07 -1.970593e+05 8.584292e+07 \n", + "2017-12-31 3.514516e+07 -3.487753e+06 8.837882e+07 \n", + "\n", + " CSD_WDM_upper_tot S_Perror SLCWDM_Perror \n", + "Date \n", + "2015-12-31 1.263722e+08 12.140357 -6.048623 \n", + "2016-12-31 1.122861e+08 39.720245 -0.198410 \n", + "2017-12-31 1.156782e+08 33.398563 -3.314424 " + ] + }, + "execution_count": 252, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Pred_UR_GPCD['StationaryError'] = ((Pred_UR_GPCD['UR_gpcd']-Pred_UR_GPCD['y_test_tot'])/Pred_UR_GPCD['y_test_tot'])*100\n", + "Pred_UR_GPCD['SLCWDMError'] = ((Pred_UR_GPCD['y_pred_tot']-Pred_UR_GPCD['y_test_tot'])/Pred_UR_GPCD['y_test_tot'])*100\n", + "Pred_UR_GPCD['StationaryErrorM3'] = Pred_UR_GPCD['UR_gpcd_M3']-Pred_UR_GPCD['y_test_tot_M3']\n", + "Pred_UR_GPCD['SLCWDMErrorM3'] = Pred_UR_GPCD['y_pred_tot_M3']-Pred_UR_GPCD['y_test_tot_M3']\n", + "\n", + "\n", + "Pred_UR_GPCD['CSD_WDM_lower_tot'] = Pred_Obs['y_pred_lower_tot']*volume_conversion*daysinmonth*Preds['Population']\n", + "Pred_UR_GPCD['CSD_WDM_upper_tot'] = Pred_Obs['y_pred_upper_tot']*volume_conversion*daysinmonth*Preds['Population']\n", + "\n", + "Evalcol = ['y_test_tot_M3', 'y_pred_tot_M3', 'StationaryError','SLCWDMError', 'StationaryErrorM3', 'SLCWDMErrorM3', \n", + " 'CSD_WDM_lower_tot', 'CSD_WDM_upper_tot']\n", + "Eval = Pred_UR_GPCD[Evalcol]\n", + "\n", + "Annual = Eval.resample('Y').sum()\n", + "Annual['S_Perror'] = Annual['StationaryErrorM3']/Annual['y_test_tot_M3']*100\n", + "Annual['SLCWDM_Perror'] = Annual['SLCWDMErrorM3']/Annual['y_test_tot_M3']*100\n", + "Annual" + ] + }, + { + "cell_type": "code", + "execution_count": 253, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "April Unit Rate Performance Metrics.\n", + "The Total Demand prediction RMSE is 234.91850229709772\n", + "The Total Demand prediction R2 is -13.681824813630096\n", + "The Total Demand prediction MAE is 226.77711038461538\n", + "The Total Demand prediction MAPE is 44.703907893410765 %\n", + "May Unit Rate Performance Metrics.\n", + "The Total Demand prediction RMSE is 364.68138183793025\n", + "The Total Demand prediction R2 is -3.7219675866079367\n", + "The Total Demand prediction MAE is 323.7713262820511\n", + "The Total Demand prediction MAPE is 45.51889792211568 %\n", + "June Unit Rate Performance Metrics.\n", + "The Total Demand prediction RMSE is 272.6448447309825\n", + "The Total Demand prediction R2 is -5.179017266006832\n", + "The Total Demand prediction MAE is 249.6095891025643\n", + "The Total Demand prediction MAPE is 17.22121622514535 %\n", + "July Unit Rate Performance Metrics.\n", + "The Total Demand prediction RMSE is 434.639220557867\n", + "The Total Demand prediction R2 is -4.936276355154155\n", + "The Total Demand prediction MAE is 396.3433634615385\n", + "The Total Demand prediction MAPE is 23.52375253778731 %\n", + "August Unit Rate Performance Metrics.\n", + "The Total Demand prediction RMSE is 577.2817651472257\n", + "The Total Demand prediction R2 is -5.899025532475611\n", + "The Total Demand prediction MAE is 533.8067993589748\n", + "The Total Demand prediction MAPE is 38.3716373444204 %\n", + "September Unit Rate Performance Metrics.\n", + "The Total Demand prediction RMSE is 325.897395288007\n", + "The Total Demand prediction R2 is -4.712212915477304\n", + "The Total Demand prediction MAE is 295.99961666666667\n", + "The Total Demand prediction MAPE is 26.186610164335676 %\n", + "October Unit Rate Performance Metrics.\n", + "The Total Demand prediction RMSE is 219.860347338743\n", + "The Total Demand prediction R2 is -5.848827970390566\n", + "The Total Demand prediction MAE is 203.17637371794856\n", + "The Total Demand prediction MAPE is 30.40882998900284 %\n" + ] + } + ], + "source": [ + "#Get monthly stats for UR\n", + "URcol = ['y_test_tot', 'UR_gpcd']\n", + "Pred_UR_GPCD = Pred_UR_GPCD[URcol]\n", + "Pred_UR_GPCD['Month'] = Pred_UR_GPCD.index.month\n", + "UR = {}\n", + "\n", + "Irrmon = np.arange(4,11,1)\n", + "month = ['Apr', 'May', 'Jun' , 'Jul', 'Aug', 'Sep', 'Oct']\n", + "for i in Irrmon:\n", + " UR[i]=Pred_UR_GPCD.loc[Pred_UR_GPCD['Month']==i]\n", + " \n", + "for i in UR:\n", + " \n", + " print( calendar.month_name[i], 'Unit Rate Performance Metrics.')\n", + " T_r2 = sklearn.metrics.r2_score(UR[i]['y_test_tot'],UR[i]['UR_gpcd'])\n", + " T_rmse= sklearn.metrics.mean_squared_error(UR[i]['y_test_tot'],UR[i]['UR_gpcd'], squared = False)\n", + " T_mae= sklearn.metrics.mean_absolute_error(UR[i]['y_test_tot'],UR[i]['UR_gpcd'])\n", + " T_mape= sklearn.metrics.mean_absolute_percentage_error(UR[i]['y_test_tot'],UR[i]['UR_gpcd'])*100\n", + " \n", + " print('The Total Demand prediction RMSE is ', T_rmse)\n", + " print('The Total Demand prediction R2 is ', T_r2)\n", + " print('The Total Demand prediction MAE is ', T_mae)\n", + " print('The Total Demand prediction MAPE is ', T_mape, '%') \n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 256, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pdict is not used\n", + "Total R2 is 0.6235333383547133\n", + "Total MAE is 2485687.106818947\n", + "Total RMSE is 3077310.1021666485\n", + "Total MAPE is 30.788637404653628\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAowAAAEACAYAAAA5qSfoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABIHElEQVR4nO3deZzVc///8cc0lVSqUSIqUbxE15RE5Gct2VKZELmqi3BZsl1KuEIla2XNTtYvQlNRUl2UXZbrYiReIpVIiRq018zvj8/nTKcxc+ZMzZkzZ+Z5v93mNuezntfnfM7MeZ33mpafn4+IiIiISHGqJTsAEREREanYlDCKiIiISExKGEVEREQkJiWMIiIiIhKTEkYRERERiUkJo4iIiIjEVD3ZAWwPM6sHvA90c/eFxezTDngyatUuwEp3b5Po+EREREQqg5RNGM2sI/AosG+s/dz9M6BdeExt4CPgwgSHJyIiIlJppGzCCJwPXAI8E1lhZv2AKwiq2j8FLnH3dVHHXAu85e7vlmOcIiIiIiktLdVnejGzhcDRQB3gIeA4d19nZrcCq919ZLhffeAb4G/uvjxJ4YqIiIiknFQuYSzsGGAf4EMzA6gJ/Ddq+9+BSUoWRUREREqnMiWM6cCL7n4ZgJnVZevr6wnckoS4RERERFJaZRpWZzZwqpk1NrM04EGC9oyEywcBHyQtOhEREZEUVWkSRnf/HBgOvAl8SVDieFu4eRdgQ6EOMCIiIiISh5Tv9CIiIiIiiVVpShhFREREJDFSrtPL8OHDd6hVq9bBffv2Xbr77rtvTnY8IiKSUOlAE+BjYH2SY0kIfa5JBRHzby3lEsZatWodPGTIkHeSHYeIiJSrI4BKOemCPtekginyby3l2jA2a9asZXp6+rfvvvsuTZs2TXY4IiJSPloB3yU7iETQ55pUMEX+raVcCeOSJUs2A2zatCnZoYiISPmptFW1+lyTCqbIvzV1ehERERGRmFKuhFFERKQyOv7447dabtCgAZ07d+a6666jbt26SYpKJFCpEsa8vDyWLFnC6tWrkx2KVBI1atSgcePG1KtXL9mhiFRqU6ZM4aqrrmLIkCGce+65yQ4nae6++246dOhAXl4eS5cu5YYbbuC2225j5MiRyQ5NqrhKlTCuWLGCtLQ0zIxq1VTbLtsnPz+ftWvX8uOPPwIoaRRJoClTprDnnnsyceLEKp0w1q9fn1122QWAXXfdlX79+nHLLbcoYZSkq1RZ1apVq9h1112VLEqZSEtLo3bt2uyxxx4sX7482eGIVFq5ubm8++67DBw4kG+++YZ58+YlO6QKY+edd052CCJAJUsYN2/eTI0aNZIdhlQyO+64Ixs3bkx2GCKV1vTp06lZsyYnnXQSLVq0IDs7O9khVQi//fYbzzzzDN27d092KCKVq0oaglIhkbKk95RIYr366qsceeSRVK9enc6dO5Odnc2QIUOqZAHAhRdeSHp6ekGTmAYNGjB06NBkhyVSuUoY/2LduqSdd8mSJbRp04YePXrQs2dPTj75ZM455xx+/vnn7XrqP//8k+HDh9OtWzd69OhB3759+fLLL7f5fD169AAgJyeHUaNGlerY119/naysLLp3784pp5zCY489VrDt3nvv5ZNPPol5/KxZs3jiiScAeP7553n++edLGX3pnH/++SxbtowffviB6667LqHPJSLxWbZsGZ988gldunQBoGvXrqxcuZK33noryZElx4gRI5g0aRKTJ0/mpZdeonv37vTu3Zvvv/8+2aFJFVfpShi3UqsWJKJ0KM7ZcRo3bszkyZMLlm+77TbuuOMO7rzzzm162ry8PM4//3w6duzIpEmTqF69Oh9++CHnn38+U6dOJSMjo9TnjMT37bff8uuvv8Z93LJly7j99tvJzs4mIyOD1atX07dvX/baay86d+7Mxx9/TMeOHWOeY+7cuQWPzzrrrFLHXlqPPvooAHPmzOGHH35I+POJSMlee+010tPTOeqoowBo27YtjRs3ZtKkSQVJZFXSuHFj9txzz4LlzMxM3n77bV588UWGDBmSxMikqqvcCWMF07Fjx4JkMScnh1tvvZV169aRkZHB8OHDadasGX379qV+/frMnz+fu+++m9atWxccP2fOHJYuXcpll11W0LHn0EMP5dZbbyUvL49NmzYxbNgw5s+fz4oVKzAz7rzzTlasWMFFF13E3nvvzbfffsvuu+/OqFGjaNCgAWbGxx9/zL333suaNWt48MEH6du3L9dddx3Lli1j+fLlHHbYYdx8881bVc2uXLmSjRs3si4sba1Tpw633XYbO+ywA5MmTWLu3LkMHTqUsWPHkpuby1133cW6dev4/fffufbaa2nRogUvvPACALvvvjs//fQTAJdeeimzZs3i7rvvJi8vj2bNmjFixAgaNWrEscceS/fu3Xn33XdZu3Ytt99+O23atOGjjz76y/m7dOnCNddcw6pVq1i0aBGDBw9m5MiRPP3004wcOZIlS5YwfPhw/vzzTw4++GDOOOMMAPr27cugQYNo27Zt4t8QIsKUKVPYuHHjVl8w8/LymD17Nr/99ps6fYQ2b660E91IiqjcVdIVyMaNG5k+fTrt2rVjw4YNDB06lDFjxjBx4kTOOeccrr/++oJ9zYzp06dvlSwCzJs3j/322+8vvcCPOuooGjZsyP/+9z9q1KjB+PHjmTlzJn/88UdBtc4333xDnz59mDp1Ki1btmTs2LEFx9erV4/LLruMY489losuuojZs2fTunVrxo8fz/Tp0/n444//Uu2933770blzZ7p06cJpp53GqFGjyMvLY88996Rnz560adOGkSNHYmY8++yzjBw5kokTJzJy5EjuueceWrVqxZlnnsmZZ55Jr169Cs7766+/csMNN3D//ffz6quv0r59e0aMGFGwvUGDBrz88suceeaZPPzwwwBFnj96/2nTpnHssccWrBs6dCht2rThxhtvpFevXgWlrD/++CO//fabkkWRcrJw4ULmzp3Ltddey6RJkwp+Hn74YTZu3MjUqVOTHWK5y83N5ZdffuGXX37hhx9+4O6772bRokWccMIJAKxbt45ffvklyVFKVaQSxgRavnx5QRvBDRs2kJmZyVVXXcXChQv54YcfuOiiiwr2/fPPPwseZ2ZmFnm+atWqscMOOxT7fAcffDANGjTg//7v/1iwYAELFy5kzZo1ALRo0aLgG3zPnj0ZNGhQsefp1q0bOTk5PPnkkyxYsIBVq1YVnCfa8OHDufjii3n33Xd59913OeOMMxg9ejRdu3bdar9Ro0Yxa9YsXn/9dT7//POYA6vn5OSQmZlJ06ZNAejduzePPPJIwfYjjjgCgH322YcZM2aUeP7iXsuIjh07cv3117NkyRImT55ccL9EJPGmTJlCvXr1OOuss7b637bvvvty4IEHMnHiRE4//XT++OOPgrEJK7srrrii4PEOO+zAfvvtx3333Uf79u2BoAr/2muvxd2TFKFUVUoYE6hwG8aIn3/+maZNmxZs27x5MytWrCjYXqtWLQDeeOMN7r33XgCOPfZYOnXqxHPPPUd+fv5W1cN33nknnTp1YvXq1dx7773069eP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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "Pred_UR_AF = Demand_Forecast(slc_val, False, Preds, 'UR_gpcd_M3', \n", + " 'y_test_tot_M3', 'm3', 'Seasonal_term_pred_UR_M3', 'Per-Capita Stationarity', 'red', 'orange')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "'''I am putting a hard code on the limits here to make both figure have same color scale'''\n", + "\n", + "plt.rcParams[\"axes.grid\"] = False\n", + "plt.rcParams[\"axes.facecolor\"] ='white'\n", + "#plt.rcParams[\"axes.edgecolor\"]['bottom'] = 'black'\n", + "\n", + "def gradientbars_sliced(bars, ymin, ymax):\n", + " ax = bars[0].axes\n", + " xmin, xmax = ax.get_xlim()\n", + " # ymin, ymax = ax.get_ylim()\n", + " for bar in bars:\n", + " bar.set_zorder(1)\n", + " bar.set_facecolor(\"none\")\n", + " x, y = bar.get_xy()\n", + " w, h = bar.get_width(), bar.get_height()\n", + " grad = np.linspace(y, y + h, 256).reshape(256, 1)\n", + " ax.imshow(grad, extent=[x, x + w, y, y + h], aspect=\"auto\", zorder=0, origin='lower',\n", + " vmin= - max(np.abs(ymin), ymax), vmax=max(np.abs(ymin), ymax), cmap='Spectral_r')\n", + " ax.axis([xmin, xmax, ymin, ymax])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 257, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "gradientbars_sliced() takes 1 positional argument but 3 were given", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 39\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_ylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Acre-Feet'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 40\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Base: Difference From The Observed'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msize\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtitlesize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 41\u001b[1;33m gradientbars_sliced(Error_UR, min(min(DayDF.Error_UR), min(DayDF.Error_SLC_WDM)),\n\u001b[0m\u001b[0;32m 42\u001b[0m max(max(DayDF.Error_UR), max(DayDF.Error_SLC_WDM)))\n\u001b[0;32m 43\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mspines\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'bottom'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_color\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'black'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: gradientbars_sliced() takes 1 positional argument but 3 were given" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Reduce width to increase space between bars\n", + "width = .9\n", + "widthM = 1\n", + "titlesize = 14\n", + "\n", + "Ann_Eval['Supply'] = ['Surplus', 'Drought', 'Average']\n", + "Ann_Eval.index = Ann_Eval['Supply']\n", + "\n", + "DayDF = Ann_Eval\n", + "\n", + "fig, ax = plt.subplots(3,1, constrained_layout=True)\n", + "fig.set_size_inches(9,11)\n", + "DayDF['Error_SLC_WDM'] = DayDF.y_pred_tot_M3-DayDF.y_test_tot_M3\n", + "DayDF['Error_UR'] = DayDF.UR_gpcd_M3-DayDF.y_test_tot_M3\n", + "\n", + "\n", + "#Annual Figure\n", + "\n", + "ax[0].bar(DayDF.Supply, DayDF.UR_gpcd_M3, width=width, \n", + " color='red', label='Base')\n", + "ax[0].bar(DayDF.Supply, DayDF.y_pred_tot_M3, width=width, \n", + " color='orange', label='MLR')\n", + "ax[0].bar(DayDF.Supply, DayDF.y_test_tot_M3, width=width, \n", + " color='blue', label='Observed')\n", + "ax[0].set_ylim(0,max(max(Ann_Eval.y_test_tot_M3), max(Ann_Eval.y_pred_tot_M3),max(Ann_Eval.UR_gpcd_M3))*1.2)\n", + "#ax.annotate('Max Extra DC use: '+str(np.round(np.max(DayDF.ExtraDC),1))+'MGD', \n", + " # xy=(DayDF.index[269], 150))\n", + "#ax.annotate('Max Daily DC use: '+str(np.round(np.max(DayDF.SLCDPU_DC_Water_Use),1))+'MGD', \n", + " # xy=(DayDF.index[269], 130))\n", + "ax[0].legend(loc = 'upper left')\n", + "ax[0].set_ylabel('Acre-Feet')\n", + "ax[0].set_title(' Comparison of Seasonal Forecasts vs Observed', size = titlesize)\n", + "ax[0].spines['bottom'].set_color('black')\n", + "ax[0].spines['left'].set_color('black')\n", + "\n", + "\n", + "Error_UR = ax[1].bar(DayDF.index, DayDF.Error_UR, width=width, \n", + " color='red', label='Base')\n", + "ax[1].set_ylabel('Acre-Feet')\n", + "ax[1].set_title('Base: Difference From The Observed', size = titlesize)\n", + "gradientbars_sliced(Error_UR, min(min(DayDF.Error_UR), min(DayDF.Error_SLC_WDM)),\n", + " max(max(DayDF.Error_UR), max(DayDF.Error_SLC_WDM)))\n", + "ax[1].spines['bottom'].set_color('black')\n", + "ax[1].spines['left'].set_color('black')\n", + "\n", + "\n", + "\n", + "Error_SLC_WDM = ax[2].bar(DayDF.Supply, DayDF.Error_SLC_WDM, width=width, \n", + " color='red', label='Unit-Rate')\n", + "ax[2].set_ylabel('Acre-Feet')\n", + "ax[2].set_title('MLR: Difference From The Observed', size = titlesize)\n", + "gradientbars_sliced(Error_SLC_WDM, min(min(DayDF.Error_UR), min(DayDF.Error_SLC_WDM)),\n", + " max(max(DayDF.Error_UR), max(DayDF.Error_SLC_WDM)))\n", + "ax[2].spines['bottom'].set_color('black')\n", + "ax[2].spines['left'].set_color('black')\n", + "\n", + "fig.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/SLC_WDMvsUR.pdf')" + ] + }, + { + "cell_type": "code", + "execution_count": 352, + "metadata": {}, + "outputs": [], + "source": [ + "#Make similar figure to one above, but include RFR and MLP.\n", + "#Make bars side by side rather than stacked\n", + "#need to convert MLP and RFR to metric too\n", + "acreft_m3 = 1233.48\n", + "MLP = pd.read_excel('MLP_Models/MLP_Ann_Comp.xlsx')\n", + "RFR = pd.read_excel('RFR_Models/RFR_Ann_Comp.xlsx')\n", + "colrem = ['Supply', 'Supply.1', 'UR_gpcd_AF' ,'Error_UR', 'y_test_tot_AF']\n", + "MLP.index = MLP['Supply']\n", + "RFR.index = RFR['Supply']\n", + "MLP =MLP.drop(columns = colrem)\n", + "RFR = RFR.drop(columns = colrem)\n", + "\n", + "\n", + "MLP_col = ['MLP_pred_tot_AF', 'Error_MLP']\n", + "RFR_col = ['RFR_pred_tot_AF', 'Error_RFR']\n", + "\n", + "MLP.columns = MLP_col\n", + "RFR.columns = RFR_col\n", + "\n", + "#add mlp and RFR predictions to MLR/Ur\n", + "DayDF['RFR_pred'] =RFR['RFR_pred_tot_AF']*acreft_m3\n", + "DayDF['RFR_Err'] =RFR['Error_RFR']*acreft_m3\n", + "\n", + "DayDF['MLP_pred'] =MLP['MLP_pred_tot_AF']*acreft_m3\n", + "DayDF['MLP_Err'] =MLP['Error_MLP']*acreft_m3\n", + "\n", + "Preds = ['y_test_tot_AF' ,'y_pred_tot_AF', 'MLP_pred', 'RFR_pred', 'UR_gpcd_AF' ]\n", + "Err = ['Error_SLC_WDM', 'MLP_Err', 'RFR_Err', 'Error_UR' ]\n", + "labels = ['Observed','SLC-WDM' , 'MLP' , 'RFR', 'Stationary']\n", + "label2 = ['SLC-WDM' , 'MLP' , 'RFR', 'Stationary']\n", + "\n", + "\n", + "Preds = DayDF[Preds].copy()\n", + "Preds.columns = labels\n", + "Err = DayDF[Err].copy()\n", + "Err.columns =label2\n", + "ErrPerc = Err.copy()\n", + "\n", + "ErrPerc['Stationary'] = round(((Preds['Stationary']-Preds['Observed'])/Preds['Observed'])*100,1)\n", + "ErrPerc['SLC-WDM'] = round(((Preds['SLC-WDM']-Preds['Observed'])/Preds['Observed'])*100,1)\n", + "ErrPerc['MLP'] = round(((Preds['MLP']-Preds['Observed'])/Preds['Observed'])*100,1)\n", + "ErrPerc['RFR'] = round(((Preds['RFR']-Preds['Observed'])/Preds['Observed'])*100,1)\n", + "\n", + "\n", + "Sup = ['Wet', 'Dry', 'Average']\n", + "\n", + "Preds['Supply'] = Sup\n", + "Preds.index = Preds['Supply']\n", + "del Preds['Supply']\n", + "\n", + "Err['Supply'] = Sup\n", + "Err.index = Err['Supply']\n", + "del Err['Supply']\n", + "\n", + "ErrPerc['Supply'] = Sup\n", + "ErrPerc.index = ErrPerc['Supply']\n", + "del ErrPerc['Supply']\n", + "\n", + "\n", + "Preds['CSD_WDM_L'] = np.array(Annual['CSD_WDM_lower_tot'])\n", + "Preds['CSD_WDM_U'] = np.array(Annual['CSD_WDM_upper_tot'])\n", + "\n", + "Err['CSD_WDM_L'] = Preds['Observed']-Preds['CSD_WDM_L']\n", + "Err['CSD_WDM_U'] = Preds['CSD_WDM_U'] - Preds['Observed']\n" + ] + }, + { + "cell_type": "code", + "execution_count": 353, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAApUAAAKQCAYAAADOnIEUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAACoaklEQVR4nOzdeZzNdfvH8dcxMxj7LjsVl6wh3SVUSov20kbcFdq1SyupROvdIm2/tKGk7uiuqKS9u+iONrpQyF7ZGWMW8/vje0bHNBhm+Z4x76fHeTjn892uM3PmnOt81khWVhYiIiIiIvlRKuwARERERKT4U1IpIiIiIvmmpFJERERE8k1JpYiIiIjkm5JKEREREck3JZUiIiIikm+Ju9vh22+/PT4xMXFoVlbWfigJFRERESmJMoHPMzIyBnTo0CEttx12mVR+++23x5cpU2ZU48aN05KTk9eWKlVKk1qKiIiIlDDbtm2LLF68uPO6desuBx7NbZ9d1jwmJiYObdy4cVr58uW3KKEUERERKZlKlSqVVbdu3U0JCQkX7nSfXZ0gKytrv+Tk5NQCj0xEREREipXSpUunZ2VlVd7Z9t31kSylGkoRERERiUQisIvcUQNvRERERCTf9umkctWqVYmDBg1q2KlTpzatW7du361bt1YjR46sk5KSEgH4+OOPK5pZh/T09LBD3WNnnHGGjRgxom7YccSjLl26tDazDtm3Fi1atO/atWvrhx56aL/CuN7UqVMrnXPOOc3atWt38CGHHNK2T58+B3777bfJBXV+M+swbdq0ihC8pl977bWqe3uu33//PfG6665r9I9//KNty5Yt23fr1q3lAw88sF9aWloke59ff/219DvvvLPT5o2c3njjjaorVqxIBBgxYkTdM844w/Y2vvzIee3YuGTPrF27NmHIkCH1u3bt2rp169btunXr1uqhhx7a4XXyzDPP1OzevXvLVq1ate/YsWPbSy+9tMkvv/xSOnv7Sy+9VD3n32GnTp3a3HzzzQ02bNiw08+eiRMnVm3ZsmX7LVu2RGLL//GPf7Tt0KHDwZmZmdvLUlJSIi1atGj/1ltvVcl+P8++HXTQQR0OPfTQtldeeWXjlStXbn8dZO/XuXPn1rld/5JLLtk/9m9OdpT98439XWd79tlna5pZh7vvvrsuBK+BTp06tdnZuUaMGFE35++sQ4cOB/fr12//5cuXJxXm8yiucn6+NW/evEOHDh0O/uc//3nAb7/9lgTQs2dPi90n+9a2bdt28NffQOytZcuW7bt06dI6v3nF3r3hZm5pS0Jy0b1ZZ27JICH5uz05ZOnSpUnnn39+8/3222/rvffeu7BRo0Zbf/zxx+THH3+83hdffFHl1Vdf9cIKd5+3ZUtbkovw979lSwbJe/b7v+qqq5b27NlzNUB6enrkk08+qXTvvfc23m+//dJ69+69pqBCe/LJJ2uNHj26Xr9+/Zbfeeedv2VkZESee+65WhdddFHz559//uf27dtvye81Pv744++qVauWCXDPPffUz8zMjJxzzjlr9+Zc/fr1a1qjRo20UaNGza9Ro0bGrFmzyt1///0N165dm3TvvfcuARg8eHDjNm3abDrppJPW7+58ixYtKn3rrbfu//bbb/8IZFx11VUr09LSVu1NbPkVe+2ccYURT262bKFtcvJevu/u3fUykpPZo7+d1atXJ5x99tkHValSJX3o0KGLmjRpsnX27NnlHnjggYa//PJL8ujRoxc+/fTTNV944YU6N998829t2rRJ+eOPPxIff/zxun379m0+derUHytWrLgNoGrVqulvvvnmHICtW7eWmjNnTvL999/foH///smvvPLKvISEhL9dv3PnzhszMjIis2bNKtepU6fNAD/++GPZtLS0SGZmZmT27NnlOnTokALwzTfflM/Kyop07tx54/fff18O4MMPP/w+ISEhKz09PfLrr7+Weeihhxr06dPH3nzzzbkVKlTYln2dtWvXJs2ePTv54IMP3v43unXr1sg333xTaS9+1AVmS/qWtslJRff+uiV9S0Zy0p69vyYmJmZNnTq1ypVXXvl7bPlHH31UJdo8mmfNmjXb/MwzzywAyMrKiixbtizp1ltvbXLttdc2ee211+bt0ckKQPqW9LZJyUlF9vNP35KekZSctNefb5mZmZG5c+cm33PPPQ1vvPHG7T+zs8466/eBAweuiD2uVKkdv8tl/60AbN68OWHKlClVnnjiifoNGjTYesEFF6zem+ezdz+4hORExu/ZCydfemXtcZx33HFHw5o1a6aNHz9+XlJS8IWnSZMmaZ07d97Uo0ePlg8++GCdI488ckOBx1oSJCcnsodvHPmStee//woVKmTWqVNnezLRp0+f1VOmTKn2wQcfVC2opPKXX34pPWrUqPq33nrrothzPvroo4vPOeecMg899FD9cePGzc/vdWKfR358//33yfPmzSs3ZsyY+TVr1syA4G9i48aNCQ8++GDDu+++e0lCQgJZWVl5/uVmZe3Y5To7mQhD7LVzxhUvkpNJLNo/nT1/j7/nnnvqJyQkZI0bN25ecnJyFsD++++fVq1atYxLL73Uvvrqq98nT55c47zzzlt12mmnrYPgdfTkk0/+evjhh7d99913K5977rlrIfgQi339Nm7cOG3//fdPPfPMM1tOnjy5yplnnrku5/Xr1KmTUbdu3a2zZs0qn51Ufv755xVbtmy5KSMjI/L5559XzE4q//e//5Vv3LjxluwvXQC1a9dOz37Pb9iwYXqLFi3mn3jiia3GjBlT8+qrr97+hadVq1ab3nvvvSqxSeVHH31UsWHDhqlz584tv6c/t4KSnJScGBlWdC+SrKF7/v7aqlWrTZ988skOSeX69etLzZkzp8L++++fsifnSkxMzIp9jdStWze9f//+y4cMGbL/mjVrEmJ/t0UhKTkpcVhkWJFdb2jW0Hx/vtWvXz/9zz//XH7nnXc2WbduXQJAcnJy5u4+O2L/VoCMgQMHrvriiy8qffjhh1X2NqncJ5u/V61alfjVV19V6dev38qYHxgAVatWzTz33HNXvfPOOzWym1GeeeaZWh07dmx7yCGHtH3ggQe2N5GuX7++1CWXXLJ/hw4dDj744IPbXXzxxQfENqdNnjy5Svfu3Vu2bt26XY8ePQ6aOnXq9m+4PXv2tJtuuqnhUUcd1erwww9vc+655za74oormsTGcuONNzbs37///gBLlixJuvDCCw9o06ZNuyOOOKL1nXfeWW/r1q3b31kmTZpU5eijj27Vpk2bdrfcckuDPfngl0BCQkJW6dKlswC2bdvG/fffX+fwww9v065du4N79erVdN68eWWy9zWzDvfcc0/djh07tj333HOb5Xa+f//739UqVqyYcd555/0tSb3nnnsWDxky5Lfsxw8//PB+Xbt2bd2yZcv2hx12WJvhw4dvb2Lo2bOn3XvvvXXPOussa926dfszzjjDfvrpp7KxsUybNq3iiBEj6r7//vvVP/zww2pdunRpDTB37tyyvXv3btq2bdt2rVq1an/GGWfYjz/+WJZcRCKRLIDp06fvUBPTs2fPtRMnTpwTiUQYOHBg4x9++KHC2LFj6/Ts2dMAvvzyy/JnnnmmtW7dul2bNm3a9erVq+nSpUuTAE444YTWACeffHKrl156qXrOJugvv/yy/BlnnGFt2rRp16VLl9ZPP/10zextAwcObHzLLbc0uPTSS5u0adOm3dFHH93qpZdeqp69ffny5Un9+/ffv3379ge3bNmy/Yknntjik08+qQCwcOHC0mbW4b777qvTvn37g6+++urGsdeOjev//u//arRr1+7giRMnbu82kJmZyeGHH97mzTffrJLbz6qkSk1NjUyfPr3aOeec83t2QpntqKOO2vTUU0/Na9269ZZIJMK3335bMTU1dfv7UIUKFba98cYbc0444YRd1nA3b958a6tWrTZNmzZtp9042rZtu/HHH3/cntjNmDGj0iGHHLKxQ4cOG2fOnLm9WfqHH36o0K5du427ul6tWrUyOnfuvPajjz6qkuP5rPv88893KPvggw+qHHXUUXvVClCSHHXUUet++umnCtkJDMDUqVMrt2rVamO5cuXy/cUyMTGRSCRC9vu17F72zyq75nFvJSUlZeXnHPtkUvntt9+W27ZtGx07dtyc2/Z//OMfm9avX5+4ePHiMgBTp06t9vTTT88bOnTooldeeWW/559/vgbAyJEj661YsaL0888/7+PGjZu7du3axDvvvLMBwOzZs5OHDBnS5MILL1zx5ptvzjnjjDP+HDRo0IGzZs3a3pdu6tSp1e++++5Fjz322IJevXr9/t///rdydqKYmZnJZ599VrVHjx5rtm3bxuWXX35gxYoVMydMmDB3xIgRC7/44osqd999dz2An376qeytt966/5lnnvn7hAkT5m7durVUmN+ki5u0tLTIm2++WeXbb7+tdPTRR68DePrpp2tNmTKl+vDhwxeOHz/+5/r162+96KKLmm3evHn738Rnn31W5eWXX/75jjvu+C23886bN69cs2bNUnJrwmvWrNlWM9sKMH78+GqvvPJK7aFDhy56++23f+zXr9+Kl156qc7XX39dLnv/8ePH73fUUUetnTBhwpyaNWumX3rppU1z9im76qqrVh555JFrO3fuvPaNN96Yu23bNq644ooD99tvv61vvPHGnBdffPHnbdu2RUaOHFk/t3hbt26devDBB28cMmRIk+OPP77FkCFD6r///vuVkpKSspo3b761VKlS3H333UsOOuigzWedddbvTz/99IINGzaUGjhwYNNDDz10w+TJk38aPXr0vBUrVpR59NFH6wC8/PLLcwFeeOGFn3v27LlDcj1nzpyyl156qbVr127TxIkT51xyySXLn3jiifqvv/769mTirbfeqtm8efOU1157bc6hhx66/oEHHmi0evXqBIDrrruuSUZGRmTs2LE/v/baa3Nq1aqVdvfddzeKvcasWbMqvPbaa3OvvPLKHZp5YuPq1avX6i5duqybOnXq9ut+/vnnFVJTU0vtLgEqaX755Zcyqamppdq1a5fre+fRRx+9sXz58tt69eq16quvvqrcuXPnNldccUWTl156qfrKlSsTmzVrtrVy5cq7TSqaNGmyZdGiRbl++QE45JBDNmW/x2VmZvL9999X7NSp08bDDz984w8//FAxux/8nDlzyh922GG7TCoBDjjggNTffvtth37OJ5544roFCxaUy+67t23bNr788ssqPXr0WLe785V0TZs23VKrVq209957b/sX1OnTp1fp1q3buvyee968eWXGjBmz38EHH7whtruC7Ny8efPKPPnkk3UPOeSQDXvbWpSRkcG4ceOqffvtt5WOO+64vf5itU8mlevWrUsEqFq1aq5Vv9nla9euTQQYPnz44vbt22855ZRT1p9zzjmrXn/99ZoAy5cvL52cnLytSZMmW1u2bJn60EMPLbzkkktWATzzzDP79ejR48/evXuvOfDAA7cOGDDgj6OOOmrNCy+8UCv7Oh07dlzfpUuXTR07dkw5/vjj1wN8+OGHlQA+/fTTilu3bi114oknrv/oo48qrly5ssy//vWvRQcddFBq165dN912222L33zzzVrp6elMmDChRosWLTYPHDjw94MOOih15MiRv1WtWrX4jS4qQg899FDDtm3btove2t95551Nevbsuer8889fAzB27Nj9rrnmmqXdunXbmP0zTUhIYNKkSVWyz3HGGWf8Ea1VyXWu1k2bNiVUqFBht00zderUSR86dOiiY445ZmOTJk3SBgwY8EfVqlXTf/755+0fch06dFg/cODA31u0aJH64IMPLtq4cWPi+++/v8NgmYoVK24rU6bMtjJlymTVqlUrIyUlpdSpp576x5133rn0wAMP3NqhQ4eUU0455c9FixbtdJDQiy++OP+SSy5Ztm3btsiECRNqDxw4sGnXrl1bv//++5UAqlSpkpmYmJiVnJycWb169czNmzeX6tu374qbbrppxf7775/WuXPnzUcdddTaX3/9NRkguxm9Ro0aGeXKldvh2+24ceNqNG7cOGXIkCHLzGxrnz59Vp955pm/v/DCC9tbAxo1arTluuuuW9W8efOtt95667K0tLTIjz/+mAzQtWvXdXfddddvLVq0SG3ZsmVqr169fl+yZEnZbdv+es+84IILfj/wwAO3J/DZcsZ16qmnrp4xY0blTZs2lQJ4++23q3Xu3Hldztq4ki675qly5cq7fF337t17zahRo+abWcqnn35adfjw4Y2PPvrotrfeemuD2IE0O1OhQoXMlJSUv38bizriiCM2rlixoszq1asTvvvuu+TMzEzat2+fcuihh6YAzJgxo/yiRYtKr1+/Pqlz5867TSorVqyYuWXLlh0+7+rVq5d2wAEHpEydOrVy9jkrVKiQ2axZs625n0VidenSZd3HH39cBYIv7t98803lvUnIf/755wrZ79UtW7Zsf+qpp7YqW7bstpEjRy4u6Jj3FbGfb61atWp/zjnntGjWrFnKo48++mv2Pq+++up+MZ+B7dq2bdtuxowZ5WLPc8ghh2zf1rp16w7PPPNM3auvvnrJ3vbZh73tUxnnqlSpkgGwcuXKpAYNGvwt+VqxYkXp7P2SkpKy2rRps71PTcuWLVNeeeWV/QAuvfTSlVdddVXTTp06Hdy2bdsN3bp1W9erV6/VAIsXLy67aNGi5HfffbdG9rEZGRkRM9v+Db9u3brb18YsW7ZsVufOnde9//77VXr06LH+3XffrdqpU6d1ycnJWfPnzy+7efPmhA4dOrTL3j8rK4uMjIzI4sWLy/z6669lmzZtur2fSunSpbP233//fA8A2ZdddNFFy0899dS1AGXLlt1Wp06d9MTE4OW+cePGUn/++WfSHXfc0WTo0KHbj0lLSyu1cOHC7bUn9evX3/776927d9Mff/yxQvbj7777blblypUzNmzYsNMPxmxHH330xq+++qr8sGHD6i1cuLDsggULyq1duzZp27Zt22si27Ztu/11U6lSpW316tVLXbBgwU5rciBobuzfv/8fr7zySvWffvqp3OLFi5N/+eWXchUrVtxpP5qyZctm3XDDDStvuOGGlYsXLy79/vvvV37llVdq33DDDQe8//77P+Tsg1OnTp2MXr16rX7iiSdq//zzz8mLFi1KXrhwYXLs63xnFi1alNyyZcsd9uvQocOmN998c/sXr3r16m3/AM+u4crIyIgA9O/f/4+JEydWmzVrVvnFixcnz58/vxwENVfZGjVqlKcEIFrDlvnuu+9WPvPMM9d++umnVe+6666FeTm2JKlRo0b2F+7dvq67d+++oXv37hs2b95c6uOPP644adKk6m+88UatevXqbc05gCOnzZs3J5QrVy4zep6Wv//+e2mAWrVqpX3wwQc/NWnSJK1GjRppM2fOLD9v3rzk1q1bb4r+/Wa1aNFi04wZMyrUrVs3LWd/yp3ZtGlTQm7Nsl27dl338ccfV7n44ov/fO+996oceeSRavrOo+7du6+79tprD0xPT+ejjz6q2KhRoy377bffHvf/3n///VMeeeSRXyFouq1Zs2ZGmH2zi4Psz7dNmzaVeuyxx+quWrWq9ODBg5fVqFFj+99Cjx49/syuBMvWoEGDHdbrnjBhwpyEhATcvezw4cMbde3add2ll176R35i2yeTykMOOSQlISEh69tvvy3foEGDdTm3z549u1ylSpUyGjVqtDW7n1m2rKysSHZ/gk6dOm3+6KOPvn/33XerfPrpp5Ufe+yxBlOmTKk2ceLEeZmZmZHzzjtv1Xnnnfdn7PFlypTZ/sdQunTpHf4wTjnllDW33XZbk61bt/726aefVh0yZMgiCD5E69Spk/r0008vyBlr9osg58CDxMRE1bDsQrVq1TKaNm2aa8KRnbTce++9vzZv3nyHWsgqVaps/6MsW7bs9t/ffffdtyhnTUfLli03v/zyy3W2bdv2t1F177zzTuXJkydXHzVq1MLx48dX/9e//tXgpJNO+vPYY49dd9ttty298MILd5h2J+fvc9u2bZHdjaLcuHFjqdNPP/2gihUrZh511FFrTznllDULFiwo+9JLL9XJbf8333yzysqVK0tffvnlvwM0atQobcCAAX+cfvrpa48++ug2X375ZcWzzjprhw/VpUuXJvXs2fOgAw88MOXwww/fcO655/45ffr0yt99912F3K4RK+frH4KRirHJdFJS0t9ex1lZWWRmZtKrV69mGzduTOjevfuabt26rU9PT48MHjz4gNh9y5Ytm6e/g4SEBLp167b2/fffr1qzZs2MrKwsunXrpoF6ORxwwAFbK1asmDlr1qzy2bWCsS655JL9jzzyyHWzZ8+uMGTIkKUVK1bcVr58+W0nnXTS+pNOOml9v3799v/qq68q7S6pXLBgQbnsL8bPPvvs/PT09Ajs+Hpo06bNpu+++678Tz/9VL5jx47bayM7dOiw8bvvvqvwxx9/pO2uP2W2efPmJTdq1OhvX8RPOOGEdS+//PJ+mzdvLvXZZ59Vue+++/RFI486deq0KSEhIeuLL76oOG3atCrZXYv2VOnSpbft7L1achf7+fbUU0/9euqppx50+eWXHzBp0qSfs/tWVqpUaaefgdkOOOCArUlJSTRt2nRr1apVf+nfv3/zmjVrpscOaNtT+2Tzd82aNTO6dOmy9qmnnqqbcw7KdevWJbz66qv79ejR48/ExETS0tJKLViwYPsAje+++658w4YNUwFGjRpVa8aMGRXOP//8NU8++eTCxx9/fP73339fceXKlYkNGzZMXbp0aemmTZtuzb5NnDix+ttvv73TzufdunXbEIlEeOKJJ2pnZmZGunfvvgGC/j5//vln6erVq2dkn2vlypVJ9913X71t27ZxwAEHbIntQ5mRkUF286PsuapVq2ZWrlw5Y9WqVUnZP+8mTZpsvf/+++t9//33uf5c69evnx77uwY4/fTT127ZsiVh/Pjx1WP3zczM5IUXXqi9YcOGhNKlS2dNnDixZt++fVfce++9Sy644ILVNWrUyFi3bl1i7BeFn3/+eXuzxLp16xJWrFhR5qCDDtrlKMpPPvmk4p9//ln6tdde82uvvXbVscceu3H58uVldjbyeenSpWXGjBlTZ+PGjTv83VeoUCEzISEhq3r16unw14AegLfffrtKuXLlto0dO3bBlVde+XvXrl03LVu2rEz2QLFdJb5NmjRJ/emnn3bo+/vtt99WqFev3m6Xfp0zZ07ZH3/8scILL7wwf9CgQStPOumk9b///nsSkKfR6bnFdeqpp6755ptvKmfXSOUcxCfBAIlu3bqtee2112rFDsKBYGT0J598UrVevXppb7/9ds133333b3OZVqxYMTO7pWhn5s2bV+ann36qcMIJJ6yFYER49t9V48aNt9ekdOjQYaO7l5szZ06FI444YvsXgE6dOm389ddfy/3000956k+5evXqhM8//7xK9+7d/zagrk2bNluqVauWPmbMmJqpqamlskeVy+4lJCRw2GGHrf/ggw8qR/uiqpY3BGXKlMm6++67Fy1cuLDcqFGjau/teY444ojNp5566u/PPvts3YULF/5tDtK82ieTSoA777xzyZYtW0r17t272ccff1xh8eLFpadMmVLpvPPOs5o1a6bddNNNKyCY8uKmm25q/O233ya/8cYbVV9//fVaffv2XQmwcuXK0iNGjGjwxRdflP/ll19KT548uVrNmjXTatSokXHRRRet+vTTT6s9/vjjtebPn1/m2Wefrfnyyy/X2VVzXGJiIkceeeTaF198sU6XLl3WZn+j6N69+4b99ttv69VXX91k9uzZyV9++WX5oUOHNipVqhTJyclZvXv3/vOXX34pN3LkyDo///xzmTvuuKPB6tWr9/qXLnDeeeeteuaZZ+pNnjy5yvz588vcdNNNjf73v/9VyllzuSsNGjRI79+//7KRI0c2euyxx2rPmzevzMyZM8tddtll+8+fP7/8bbfdtgSCb4wzZsyo9PPPP5f55ptvyl1xxRX7Z2RkRGInkv7kk0+qvvTSS9XnzJlT9oYbbmhUvXr1tGOOOeZvH5jlypXLXLlyZemlS5cmVatWLWPr1q2lJk2aVGXhwoWln3/++Rpvvvlmzexan5x69er1Z5kyZbb17t272XvvvVdp0aJFpT/++OMKl1122f6NGzfe0rVr100AycnJ25YsWVJ21apViVWrVs1cvXp10gcffFDpl19+Kf3www/v9/nnn1fNvkZ2n9IffvghOWeyetFFF/2+aNGi5Lvuuqueu5cZO3Zs9UmTJtU899xzd1mLBUGNcalSpfj3v/9dddGiRaXfeOONqs8++2xdCOYS3N3xucV12GGHba5SpUr6O++8U/PUU08tsLlK9zU33njj8rS0tFK9e/du9tFHH1VcsGBBmZdffrn6TTfdtP/xxx+/+qijjtp06qmn/j5y5MhGTz75ZK158+aV+e6775Ife+yx2h999FG1iy66aHstx7Zt21ixYkXiihUrEhcvXlz6rbfeqnLJJZc0PfjggzecfPLJuxwk1alTp03/+9//KmVlZdG2bdvttYwdO3bcvGHDhsSFCxcm59afctWqVUkrVqxI/O2335I+/PDDin379m1Ws2bNtH/+859/5twX4Igjjlj/3HPP1e3ateu6fPzYSqRjjz123TvvvFOzYsWKGQcccEBabvukp6dHpk6dWin29vnnn2ugaQE69NBDU0444YQ/X3zxxTrZM3PsjZtvvnl5cnLytrvuuqvB3p5jbyc/z9ibuSP3WjD5+R4dUqdOnYyJEyf+/Mgjj+x3xx13NFm3bl1SzZo104477rjVV1999crsQQXly5fP6Nq167r+/ftbYmJiVr9+/ZZnz512yy23LL/99tsTrrvuugO3bNmSYGabR48evSAxMZHDDz9887Bhw3595pln6j711FP1a9eunXb77bcv3N2E0aeeeuqat956q+bJJ5+8/UMtMTGRp556asGdd97ZsG/fvs1Lly69rUuXLuuGDRu2BIKRxP/6178W3H///Q3GjRtXp3Pnzms7dOgQ3qjVLVsy9mbuyHxdL7lgK2avvvrqlVu2bCk1cuTIhps2bUo44IADtjz55JPz6tWrt0cDoK655ppV++23X/q4ceNqPf/883USExOzWrRosenll1+e27p161SAIUOGLLnlllsan3322S0qVaqU0a1bt7XlypXLnDt37vbayW7duq158803azzwwAMNW7duvWnMmDHzc5tO46yzzlp99dVXVz399NNbzJgx47sLL7xw+YMPPtgwLS2tVOPGjbcMGjTot+HDhzdevHhx6UaNGu3wJl+9evXMV1555ecHHnig3rBhwxqvX78+sWLFihldunRZ969//WtRdhP+Oeec88fQoUObXHTRRU3feuutuTNnzqwwePDg/QHMbPPAgQOXPP300/VSUlIiNWrUyDzuuONW33HHHfuvWLFiaez1GjRokP7YY48teOCBB+pPmDChds2aNdMGDhy49KKLLsr1wz3nsTfeeOPiMWPG1H3mmWfq1a9fP/XGG29cctdddzWeNWtWuZx9g3LKGVd2c+wxxxyzdurUqdWOOOKITbuLoTBs2ULG3swdmZ/r7emfTq1atTJeffXVnx966KG6t99+e5MNGzYk1q5de2ufPn1WXnbZZb8DDB8+fEn9+vW3Tpo0qcaTTz5ZLxKJEH1/nBc74f/atWuTjjrqqLYQ9AWvWbPm1uOOO27N1VdfvXJ3cbRo0SK1TJky21q0aLEpdoaFpKQkWrRosWnt2rVJufWnPOaYY9pA0KWkRo0aaUccccT66667bsXOBmUdd9xx6954441axx133Lo9+0kVji3pWzL2Zu7I/FwvOWnv3l+PPfbY9bfffjtHHnnkup3ts2HDhsRrrrmmaWxZw4YNUz/44IOf9uqihSx9S3rG3swdmZ/r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PQIs5q+5KgFw91/DCEpERGRfs2jRIu67775ct23ZsoV+/foxfPhwjjzySKZNm8aNN97I1KlTGTduHAMGDOC4446jR48e9OzZk02bNjF+/HhefPHFIn4WEq/iIam8K/p/95iyLII5nLKAhCKPSEREZB+zZcsWBg0axM0338yNN974t+1ffPEFDRo04MgjjwTgmGOOoX79+gCULl2alJQUUlJSKFUqaOQcNWoUF198McnJmv1PAvHQ/N0kl9v+Mf+LiIhIPg0ZMoRzzz0XM8t1+8KFC6lZsya33norZ555JhdddBGZmUHvtD59+vDuu+/St29fbrrpJn755Rfmz5/PCSecUJRPQeJc6DWV7r4YwMwqAk0JaiYXuPvaXR4oIiIieTJu3DgSExPp2bMnS5cuzXWfjIwMPvnkE1566SXatm3LtGnTuOSSS/joo4+oVasWL7zwwvZ9+/fvzy233MLHH3/M+PHjqVChwv+3d+fxVVVX/8c/CRAQUVRksqBQkGUryGMVf318KCigaJFGKbQiYquoiApBpCKVolgQcCopaqlTEZkUa4ngCBWoYofQikKVpSIRUEAFUZE55PfHPok3IWHKcG7C992XL+7dZ99z1g23l5V99l6bkSNHcswxx1TMG6pEouo2ByRatFxpxZ5UmlkaYY/v/nwbz24zmwFc4+47YwtORESkCvjLX/7C9u3bSU9PZ9euXQWPH374YRo2bAhAgwYNaNGiBW3btgWgS5cujBgxgjVr1tCiRYuCc7344ou0aNGCli1bcsMNNzB79mxeeeUVJk+ezODBg+N4e8lu/gH2q/RT/mJPKgkJ5YVAd0LdpmrA2UAmcBew98QPEREROWCJK7bXrl1L9+7dycrKKtSnQ4cOjB8/nuXLl9O6dWuys7NJSUkpmFcJYV7mY489VjBquXv3blJTU0lNTWX79kLrbCXi7skw1bBCJENSeSnQ090XJbS9YGZbgZkoqRQRESkXy5YtY8SIEWRlZVG/fn0efPBBRo0axbZt20hLS2PixInUrFmzoP+kSZPo06cPderUAeCqq66iW7duHH300WRmZsb1NioVM6sBnMC3o5IpQE3gdHefFltgZSAZkspU4PNi2jcCdSo4FhERkSqtSZMmvPnmmwC0adOm0Ihlu3btmDVrVomvvemmmwo979OnD3369CmfQKsgM+sBPAwcW8zh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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Reduce width to increase space between bars\n", + "plt.rcParams['axes.grid'] = False\n", + "\n", + "width = .8\n", + "widthM = 1\n", + "titlesize = 14\n", + "\n", + "colorA = ['orange', 'red', 'blue' ,'green' , 'purple']\n", + "colorB = ['red','blue' ,'green' , 'purple']\n", + "\n", + "colorder = ['Observed', 'Stationary', 'SLC-WDM', 'MLP', 'RFR']\n", + "colorder2 = [ 'Stationary', 'SLC-WDM', 'MLP', 'RFR']\n", + "\n", + "#Define Error bars for visualization\n", + "Preds['UErr'] = Preds['CSD_WDM_U'] - Preds['SLC-WDM']\n", + "Preds['LErr'] = Preds['SLC-WDM'] - Preds['CSD_WDM_L']\n", + "\n", + "#shortcut taken with error bars, using low error for both high and low, minimimal difference with high\n", + "asymmetric_error = [[0,0,0],[0,0,0],Preds['LErr']/100000,[0,0,0], [0,0,0] ]\n", + "\n", + "asymmetric_error2 = [[0,0,0],Err['CSD_WDM_U']/100000,[0,0,0], [0,0,0] ]\n", + "\n", + "Preds = Preds[colorder]\n", + "Preds=Preds.rename(columns={\"Stationary\": \"Per-Capita Stationarity\", 'SLC-WDM':'CSD-WDM'})\n", + "\n", + "Preds = Preds/100000\n", + "Err = Err/100000\n", + "\n", + "Err = Err[colorder2]\n", + "Err=Err.rename(columns={\"Stationary\": \"Per-Capita Stationarity\", 'SLC-WDM':'CSD-WDM'})\n", + "\n", + "#del Preds['MLP'], Preds['RFR'], Err['MLP'], Err['RFR']\n", + "\n", + "#colorA = ['orange', 'red' , 'blue']\n", + "#colorB = ['red' ,'blue']\n", + "\n", + "fig, ax = plt.subplots(2,1, constrained_layout=True)\n", + "fig.set_size_inches(9,9)\n", + "\n", + "#Annual Figure\n", + "\n", + "\n", + "Preds.plot(ax=ax[0], kind='bar', grid=True, width=width, color = colorA, yerr = asymmetric_error, capsize=10)\n", + "#ax[0].bar(Preds.index, Preds['CSD-WDM'],yerr = asymmetric_error,ecolor='black', capsize=10, color = 'blue' )\n", + "#ax[0].bar(Preds.index, Preds['Observed'],color = 'orange' )\n", + "ax[0].legend(labels)\n", + "\n", + "ax[0].legend(loc = 'upper center',bbox_to_anchor=(.5,1.1), ncol = 5, fontsize = 14, facecolor = 'white')\n", + "ax[0].set_ylabel('Seasonal Forecast ($x10^6m^3$)', size = 14)\n", + "ax[0].set_ylim(0,np.max(Preds['Per-Capita Stationarity'])*1.1)\n", + "#ax[0].set_title(' Comparison of Seasonal Forecasts vs Observed', size = titlesize)\n", + "ax[0].spines['bottom'].set_color('black')\n", + "ax[0].spines['left'].set_color('black')\n", + "ax[0].tick_params(labelrotation=0, labelsize = 13)\n", + "ax[0].xaxis.label.set_visible(False)\n", + "ax[0].text(2.3, np.max(Preds['Per-Capita Stationarity'])*1, \"A.\", size = 16)\n", + "ax[0].set_facecolor(\"white\")\n", + "ax[0].grid(False)\n", + "\n", + "Err.plot(ax=ax[1], kind='bar', grid=True, width =width, color=colorB, legend=False, yerr = asymmetric_error2, capsize=10)\n", + "ax[1].set_ylabel('Seasonal Forecast Error ($x10^6m^3$)', size = 14)\n", + "#ax[1].set_title('Error', size = titlesize)\n", + "ax[1].spines['bottom'].set_color('black')\n", + "ax[1].spines['left'].set_color('black')\n", + "ax[1].tick_params(labelrotation=0, labelsize = 13)\n", + "ax[1].axhline(y=0, color='black', linestyle='-')\n", + "#ax[1].xaxis.label.set_visible(False)\n", + "ax[1].set_xlabel('Supply Scenario', size = 14)\n", + "ax[1].text(2.3,380, 'B.', size = 16)\n", + "ax[1].set_facecolor(\"white\")\n", + "\n", + "\n", + "ax2 = ax[1].twinx()\n", + "ax2.spines['right'].set_position(('axes', 1))\n", + "ax2.set_ylim(-16.8,42)\n", + "ax2.set_ylabel('Seasonal Forecast Error (%)', size = 14)\n", + "ax2.plot(ax=ax2)\n", + "ax2.spines['bottom'].set_color('black')\n", + "ax2.spines['left'].set_color('black')\n", + "ax2.spines['right'].set_color('black')\n", + "\n", + "\n", + "rects = ax[1].patches\n", + "\n", + "# Make some labels.\n", + "labels = list(ErrPerc['Stationary'])+list(ErrPerc['SLC-WDM'])+list(ErrPerc['MLP'])+ list(ErrPerc['RFR'])\n", + "#labels = list(ErrPerc['Stationary'])+list(ErrPerc['SLC-WDM'])\n", + "\n", + "for rect, label in zip(rects, labels):\n", + " height = rect.get_height()\n", + " if label > 0:\n", + " # [str(i)+ '%' for i in labels]\n", + " ax[1].text(rect.get_x() + rect.get_width() / 2, height+10, str(label)+'%',\n", + " ha='center', va='bottom', size = 12)\n", + " else:\n", + " ax[1].text(rect.get_x() + rect.get_width() / 2, height -25, str(label)+'%',\n", + " ha='center', va='bottom', size = 12)\n", + "\n", + "ax[1].grid(False)\n", + "\n", + "fig.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/UR_SLCWDM_Demand_compare.png', dpi = 300)" + ] + }, + { + "cell_type": "code", + "execution_count": 333, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Per-Capita StationarityCSD-WDMMLPRFR
Supply
Wet148.494015-73.983353-143.885109-55.616053
Dry394.498330-1.970593-19.91662471.513507
Average351.451585-34.877533-41.18761033.298376
\n", + "
" + ], + "text/plain": [ + " Per-Capita Stationarity CSD-WDM MLP RFR\n", + "Supply \n", + "Wet 148.494015 -73.983353 -143.885109 -55.616053\n", + "Dry 394.498330 -1.970593 -19.916624 71.513507\n", + "Average 351.451585 -34.877533 -41.187610 33.298376" + ] + }, + "execution_count": 333, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Err['CSD-WDM_L'] = Preds[]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#Make a function to put all of the predictions together\n", + "def Demand_Forecastgpcd_AF(gpcd, pdict, df, pred1, test1,pred2, test2, units1, units2, plotname, model):\n", + " FinalDF=pd.DataFrame()\n", + " if pdict is True:\n", + " print('yes')\n", + " for i in gpcd:\n", + " FinalDF=FinalDF.append(gpcd[i])\n", + "\n", + " FinalDF=FinalDF.sort_index()\n", + " else:\n", + " print('no')\n", + " FinalDF = df\n", + " \n", + " # months = np.arange(1,6,1)\n", + " # Low = list()\n", + " #Ave=list()\n", + " #High = list()\n", + " #for i in months:\n", + " # Low.append('Low'+str(i))\n", + " # Ave.append('Ave'+str(i))\n", + " # High.append('High'+str(i))\n", + " \n", + " #Low.append('Drought')\n", + " #Ave.append('Average')\n", + " #High.append('Surplus')\n", + " \n", + " #months2 = np.arange(7,13,1)\n", + " #for i in months2:\n", + " # Low.append('Low'+str(i))\n", + " # Ave.append('Ave'+str(i))\n", + " # High.append('High'+str(i))\n", + " \n", + " # Conditions = High+Low+Ave\n", + "\n", + " #adjust date range to improve figure\n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2017,12,1), freq='MS')\n", + " #FinalDF['Date'] = Conditions\n", + " \n", + " FinalDF.index = FinalDF['Date']\n", + " del FinalDF['Date']\n", + "\n", + " \n", + "\n", + "\n", + " plotmin_tot1 = FinalDF[[pred1, test1]].min().min()\n", + " plotmax_tot1 = FinalDF[[pred1, test1]].max().max()\n", + " \n", + " plotmin_tot2 = FinalDF[[pred2, test2]].min().min()\n", + " plotmax_tot2 = FinalDF[[pred2, test2]].max().max()\n", + " \n", + " Xplotmin = FinalDF.index[0]-np.timedelta64(20, 'D')\n", + " Xplotmax = FinalDF.index[-1]+np.timedelta64(33, 'D')\n", + "\n", + " fig, ax = plt.subplots(2,6, constrained_layout=True)\n", + " fig.set_size_inches(10,5)\n", + "\n", + " gs1 = ax[0,0].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[0,0].remove()\n", + " ax[0,1].remove()\n", + " ax[0,2].remove()\n", + " axbig = fig.add_subplot(gs1[0,:3])\n", + " #axbig.set_title('Total demand Timeline Evaluation')\n", + " #axbig.plot(FinalDF[pred1], color='orange', label= model)\n", + " #axbig.plot(FinalDF[test1],color='blue', label='Observed')\n", + " axbig.bar(FinalDF.index-np.timedelta64(7, 'D'), FinalDF[pred1], color='orange', label= 'CSD-WDM',width = 15, align=\"center\")\n", + " axbig.bar(FinalDF.index+np.timedelta64(8, 'D'), FinalDF[test1], color='blue', label= 'Observed',width = 15, align=\"center\")\n", + " axbig.set_xlabel('Supply Conditions')\n", + " axbig.set_ylim(plotmin_tot1-.9,plotmax_tot1*1.4)\n", + " axbig.set_xlim(Xplotmin, Xplotmax)\n", + " axbig.set_ylabel('Demand ('+ units1+')')\n", + " axbig.legend(loc = 'upper left', facecolor = 'white')\n", + " axbig.set_facecolor(\"white\")\n", + " axbig.spines['bottom'].set_color('black')\n", + " axbig.spines['left'].set_color('black')\n", + " axbig.tick_params(axis='both', which='both', length=5, color='red')\n", + " axbig.xaxis.set_major_locator(mdates.MonthLocator())\n", + " # Get only the month to show in the x-axis:\n", + " axbig.xaxis.set_major_formatter(mdates.DateFormatter('%b'))\n", + " axbig.annotate('A.', (FinalDF.index[-1], 600), size = 14)\n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " months = [0,5,10,12,17,22,24,29,34]\n", + " \n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " for i,tick in enumerate(xticks):\n", + " #if i%5.5 != 0:\n", + " if i not in months:\n", + " tick.label1.set_visible(False)\n", + " \n", + " \n", + " # xticks = axbig.xaxis.get_major_ticks()\n", + " #for i,tick in enumerate(xticks):\n", + " # if i%12 != 5:\n", + " # tick.label1.set_visible(False)\n", + "\n", + " ax[0,3].remove()\n", + " ax[0,4].remove()\n", + " ax[0,5].remove()\n", + "\n", + "\n", + " axbig2 = fig.add_subplot(gs1[0:,3:])\n", + " axbig2.scatter(FinalDF[test1], FinalDF[pred1],color='blue', alpha=0.5)\n", + " axbig2.set_ylabel('Predicted (' + units1+')' )\n", + " axbig2.set_xlabel('Observed (' + units1+')')\n", + " axbig2.set_ylim(plotmin_tot1*.95,plotmax_tot1*1.2)\n", + " axbig2.set_xlim(plotmin_tot1*.95,plotmax_tot1*1.2)\n", + " # axbig2.set_title('Indoor and Outdoor \\n Model Performance')\n", + " axbig2.plot([plotmin_tot1,plotmax_tot1],[plotmin_tot1,plotmax_tot1], color='red', linestyle='--' )\n", + " #axbig2.set_xticks(np.arange(plotmin_tot, plotmax_tot, 100).round())\n", + " #axbig2.set_yticks(np.arange(plotmin_tot, plotmax_tot, 100).round())\n", + " axbig2.set_facecolor(\"white\")\n", + " axbig2.spines['bottom'].set_color('black')\n", + " axbig2.spines['left'].set_color('black')\n", + " axbig2.text(550,600, 'C.', size = 16)\n", + " #ax[2].set_aspect('equal', adjustable='box')\n", + " \n", + " \n", + " \n", + " \n", + " gs2 = ax[1,0].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[1,0].remove()\n", + " ax[1,1].remove()\n", + " ax[1,2].remove()\n", + " ax[1,3].remove()\n", + " ax[1,4].remove()\n", + " ax[1,5].remove()\n", + " axbig = fig.add_subplot(gs2[1,:3])\n", + " #axbig.set_title('Total demand Timeline Evaluation')\n", + " #axbig.plot(FinalDF[pred2], color='orange', label= 'Predicted')\n", + " axbig.bar(FinalDF.index-np.timedelta64(7, 'D'), FinalDF[pred2], color='orange', label= 'SLC-WDM',width = 15, align=\"center\")\n", + " #axbig.plot(FinalDF[test2],color='blue', label='Observed')\n", + " axbig.bar(FinalDF.index+np.timedelta64(8, 'D'), FinalDF[test2], color='blue', label= 'Observed',width = 15, align=\"center\") \n", + " axbig.set_xlabel('Supply Conditions')\n", + " axbig.set_ylim(plotmin_tot2-.9,plotmax_tot2*1.2)\n", + " axbig.set_xlim(Xplotmin, Xplotmax)\n", + " axbig.set_ylabel('Demand ('+ units2+')')\n", + " #axbig.legend(loc = 'upper left')\n", + " axbig.set_facecolor(\"white\")\n", + " axbig.spines['bottom'].set_color('black')\n", + " axbig.spines['left'].set_color('black')\n", + " axbig.tick_params(axis='both', which='both', length=5, color='red')\n", + " axbig.xaxis.set_major_locator(mdates.MonthLocator())\n", + " # Get only the month to show in the x-axis:\n", + " axbig.xaxis.set_major_formatter(mdates.DateFormatter('%b'))\n", + "\n", + " axbig.annotate('B.', (FinalDF.index[-1], 17000), size = 14)\n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " months = [0,5,10,12,17,22,24,29,34]\n", + " \n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " for i,tick in enumerate(xticks):\n", + " #if i%5.5 != 0:\n", + " if i not in months:\n", + " tick.label1.set_visible(False)\n", + " \n", + " \n", + " #axbig.text(35,17000, 'B.', size = 16)\n", + " #axbig.get_legend().remove()\n", + " \n", + " #xticks = axbig.xaxis.get_major_ticks()\n", + " #for i,tick in enumerate(xticks):\n", + " # if i%12 != 5:\n", + " # tick.label1.set_visible(False)\n", + " fig.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/MLR_Seasonal_gpcd_AFbar.pdf')" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "no\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":36: FutureWarning: The pandas.datetime class is deprecated and will be removed from pandas in a future version. Import from datetime module instead.\n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2017,12,1), freq='MS')\n" + ] + }, + { + "data": { + "image/png": "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H2LNys6GKKr+86ayfk8ikeDcc89l9913Z8aMGTRt2pT58+czZMgQRo8eXfEJRERERKTOKTPBNrP+wO+Bx4CTgYXAOuBXwLHA82Y2xt3H10agmeidd97hyy+/5J///CdRnOXvsccenHfeeYwdOxaAxx57jJEjw5S0V111Fd26dePNN9/k1ltvBSAnJ4fRo0ezxRZbMHXqVMaPH09hYSF77rknf/rTn2jWrBkHHnggnTp14ttvv6Vdu3aceOKJHHPMMQD07t2bG2+8kZYtW3Ldddfx448/kp2dzTXXXMMee+zB0qVLufzyy1mzZg1dunRJw6skIiIiUr+UVyKyBdDV3W9x9w/c/Ud3X+PuH7v7KGA/oE3thJmZ5s6dS6dOnTYk10W6du3K3LlzAWjRogVTp07l5ptv5vLLL2fdunWMHTuW6667jsmTJ3PwwQczf/58PvvsMx577DEeeeQRpk2bxpZbbsn9998PwPLlyxk8eDDTpk3jpJNOYsaMGQAsWrSItWvXssceezBs2DAuv/xypkyZwg033MAf/vAHAG644QZ69+7NtGnT2HfffWvx1RERERGpn8rswXb3v5V3oLsXAH+t9ogakCiKKCgo2Kg9Pz9/Q9J96qmnAtCxY0e23HJLFixYQI8ePbjgggvo2bMnPXr0oHv37kyYMIHFixdz+umnbzjHHnvsseGcRb3Phx9+ONdffz2rVq1i+vTpnHjiiaxevZqPP/6Yq666asP+a9asYfny5bzzzjsbylVOPPFEhg8fXjMvhoiIiEiGKK9EZFx5B7r72dUfTsPSpUsXHnroIfLz82nSpMmG9g8//JBOnTpRWFhIVlbWhvbCwkIaN27MwIEDOfLII3nppZe49dZbmTNnDi1atOC4447bkACvXr26WPKenZ0NQNOmTTnyyCN58cUXeeaZZ7j77rspLCykadOmTJs2bcP+X331Fa1btwZCrTiEPwgaNdLEMyIiIiLlKS9bmhd/tQY6A3OBD4DdqGBwpKRm//33p0OHDtx0003k5+cD8PHHH3PXXXcxdOhQAJ566ikglJOsXr2anXbaidNOO43Vq1czcOBABg4cyPz58+nWrRvPP/8833//PYlEguuuu47x40svj+/VqxcPPPAArVu3ZocddmDzzTcnNzd3Q4L9+uuv069fPwAOPvhgnnzySQCee+451q5dW6OviYiIiEh9V16JyGgAMzsZOMzd18SP7wVeqp3wal5eXmozflTlvHGncbnuuOMOxowZwwknnEBWVhY5OTnceuutdOvWjTvuuIM1a9Zw0kkn0ahRI0aPHk2TJk245JJLuPLKK2ncuDEtWrTgxhtvJDc3lwsuuIAzzzyTwsJCdt99d4YMGVLqNffbbz9++ukn+vTps6Ht1ltv5brrruO+++6jSZMmjBkzhiiKuPbaa7n88st59NFH6dSpEy1btqyul0hEREQkI0WJCrJLM/sM6BjXXGNmzYCP3X3XWoivSqIoygUWLly4kNzc3GLbPvnkE3bfffc0RNWw6XUXqZSdgUXpDqI2lPd5LSJSD5T6eZ1Kqce/gWfMbCIQAQOAJ6s1NBERERGRDJFKgn0hMJQwFzbAI8A9NRaRiIiIiEg9lsqUEM2Blu5+IiHZ7hi31VsVlcVI9dLrLSIiIg1JKj3YDxJWcQT4EUgA9wJ9KzrQzP4EnB4/nOHuV5hZT+A2QpL+qLsPj/fdG7gPaAW8Cpzr7uvNrD0wAdgGcKCfu69K7eltLCsri/z8fJo2bVrVU0gl5efn07ixJp4RERGRhiGVHuxd3f0yAHdf4e5/APas6KA4kT4a2AfYG9jPzPoA44BewO5AVzM7Lj5kAnCBu+9GqPUeHLePBca6e0fgPeCaVJ9caVq3bs3XX39NYWHhppxGUlRYWMjXX39NTk5OukMRERERqRWpdCs2MbNW7r4SwMw2IyTAFVkGXOru6+LjPiHMof2Zuy+M2yYAp5nZfKC5u78VH/sgMMLM7gMOA05Kan8FGJbC9Uu11VZbsXTpUty9qqeQSmrZsiVbbbVVusMQERERqRWpJNj/BN42s8cJ5SG9gQcqOsjd5xX9bGa7EkpF/k5IvIssA9oB25fRvhWw0t3Xl2ivskaNGtG+fftNOYWIiIiISJkqLBFx95GEHuMcYDPgCne/LdULmNmewPPA5cACQpJeJAIK4zhSaSduFxERERGpk1KpwQZ4HXiZUJ7xRqonN7PuwAvAle4+HlgKbJe0y7bAl+W0fwPkmFlW3L5d3C4iIiIiUidVmGDHS6V/DvweuAL43MyOTOG4HYGpQF93fyRufjtssg5x0twXmOnui4G8OCEH6B+35wOvAWfE7QOAmSk/u0xRkFf+YxERERGpM1Kpwf4zcJi7zwUws30J0+ntW8FxlwHZwG1mVtT2D2AgMCne9jTwRLytH3CvmbUCZgO3x+1DgfFmNhxYAvRJIebMkpUNE38ZV5rXO0F21i+b835OkN08adxpQV44RkRERERqXSoJ9pqi5BrA3WebWYUrh7j7xcDFZWzuUsr+HwEHlNK+GDgihTgbjOxsiJLy6UQiKpaA01cLu4iIiIikSyoJ9kwzGwbcARQQyjQ+NrM2QOTuP9RkgCIiIiIi9UkqCfaVQBYwskR7f8IMH1kbHSEiUsvy8sLdnbIei4iI1JYKE2x3b1IbgYiIbIqNS6fSF4uIiDRsFSbYZnZtiaYEsAaY6+7P1UhUIiIV0WBeERGpo1IpEdkLOJgw20cBcDKwCDjdzA509+trLjwRkTKUmF1Hg3tFRKSuSCXBbgvs5+5fAZjZn4HHgUOB9wEl2CIi9ZSZ/Qk4PX44w92vMLOewG1Ac+BRdx8e77s3YZrWVsCrwLnuvt7M2gMTgG0AB/q5+6pafioiInVGKis5blmUXAO4+/dx2zogv8YikyrLyyv/sYgIQJxIHw3sA+wN7GdmfYBxQC9gd6CrmR0XHzIBuMDddwMiYHDcPhYY6+4dgfeAa2rvWYiI1D2p9GAvMLORwD2ED9RzgP+aWTdCyYjUMRrsJSIpWgZcGneYYGafALsBn7n7wrhtAnCamc0Hmrv7W/GxDwIjzOw+4DDgpKT2V4BhtfUkRETqmlR6sM8CdgI+ICx1vgMwiLCS42U1F5qIiNQkd59XlDCb2a6EUpFCQuJdZBnQDti+jPatgJXuvr5Eu4hIg1VmD7aZNXP3te7+HdC3lF3uMrNmNReaiIjUBjPbE5gBXA6sJ/RiF4kISXcjwixSFbUTt4uINFjl9WBPM7PeZrbRPmYWmdlpwJM1F5qIiNQ0M+sOvABc6e7jgaXAdkm7bAt8WU77N0COmRUtOrZd3C4i0mCVV4N9KnALMMbMXgA+JyTkuwBHAs/wy8hzERGpZ8xsR2AqcIa7vxg3vx02WQdgIeEO5jh3X2xmeWbW3d1fJ6zmO9Pd883sNeAMYCIwAJhZ609GRKQOKTPBjqdYOj8e4NgL6Ei4DfgeMNzd/1c7IYqISA25DMgGbjOzorZ/AAOBSfG2pwnrIAD0A+41s1bAbOD2uH0oMN7MhgNLgD61EbyISF2VylLpS4E7ayEWERGpRe5+MXBxGZu7lLL/R8ABpbQvBo6o1uBEpM6bMwcmT4YlS6B9e+jdGzp3TndUdUMqs4iIiIiIiGwwZw6MGgXLl0O7duH7qFGhXZRgi4iIiEglTZ4MbdqEr0aNoG3LVVjiUyZPTndkdUMqC82IiKRdXl5YRKnY4/SFIyJSr1R3OceSJaHnusi6ppvRNns17y5OEGbxbNjKmwd7QHkHuvs/qz8cEZHSaYVSEZGqKSrnaNOmeDnHZZdVPclu3z6c51csYNuvPuST3XvzaYv9aN+memOvr8rrwT4t/r4tYQaRFwkLEBxJWNVRCbaIiIhIHZdczgG/fJ88ueoJdu/ecP/1/+O3z/eg2frVvN+mJ8vXtOKcc6on5vquvGn6fg1gZjOA37j7f+PH7YF7Uzl5PJXTG8AJ7r7IzB4ADgFWx7uMcPcpZrY3cB/QCngVONfd18fXmgBsAzjQL54+UERERERSULKcAyAnJ7RXVeftvuWW2T2J8r7nlqNfoMW2rbhMs4hskMogx/ZFyTWAuy8B2pWzPwBm1g2YRfEld/cHDnP3veOvKXH7BOACd9+NULgzOG4fC4x1946E+bevSSFeEREREYm1bw8rVhRvW7EitFfJjz/CMceQvWwRzZ6fzrVPdeW665RcJ0tlkOMyMxsBPEhIfocAC1I4bjBwPvAQgJm1ANoD48xsB2AKMALYEWju7m/Fxz0IjDCz+4DDgJOS2l8BhqVw7XpNg7nqj1LfK71ZIiJSh/TuHWquIfRcr1gR6qerXM7x6KPw8cfw5JNw2GHVFmcmSaUH+0xgL+AjQu11LnBWRQe5+yB3fy2paVtCHffZwIHAocA5wPbAsqT9lhF6yLcCVrr7+hLtGa9oMFfRlxK2ukvvlYiI1HWdO4cBjW3awNKl4fumDHDkd78LIyePPbZa48wkqazkuAzovakXcvcFwMlFj83s78AAYD5hCfYiEVBISP5LzhNQuKlxiIiIiDQ0nTtvYglHfj6cdx5ceCF06QIdO1ZbbJmowgTbzA4CbgK2IGliQ3ev1NtkZnsBu7n7pLgpAvKBpcB2SbtuC3wJfAPkmFmWuxfE+3xZmWuKVLuCPMhSN3Wt0GstIlI3FBbCwIEwcSJ07RoSbClXKjXYdxPqn2ezcY9yZUTAX83sRWAVoZZ7vLsvNrM8M+vu7q8D/YGZ7p5vZq8BZwATCb3dMzfh+iKbLisbJiZNxtxXkzHXGL3WIiLpl0jA0KEhuR45MpSHSIVSSbDXu/ttm3ohd59jZiOB14EmwCR3/1e8uR9wbzyt32zg9rh9KDDezIYDS4A+mxpHnaSeOhEREalrEgm44gq4+2646iq48sp0R1RvpJJgf2xme7n73KpcwN1zk34eS5h6r+Q+HwEHlNK+GDiiKtetV9RTl7FKm1VEM42IiEi9kJ8fBjOefz78+c/pjqZeSSXB/hXwvpktBn4uaqxsDbZIvVDybsIm3l0oubw3aIlvERGpB9avh6ZN4amnoHHjjX+ZSblSSbCvrvEoROoK3U0QEZGGbty4UBbyzDO/rKsulZLKNH2vmNkWQEvCQMUsoENNByYiIiIiteyxx2DwYH7q1pO/jm7Bwi/Dio+9tQx6pVS40IyZXQ98TVi90YHPgU0e9CjplZdX/mMJ9DqJiEiD8fTT0K8fq7sczB9yp/DdT81o1y6s+jhqVCjHltSkspLjAMIS508AuwIDgXk1GJPUAq1AmBq9TiIi0iC8+iqccgp06cLtR0+n5dYtaNMGGjUKVSJt2sDkyekOsv5IJcH+Jl7N8ROgi7s/RFg6XUREREQyQfv2cNRR8MwzfPZNDjk5xTfn5MCSJekJrT5KJcHON7NdCOUhh5pZY0D9eCJlmRj98iUiIlKXLVkSVmrMzYUnn4SttqJ9e1ixovhuK1aEHFxSk0qCPRK4B5gOnAJ8AbxUk0GJNCgFKuyuDaXVz6umXkQatP/8Jyx9PmxYsebevUPd9fLlIfcu+rl37zTFWQ+lMovIdEJyjZl1AXaNF4YRkarSVIC1TnOSi4gkWbIEevYMH4TnnFNsU+fOcNlloeZ6yZLQc33OOZpFpDIqTLDNbFvCwMYtktr6ufsVNRiXVDctxy4iIiIAX30FPXrAypXw8svQseNGu3TurIR6U6Sy0MyTwFLgvzUci9QkLaBSZ5VcOl1LqYuISI0pLIQTT4Rly+D552HvvdMdUUZKJcFu6u6quhGpISVLF1S2ICIiNaZRIxg5Mvx80EHpjSWDpTLI8X0z61TjkYiIVDfN6CIiEvz8c1hIBkJ5SI8e6Y0nw6XSg/068KGZLQPyixrd/Vc1FpWIiIiIVI916+DUU+HZZ+HTT6FDh3RHlPFSSbAvB/qiGmwRERGR+qWgAH7729B7fffdSq5rSSoJ9o/u/liNRyIiIiIi1aewEAYPhscfh1GjYMiQdEfUYKSSYL9oZqOAScDaokZ3n11jUYmIiIjIpnn+eXjgAbj2Wrj00nRH06CkkmD3jb+fktSWAFSDLSIiIlJXHXMMvPQSHH54uiNpcFJZyXHn2ghERETSw8xaAW8AJwB7ADclbd4BeNvdTzCzPwFnA8vjbfe6+51m1h6YAGwDONDP3VfV2hMQkeLuuAO6dQvLoB9xRLqjaZBSWclxM+BmYHfgNGAkcKk+PEVE6j8z6wbcC+wG4O5PA0/H27YlzCT1h3j3/YHfuPubJU4zFhjr7o+Y2TXANcCwWghfREq6+2648MKwtnnXrumOpsFKpUTkdmAZ0BbIA1oB9/BL6UiZkntF3H2RmfUEbgOaA4+6+/B4v72B++Jzvwqc6+7r1SsiIlLjBgPnAw+Vsu1W4B/u/ln8eH/gj2a2E+Gz+jKgADgMOCne50HgFZRgi9S+hx+G886DE06Au+5KdzQNWioLzezj7lcD+e6+BugHVLiuZtwrMou4V8TMmgPjgF6E3vCuZnZcvPsE4AJ33w2ICB/48EuvSEfgPUKviIiIVBN3H+Tur5VsN7NdgSMInSxFdzM/IEzdui/QmvCZvBWw0t3Xx4cuA9rVfOQiUszUqXDmmaEk5LHHoEmTdEfUoKWSYBeUeJwFFKZwXFGvyJfx4wOAz9x9YfxBPAE4Le4Jae7ub8X7PRi3NyH0ijyR3J7Cdeu0vLzyH4tI+uT9XHyd+gb+/3MIoYNjLYC7r3L349390/gzfDRwPOH3SKLEsan8jhCR6jRxIuy/P0ybBs2bpzuaBi+VEpFXzewWoLmZHQNcALxU0UHuPgjAzIqatif0bBQp6uUoqz0je0WysyFKWrU5UfLXkojUrqRl1LP7JvT/8xcnAUcXPYhL9nq6+7i4KSKs7vsNkGNmWe5eAGzHLx0rIlLTEomQWDz8MKxZA5tvnu6IhNR6sIcBq4EVwJ+BOYRbhFW5VvKvq4jQy5FqO6hXRCQzFOSV/1jSysy2ItxZXJjU/DPwFzPb2cwiwh3KKe6eD7wGnBHvNwCYWasBizRUs2eHkpCvvw4lITk56Y5IYqlM05cPXB9/bYqlhJ6NItsSejnKaleviEimysou1nNM34bdVVwH/Yrw2byBu39rZr8DngKaEsbYjI43DwXGm9lwYAnQpxZjFWmYPvkkzHPdogWsW5fuaKSEchNsMzsZuALoBKwB5gKj3P2ZKlzr7XBK6wAsJMxCMs7dF5tZnpl1d/fXgf7ATHfPN7OiXpGJ1NdekYK8kEyIiNRh7p6b9PM7wIGl7DOJsKpvyfbFhAGRIlIbFiyAnj2hcWN44QXYccd0RyQllFkiYmanAX8hjCDvRvjwfAj4u5n1ruyF3D0PGEj4cJ4PfMovAxj7AWPM7FNgs/iaEHpFhpjZfOBQYHhlr5t2RT11RV8iIiIiVfW//4XkOi8vLIXeoUO6I5JSlNeDfTHQw92XJLV9YmZvEqbbm5zKBUr0irwAdClln48Is4yUbFeviIiIiEiyrbeGRx+FTv0sR+UAACAASURBVJ3SHYmUobxBjpuXSK4BcPf/EBaKEREREZHasGoVFBTADjvAW29plcY6rrwEu+T818lU6yAiIiJSG1avhmOPhYEDw+NIaVhdl8o0fSIiNaq0BV0a+CIvIiLB2rVw8snw5ptw4onpjkZSVF4NdmczW1lKewRoWgwRqTYlF2CCBr/Ii4gIrF8Pv/lNGMw4bhycVu8XtG4wykuwd6m1KERERESkuKFDYepUuP12OOusdEcjlVBmgh3P4CENVF5e6FUs67GIiIjUsAEDwAwuvDDdkUglqQZbSlV0y77oS8m1SPWbPn06Zsa4cePSHYqI1BWJRJglBOCQQ+DSS9Mbj1SJEmyRuq5Ao/0y1fTp09lpp52YMmVKukMRkbrippvgoINC3bXUW0qwReqi5NU/s3T7IBOtWLGCWbNmccEFF/Cf//yH+fPnpzskEUm322+H4cOhf3/o0SPd0cgmUIItUseVnK5O09dlhmeffZamTZty/PHHk5uby+TJKS2OKyKZ6oEH4OKLw5R848ZBI6Vo9ZnePZE6TvXwmempp57isMMOo3HjxvTo0YPp06eTn5+f7rBEJB0++wwGDYKjjoJ//QsalzfJm9QHSrDlF8llCSJSY77++mvee+89evbsCcDRRx/N8uXLeeWVV9IcmYikxa67wmOPwZQp0KxZuqORaqAEW0QkVdU04PTpp58mKyuLww8/HIAuXbqwzTbbMHXq1Go5v4jUE6+8ArNmhZ9POQVatkxvPFJtdA9CRKQ8yXd0+lbP8pJF5SDdunXb0FZYWMjLL7/MDz/8wBZbbFHpc5pZY6A7YEAB8Km7v14tAYtI9XvnHTjhBOjYMfxccjlbqdeUYIuI1KJFixbx8ccfc9VVV3HwwQdvaF+2bBlDhgxhxowZ9O/fv1LnNLPzgauA74GFQD5wnpltDdwM/MPdtfi8SF0xdy4ceyxssw1Mm6bkOgMpwZYq0UqPIlUzffp0WrVqRZ8+fWiWVGu52267sc8++zBlyhQ6derU7De/+c227v5VReczs0nAB0BXd19WYts2wHnAFOCk6n0mIlIln30WBjM2bw7//jdsv326I5IaoBpsqZJMmdlCU+BJbZsxYwYnnHBCseS6SJ8+fZg3bx7Dhg07A1i28dGlutjdbyyZXAO4+zfuPgK4YNOiFpFqc+edUFAQkuudd053NFJD1INdzUrt2U1fOFKBoj8UiiR0E13KUR13bmbOnFnmtl69etGrVy+AfwLXp3I+d19aHfuISC0ZPRouugh+9at0RyI1SAl2CZv6C1QJWxoV5BVf9bCixyKVVBf/f5tZIVBmJO6eVYvhiEhpfvgBzjsPbrsNdthByXUDkJYE28xeArYhDMQB+B2wOXAb0Bx41N2Hx/vuDdwHtAJeBc519/VVvXZFCXRd/AVaH6WlRjsru/wZH0puL20fkfpnayACbgAWA3cTZhEZCOyUvrBEBICffoLjj4cPPoBzzw0JtmS8Wk+wzSwCdgN2KkqUzaw54MDhwBfADDM7zt1nAhOAQe7+lpndDwwG7qrq9as9gVavaKn0h4pI7XD37wHMbH93Py9p0+1m9l6awhIRgJ9/hl694L334Ikn4Mgj0x2R1JJ0DHK0+PtzZvaRmV0AHAB85u4L46R7AnCame0ENHf3t+JjHgROq/WIk2w0KC4/Wysg1lEawCgNTEszK/p8xcz2ArQknEi65OfDaafByy/D+PFwkibyaUjSUSLSBngBuBBoArwM3ELxEfPLgHbA9mW0p416ZusPvVfSwAwH3jKzOYSSkT2BvukNSaQBW7kSvvgC7roL+vVLdzRSy2o9wXb3N4E3ix7HZR/XA7OSdouAQkIPe6KUdhGJVUe9u+Y1r//cfbKZzQIOIXy2v+Tu36Y5LJGGJ5EI0/BtuSW8+y40bZruiCQNar1ExMwOMbMeSU0RsAjYLqltW+BLYGkZ7akrUF2AZLbqmJO8onOo3KbuM7MjgefdfTIwD5hrZgelOSyRhiWRgD/8AU45JZSIKLlusNJRg90auNXMss1sc+BM4I+AmVkHM8si3Nac6e6LgTwz6x4f2x8oexLZ0mSlUCO9qdsbCr1ODdamJvENJUFP8/O8FTgLwN3nAccDY2o1ApGG7rrr4G9/CwvINNZMyA1ZrSfY7j4dmEFY2vd9YFxcNjIQmATMBz4FnogP6QeMMbNPgc2A22s7ZqkZDSXpksxZ+bMiqTzPGvx339TdZxc9iH/WIEeR2jJqFFx/PZx9dpjvOlJnU0OWlj+v3P0a4JoSbS8AXUrZ9yPCLCNS35WY0rCiQYh5PyfIbh6V+VhTJKZuo9dSNdZpU4ODb9eY2bHu/gxAXIq3qtrOLiJlu+8+uPxyOP10uOceaJSOAgGpSzL1/kUWwNKl8erAycN8Fi0qtuOiRXVge23EWBvXSCWGaTv/0thr4cb7lNi+c9LDhQvLPx4qGWMq+1Tz9mq7RmVex3ifjV7LcpQSdrnb1+YlaJYdlfm41ONr43WqjWuUo6LtZe2TlZWVteOOO1Z8cHEXA1PMrGghrkKgd2VPIiJV0KUL9O8fEu0sLZ4qECUycO6yKIoOAV5LdxwiIlUxbNiwQ2+++eZZFe9ZnJk1BvYC1gPu7utSPK4V8AZwgrsvMrMHCLORrI53GeHuU8paWdfM2hPWL9iGsGhYP3dPqfc8iqJcYOHChQvJzc1N7YmK1BULFmjZc9mZMFlHMZnag/0ucChh3uyCNMciIpKS7bbbLmvAgAHbNWvW7N3KHhsPEB8CHEP43HuSsDhXRcd1A+4lrLBbZH/gMHdfVmL3slbWHQuMdfdHzKyoBHBYZZ+DSL3y73/D//0fjB0L55yT7mikjsnIBDuRSKyl+LzaIiL1xX+reNzthMVl/kkYwH6OmXVw9+EVHDcYOB94CMDMWgDtgXFmtgMwBRgB7MjGK+uOMLP7gMOAk5LaX0EJtmSyN94IS6CbwcknpzsaqYMyMsEWEWmAjgb2cPd8ADObAHxEWOGxTO4+KN6/qGlb4EVgKLACmA6cA3xM6SvrbgWsdPf1JdpFMtMHH8Dxx8MOO8Bzz8EWW6Q7IqmDlGCLiGSGbwmf6fnx40Lgx8qexN0XABu65Mzs78AAwhSqpa2sW3LF3aJri2SelSvh2GOhVatQIrLttgDMmQOTJ8OSJdC+PfTuDZ07V3y6qh4ndZ/mkRERyQwfAq+Z2QVmdi7wLPCdmV1iZpekehIz28vMTklqighJe1kr634D5MQ14MT7VG7FXZH6olUrGDMGXnghZMSEJHnUKFi+HNq1C99HjQrt5anqcVI/KMEWEckMzYG5wH5AN8Ko9m8Is4p0qsR5IuCvZtbGzJoQBk5OKWtl3bgk5TXgjLh9AJVdcVekrvvyS3jllfBz376w664bNk2eDG3ahK9GjX75efLk8k9Z1eOkflCJiIhIBnD3s6rpPHPMbCTwOtAEmOTu/4o39wPujaf1m80vK+sOBcab2XBgCdCnOmIRqRO++w6OOgq++SYsIrDZZsU2L1kSeqCT5eSE9vJU9TipH5Rgi4hkADNbSPFa6ASwhjA48ZJSptwrxt1zk34eS5h6r+Q+pa6sG/duH1GVuEXqtBUrQs31ggUwc+ZGyTWESpHly0Pvc/JhcQVJmap6nNQPGVsiEkXRwCiKHkx3HOWpqzFGUZQbRVEiiqKjSrQviheFqOz56uTzTFZXY9R7UXdU93tRA6YSZv84hTBIcQbwHvAOcE8a4xKpn9asgRNOgI8+gkmT4IgjSt2td++QKC9fDoWFv/zcu4J1VKt6nNQPGZtgyybLB+6NomjzdAciei/qkLr8Xhzq7oPc/QN3/8jdLwL2dPcxwE7pDk6k3rnnnjDf9cMPh2n5ytC5M1x2WeiJXro0fL/ssopnA6nqcVI/ZHyCHUXR4VEUzYqiaHYURQuiKOoVtz8YRdHf4m0LoyiqlvrFKsb4chRFR8Q/50ZRtKgOxPgl8DwwupR4/xhF0fwoiuZGUTQ6iqKsKIpui6Lo0qR9JkVRdHKJ4/ReVI3eiwx+L6pRKzPbkPjHddItii5dQ9cUyVwXXQSvvQann17ubpsy1V7nznDddTBuXPiu5DpzZHyCDVwIDEokEvsCg4Abk7btSFhS/URgVBpiS0U6Y7wUOKbELfHj4lj2B/YBOgDnElaB6wMQ9+4dRLhFnUzvRdXpvSguk96L6jIOeNvMRpjZ9cCbwP1mdiHwSQ1dUySzFBbCVVfBokVhao+DDy53d021J2VpCAn2b4FOURRdQ/jFmDxC4blEIpEgDAKqq0sxpS3GRCKxkrCMcvIt8R7AvxKJxJpEIrGe8Eu9RyKR+ADIjqKoA6H+86lEIrGuxCn1XlSR3ouNZNJ7US3c/WbgD0AOoef6grg85A3CSowiUp5EAi68EG6+GaZNS+kQTbUnZcmoBDuKokOjKNq+6CGwnjA/6wHA+8CfKX6rNA8g/kWdzhgTSXE1KXFIrceYLJFIPEfxW+Il/81E/DIbzQTCXLhnAHP0XlQvvRfF1Nf3YkJ1x2JmPYt+dvdn3f337n6Zu78Ut71P6DkXkfL88Y8wdixccUUoD0nBkiVhar1kmmpPIMMSbOBs4KT4587AAmA34FrCwge9gKzSD601pcX4HbBn3HZSaQel2aXAMYQV2l4E+kRR1DyKosbAWcBL8X4PE5KIDoRb5Xovqp/ei7qjKu/FrBqIo6eZTTWz481sw9SrZtbUzI4xs+nA0TVwXZHMcdNNoef63HPD9yi1YQvt24ep9ZJpqj2BzJsHeyTwUBRFFxKW9T0d2AqYRxj9/yLQIoqilukLsdQYOwDjoyg6mzDVVp2SSCRWRlE0mLD08nSgNWH6r8bAc8Df4/2+iKLoO0Lt53j0XlQ7vRd1R1Xei5rocXf3K82sG3Ad8KiZLSN0nrQl3Km4wd3frO7ritQHKQ1AXLsWpk6F3/4W7rwz5eQawvlGxaNAcnJCcr18OZyjoqwGL0rTHVYREalmZpZD+MMkAfzX3VdUcEjaRWEO8YULFy4kNzc3vcFIRikagNimTfHkt9hUeIlESKh/+gmaN4fGle933JRZRCQj7AwsKtmYaT3YIiINVpxQv5/uOETqguQBiPDL98mT4wR40qQwP97jj8PmVZ/avnNnJdSysUyrwRYREREpfwDiM89Anz7w44+hF1ukminBFhERkYxT1gDEQxOvhjqOTp1gxgxomc7hJ5KplGCLiIhIxundO9RcL18e1o9Zvhxaf/4eAx4/AXbaCZ59Flq3TneYkqFUgy0iUo+Z2UuEQY2lcvf/V4vhiNQZnTuHAY3JAxD7ntWUrB/2hCeegK23TneIksGUYEvamNmBhOnZtiTcTfkCuMzd59XAtY4A7nD3TpU4Jgu4GOhL+L/SFHgKuNbd11ZTXJcBndx9oJndBzzi7v82s3uBf7j7+8nt1XFNyTh3xN9PJqziOI6wUE9/4Md0BSVSF2wYgPjDD7DFFkBnOOWNSk3FJ1IVSrAlLcysGWHu4KPdfXbc9ltgppnt7O4FaQ0wuAtoA/Rw9xVm1pKwaMh9hOSlWrn7oKSHRwF3l9IuUoy7TwIws8uBg929MH48gzAPukjD9sUXcMghMGQIXH21kmupFUqwJV1aEBbm2Cyp7WFgJZBlZoeS1OOc3ANtZtcR5vrdkbCK3ofAIHdfaWaLgH8REtTWwGh3v6voAnGSvBTo5u7/idv+Dfzd3acl7ZcL9AO2c/eVAO6+2szOBbrH++QAdwJ7E27RzwT+6O7rzSwPuJmwgt52wF/c/S4zawLcHsf3DfA1sCI+38uE3sh9gO2Bh81sAHBL/NyfMLOTgD8Revx/Ai5x93fi1yQ3vtZOwP+A37r7MjM7DzgXWEdYYvx37j4/pXdJ6pOtgGxgTfx4c2CL9IUjUgd8/TX07BlmCznuuHRHIw2IBjlKWrj7cuAK4BkzW2BmDxGWl/63u69L4RSHE1b760i4HX5t0rYtgK7AEcD1ZrZX0nVXE1Y2HARgZrsQlg2fXuL8+wHzipLrpOO/KuoxJCTK3wN7EZYj7wJcFm9rBnzn7gcDpwJjzCwbGBpfbw9Ckr3RgrrufjXwJdDP3d8uajezjsA/gFPcvUv8nKeZWat4l0OB09y9I7AaODcuc/krcKy7dwXuAQ4peU3JCBOBt81shJldD7xFeL9FGqbly+Hoo2HpUnj6adh333RHJA2IEmxJG3e/jbCc80XAMmAY8EHcM1yRx9396/h2+P3AMUnb7nT3hLsvBZ4h9CInGwsMiHuThwD3lVKSUkjF/z+OI/QsJ+Ka7H/EbUWKesRnExLulkBPYKK7r4uT/YdTeK5F/h/wgrsvAHD3Fwm94PvF219O+oPgA2CL+Hk9DrxhZncQanLvr8Q1pZ5w92uBqwllTa0JdzduTW9UImlSWAi//jV8+mlYBr1793RHJA2MSkQkLcysO6Fe9FZC7/F0M/sj8DGhZ/dbILlQrmmJU6xP+rkRUJDiNtz9P2Y2B+hFGMDYrZQQ3wZ2N7PN3f2npLh3IPQKnhqfO3n2hkZAk6THP8fXS5gZSc8n+Xklx1qRLDaeLSL5mj8ntSeKruPuvzWzToTk/kpC/fjplbiu1B9fAfOABwF110nD1agRXHghNG0KRx1V7q5a6lxqgnqwJV2+BYabWXK5wnaEWRDmxtvbm9k2ZhYBvylxfC8zyzGzRsBgwuweRQYAmFl7Qu/1zFKufydwK/COu39ZcmPc9jAwrqgEI/4+Fvje3X8GngUuMLMoHrQ5BHi+guc9k9B7nh2XjJxRxn7rKZ6sA7wAHGNmv4rj+X+EOvS3KYOZbWVmX8Qx/xUYTiifkQxjZmcBDxBKr3II5UOD0xuVSC3Lz4e344/EM86Ak08ud/c5c2DUqFBN0q5d+D5qVGgX2RRKsCUt4gGGJwE3xTXY84HHgLM8mE+YReM9Qi3pwhKn+Bp4GviEMEjwpqRtO5vZ+4TykIvc3UsJYTphgOU/yglzKDCfUF7xISGRnU9cv00obdmG8AfBXMCBP1fw1Iue08fAK6U8ryKTgQlmtqG8JX5NhgKTzexjwiDKX7v7ijLOgbt/B9wIvBC/JjcT/iCRzHMhcBCw0t2LSod+n96QRGpRQQEMGACHHgoLFqR0yOTJ0KZN+GrU6JefJ0+u4Vgl40WJRJnrE4jUSfGMGVu5+wWlbFsEnOru71VwjoMI0+11cnf9J5B6z8zedfeuZvaBu+8Tt30UD4its6IoygUWLly4kNzc3PQGI/VXIhGm4bvvPrjlFrjiipQOO/vs0HPdKKm7sbAwjIscN66GYpVMszOwqGSjerClwTGz8cAjwDlKriWD/GBmRVNGYmb9gB/SG5JILUgk4NJLQ3J99dUpJ9cQaq5XlLgHuGJFaBfZFOrBFhHJAGa2O2HGmF0Is8X8DPRy97lpDawC6sGWTTZ9epgx5KKL4K9/rdRCMkU12G3aQE5OSK6XLw9LrGugo6So1B5szSIiIpIZPiXMxb4bYcYZp/hCTiKZ6f/+Dx57DE45pdKrNHbuHJLp5FlEzjlHybVsOiXYIiKZ4X1335cw8BcAM3sN6JS+kERSV+np8h5+GA44AHbdFU47rcrX7dxZCbVUPyXYIiL1mJm9QJh6sYWZJa88mgW8m56oRConuVQjebq8Mks1HnkE+vcPs4Y8+GBthytSISXYIiL128nAFsA44Kyk9vWEFVJF6rzk6fLgl++TJ5eSYD/1VEiuDzsM7rqrVuMUSZVmERERqcfcfaW7LyLMK9/X3RfHmy4HmqctMJFKWLIkDDJMlpMT2ot54YVQDrLPPvDkk9Bc/8SlblKCLSKSGR4Atox//pEwXd+96QtHJHUpTZeXSMBf/hJqrmfOhFatajVGkcpQiYiISGbY1d1PAYhX9/yDmX2UyoFm1gp4AzjB3ReZ2RDCSqUJwsqjv3P3dWb2J+BsYHl86L3ufqeZtQcmEFY2daCfu6+qzicnma1371BzDcWnyzvnnKSdoijUjKxaBVtuWep5Sqr0wEmRaqIebBGRzNAkTpQBMLPNgArnLDOzbsAswvR+mNluhPKSg4HOhN8T58e77w/8xt33jr/ujNvHAmPdvSMhIb+mep6SNBRF0+W1aRNWUWzTJmmAozucfjr89BO0bAlt26Z0zqKBk8uXFx84OWdOzT4XEVAPtohIpvgn8LaZPU7oee5NKBupyGBCAv1Q/HgtMNTdVwKY2Vyg6Eb9/sAfzWwn4FXgMqAAOIxQAw7wIPAKMGwTn480MKVOl7doEfTsCevWwddfw+abp3y+Sg2cFKlmGZ9gl7z1WcY+exN+KRTZGlju7po/VkTqBXcfaWbzgB6EGUSucPeZKRw3CMDMih4vBhbHbVsDFwAD4x7xDwi9258TPjOvAe4AVrr7+viUy4B21fbEpOFatiwk16tWwSuvQIcOlTp8yZLQc52s1IGTIjUgoxPs+NbnvcS3Psvi7h8Ce8fHtADeAc6t8QBFRDaRmbVy95VmtgWh1GNW0rYt3P2HKp53B2AmcL+7vxw3H5+0fTRhasCxhB7zZIVVuabIBt9/D0cdBV99FWYOqUKXc/v2oSykqOcaShk4KVJDMr0Gu+jW55dFDWY2wMxmm9mHZna/mWWXOOYq4BV3n4WISN33cvz9O+DbpK+ix5VmZh0Jd/7Gu/sNcVt7Mzs7abcIyAe+AXLMLCtu346kz1yRKvn+e8jLC3Ned+tWpVP07h0S7OXLobDwl597967mWEVKESUSJTseMo+ZLQKOAFoC/wCOcvc8MxsJrHb3G+P9coD/AHu5+zfpiVZEpPYlfU5+D8wDrnb3h5K2b01Yhr0rsAi4D/g8Lk2ZATzs7hPN7Gpge3c/nxREUZQLLFy4cCG5ubnV9Gyk3lq3Dpo0CTOG5OeHn2NVmRFEs4hILdiZ8JlYTEaXiJTiSGBX4K243rApMDtp+2+BqUquRaS+MLMB5W13939W8pSDgLbApWZ2adz2pLtfa2a/A54ifHbOAkbH24cC481sOLAE6FPJa4rA2rVw0knQsSOMGbNRcl2ppdRjpQ6cFKkFDS3BzgIec/eLYMM0VsmvwUnATekITESkik6Lv28LdAReJAxyPJIwKDGlBNvdc+Mfx8Rfpe0zCZhUSvtiQu+3SNWsXw/9+sEzz8Cpp260WTOCSH2T6TXYJb0MnGxm25hZBNwF/B4gfrwf8Gb6whMRqRx3/7W7/5pQC723u/eKF5zZm5Boi9RthYUwaBBMmhR6routLhOkvJS6SB3RoBJsd/8IGEHo4ZlH6NG+Od68NbDO3fPSFJ6IyKZo7+7/LXrg7kvQdHlSH1xyCYwfD9dfD7//fam7pLSUukgd0iBKRJJufeLu9xEG55Tc5xvCLVYRkfpomZmNIMxPHQFDgAVpjUgkFUceCS1awPDhZe6S0lLqInVIg+rBFhHJYGcSljb/iDB4Oxc4K50BiZTr88/D91694KabwswhZSh3KXWROigjp+kbMWJEs+zs7K79+/dftv322xekOx4RkRRlEeaRfpewZHmlmVkbd19erVHVIE3T10CNHQsXXQQvvgiHHZbuaEQ2RcOZpi87O7vrsGHDXkt3HCIiVXQoSSsypsLC3KNTCIu+dAVeAE52909rID6RqvvnP+H880PP9UEHpTsakRqRkSUid9xxx7Lc3FyWLl2a7lBERKpiWRWO+TtwMfCNu38ZP76nWqMS2VSTJsFZZ0GPHvDII8XmuhbJJBmZYC9durRg8eLFrF+vGapEpF6qSmnblu7+fNEDdx8LtKq+kEQ20SefQJ8+YenzqVMhOzvdEYnUmIxMsEVEGqCEmWUDCQAz25ZQ0y1SN3TsCH/7Gzz9NGy2WbqjEalRSrBFRDLDXcCzwDZmNhJ4Cxib3pBEgPffh3nzwiwh550HrVunOyKRGpeRgxxFRBoad7/fzD4D/g9oAgxOLhkRSYt58+CYY2DnneGdd8qdik8kkyjBFhHJAGb2grv3AF5NdywiQJjnumdPaNo0DGhUci0NiEpEREQyQ2sza5nuIESAsBrM/2/vzuPsHO//j7/ujGxIRkKRxaDBxxIRimiV9ltbBV+E2PcQStr+VIjal6LRCFWExlppbDV2KRJ8raHWIHwoWYQQ2khIMllm7t8f133kzMlMMsm559yzvJ+Px/2Yc1/3fV/nM+ecOfM517mW3XeHxYvhqaegV6+sIxIpKbVgi4i0DPOAaWY2CfguV+ju/5tdSNJqXXJJWMv86adhq62yjkak5JRgi4i0DLdkHYDI9669Niwms802WUcikgkl2CIizZyZ9Qa+BV5x98+yjkdaqe++g7PPhj/8IcwUouRaWjH1wRYRacbM7HjCwMZhwNtmtmfGIUlrVFUFBxwAo0bBK69kHY1I5pRgi4g0b78Bert7P2A/4OyM45HWZvFiOPRQmDABbrstTMsn0sqlmmCbWTszU7cTEZEScvfPk58vAz/IOBxpTaqr4bjj4OGH4frr4Zhjso5IpEkoOhk2s3UJLSYDgA0Iy/VOAe4Drnb3r4q9DxERqVdcsL8kkyikdZo1C158Ef74Rzj11KyjEWkyimrBNrOjgXHAl8CBwNpA5+T2f4GnzOzYYoMUEZEGK0y4RdIXx2Hr1g3efhuGDcs6IpEmpdgW7K7ADu5eU1D+LvCumV0N/LrI+xARkfr1MbO5efurJ/sRELt754zikpbs0kvh00/hxhuhvDzraESanKISbHf/M4CZ7eDu/8o/Zma7u/t44Jpi7kNERJZLS+RJaV19NVx4IRx7rJY/F6lHUQm2mW1LaCX5m5kdkdwGaAuMAjYtLjwREVked5+WdQzSitx8M/zud3DQQeF2G01GJlKXYruI/ArYA+gOVOaVLynYFxERkebsnntg8GD45S9h7FhYTZOGidSn2C4igwHM7A/ufl46IYmIiEiTU14e5ri+/35o1y7raESaj7Ae8QAAIABJREFUtFQ+frr7eWZ2MLANcAWwv7vflUbdIiIikqGvv4Z11gkt13vtpX7XIg2QSucpMzub0F3kUKAjcKGZnZ9G3SIiIpKRiROhVy+4996wr+RapEHS6kB1GNAPmOju/zGznYCXgUtXdKGZXQgckuw+5u5nFRzvC9xMmF/7OeAUd9dCCiIiIo1g0iSorIT4rbc5+4m9afODH9B+l12yDkukWUlr+O9id1+Y23H3b4DFK7rIzHYH9gS2BfoCPzKzAwtOGwMMcffNCLOUnJRSzCIiIpJn0iQYMQLafuKcOX5PqlZbk99vP55JX3XLOjSRZiWtBPtTM9uHsEx6ezM7F2jI1FEzgTPcfZG7LwbeBypyB81sQ6Cju09Mim4HBqYUs4iIiOSprITuq3/DkId2J4pjxhw7nuoNNqJS84KJrJS0uogMAe4E+gDzgInAESu6yN3fy902s00JXUV2zjulOyEJz5kJ9Ewh3ualugrKOtS/LyIikoLp06Fnz7V4eaffMWXjX/CfdYzymlAuIg2X1iwinwO7mdnqQJm7f7sy15vZVsBjwJnu/lHeoTZAnLcfAYXLsrd8ZR1g7NKBJVUDYjqULT1cVQUdlG+LyCoys87AS8C+7j416b43kjBo/Z7cNKz1jYkxswpCd751AQeOdPfvMvhVpBj/+Q87tP+MD+b0YeKPT/++eM4cqKhYznUisoy0ZhFZ08yuBx4B2prZTWa2ZgOv3RmYAJzt7ncUHJ4B5Hf8Wh/4PI2Ym7MOHcJA7ty2THJdXZVJXCJZqqpa/r7Uzcz6AS8AmyX7HYFbgf2BLYAdzGzv5PT6xsTcANzg7psDrwGaRaq5mTsX9t6bE+/bk3lfzWf2bKipgdmzwzZgQNYBijQvafXBvhb4BlgPqCK0bvx1RReZ2QbAg8AR7n534fFkCeCqJAkHOBoYl1LMLcvYaOmm7iPSCq3wg6fU5yTgNJY2XuwIfOTuU5IZm8YAA+sbE2NmbYFdgX/kl5codknD/Pmw337w5pu0vW00vzl7dbp0gRkzoEsXGDoU+vTJOkiR5iWtPtjbuvsJZtbf3eeb2ZHAuw24bijQARhpZrmyG4H/BS5w99eAI4HRyVeYbxCSeRERSYG7nwiQ9x5c39iX+srXAebmTZ/aOsfKlEBu+rzp00OXjQEDUkh8Fy2Cgw+G558Py5/vtx99UEItUqy0Euzqgv0yGtBX2t1/C/y2jkM35p3zNqFFRURkKQ32bSz1jX1paDm0xrEyjSw3fV6XLtCzZ+i2MWJECq3LV18N48bB6NFw2GGpxSvS2qWVYD9nZsOBjma2F2FWkWdSqltEZFkFg385ojDHk1VU39iX+spnAeVmVubu1ck5rX6sTNoqK0Ny3aVL2M/9rKwsMsE+/XTYcsvQRUREUpNWH+xhwHfAHOAyYBJwZkp1i4hI6bwCmJltYmZlhClXx9U3JiZZw+B54NCk/Bg0ViZ106dDeXntsvLyVZw+L45h5Ej4+mto107JtUgjKKoF28zWd/cvkjfYS2nA0ugiItJ0uXuVmR0H3E8YI/M4Swcw1jcm5lTgDjM7D5gOHF7SoFuBiorQLSTXcg1FTJ93/vlw2WVhmpChQ1OLUUSWKraLyOPAdgBmdoK731p8SCIiUmruvlHe7QnANnWcU+eYmKR1++eNGF6rN2BA6HMNoeV6zpyQcA8atJIVDR8ekuuTToIzzqh1qFEGUYq0UsV2EcnrAMmQIusSERGROvTpExqbi5o+74Yb4Oyz4fDDYdSoMJ9lIjeIcvbs2oMoJ01K/3cRaQ2KbcEuHFEuTUDhyo5a6VFEpPnr06eIFuWqKvjzn0N/6zvugLKyWocbbRClSCuV1iwisOw0TZKR3IIbObGeGRGR1q1DhzDXdefO0LbtMoenTw8t1/lWeRCliBSdYK9rZr+r4zYA7j6yyPpFRERkVT35JNxzD9x0E6y7br2npTqIUkSK7oP9FLB1suXf3hroXWTdIiIisqpeeAEOOABefx3mzVvuqQMGhAR79uwwuUju9oABJYpVpIUpqgXb3Y9PKxARERFJyeuvwz77hCboJ59cdhLtArlBlPmziAwapP7XIqsqzT7YAJjZG+6+Xdr1ioiISANMngx77RX6ezz11HK7huQrahCliNSS1kqO+TSbiIiISFa+/hrWXhvGj4cNNsg6GpFWKfUWbBEREclAbk7WXXeF996D1fQvXiQrjdGCfWIj1CkiIiL1+eor+NGPwgIyoORaJGOp/AWa2ZrAcGBzYKCZ3QSc4e7fpVG/iEidCyhlF45I0/HNN6HP9ZQp0FsTeIk0BWm1YF8LfAOsB1QBnYG/plS3iMj3CyjlNq1OKkKYfm+ffeDdd8MUILvsknVEIkJ6Cfa27n4usNjd5wNHAn1TqltEREQKVVeHea4nToS77oJf/jLriEQkkVYnreqC/TKgJqW6RUREpFBZGey7Lxx1FBx0UNbRiEietBLs58xsONDRzPYChgDPpFS3iIiI5NTUwL//DZttBr/9bdbRiEgd0uoiMgz4DpgDXAZMAs5MqW4REREBiGM49dQwY8i0aVlHIyL1SKsF+xJ3/z1waUr1iYiISL44hrPOgptugrPPhg03zDoiEalHWi3Y+6ZUj4iIiNTlsstgxAg47TS4/PKsoxGR5UirBfsTM3sSeIHQVQQAdx+ZUv0iTVKdczNr+jgRSdsjj8D558Mxx8C114a5KkWkyUorwf5v8nPjlOoTaRZyczPnxHF2sYhIC7b33nDddXDyydCmMRZhFpE0pZJgu/vxZraruz9nZl2BXd39wYZeb2adgZeAfd19asGxC4ETgNlJ0Wh3vz6NuJsqrVgnIiIAPPZYGNC4/vqha4iINAtpLZX+B2Bn4H+A1YGzzay3u/+hAdf2A0YDm9VzyvbAYe7+chqxNgdqFRUBqqugTB8tpRV77LGwkMwRR8Add2QdjYishLS+ZzoA2BPA3WcAPwMOa+C1JwGnAZ/Xc3x74Bwzm2Rm15mZ/uNKdqqrso6g9SjrAGOjpZtIa/LMM2HxmG22CX2uRaRZSSvBbuvui/P2F9HAlRzd/UR3f76uY2a2JvAmYU7t7YC1gPOLjFVk1SnpE5HG9sor8L//C716wT//CeXlWUckIisprUGOL5rZ34FbgBg4Fnil2Erd/Tugf27fzK4CbgXOLbZuERGRJieOYehQWG89GD8e1lkn64hEZBWk1YL9a+AL4GpgBPAl8JtiKzWzCjM7Ia8oAhbXd76IiEizFkXwwAMwYQJ065Z1NCKyitKaRWQecEZu38xWB44DRhVZ9QLgSjN7BphK6Kv9QJF1Nj0azNVi1TUvtubKFpFlTJsGf/oTjBwZWq3Vci3SrKU6maaZ9TCzPwKfkpdwr0I9j5vZ9u7+FXAy8AjghBbsq1IJtilRv96mo3AQY5GDGnMzwuRvSq5FpJYvvoDdd4cxY2DKlKyjEZEUpDVN347A6cBBhMGNvwL+tjJ1uPtGebf7592+H7g/jThFVij3YSfnCM2RKCKrbtIkqKyE6dOhogIGDIA+ffJO+O9/Yc89YeZMeOopMMssVhFJT1Et2GY20MxeAh4HvgZ+Csx099vcvTqNAEVERJqjSZNgxAiYPRt69gw/R4wI5QB8+21YodEdHnoIfvzjTOMVkfQU20XkHuDfwObu/mt3f5Uwi4hIi1BVtfx9EZH6VFZCly5ha9Nm6e3KyuSEjz+GTz6B++6D3XbLNFYRSVexXUT2J3QHmWZmjxK6hagTcTNQ53Ls6hu8DK2qKa2VmZ0IDMkr2hi4E1iD8G3lvKT8Ynd/wMz6AjcDnYHngFPcfUkJQ25ypk8PLdf5ysvh02k1QBvo2zck2J06ZRKfiDSeolqw3f2RpL/01oRZPm4DeprZBWbWNYX4pJEUDr5Tci0i+dz9Znfv6+59gSOBWcBFhNV1d80dc/fczE5jgCHuvhmhoeWkLOJuSioqYM6c2mVzZ1dz+r8Oh+HDQ4GSa5EWKZVZRNz9E3cfBvQETgD2AqanUbdIs6MZYaTlGQWcA8wHKoBbzWySmV1sZm3MbEOgo7tPTM6/HRiYTahNx4ABod/17NlQUwPf/LeGAeNOovd798Jqaa3zJiJNUbGDHNvn77v7Ine/0913Bn5S1zkiIlmoq/+8+tSvmJntTkie7wPWB54mNKTsBOwCDAK6AzPzLptJaHBp1fr0CYsydukCMz6NOeyV09n149vgggvgjFWeyVZEmoFiP0I/ZGZ/BR5095qCY++Y2UDgREKLtojURQsNlURhf3pQn/oGOhkYCeHbSuDA3AEz+wtwDDCZ2gPcI8KUra1enz7JtHznXwC3Xwunnw4XXZR1WCLSyIpNsA8GhgNXm9kEwowibYBewP8A/wQOKfI+RFoezbUtzYCZtQN+RliZFzPbGtgsWZ8AQiK9GJgB5K/rvT7weekibQY22AAGD4arrlr2k15ihXNmi0izUewgx+/c/TRgZ+B1whvsusBrwM7ufoq7z1leHSIi0mT1AT5099yMIRFwjZl1MbO2wGDgAXefBlSZ2c7JeUcD40ofbhM0a1b4OXgw3HTTcpPr5c6ZLSLNSiqjLNx9BnB9GnVJI1E3BBFZeT8ktE4D4O6TzOwK4EWgLXC/u9+VHD4SGG1mnYE3gGtLHWyTM2YMnHIKPP007Ljjck/NnzMblv6srFQrtkhzpGHMrYWWAG+yNCe5NFXufi9wb0HZDcANdZz7NrD8LLI1efBBOO442HVX2HrrFZ5e35zZ0zUfl0izpARbJGNazKYR6UOlZOGpp+DQQ2H77cMS6B07rvCSiorQLSTXcg1hDu2KikaMU0QaTSrzYIuIiAgweTIccABsvjk8/niDF5IpnDM7d3vAgEaOV0QaRVEt2GZ2zPKOu/vfiqlfRESkWTGDM8+EX/0KujZ8QePcnNn5s4gMGqT+1yLNVbFdRHIrda0PbE5YgGAJYYq+NwEl2CIi0mys8lR5H3wAa6wRpuNbxXmuv58zW0SavWKn6dvP3fcDZgF93X1/dz8I6EtItEVERJqFVZ4qb8oU2G03GDhQgyhEBEivD3aFu3+c23H36WiZXBERaUbyp8pr02bp7crK5Vz02Wchua6qgptvrneeaxFpXdKaRWSmmV0M3E5YiGAw8ElKdYuIiDS6lZ4q76uvYI894OuvYcIE6N270WMUkeYhrQT7WMJCM28DMWEFr+NTqltERKRRjR8/no8/vot//WsyNTVVrLnmhvTqNZC11z6Eioq2dV80dGjoHvLEE7DDDqUNWESatLRWcpwJaDIhERFpdi6++GLuvvtudt31AD777HDKy1dn/vxXefPN4ZSXT2TUqGuAsmUvvOYaOPFE2GWXkscsIk1bKgm2mf0YuBzoSugiAoC7azy0iIg0WQ8++CBjx47lkksu4dBDD82bReQn7LTTZrz00ulMm/YI2257QLhg4UIYPhzOOit00FZyLSJ1SKuLyE2E/tdvELqIiIiINHm33HILZsahhx4KFE6V15/hw9+hS255xSVL4LDDwjLo228P/ftnErOINH1pJdhL3H1kSnWJiIg0ulmzZvHhhx8yePDges8ZNmxYuFFTA8cfH5Lra69Vci0iy5XWNH3vmtnWKdUlIpKJqgW1v4CrqsooECmJL774AoDu3bsv/8Q4htNOgzFj4LLL4Ne/LkF0ItKcpdWC/UPgdTObBizIFaoPtog0eWOXzlvc4Yi41jTGWjOkZSsrCwMXa2pqln/ijBlw330wbBj8/vcliExEmru0Euxzi7nYzDoDLwH7uvvUgmN9gZuBzsBzwCnu3mxXiayqgg4d6t8XEZHS6NatGwAzZ86s95xZs2axTo8etHn7bejeXQvJiEiDpNJFxN3/D3iHsLjMFGA60K4h15pZP+AFYLN6ThkDDHH3zQgzlJxUdMAZ6tAhvD/nNiXX0ipVVy1/X6QEunbtypZbbsnzzz9f9wl/+QvH77MPxx9/PPTooeRaRBoslQTbzC4BviQk2A78G2jooMeTgNOAz+uod0Ogo7tPTIpuBwYWG6+IZKysQ+iakdvK9ElTsnHsscfywQcfcN9999U+cNttPHTuufx77lz222efbIITkWYrrS4ixwAVhKT6TOB/gAa9I7n7iQBmVtfh7kD+d3czgZ51nSgiIrKy9t9/f5599lkuuOACJk2axG677Ub04ou8cO213NWtG3vvtRcHDQztOpMnT6Zdu3ZssskmGUctIk1dWgn2LHefaWbvA9u4+51mdnYK9bah9rzaEbCC0SgiIiINE0URI0eO5N5776WyspInH32URd99x8brrMN5Z53FwUceSZR0DRkyZAg9evTgzjvvzDhqEWnq0kqwF5tZL0L3kF3M7Akgje98ZwDd8vbXp46uJE1adZW+/hYRydDS1RmhogIGDMhfTAbatGnDYYcdxmGHHRam4vvLX+DJJ6G8vFY9Tz/9dIkjF5HmKq15sK8A/go8ChwEfAo8U2yl7j4NqDKznZOio4FxxdZbUoV9TUVEpGQmTYIRI2D2bOjZM/wcMSKU17IgmWH2qKOYdONLXHR1OSecABddVMe5IiIrkNYsIo+6+27uPg/YBvhlrm/1qjCzx81s+2T3SOBqM/sAWBO4tviIRUSkNaishC5dwtamzdLblZV5J73zDvTqBePGhYT86rIVJ+QiIsuRShcRM1sfOA7omld2pLuf1dA63H2jvNv9826/DeyYRpwiItK6TJ8eEuV85eWhHICPPoI99oCyMth8cyrvWJqEw9KflZW1u5WIiCxPWl1EHiYkwVHBJiIikpmKCpgzp3bZnDmhnOnTYffdoboaxo+HjTdm+vRlul7XTshFRBogrUGO7dx9QEp1iUgrU9eKplVV6YyUltZtwIDQxQNCojxnTuj2MXjg7JBcz5kDzzwDW2wBQPv28MQTsGhROH+LLaBduyQhFxFpoLRasF83s94p1SUirUzhCqda5VTS0qcPDB0aunrMmBF+Dh0KW/2kHA48EB5/HLbdFgj9rD/9FObOhbZtYf58ePZZ+OSTkKiLiDRUWi3YLwJvmdlMYHGu0N1/mFL9IiIiq6RPn7z+099+C//9L7TZEIYPr3VeZWUY69izJ3zwQWjc7tw5rJKu/tcisjLSSrDPBI4APk6pPhERkXQtWAD77x+apN9/Hzp2rHU4NyCyTRtYf/1QVlMTWr5FRFZGWgn2N+5+b0p1iYiIpGvRIhg4MPT5uPPOZZJrCP2sZ89eOnMI5A2IFBFZCWkl2E+b2QjgfmBhrtDd30ipfimxwkFndQ1CExFpFqqr4eij4bHH4MYb4cgj6zytvgGRgwaVMFYRaRHSSrCPSH4elFcWA+qD3UzlBp3lxHF2sbR61VVhRVARWTVXXgn33gt/+hOcfHK9p+UGROYvqz5okPpfi8jKSyXBdveN06hHRBJj8z7dHKFPN5INM3sGWJelg9dPBjoBI4GOwD3ufl5ybl/gZqAz8BxwirsvKXnQdRkyJHSqPv74FZ5aa0CkiMgqSmWaPjNb08yuM7MJZtbVzG4yszXTqFtERErPzCJgM2Abd+/r7n2BScCtwP7AFsAOZrZ3cskYYIi7b0ZYaOykDMKu7W9/g3nzoFOnBiXXIiJpSWse7GuBOcB6QBWhBeOvKdUt0qpVVS1/X6SRWPLzSTN728yGEFbs/cjdpySt02OAgWa2IdDR3Scm19wODCx5xPlGjIBjj4Xrr880DBFpndJKsLd193OBxe4+HzgS6JtS3SKtWuEiLBpsKiXSBZgAHAjsBpwCVAAz886ZCfQEutdTno2//hXOPBMOOQTOOCOzMESk9UprkGN1wX4ZUJNS3VIq6vcrIgl3fxl4ObdvZrcAlwAv5J0WEd7r2xAGtheWl97YsXDKKbDPPmE6vrKyTMIQkdYtrQT7OTMbDnQ0s72AIcAzKdUtItI0tKIZXczsp0B7d5+QFEXAVKBb3mnrA58DM+opL60FC2DYMPjZz+C++6BdOyAsgZ4/M0inTvDII/DZZ2E6vo03DmUVFWGqvvxBjoXXFh4XEalLWl1EhgHzCP2wLyMMhDkzpbpFRLIzNlq6tZLkOrEW8Ccz62BmnYBjgXMAM7NNzKyMMEXrOHefBlSZ2c7JtUcD40oecceOYSGZhx/+fiGZSZNCd+zZs8Mqja++ChdeCDNnhqT644/hySdh7txwzogR4Zq6ri08LiJSn7Sm6VtM+OrwkjTqExGRbLn7o2bWD3iT0O3vend/2cyOIywq1gF4HPhHcsmRwGgz6wy8QRj8XhovvQSPPw6XXgq9etU6VFkZVmbMrc44eXLIvRcuDNvqq8OSJfDaa9C799Jr+vRZ9trcz9xxEZH6FJ1gm9mBwFlAb2A+8A4wwt3/WWzdIiKSHXc/Hzi/oGwCsE0d575NmGWktN58E/r3h3XXDavErLVWrcPTp4fW55xvv4U11lg6G0/79qGb9rffhv3y8nBNXdcWHhcRqU9RXUTMbCBwJaGloh/wc+BO4C9mNqDo6EREROrz/vuw554h6x0/fpnkGkK/6Tlzlu536hS6anfoELYlS0JLdqdO4ficOeGauq4tPC4iUp9i+2D/FtjN3e9y98nu/r673wHsA/yu+PCkqWopczO3lN9DpNWZMgX22CM0P48fX2/WO2BA6Ds9ezbU1MCWW4YEu3176NoV5s8Pf/fbb7/0vAED6r628LiISH2KTbA7ufsyX5a5+4eEZXRbndaSsLWUuZlbyu8hpdFa/r6bhffeC83PTz0Fm25a72l9+oSeI126wIwZsOOOcPHF0K1b6BbSq1doBO/cOZwzdOjS/tWF1xYeFxGpT7F9sAvnv84XLedYi5VL2HJiTSct0mLo77sJqKmBNm1g333DFCBrrLHCS/r0WTYpbuj6M3VdKyKyImnNg91iVFXVbsUs3JcmrHCO4hXti0iT8f77cPvtteebBrjhBpg4MXyw6bPRHC586Zc8seXpfPmzQxgwYI3vk1/NVy0iTUmxCXYfM5tbR3lEmMKpyVlRAq0WqnRk8kGlrMPyV6MsPF7XOSKSidGjYYMNls43fe658M038PXXYQBi/N08Tn5kXzaofo0l2635/ZzUQ4eG60eMCF048uerVncOEclKsQl2rxWf0rSknkCrVbRO+qAiIiujvLz2fNOzZoV+zz17Quf2Czn/nQH0q36JU7vcjS/oz+YLwR2OPTZc27275qsWkaajqAQ7Wb2rKGZ2BHAe0Ba4xt2vLzh+IXACMDspGl14Tikt0zK7uAMd7llOq6lkps5W9OzCEZHlyE2Tl7NwYRiE+NUX1Vzw5eHsuvBJTu98C/cxkOo34ZVXwof4tm3Dz7ffhg8/DMuef/VVaP0GdRURkWxk2gfbzHoQllb/EbAQeMnMnnH3yXmnbQ8c5u4vZxFjIbXMNh96rkSaj2+/DdPm5SxZErZ5C9owrf1mDOMarpt/AlEU/pbbtg3jHb/7DlZbLYx1nD49jHvs0SOs0BhF6ioiItkodpq+Yu0OPO3u/3X3eYQldw8uOGd74Bwzm2Rm15mZGiFFUqbp5yRrc+bUnm960cKYzTrNpLom4rI1/8htnX9LTQ1UV4epr8vKwu127cLtqqqQbLdrF65fuBC22y50F6mszPq3E5HWJusEuzswM29/JvD9wrRmtibwJnAmsB2wFgXL9oq0dmkkx5oPXLJ20km155u+PDqH5+Zuww7dP6O6OszM16nT0uQaQit227bhWPv24SeExPsnP4H11tPS5iKSjayn6WsD5H9xHwE1uR13/w7on9s3s6uAW4FzG3wPGoQoLVwpusJo+kppbFtsAXvvnexccQV89Ede2PoU+h3YnX7J63vcuJCAd+0aBkHOnx+SaQgt1716hW4la60VkmvQ0uYiko2sE+wZwC55++sDn+d2zKwC2N3db02KImDxSt3DiqZug+KPtxZ6nFqtYpP41jLgtCEfRPRhZQWuuw7OOYfZ+xzF6C7Xs9Y3EeXlIVH+wQ/CYzVrVrj95ZehvGNH2GWX0Ir98sthOfSamqXdTgYNyvqXEpHWJusEezxwkZn9AJgHHAQMzju+ALjSzJ4BpgKnAQ+UOkhpHEo0Wo/WMuC0Ib9na3ksVsmjj8Kvfw0HHECX+27jjMltai0ec/nl4bRRo8LiMz16wM9/DmuvDYsWhXMOPBDefXfpNYMGaYCjiJRepgm2u39mZucCzwDtgJvd/VUzexy4wN1fM7OTgUeS4y8AV2UXsRSloLvOChMNrcyYHj1W0hz84hdwwQVwzjmw2mr1LlM+atTyqzm4cKi8iEiJZd2CjbuPBcYWlPXPu30/cH+p45JGsJLddaoGxHQoW3pIc47nWZnuOtTxWC6I6dCxYFXLIhTWl3b90kqsvjpcfHHWUYiIFC3zBLuRlAHMmDEj7H2Vd2Tq1FonTp3aBI6XIsZS3EfaMXwxlY03Xro7Zcryr1/p+htyTsrHS3Efdf6edT2WD+UV7D9l2TpW8vhK15/x45TafazM41TfOQXKysrKNthgg2UPtEy1369FRJqRet+v4zhucRvwU8LsJNq0adPW7LZhw4b9NOv3Ub1fa9OmTduKt/rer1tqC/a/CLOTzASqM45FRKRBunXrVnbMMcd0a9++/b+yjqWE9H4tIs3Oit6vo1hD2EVEREREUpP1So4iIiIiIi2KEmwRERERkRQpwRYRERERSZESbBERERGRFCnBFhERERFJkRJsEREREZEUtdgEO4qi46Iouj3rOJanqcYYRdFGURTFURTtUVA+NYqijVahvib5e+ZrqjHquWg60n4uRESk5WqxCbYUbTEwOoqiTlkHInoumhA9F01IFEXPRFH0XhRFbyVbvyiKdo+iaFIURR9FUfSHvHP7RlH0WhRFH0ZRdHMURY2y0FoURSfmxfNWFEVzoii6Loqi25KYcuUHliquKIo6R1H0bu6D4Mo+RlE0obFrAAAPQElEQVQUVURR9FwURR9EUfRQFEVrNlJcg5P9d5LHq11SfmEURdPyHrvTShzXSj13pYgriqL+Ba+zr6IoejQ5r2SPV3Jf7yXblUlZ5q+veuIq7esr62VyG3H53eOA24GfAS8AbwCfAPsnx28H/pwcmwIcn2GMzwI/T8o2AqZmGWMuBmA08Ne88qnJsXOAycA7wFVAGTASOCPv3PuBA/Vc6LnQc1H3c6Gt6OcjAj4DVssr6whMBzYGVgOeAPZOjr0L7JTcvgX4VQli3Ar4CFgneV10q+OcRo0L6AdMAhYlr9OVfoyAR4HDktvnA8MbIa7Nkseqc/Lc3gGcnpz7CPDjOupo9LiSspV67koVV96x9YGPgU1L+XgBuwMvAu2AtsAE4PCsX1/1xDWs1K+v1P6Im9rG0n/S/wA2T8p+AbyT3L4dqEwe6K2B/2QY47PUn0iUPEaWJhKdgWnAHkn5VOBXwERg9eSP5yHgNGBb4LXkvE7A50A7PRd6LvRc1P1caCv6+dickGA/DbwNDCF8cJyQd87RwK3AhsDHeeW7AE+XIMbngIHJ62IOMI6QJF1M+Aa50eMCbk7qnZq8hlfqMSIkKHNJPsgAGwCfNEJcG+b+ppLjQ4Grk9szCUnQJOA6oEMJ41qp565UcRUcuxM4M2+/JI8X4QPkTnn71wEXZv36Wk5cJX19tYYuIkcBvaMoOh84A8hv4n8yDo/cu0DXLIJrgMxijON4LnAStb8S3w24K47j+XEcLyH84ewWx/GbQIcoijYBDgQeieN4UUGVei5WkZ6LZbSk50JWTRdCy9SBhMf/FKCC8M8yZybQE+heT3mjiaJod6BjHMf3EVoYnwZOAHYiJBeDShFXHMcnxnH8fF5RffdZX/k6wNzkdZ1ajIVxxXE8LY7jpwCiKPoB4QNT7mv5N4Ezge2AtQitiSWJi5V/7koVFwBRFG0K/By4Ntkv2eMVx/F7cRxPzIvjEKCGjF9f9cQ1ttSvrxaVYEdRtEsURd1zu8AS4HlgR+B14LKkPKcKIPlHnWWMcV5cbQsuKXmM+eI4fhJ4ivCVNyz7mokILXYAY4BDk22Snot06bmopbk+F2NKEmArEMfxy3EcHxPH8Zw4jr8mfOV8CeF1kxMR/uG3qae8MZ1M6CJEHMefxHF8YBzHM+M4ng/8BeifUVz13WdDy6ERY4yiqAfhg9MtcRw/G8fxd3Ec94/j+IMk2bmKuh+7RolrFZ67kj5ewGDghjiOFybxlvzxiqJoK8L74ZmELodN4vWVH1ccxx8lZSV7fbWoBJvwCfOA5HYfwhO9GXAB4eud/Qn9IrNUV4xfE77SIO9YU3IGsBfQjfBJ/vAoijomAxSOB55Jzvs7IYnYBNgePReNQc9F07Eqz8ULWQTaEkVR9NMoinbLLyJ8fd4tr2x9QrecGfWUN1Zs7QhdMR5O9reOouigglgXlzquRH33WV/5LKA8iqLce0S3xooxiqLNgZeAO+I4vjQpq4ii6IT80wiPXUniWoXnrmSPV+IA4O68eEv6eEVRtDMhYT07juM7aCKvrzriKvnrq6Ul2FcAx0ZR9D7QGxhFaNV4D3if0Ady9SiK1sguxDpjvBI4NYqiNwgDUJqUvK/E2xE6/T8KvEZ4XKcTPtETx/GnhKToH+i5aBR6LpqOVXkusmpxb6HWAv4URVGHpKvOsYSBphZF0SbJP8YjgHFxHE8DqpJ/uhD6hY5rxNj6AB/GcTwv2Y+Aa6Io6hJFUVtCq+MDGcQF8Aor8RjFcbyY8I3XoUn5MY0RY/IcPgmcF8fxVXmHFgBXRlG0cRRFEWFswwOliouVfO5KGBdRFK1D6IY0Ja+4ZI9XFEUbAA8CR8RxnEvyM3991RVXJq+v5XXQ1qZNmzZt2prqBlxK+JD4IfDbpGw3wqBHB64GoqR8G+BV4ANgLNC+EeM6BLi7oOxUwiwzHwF/zCsvSVzkDY5b2ceIMEDt2ST+fwJd0o4LOB1YCLyVt12SnHMQYbzFh4TxDe1KFdeqPHcljGtHYGId55Tk8SLM5vRtwXN2Stavr3ri+n2pX1+5X1pERERERFLQ0rqIiIiIiIhkSgm2iIiIiEiKlGCLiIiIiKRICbaIiIiISIpWW/EpIo3DzHYiTM+2NuHD3qfAUHd/rxHu6+fAde7eeyWuKQN+S5hmaDXCdGyPABe4+8KU4hoK9Hb348zsZuBudx9vZqOBG9399fzyNO5TREREGpcSbMmEmbUnzBu8p7u/kZQdBYwzs43dvTrTAINRhOWYd3P3OWa2BmHRkJsJc3imyt1PzNvdA7ipjnIRkcyZ2SnArwirrMbAG8C57j49OT4VONjdX8sqxuUxs3eBIe7+bB3HehDe//d390abas3MrgO+dveLzOwq4JG64pHmSQm2ZGV1wkIRa+aV/R2YC5SZ2S7ktTjnt0Cb2UWEVfE2IKyu9BZworvPTd7U7yIkqGsBV7n7qNwdJEnyDKCfu3+YlI0H/uLuD+WdtxFwJNDN3ecCuPu85J/Kzsk55cD1QF/CP5hxwDnuvsTMqoA/AnsmMV7p7qPMrC1wbRLfLOBLYE5S37PAdcC2QHfg72Z2DDA8+d3/YWYHABcSWvy/BX7n7q8mj8lGyX1tCHwGHOXuM83sV4S5SRcRlhg/2d0nN+hZEhEpYGYjCHMa7+vun5pZG+Ao4GUz6+fuM7KNsGijgQsbM7muwyXAC2a2o7svKOH9SiNRgi2ZcPfZZnYW8E8z+wJ4kbC09N3uvsjMVlTFzwhLgH8FjCEs+z00OdYV2AHoAbxpZt8vT50kyXcAJwJnmVkvwrLhjxbU/yPgvVxynXf9F8D9ye61wH+ArQndRx5OYvgj0J7QMvETM/sR8KKZ3QacnNzfloSWn+eAdwru41wzOxI40t1fyz0WZrY5cCPwE3f/xMx+ATxkSx+sXYBtkw8aDwOnmNklwDXARkmyfTTwU8LE+SIiK8XMehI+sG/g7rMB3L0G+FvyXvd7wmp4AKeZ2TaE98Or3P1WM1sTuA3YFKgBXid86K8xs/2A8wjvp/MJXQZfThoQfkxoeHiX8B52gLu/nsR0D/Bs0ohxLmHhkDaERVlOdffPzWxLwiIiqxMWOqlz5Voz6wes6+7/SvY3Sa7rCswkrOw4hrAAyf8RFiDpl5QPcffnzWw1wkq0+wJLCMtznwp0IHwDuk1S1xLgheQxnGNmLxJWivxzg58QabI0yFEy4+4jgfWA3xDebIYREuLyBlx+n7t/mbyx3wLslXfsenePk1aUfxJakfPdAByTtCYPBm6uo0tKDSv++9ib0LIcJ32yb0zKcnIt4m8Q/sGsAewOjHX3Re4+j9Bq31C/ACa4+ycA7v40oRX8R8nxZ/M+ELwJdE1+r/uAl5KvI78hPF4iIquiH/B+LrkuMJ6Q/OYscPftCN/YXWFmWwEHAp3cvS+hIQTgh2a2KXA50N/dtyW8N1cm3zpC+GZuW3c/nJDwHg9gZl1I3leTb/y2BnZM6n+ckNBCeK8d7e59CAnshvX8fgOp3eByJ3BX8m3qbwiJfk4F8H/JfZ0N3JP8XzmV8L68DdAb6ERYcvtiwtLcmyf3U9iS9CQwoJ64pJlRgi2ZMLOdzexMd//W3R9197OArQhdLfZIfkZ5l7QrqGJJ3u02QHUDj5F0DZkE7E8YwHgzy3oF2MLMOhXE3cPMHjOzjknd+V8htiG0SucsSO4vd05U8LMw1hUpK7i/wvvM/1rx+8fP3Y8C9gP+TfgncNdK3KeISKG29ZS3p/Z7VG4cyeeE5HE3QovtVkmXuLOBa9z934T3/W7ABDN7i5AQ1xC6AwJMdPfc++WtwCFm1g44HHjY3ecQWox3Al5L6vg1YGa2NtAH+FsSz4uElvC6bE54r8wl7zuS/I9w9/eBCXnnznb3scmxcYT/NX0ICf+d7r7A3Wvc/VB3vzMp/1vSKPMV8EDBfU9h2aRbmikl2JKVr4DzzCy/taMbUE7oMvEVUGFm65pZBBxWcP3+Zlae9P07iTC7R84xAGZWQWi9HlfH/V8P/Al4NXnzryUp+ztwq5l1TurrTGj9/k/SR+4JYIiZRcmgzcHAUyv4vccRWs87mFkHQqtGXZaw7D+xCcBeZvbDJJ5fEPqhv1LfnZnZOmb2aRLzNYSvX3eo73wRkRWYCGxqZuvXcex/CN0hcvIbN9oAi919CiFpvgLoDIxPuoaUEb6h65vbCMlyLhH+LleRu08jfDO4L6ElO9dIUgYMz7t+e5IxM4mGNG7ELM2NcufkX1dfY07ud6xOyr//oGFm65lZtwbEsLigfmnGlGBLJpJW5AOAy83sEzObDNwLHO/BZELrx2uEN/QpBVV8Sfj6733CIMHL845tbGavE7qH/MbdvY4QHiUMsLxxOWGeSuir/FLSGvJKsp+b1eM3wLqEDwTvAA5ctoJfPfc7vUvov1f4e+VUAmPM7PvuLcljcirha9N3CX2990taburk7l8DfyC0Cr2eXHPSCmIUEamTu39GGH9yVzLbBgBmdjyh7/PwvNOPS45VEFpvJySDrm8DnnT3YYSGiu0IDQh7JmNNMLP+hG8aO9YTymhCt8I1khZpkrpOzDWKEAYO3unu/yH09T4xqXs7QleSOn9FoFfyu35LGB+U646yMaEVPpc8/8DMfpkc24+QIL9D6CpzhJm1TxqBRhFa2scBg8ysTdI6vn/BfW9M6B8uLUAUx6UcJCtSvGTAyzruPqSOY1NpwNRQZvZjQqtH7xKPFBcRafbMbBBhmr4OhK4hrwLnJS3UuffiR4GfELr4XeLu9yZ9qm8ldKWYD0wHTkgGvg8EziW08i4B/l8yaPAiCt7zk77OMwgt1iOTsjaEWZYGEpLg6YQZpj5LBrTfRph69d+EJPo3hdPiWVif4c/u3i/Z34gwbmUdwuxMPQiNFv8iNPBUEvpZLwBOcfe3LKyhcAXQP/ldniWsqdCO0KizE2H8zNfAW+5+UXJf1wPvuPvyGn6kmVCCLc1OsQl2MovIz4FD3X1i40QpIiLNkZk9AZyfTIF6LnC/u3+QDMCfRBjMPh94193XXF5dK3GfnQnda7Z396o06pRsKcEWERERSSSt1tcRBocfTBi7UkOY2viGZDrAjUg3wR4JPO5asbfFUIItIiIiIpIiDXIUEREREUmREmwRERERkRQpwRYRERERSZESbBERERGRFCnBFhERERFJkRJsEREREZEU/X/1+OYDNkoGYAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "Demand_Forecastgpcd_AF(slc_val, False, Pred_Obs, \n", + " 'y_pred_tot', 'y_test_tot','y_pred_tot_AF', 'y_test_tot_AF', 'gpcd', 'Acre-Feet', 'MLR_Performance', 'CSD-WDM ')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "#Make a function to put all of the predictions together\n", + "def MultiModelDemand_Forecast(prediction_dictionary, Error, pdict, df, units, plotname):\n", + " FinalDF=pd.DataFrame()\n", + " if pdict is True:\n", + " print('yes')\n", + " for i in prediction_dictionary:\n", + " FinalDF=FinalDF.append(prediction_dictionary[i])\n", + "\n", + " FinalDF=FinalDF.sort_index()\n", + " else:\n", + " print('pdict is not used')\n", + " FinalDF = df\n", + " \n", + " # months = np.arange(1,6,1)\n", + " # Low = list()\n", + " # Ave=list()\n", + " # High = list()\n", + " # for i in months:\n", + " # Low.append('Low'+str(i))\n", + " # Ave.append('Ave'+str(i))\n", + " # High.append('High'+str(i))\n", + " \n", + " # Low.append('Drought')\n", + " # Ave.append('Average')\n", + " # High.append('Surplus')\n", + " \n", + " # months2 = np.arange(7,13,1)\n", + " # for i in months2:\n", + " # Low.append('Low'+str(i))\n", + " # Ave.append('Ave'+str(i))\n", + " # High.append('High'+str(i))\n", + " \n", + " # Conditions = High+Low+Ave\n", + " # print(Conditions)\n", + "\n", + " #adjust date range to improve figure\n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2017,12,1), freq='MS')\n", + " #FinalDF['Date'] = FinalDF['Date']-np.timedelta64(14, 'D')\n", + " #FinalDF['Date'] = Conditions\n", + " \n", + " FinalDF.index = FinalDF['Date']\n", + " del FinalDF['Date']\n", + " \n", + " #Error or no error\n", + " if Error ==False:\n", + " Observed = FinalDF['Observed']\n", + " SLCWDM = FinalDF['SLCWDM']\n", + " MLP = FinalDF['MLP']\n", + " RFR = FinalDF['RFR']\n", + " Stationary = FinalDF['Per-Capita Stationarity']\n", + " if Error == True:\n", + " SLCWDM = FinalDF['SLCWDM_Error']\n", + " MLP = FinalDF['MLP_Error']\n", + " RFR = FinalDF['RFR_Error']\n", + " Stationary = FinalDF['Stationary_Error']\n", + " \n", + " SLCWDM_MAPE = FinalDF['SLCWDM_Error_MAPE']\n", + " MLP_MAPE = FinalDF['MLP_Error_MAPE']\n", + " RFR_MAPE = FinalDF['RFR_Error_MAPE']\n", + " Stationary_MAPE = FinalDF['Stationary_Error_MAPE']\n", + "\n", + " \n", + " plotmin_tot = (MLP.min()-5)/100000\n", + " plotmax_tot = (Stationary.max())//100000\n", + " \n", + " plotmin_Perc = MLP_MAPE.min()-5\n", + " plotmax_Perc = Stationary_MAPE.max()\n", + " \n", + " Xplotmin = FinalDF.index[0]-np.timedelta64(20, 'D')\n", + " Xplotmax = FinalDF.index[-1]+np.timedelta64(33, 'D')\n", + " \n", + " plt.rc_context({ 'xtick.color':'black'})\n", + " fig, ax = plt.subplots(2,3, constrained_layout=True)\n", + " fig.set_size_inches(7,5)\n", + " \n", + " labelsize = 10\n", + " width = 7\n", + " \n", + " gs = ax[0,2].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[0,0].remove()\n", + " ax[0,1].remove()\n", + " ax[0,2].remove()\n", + " axbig = fig.add_subplot(gs[0,:3])\n", + " axbig.set_facecolor(\"white\")\n", + " #axbig.set_title('Total demand Timeline Evaluation')\n", + " #axbig.bar(FinalDF.index,FinalDF['Observed'], color='blue', width= 15, label='Observed', zorder=1)\n", + " #if Error ==False:\n", + " # axbig.plot(FinalDF.index,Observed, color='blue', label='Observed', zorder=1)\n", + " axbig.bar(FinalDF.index-np.timedelta64(11, 'D'), SLCWDM/100000, color='blue', label= 'CSD-WDM',width = width, zorder=3, align=\"center\")\n", + " axbig.bar(FinalDF.index-np.timedelta64(4, 'D'),MLP/100000, color='green', label= 'MLP', width = width, zorder=2,align=\"center\")\n", + " axbig.bar(FinalDF.index+np.timedelta64(3, 'D'),RFR/100000, color='purple', label= 'RFR',width = width, zorder=2,align=\"center\")\n", + " axbig.bar(FinalDF.index+np.timedelta64(10, 'D'),Stationary/100000, color='red', label= 'Per-Capita Stationarity', width = width, zorder=1,align=\"center\")\n", + " axbig.axhline( y = 0, color= 'black')\n", + " \n", + " #axbig.set_xlabel('Surplus Drought Average \\n \\n Supply Scenario', size = 16)\n", + " axbig.set_ylim(plotmin_tot*1.2,plotmax_tot*1.2)\n", + " axbig.set_xlim(Xplotmin, Xplotmax)\n", + " axbig.set_ylabel('Prediction Error ($x10^6$'+ units+')', size = labelsize)\n", + " axbig.legend(loc = 'upper center', facecolor = 'white', fontsize=labelsize,bbox_to_anchor=(.5,1.1), ncol = 5)\n", + " axbig.spines['bottom'].set_color('black')\n", + " axbig.spines['left'].set_color('black')\n", + " axbig.tick_params(axis='both', which='both', length=5, color='black')\n", + " axbig.xaxis.set_major_locator(mdates.MonthLocator())\n", + " # Get only the month to show in the x-axis:\n", + " axbig.xaxis.set_major_formatter(mdates.DateFormatter('%b'))\n", + " axbig.tick_params(axis = 'both', labelsize = labelsize)\n", + " axbig.annotate('A.', (FinalDF.index[-1], plotmax_tot*1.2), size = labelsize)\n", + "\n", + "\n", + " \n", + "\n", + " #axbig.annotate('A.', (FinalDF.index[-1], 600), size = 14)\n", + " #make a list of desired months\n", + " months = [0,5,10,12,17,22,24,29,34]\n", + " \n", + " xticks = axbig.xaxis.get_major_ticks()\n", + " for i,tick in enumerate(xticks):\n", + " #if i%5.5 != 0:\n", + " if i not in months:\n", + " tick.label1.set_visible(False)\n", + " \n", + " #gs2 = ax[1,2].get_gridspec()\n", + " # remove the underlying axes\n", + " ax[1,0].remove()\n", + " ax[1,1].remove()\n", + " ax[1,2].remove()\n", + " axbig2 = fig.add_subplot(gs[1,:3])\n", + " axbig2.set_facecolor(\"white\")\n", + " #axbig.set_title('Total demand Timeline Evaluation')\n", + " #axbig.bar(FinalDF.index,FinalDF['Observed'], color='blue', width= 15, label='Observed', zorder=1)\n", + " #if Error ==False:\n", + " # axbig.plot(FinalDF.index,Observed, color='blue', label='Observed', zorder=1)\n", + " axbig2.bar(FinalDF.index-np.timedelta64(11, 'D'), SLCWDM_MAPE, color='blue', label= 'SLC-WDM',width = width, zorder=3, align=\"center\")\n", + " axbig2.bar(FinalDF.index-np.timedelta64(4, 'D'),MLP_MAPE, color='green', label= 'MLP', width = width, zorder=2,align=\"center\")\n", + " axbig2.bar(FinalDF.index+np.timedelta64(3, 'D'),RFR_MAPE, color='purple', label= 'RFR',width = width, zorder=2,align=\"center\")\n", + " axbig2.bar(FinalDF.index+np.timedelta64(10, 'D'),Stationary_MAPE, color='red', label= 'Per-Capita Stationarity', width = width, zorder=1,align=\"center\")\n", + " axbig2.axhline( y = 0, color= 'black')\n", + " \n", + " axbig2.set_xlabel('Wet Dry Average \\n \\n Supply Scenario', size = labelsize)\n", + " axbig2.set_ylim(plotmin_Perc*.9,plotmax_Perc*1.2)\n", + " axbig2.set_xlim(Xplotmin, Xplotmax)\n", + " axbig2.set_ylabel('Prediction Error (%)', size = labelsize)\n", + " #axbig2.legend(loc = 'upper left')\n", + " axbig2.spines['bottom'].set_color('black')\n", + " axbig2.spines['left'].set_color('black')\n", + " axbig2.tick_params(axis='both', which='both', length=5, color='black')\n", + " axbig2.xaxis.set_major_locator(mdates.MonthLocator())\n", + " # Get only the month to show in the x-axis:\n", + " axbig2.xaxis.set_major_formatter(mdates.DateFormatter('%b'))\n", + " axbig2.tick_params(axis = 'both', labelsize = labelsize)\n", + " axbig2.annotate('B.', (FinalDF.index[-1], 100), size = labelsize)\n", + "\n", + "\n", + " \n", + "\n", + " #axbig.annotate('A.', (FinalDF.index[-1], 600), size = 14)\n", + " #make a list of desired months\n", + " months = [0,5,10,12,17,22,24,29,34]\n", + " \n", + " xticks = axbig2.xaxis.get_major_ticks()\n", + " for i,tick in enumerate(xticks):\n", + " #if i%5.5 != 0:\n", + " if i not in months:\n", + " tick.label1.set_visible(False)\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " fig.savefig('C:/Users/rjohnson18/Box/Dissertation/Paper1/Figs/' +str(plotname)+'.pdf')\n", + " # r2 = sklearn.metrics.r2_score(FinalDF[test], FinalDF[pred])\n", + " #MAE= sklearn.metrics.mean_absolute_error(FinalDF[test], FinalDF[pred])\n", + " #RMSE= sklearn.metrics.mean_squared_error(FinalDF[test], FinalDF[pred], squared = False)\n", + " #MAPE=np.mean(np.abs((FinalDF[test]- FinalDF[pred])/FinalDF[test])*100)\n", + "\n", + " # print('Total R2 is ', r2)\n", + " # print('Total MAE is ', MAE)\n", + " # print('Total RMSE is ', RMSE)\n", + " # print('Total MAPE is ', MAPE)\n", + " \n", + " \n", + " return FinalDF" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "#load mlp and rfr df's to make a predition version to evaluate all model performance\n", + "#save predictions\n", + "RFR = np.load('RFR_Models/Slc_Pred.npy', allow_pickle = True).item()\n", + "#save predictions\n", + "MLP = np.load('MLP_Models/Slc_Pred.npy', allow_pickle = True).item()\n", + "\n", + "Model_Comp = copy.deepcopy(slc_pred)\n", + "\n", + "gal_to_m3 = 0.00378541\n", + "l_to_m3 = 0.001\n", + "#make unique labels for each model\n", + "for i in RFR:\n", + " RFR[i]['RFR'] = RFR[i]['y_pred_tot']\n", + " MLP[i]['MLP'] = MLP[i]['y_pred_tot']\n", + " slc_val[i]['SLCWDM'] = slc_val[i]['y_pred_tot']\n", + " slc_val[i]['Observed'] = slc_val[i]['y_test_tot']\n", + " slc_pred[i]['Per-Capita Stationarity'] = slc_pred[i]['UR_gpcd']\n", + " \n", + " \n", + " #align the index on them all, slc-pred already has the updated dates\n", + " RFR[i].index = slc_pred[i].index\n", + " MLP[i].index = slc_pred[i].index\n", + " slc_val[i].index = slc_pred[i].index\n", + " \n", + " #put all into their own dictionaries\n", + " #Observed and SLCWDM already in liters, convert to m3\n", + " Model_Comp[i]['Observed'] = slc_val[i]['Observed']*350000*l_to_m3*30\n", + " Model_Comp[i]['SLCWDM'] = slc_val[i]['SLCWDM']*350000*l_to_m3*30\n", + " Model_Comp[i]['MLP'] = MLP[i]['MLP']*350000*gal_to_m3*30\n", + " Model_Comp[i]['RFR'] = RFR[i]['RFR']*350000*gal_to_m3*30\n", + " Model_Comp[i]['Per-Capita Stationarity'] = slc_pred[i]['Per-Capita Stationarity']*350000*gal_to_m3*30\n", + " \n", + " #Create ML error values\n", + " Model_Comp[i]['SLCWDM_Error'] = Model_Comp[i]['SLCWDM']-Model_Comp[i]['Observed']\n", + " Model_Comp[i]['MLP_Error'] = Model_Comp[i]['MLP']-Model_Comp[i]['Observed']\n", + " Model_Comp[i]['RFR_Error'] = Model_Comp[i]['RFR']-Model_Comp[i]['Observed']\n", + " Model_Comp[i]['Stationary_Error'] = Model_Comp[i]['Per-Capita Stationarity']-Model_Comp[i]['Observed']\n", + " \n", + " Model_Comp[i]['SLCWDM_Error_MAPE'] = (Model_Comp[i]['SLCWDM_Error']/Model_Comp[i]['Observed'])*100\n", + " Model_Comp[i]['MLP_Error_MAPE'] = (Model_Comp[i]['MLP_Error']/Model_Comp[i]['Observed'])*100\n", + " Model_Comp[i]['RFR_Error_MAPE'] = (Model_Comp[i]['RFR_Error']/Model_Comp[i]['Observed'])*100\n", + " Model_Comp[i]['Stationary_Error_MAPE'] = (Model_Comp[i]['Stationary_Error']/Model_Comp[i]['Observed'])*100\n", + " \n", + " \n", + " del Model_Comp[i]['UR_gpcd']\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":37: FutureWarning: The pandas.datetime class is deprecated and will be removed from pandas in a future version. Import from datetime module instead.\n", + " FinalDF['Date']= pd.date_range(start=pd.datetime(2015,1,1),end=pd.datetime(2017,12,1), freq='MS')\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAFwCAYAAADOssOmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdeZxVdf3H8deZBWaQVVxYZVDk45I/FTIJRVBzyVL8pajhhrumlpkKmSakKGVoLkX9BEVRs0itXHJJBZc0zTK17GMqorihyCYzAzPM/f1x7oXLODB3OXfu9n4+Hjw4c+5ZPufc7z3nc77ne74niMViiIiISHmpyHcAIiIi0vGUAIiIiJQhJQAiIiJlSAmAiIhIGVICICIiUoaUAIiIiJShqnwHUI5efPHFraqqqmYCX0BJmIhIMWoBXm1ubj51+PDhi/MdTCaUAORBVVXVzD59+uy45ZZbLq2oqFBHDCIiRaalpSX4+OOPd/rwww9nAoflO55M6OozP76w5ZZbrtDJX0SkOFVUVMS23HLL5YQ1uR3OzCaa2QdmVpPpMpQA5EeFTv4iIsUtfhzP13n0WOAu4JhMF6BbAAWgoYFda2uj+y4aGmiureWf7U336quv1kybNm3A6tWrKxoaGipHjhy5fNKkSe/fcccdve+7777eFRUVsVgsFpxyyikfHnjggSuuuuqqfo888sjmvXv3bmppaaFz584tF1544aJhw4Y1JC932rRpfTt37tzy3e9+9yOAY489dvuKiorYnDlz3gC48sor+/Xo0aN5xYoVVRtb3m233dZ76tSpdbfeeut/RowYsQpgzZo1wciRI//niCOO+Pj73//++1HtL4CGpoZda6tro/sOmhqaa6trN/kdzJs3r9sZZ5wx9PLLL3/rqKOOWpoYf9BBB+00dOjQ+pdeeqnbI4888mptbe26ZPG2227r/atf/apf37591wRBEFuzZk3Fcccd99G4ceOWtr2WzDU1NO1aXVsd2T5pamhqrq6tbnefXHTRRdtus802jUEQxFatWlXZr1+/1T//+c8XDBs2bPcdd9xxVWLawYMHN1x99dXv7LzzzsMS45ubm4OWlhZ+9rOfvbXtttuuiSp2ABoadqU2ujJCQ0MztRsvI633xerVqyu++tWvfnrWWWdldL/5qaee6vrzn/+8b3Nzc0VjY2PFYYcd9snpp5/+cTrL+Mc//lH78MMP95w0adIHv//973vuscceq/r379/U3nyLFy+u+v73vz+ovr6+AqBPnz5rpk6d+k6XLl1is2bN2uL4449f0qlTpzYvihYuXNjp5Zdfrj300EOXX3zxxQPPOOOMjwYNGhTpd5vpduWLmY0B3gR+CdwOzM5kOUoACkBtLVVBEN3yYrH2v9elS5dWnn/++dveeOONbw4dOnR1c3Mzp59++nYzZszYau7cuVs9/PDD/+rcuXPsvffeqx43btyO+++//8sA48eP/+i00077GOC1116rOfvss7d74IEH/p18kho9evSKGTNm9AU+WrVqVcWqVasqGxoaKurr64MuXbrEXnzxxW5Tp059+9577+29seUBDBgwoPGPf/zj5okE4OGHH+6+2WabrY1uT61XW11bFUyJ7kuIXRZL6bc1YMCAxgcffHDzRALw8ssv1zY2Nm7yiuKAAw74dPLkye8BLFmypPLQQw/d+YgjjlhaURHthUh1bXXVlGBKZMu7LHZZSvtkt912W/l///d/byX+PvPMMwfff//9Pbt27br2d7/7nbeevvX4mTNnbvHLX/6yz09+8pN3ook8rra2imh/qO3uj+R90djYGBxwwAFfOOaYY5b06tUrrd/Bm2++2enKK6/c5pZbbnm9T58+zfX19cExxxxj22yzzeqDDz54RarL2X333Rt23333BoDbb799azNbmMqJ8sYbb+wzYsSIFYnf+sUXXzxw1qxZW5577rmLZ8+e3Xf8+PFLNjbv/Pnzu7311ls1hx566PIrr7zy3VRjTUem25VHpwIz3d3NbLWZ7enuf013IUoAytT999/fc/jw4SuHDh26GqCqqorrrrtuQXV1deyuu+7aeubMmVsedNBBy4cMGbL68ccff6WysvJzy9hxxx0bhw4dWv/MM890/cpXvrIyMX6PPfZYNXHixNqWlhYef/zxbsOGDVv52WefVc6bN6/7vvvuu2LZsmVVO+yww+pNLQ9gxIgRy59//vkea9eupbKykgceeGDzr3zlK5/mcLd0uO22265h0aJFnZcuXVrZq1evtXfffffmBx544Kcffvhhp1TmX7ZsWWWnTp1aoj75F4rVq1cHS5Ysqe7Zs2dzqvO8//77nbt3757y9MVi5cqVlRUVFbGqqqrYyy+/XHv55ZcPjMViQY8ePZqnT5/+9ksvvdRl+vTp/aurq2NHHHHEx8cee+y638rcuXN7H3LIIZ/06dOnGaBLly6x22677b9du3Zdu3z58ooLLrig7rPPPqtcvnx51eGHH/7J6aef/vGRRx5pgwYNali4cGFtLBbjxhtvfNPda++8884tx44du+TNN9+sveiiiwb/7ne/+8+0adP6vfbaa13q6+srBw0a1HjDDTe8nRx7//79V//5z3/uNXjw4MaRI0d+NmXKlHeDIGD27NlbLF26tPqss87adubMmW9ecMEFgz766KNOK1asqPryl7+8fNKkSe/Pnj27z+rVqyuGDx/+2a233trn8ssvX9inT5+mb3/724Pr6+sr165dG3z7299+b7/99lt50EEH7bTbbrutfOONN7oEQcDMmTPf6Nq169rWy73kkkveP/fcc+uWL19etWLFiqoJEyZ8+OCDD26evF2HH374xwsXLqz50Y9+tKi5uZlDDjlkpz/+8Y+v1dTU5PX2rZn1Ag4BtjKzc4EewDmAEoApU6Z0rqmp2eP444//oF+/fjm5WsxWEARVQEoH+Cxscvkff/xxzTbbbNOcPF23bt0AuPnmmxfMmjVri9NOO23r5ubm4MQTT1x86qmnfhoEQWVFRUVL8jxbbLFFy9KlS2uAdSf0qqoqtt9++8Z//etf3Z966qlehx122LKVK1dWPvnkk726dOlSMWzYsHqg06aWV1FRUdG5c+eKL3zhCw1PPfVUr2HDhjXU19dX9+vXr+Hjjz+ubm/7CsQmYwyCoKqioqJiv/32W3n//fdvceyxxy597bXXup1yyimLH3jggRogiC9j3QGnoqKi6s9//nPvf/3rX90qKiro3Llzy7Rp0xa1t64C0u4+eemll7qPGzduh2XLllUFQcA3vvGNJfvvv//qzz77rHLcuHE7JKadNGnSB8OHD29IjK+vr69csWJF5ZgxY5ZfdNFFH7W3rgKx0RiT90VFRQWVlZWx73//+x9069at6tJLL6276qqrFu20006rb7311l433nhjv1GjRn3W1NRUed999/239bI/+eSTmp133nll8riePXsCVL755ps1X/va11YcfvjhK957772q4447brvTTz99eRAEwfDhwxunT5/+4U033dT7+uuvH3DwwQcvr6ioqPja177WMHv27MbLL7/8vcbGxs49e/bkrrvuWrh27VoOOuigoYsWLeoyYMCAdUnYqaeeury2trbi5ptv7nfRRRfV7rLLLvWXX375exMmTFgxa9as5hkzZix69913N9ttt90aJ0yY8EFDQ0Owzz777HjJJZd8cvLJJ3/y1ltvdT700EMbbrvttiAIguprr71265EjR64666yzlixatKhq/PjxQ0aPHv2f+vr6qrFjx64cOXLkR9/61rcGPvroo5t/8YtfrG9ruUEQVOy55571Z5999ifz58/frPV29evXr2ns2LF9m5ubFz/66KPdhg8fXl9TU1Pd1vcE1GVfFFIzaNCgE1etWjX3mWeeuQrg+eefrznxxBOfuuOOO4YlJ31xlUBf4AWSjtEJJZcA1NTU7DFx4sSn8h3HplRXVwP0z/FqdtnUh9tvvz3//ve/Afolxr377rt8+OGHdO/enWnTpgGwYMECTj311P6jRo3qv9lmm9GlSxdIin3ZsmUMHjyYH/zgB7zzzjv06tWL66+/nv3335+XX365++uvv86IESN6NzU1ceutt/LKK6/0PuiggwA239Ty3nnnHbp06cIBBxzAgw8+2Gvp0qUcdthhNDU1ddtss80AtopsT+XOJr+DmpoaamtrOfroo3tMnjwZMxuw1157UVtbO7hLly5UV1dTUVGxQQvjLl26cPjhh3PBBRckH4i65ST63Gh3n+y1115ce+21my1dupSTTz6ZoUOH9gP69ezZk7lz526WNPkQCE9kc+fO3Wzt2rVMmjSJHj16bNGtW7ctcrkREdro/kjeF0mjuwIsWrSIq666aihAU1MTgwcPpqamZiszA9hl4cKFXHLJJQAcdthhDBkyhOXLl2+evPz//Oc/xGIx+vfvz1133cXTTz9N165dCcLbHLvU1NSw3377bQYM3HvvvXnuueeoqanpXVtbu+7z6urqoV26dKGxsZHzzz+/T5cuXWhqagLYMXldzz//POPHj+eEE05gzZo13HTTTd2uvvrqHW644YZ15XzLLbfkrbfe4nvf+96Arl270tzcDLBLly5dEseJLRPr/PDDDznmmGMA+g0YMICePXuydOnSXaqrqxk2bNh2ANtuuy2VlZU9N7XcL3zhCwB9E7/F5O3q3r07I0eO5JlnntnlT3/6E9/61rcAerf+nuLH8wXtfM+Rqamp4frrrwc4HeBLX/oSRx99NCtXrnzxN7/5DUcffXRbs40Cnm49suTqDW+88cYP6urqWLRoUb5DKWj77rsvTz31FO+8E94mbWpqYtq0abz44otccMEFLF++HID+/fvTq1evRCHfwOuvv84bb7zBbrvtxtSpU5kzZ06iYLLXXnvxwAMPMGjQIKqqqqitraV79+4899xzjBgxos2YkpeXsOeee/LSSy/x0EMPcfDBB0e9GwrCwIEDqa+vZ86cORx2WFE+TpwTvXr14uqrr+aSSy5h8eL2271VVlZy+eWX8+ijjzJv3rzcB5hHgwcP5sc//jFz5szhwgsvZPTo0QAkbgUNGjSIOXPmMGfOHMaNG8fXv/515s6dy6efhheIq1at4oc//CGLFy/m5ptvZrfdduOnP/0pBx98MLHY+hruV199FYC///3vDBkyZIMYgiAgFovx5JNP8sEHH3DNNddw/vnn09jYuMEyAG699VbuueceADp16sT2229Pp06d1i2npaWFe+65h27dujF9+nROPvnkdcupqKigpaVlg+Vtt912/O1vfwPgo48+YsWKFYkajUQCs87GltvWtMnbBXDUUUcxd+5clixZwg477PC5afPhj3/84+dimTx5MmeeeebGTv4AH7Q1suRqABYtWrQWSGR5shFdu3Zl2rRpXHLJJcRiMVatWsW+++7LGWecQe/evTnxxBOpqalh7dq1jBs3jm233RaA2bNn8+CDD1JRUUFVVRXXX389VVWfL0aDBg3io48+4sgjj1w3buTIkTz22GN07dp13bj2lldRUcFee+3FBx98sMF8peaQQw7hD3/4A4MHD+bdd9e3c/rmN7+5bvjQQw+lR48e+Qgvb4YMGcLxxx/PFVdckdL0NTU1TJ06lYkTJ/KlL30pceVYciZPnszEiRNZuza8yzl16tRNJkkDBgzgwgsv5JxzzqGyspJVq1Zx5JFHMnr0aDp37szkyZO577776NmzJ5WVlaxZEzayv/fee5k9eza1tbX85Cc/4fXXX1+3zN13352LLrqIGTNm8Itf/IKjjjqKTp06MXDgQBYvXszAgQPXTTtlyhSmTJnCnXfeSU1NDb169WLy5MkAfPGLX+T000/nhz/8Ieeffz4vvvgitbW1DBo0iMWLFzN06FBmzJjBzjvvvG55Z5xxBhdffDEPP/wwjY2N/OhHP2rzOATw5S9/uc3lbkxiu26++WZ23XVXFi5cyLHHHtv+l1LY2rwd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G9uc3Mdz66qnktjmZLFYbAnha6RnE5brGuC5WCzWFAv7u34K2Bm4AzgyCIJ+QPdYLPZqe8tWeQJUnlSesqDylLvylI2STACAW4G9gyCoALYCrgVui8VixwNPsGGBK5WXIbTe5leIvxkRGNZq2lLZ5g3EYrH7ACfMnBuBPYMgqIrfe9sHeD0Wi60gfKvktcAtKS5a5UnlSeUpOypPuStPGSuUtwFGbTpwPeFOnk2YSV4fBMGH8eEt8hdazrTe5rnAb4Mg2IfUXqNcKs4jfHX0SuC3wDOEie7TwO/j09wEPAScnOIyVZ5UnlSesqPyFMpFecqY3gYoIiJShkr1FoCIiIhsghIAERGRMqQEQEREpAwpARARESlDSgBERETKkBIAERGRMqQEQEREpAwpARARESlDSgBERETKUMl1BTxlypTONTU1exx//PEf9OvXb22+4xEREcmTSsJ3LrwArG79YcklADU1NXtMnDjxqXzHISIiErW//vWvnHfeeQwZMoRYLEZzczNTp05lu+2229RsowjfN7CBkrsFcOONN35QV1fHokWL8h2KiIhI5EaMGMGcOXO4/fbbOeecc/jJT37S3iwftDWy5GoAFi1atBagubk536GIiIjk1IoVK+jfv397k7V5O7zkEgAREZFS9txzz3H88cezZs0a3J1f/epXGS0nLwmAme0J/Njdx5jZEML3Q8eAV4Gz3b3FzE4DzgCagSvc/f58xCoiIlJIRowYwbXXXgvAW2+9xTHHHMOTTz5JTU1NWsvp8DYAZnYRMBNIRHoNcIm7jwICYKyZ9QG+DewFHARcZWadOzpWERGRQrbFFltkPG8+agDeBL4BzIn/PRyYHx/+E3Ag4f2KZ9x9NbDazN4A/ofwUQYREZGylbgFUFFRwapVq5g0aRKPPvoo9fX1HH300Skvp8MTAHe/28zqkkYF7h6LD68EegDdgeVJ0yTGi4iIlK0999yTZ599NpJlFcJjgC1Jw92AZcCK+HDr8SIiIhKBQkgA/mFmY+LDXwWeAp4HRplZjZn1AHYkbCAoIiIiESiExwC/B9xkZp2A14DfuftaM7ueMBmoAH7g7o35DFJERKSUBLFYrP2pikgQBHXAggULFlBXV5ffYERERPJvMPB265GFcAtAREREOpgSABERkTKkBEBERKQMKQEQEREpQ0oAREREypASABERkTKk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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "Model_Comparision = MultiModelDemand_Forecast(Model_Comp, True, True, Pred_Obs, '$m^3$', 'Model_Comparison')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}