├── CAISO Load.xlsx ├── Data_Workbook.xlsx ├── ElectricityByCounty.xlsx ├── CAISO Load Forecasting.pdf ├── City_Electricity_Data_1.xlsx ├── README.md └── COMP152_FinalProject_TwoStagePerformance.ipynb /CAISO Load.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mhgao/load-forecasting-CAISO/HEAD/CAISO Load.xlsx -------------------------------------------------------------------------------- /Data_Workbook.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mhgao/load-forecasting-CAISO/HEAD/Data_Workbook.xlsx -------------------------------------------------------------------------------- /ElectricityByCounty.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mhgao/load-forecasting-CAISO/HEAD/ElectricityByCounty.xlsx -------------------------------------------------------------------------------- /CAISO Load Forecasting.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mhgao/load-forecasting-CAISO/HEAD/CAISO Load Forecasting.pdf -------------------------------------------------------------------------------- /City_Electricity_Data_1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mhgao/load-forecasting-CAISO/HEAD/City_Electricity_Data_1.xlsx -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # load-forecasting-CAISO 2 | This novel model and associated paper proposes the use of a two-stage K- means clustering for variable selection and then using decision trees and support vector regressors for day-ahead load forecasting in the CAISO electricity market. 3 | 4 | Find an account of the results and methodology in the report: [CAISO Load Forecasting.pdf] 5 | 6 | The team for the project includes: Martin Gao, Daniel Lee, Paul Maina, and Zohaib Siddique \ 7 | martin.gao@tufts.edu; daniel.c_lee@tufts.edu; paul.maina@tufts.edu; zohaib.siddique@tufts.edu \ 8 | Department of Computer Science, Tufts University, 161 College Ave, 02155 Medford, MA, USA 9 | -------------------------------------------------------------------------------- /COMP152_FinalProject_TwoStagePerformance.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "#Call required libraries\n", 10 | "import time \n", 11 | "import warnings \n", 12 | "import numpy as np \n", 13 | "import pandas as pd \n", 14 | "import matplotlib.pyplot as plt \n", 15 | "import seaborn as sns\n", 16 | "from sklearn.preprocessing import StandardScaler \n", 17 | "from sklearn.cluster import KMeans, AgglomerativeClustering, AffinityPropagation\n", 18 | "from sklearn.mixture import GaussianMixture \n", 19 | "\n", 20 | "#inputs\n", 21 | "holiday_pd = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/Data_Workbook.xlsx', sheet_name = 'Holiday Dates')\n", 22 | "lat_long_data = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/Data_Workbook.xlsx', sheet_name = 'City-Lat-Long')\n", 23 | "county_load = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/Data_Workbook.xlsx', sheet_name = 'Load By County 2018')\n", 24 | "county_gdp = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/Data_Workbook.xlsx', sheet_name = 'GDP By County 2018')\n", 25 | "city_pop = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/Data_Workbook.xlsx', sheet_name = 'City Population')\n", 26 | "caiso_2016 = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/CAISO Load.xlsx',sheet_name = '2016')\n", 27 | "caiso_2017 = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/CAISO Load.xlsx',sheet_name = '2017')\n", 28 | "caiso_2018 = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/CAISO Load.xlsx',sheet_name = '2018')\n", 29 | "city_wx_data = pd.read_csv('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/all_wx_data.csv')\n", 30 | "\n", 31 | "#select specific columns not all\n", 32 | "city_wx_data = city_wx_data[['City', 'Year', 'Month', 'Day', 'Hour', 'Temperature',\n", 33 | " 'Relative Humidity',\n", 34 | " 'Cloud Type', 'Dew Point', 'Wind Speed']]\n", 35 | "city_wx_data = city_wx_data.drop_duplicates()\n", 36 | "caiso_total = caiso_2016.append([caiso_2017,caiso_2018])\n", 37 | "caiso_total['Date'] = pd.to_datetime(caiso_total['Date'])\n", 38 | "caiso_total['Month'] = caiso_total['Date'].dt.month\n", 39 | "caiso_total['Day'] = caiso_total['Date'].dt.day\n", 40 | "caiso_total['Year'] = caiso_total['Date'].dt.year\n", 41 | "caiso_total['Day_of_week'] = caiso_total['Date'].dt.dayofweek\n", 42 | "caiso_total['Week'] = caiso_total['Date'].dt.week\n", 43 | "caiso_total = caiso_total.rename(columns={\"HE\": \"Hour\"})\n", 44 | "\n", 45 | "#read-in\n", 46 | "city_elec = pd.read_excel('C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/City_Electricity_Data_1.xlsx')\n", 47 | "city_elec_complete = city_elec.dropna()\n", 48 | "city_elec_complete = city_elec_complete.drop_duplicates()\n", 49 | "city_elec_complete['total_elec_mwh'] = city_elec_complete['res_elec_mwh']+city_elec_complete['com_elec_mwh']+city_elec_complete['ind_elec_mwh']\n", 50 | "city_elec_complete.sort_values(ascending = False,by = 'total_elec_mwh').head(10)\n", 51 | "city_elec_complete= city_elec_complete[['City','housing_units', 'total_pop', 'res_elec_mwh', 'com_units',\n", 52 | " 'com_elec_mwh', 'ind_units', 'ind_elec_mwh','total_elec_mwh']]\n", 53 | "#city_elec_complete.sort_values(ascending = False,by = 'com_elec_mwh').head(10)\n", 54 | "#gather top10 commercial,industrial,residential\n", 55 | "top10_commercial = city_elec_complete.sort_values(ascending = False,by = 'com_elec_mwh').head(10)[['City', 'total_pop', 'com_elec_mwh']]\n", 56 | "top10_commercial.columns = ['City', 'Total Population' ,'Commercial MWh Usage']\n", 57 | "top10_industrial = city_elec_complete.sort_values(ascending = False,by = 'ind_elec_mwh').head(10)[['City', 'total_pop', 'ind_elec_mwh']]\n", 58 | "top10_industrial.columns = ['City', 'Total Population' ,'Industrial MWh Usage']\n", 59 | "top10_residential = city_elec_complete.sort_values(ascending = False,by = 'res_elec_mwh').head(10)[['City', 'total_pop', 'res_elec_mwh']]\n", 60 | "top10_residential.columns = ['City', 'Total Population' ,'Residential MWh Usage']\n", 61 | "top10_consumption = city_elec_complete.sort_values(ascending = False,by = 'total_elec_mwh').head(10)[['City', 'total_pop', 'total_elec_mwh']]\n", 62 | "top10_consumption.columns = ['City', 'Total Population' ,'Total MWh Usage'] \n", 63 | "#create percentages\n", 64 | "city_elec_complete['ind_pct'] = city_elec_complete['ind_elec_mwh']/city_elec_complete['total_elec_mwh']\n", 65 | "city_elec_complete['res_pct'] = city_elec_complete['res_elec_mwh']/city_elec_complete['total_elec_mwh']\n", 66 | "city_elec_complete['com_pct'] = city_elec_complete['com_elec_mwh']/city_elec_complete['total_elec_mwh']\n", 67 | "#correlation charts\n", 68 | "correlations_2 = city_elec_complete[['total_pop','res_pct', 'com_pct', 'ind_pct']].corr()\n", 69 | "correlations_1 = city_elec_complete[['total_pop','res_elec_mwh','com_elec_mwh','ind_elec_mwh']].corr()" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 2, 75 | "metadata": {}, 76 | "outputs": [ 77 | { 78 | "name": "stderr", 79 | "output_type": "stream", 80 | "text": [ 81 | "C:\\Users\\zohai\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:144: FutureWarning: The sklearn.cluster.k_means_ module is deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.cluster. Anything that cannot be imported from sklearn.cluster is now part of the private API.\n", 82 | " warnings.warn(message, FutureWarning)\n" 83 | ] 84 | } 85 | ], 86 | "source": [ 87 | "#Time series clustering\n", 88 | "from tslearn.clustering import TimeSeriesKMeans\n", 89 | "import warnings\n", 90 | "warnings.filterwarnings('ignore')\n", 91 | "\n", 92 | "#Scale the data as the data is in different units\n", 93 | "city_wx_cluster = city_wx_data[['City', 'Temperature',\n", 94 | " 'Relative Humidity',\n", 95 | " 'Cloud Type', 'Dew Point', 'Wind Speed']]\n", 96 | "from sklearn.preprocessing import StandardScaler\n", 97 | "scaler = StandardScaler()\n", 98 | "\n", 99 | "req_cols = ['Temperature',\n", 100 | " 'Relative Humidity',\n", 101 | " 'Cloud Type', 'Dew Point', 'Wind Speed']\n", 102 | "\n", 103 | "#scale for clustering\n", 104 | "city_wx_cluster_scaled = scaler.fit_transform(city_wx_cluster[req_cols])\n", 105 | "city_wx_cluster_scaled_df = pd.DataFrame(city_wx_cluster_scaled)\n", 106 | "\n", 107 | "#Add back the city column\n", 108 | "city_wx_cluster_scaled_df['City'] = city_wx_cluster['City']\n", 109 | "\n", 110 | "list_of_cities = list(set(city_wx_cluster.City.values))\n", 111 | "#np.array(city_wx_cluster_scaled_df[city_wx_cluster_scaled_df.City == list_of_cities[0]].iloc[:,0:5])\n", 112 | "wx_cluster = []\n", 113 | "\n", 114 | "for i in range(0,len(list_of_cities)):\n", 115 | " wx_cluster.append(np.array(city_wx_cluster_scaled_df[city_wx_cluster_scaled_df.City == list_of_cities[i]].iloc[:,0:5]))\n", 116 | "\n", 117 | "\n", 118 | "#Assign Labels\n", 119 | "city_wx_cluster = pd.DataFrame(list_of_cities)\n", 120 | "ts_kmeans_optimal = TimeSeriesKMeans(n_clusters = 5, metric=\"euclidean\", max_iter = 3, max_iter_barycenter=3, random_state = 5).fit(wx_cluster)\n", 121 | "wx_cluster_label = list(ts_kmeans_optimal.labels_)\n", 122 | "city_wx_cluster['Weather Cluster'] = wx_cluster_label\n", 123 | "city_wx_cluster.columns = ['City', 'Weather Cluster']\n", 124 | "\n", 125 | "#get all stats\n", 126 | "wx_cluster_0 = city_wx_cluster[city_wx_cluster['Weather Cluster'] == 0].merge(city_elec_complete,on='City')\n", 127 | "wx_cluster_1 = city_wx_cluster[city_wx_cluster['Weather Cluster'] == 1].merge(city_elec_complete,on='City')\n", 128 | "wx_cluster_2 = city_wx_cluster[city_wx_cluster['Weather Cluster'] == 2].merge(city_elec_complete,on='City')\n", 129 | "wx_cluster_3 = city_wx_cluster[city_wx_cluster['Weather Cluster'] == 3].merge(city_elec_complete,on='City')\n", 130 | "wx_cluster_4 = city_wx_cluster[city_wx_cluster['Weather Cluster'] == 4].merge(city_elec_complete,on='City')" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": 3, 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [ 139 | "#create elbow function plot\n", 140 | "def plot_elbow_method(cluster_df):\n", 141 | " wcss = []\n", 142 | " for i in range(1,5):\n", 143 | " kmeans = KMeans(n_clusters = i, init = 'k-means++',max_iter = 300, n_init = 10, random_state = 5)\n", 144 | " kmeans.fit(cluster_df)\n", 145 | " wcss.append(kmeans.inertia_)\n", 146 | " \n", 147 | " plt.plot(range(1,5),wcss)\n", 148 | " plt.title('Optimal K/Elbow method visualization')\n", 149 | " plt.ylabel('Within Cluster Sum-of-Squares')\n", 150 | " plt.xlabel('Number of Clusters/K')\n", 151 | " plt.show()\n", 152 | " \n", 153 | "req_columns = ['res_pct', 'com_pct', 'ind_pct']\n", 154 | "\n", 155 | "#create kmeans labels\n", 156 | "def get_kmeans_labels(cluster_df):\n", 157 | " kmeans = KMeans(n_clusters = 2, init = 'k-means++',max_iter = 300, n_init = 10, random_state = 5).fit(cluster_df)\n", 158 | " labels = list(kmeans.labels_)\n", 159 | " return labels\n", 160 | "\n", 161 | "#create centroid \n", 162 | "def get_closest_to_centroid(cluster_df):\n", 163 | " from sklearn.metrics import pairwise_distances_argmin_min\n", 164 | " kmeans = KMeans(n_clusters = 2, init = 'k-means++',max_iter = 300, n_init = 10, random_state = 5).fit(cluster_df)\n", 165 | " closest, _ = pairwise_distances_argmin_min(kmeans.cluster_centers_, cluster_df)\n", 166 | " return closest\n", 167 | "\n", 168 | "cluster_0_sub = wx_cluster_0[req_columns]\n", 169 | "cluster_1_sub = wx_cluster_1[req_columns]\n", 170 | "cluster_2_sub = wx_cluster_2[req_columns]\n", 171 | "cluster_3_sub = wx_cluster_3[req_columns]\n", 172 | "cluster_4_sub = wx_cluster_4[req_columns]\n", 173 | "\n", 174 | "#scaling for clustering\n", 175 | "from sklearn.preprocessing import StandardScaler\n", 176 | "scaler = StandardScaler()\n", 177 | "\n", 178 | "cluster_0_sub_scaled = scaler.fit_transform(cluster_0_sub)\n", 179 | "cluster_1_sub_scaled = scaler.fit_transform(cluster_1_sub)\n", 180 | "cluster_2_sub_scaled = scaler.fit_transform(cluster_2_sub)\n", 181 | "cluster_3_sub_scaled = scaler.fit_transform(cluster_3_sub)\n", 182 | "cluster_4_sub_scaled = scaler.fit_transform(cluster_4_sub)" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": 5, 188 | "metadata": {}, 189 | "outputs": [], 190 | "source": [ 191 | "wx_cluster_0['Electric Sub-Cluster'] = get_kmeans_labels(wx_cluster_0[req_columns])\n", 192 | "wx_cluster_1['Electric Sub-Cluster'] = get_kmeans_labels(wx_cluster_1[req_columns])\n", 193 | "wx_cluster_2['Electric Sub-Cluster'] = get_kmeans_labels(wx_cluster_2[req_columns])\n", 194 | "wx_cluster_3['Electric Sub-Cluster'] = get_kmeans_labels(wx_cluster_3[req_columns])\n", 195 | "wx_cluster_4['Electric Sub-Cluster'] = get_kmeans_labels(wx_cluster_4[req_columns])\n", 196 | "\n", 197 | "ex_wx_cluster_0 = wx_cluster_0[['City', 'Weather Cluster', 'Electric Sub-Cluster','ind_pct', 'res_pct', 'com_pct', 'total_pop' , 'total_elec_mwh']]\n", 198 | "ex_wx_cluster_1 = wx_cluster_1[['City', 'Weather Cluster', 'Electric Sub-Cluster','ind_pct', 'res_pct', 'com_pct', 'total_pop' , 'total_elec_mwh']]\n", 199 | "ex_wx_cluster_2 = wx_cluster_2[['City', 'Weather Cluster', 'Electric Sub-Cluster','ind_pct', 'res_pct', 'com_pct', 'total_pop' , 'total_elec_mwh']]\n", 200 | "ex_wx_cluster_3 = wx_cluster_3[['City', 'Weather Cluster', 'Electric Sub-Cluster','ind_pct', 'res_pct', 'com_pct', 'total_pop' , 'total_elec_mwh']]\n", 201 | "ex_wx_cluster_4 = wx_cluster_4[['City', 'Weather Cluster', 'Electric Sub-Cluster','ind_pct', 'res_pct', 'com_pct', 'total_pop' , 'total_elec_mwh']]\n", 202 | "\n", 203 | "all_ex_wx_cluster = ex_wx_cluster_0.append([ex_wx_cluster_1, ex_wx_cluster_2, ex_wx_cluster_3,ex_wx_cluster_4])\n", 204 | "#arcgis data\n", 205 | "arcgis_data_all = all_ex_wx_cluster[['City', 'Weather Cluster', 'Electric Sub-Cluster', 'total_pop' , 'total_elec_mwh']]" 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "execution_count": 38, 211 | "metadata": {}, 212 | "outputs": [], 213 | "source": [ 214 | "wx00_max_load = wx_cluster_0[wx_cluster_0['Electric Sub-Cluster'] == 0]['total_elec_mwh'].max()\n", 215 | "wx01_max_load = wx_cluster_0[wx_cluster_0['Electric Sub-Cluster'] == 1]['total_elec_mwh'].max()\n", 216 | "wx10_max_load = wx_cluster_1[wx_cluster_1['Electric Sub-Cluster'] == 0]['total_elec_mwh'].max()\n", 217 | "wx11_max_load = wx_cluster_1[wx_cluster_1['Electric Sub-Cluster'] == 1]['total_elec_mwh'].max()\n", 218 | "wx20_max_load = wx_cluster_2[wx_cluster_2['Electric Sub-Cluster'] == 0]['total_elec_mwh'].max()\n", 219 | "wx21_max_load = wx_cluster_2[wx_cluster_2['Electric Sub-Cluster'] == 1]['total_elec_mwh'].max()\n", 220 | "wx30_max_load = wx_cluster_3[wx_cluster_3['Electric Sub-Cluster'] == 0]['total_elec_mwh'].max()\n", 221 | "wx31_max_load = wx_cluster_3[wx_cluster_3['Electric Sub-Cluster'] == 1]['total_elec_mwh'].max()\n", 222 | "wx40_max_load = wx_cluster_4[wx_cluster_4['Electric Sub-Cluster'] == 0]['total_elec_mwh'].max()\n", 223 | "wx41_max_load = wx_cluster_4[wx_cluster_4['Electric Sub-Cluster'] == 1]['total_elec_mwh'].max()\n", 224 | "\n", 225 | "#Cities List based on max load in each subcluster\n", 226 | "city_1=wx_cluster_0[wx_cluster_0['total_elec_mwh'] == wx00_max_load]['City'].item()\n", 227 | "city_2=wx_cluster_0[wx_cluster_0['total_elec_mwh'] == wx01_max_load]['City'].item()\n", 228 | "city_3=wx_cluster_1[wx_cluster_1['total_elec_mwh'] == wx10_max_load]['City'].item()\n", 229 | "city_4=wx_cluster_1[wx_cluster_1['total_elec_mwh'] == wx11_max_load]['City'].item()\n", 230 | "city_5=wx_cluster_2[wx_cluster_2['total_elec_mwh'] == wx20_max_load]['City'].item()\n", 231 | "city_6=wx_cluster_2[wx_cluster_2['total_elec_mwh'] == wx21_max_load]['City'].item()\n", 232 | "city_7=wx_cluster_3[wx_cluster_3['total_elec_mwh'] == wx30_max_load]['City'].item()\n", 233 | "city_8=wx_cluster_3[wx_cluster_3['total_elec_mwh'] == wx31_max_load]['City'].item()\n", 234 | "city_9=wx_cluster_4[wx_cluster_4['total_elec_mwh'] == wx40_max_load]['City'].item()\n", 235 | "city_10=wx_cluster_4[wx_cluster_4['total_elec_mwh'] == wx41_max_load]['City'].item()\n", 236 | "\n", 237 | "cities_list = ['Petaluma' , 'San Francisco', 'Sacramento', 'San Jose', 'Los Angeles', 'San Diego', 'Roseville', 'Chico', 'Fresno', 'Lemoore']\n", 238 | "cities_list_df = pd.DataFrame(cities_list)\n", 239 | "cities_list_df.columns = ['City']\n" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": 40, 245 | "metadata": {}, 246 | "outputs": [ 247 | { 248 | "name": "stdout", 249 | "output_type": "stream", 250 | "text": [ 251 | "{'max_depth': 7, 'max_features': 50, 'max_leaf_nodes': 192}\n", 252 | "0.9542729942738374\n", 253 | "0.7294860967589885\n" 254 | ] 255 | } 256 | ], 257 | "source": [ 258 | "# tuned tree\n", 259 | "from sklearn.model_selection import RandomizedSearchCV\n", 260 | "from scipy.stats import randint\n", 261 | "\n", 262 | "parameters = {'max_leaf_nodes': randint(3, 200),\n", 263 | " 'max_features': randint(2, 76),\n", 264 | " 'max_depth': randint(1, 10)}\n", 265 | "rnd_params = RandomizedSearchCV(tree, param_distributions = parameters, cv = 10, n_iter = 200)\n", 266 | "rnd_params.fit(final_data_X_train, final_data_Y_train)\n", 267 | "\n", 268 | "best_parameters = rnd_params.best_params_\n", 269 | "print(best_parameters)\n", 270 | "\n", 271 | "tree.set_params(max_features=best_parameters['max_features'], max_leaf_nodes=best_parameters['max_leaf_nodes'])\n", 272 | "tree.fit(final_data_X_train, final_data_Y_train)\n", 273 | "\n", 274 | "tuned_train_score = tree.score(final_data_X_train, final_data_Y_train)\n", 275 | "tuned_test_score = tree.score(final_data_X_test, final_data_Y_test)\n", 276 | "y_pred_tuned_tree = tree.predict(final_data_X_test)\n", 277 | "\n", 278 | "from sklearn.model_selection import RandomizedSearchCV\n", 279 | "from scipy.stats import randint\n", 280 | "from sklearn.ensemble import RandomForestRegressor\n", 281 | "\n", 282 | "rf_tree = RandomForestRegressor()\n", 283 | "rf_tree.fit(final_data_X_train, final_data_Y_train)\n", 284 | "\n", 285 | "param_dist = {'n_estimators': randint(10, 100),\n", 286 | " 'max_leaf_nodes': randint(3, 100),\n", 287 | " 'max_features': [\"auto\"],\n", 288 | " 'max_depth': randint(1, 10),\n", 289 | " 'min_samples_leaf': randint(1, 30),\n", 290 | " 'min_samples_split': randint(2, 20)}\n", 291 | "\n", 292 | "rnd_search_rf = RandomizedSearchCV(rf_tree, param_distributions=param_dist, \n", 293 | " cv=10, n_iter=50)\n", 294 | "rnd_search_rf.fit(final_data_X_train, final_data_Y_train)\n", 295 | "\n", 296 | "rf_tree.set_params(n_estimators=rnd_search_rf.best_params_['n_estimators'], \n", 297 | " max_leaf_nodes=rnd_search_rf.best_params_['max_leaf_nodes'], \n", 298 | " max_features = rnd_search_rf.best_params_['max_features'],\n", 299 | " max_depth = rnd_search_rf.best_params_['max_depth'],\n", 300 | " min_samples_leaf = rnd_search_rf.best_params_['min_samples_leaf'],\n", 301 | " min_samples_split = rnd_search_rf.best_params_['min_samples_split'])\n", 302 | "\n", 303 | "\n", 304 | "#Tuned SVR\n", 305 | "from sklearn.model_selection import GridSearchCV \n", 306 | "from sklearn.svm import SVR\n", 307 | "svr_regressor = SVR()\n", 308 | "svr_regressor.fit(StandardScaler().fit_transform(final_data_X_train), final_data_Y_train) \n", 309 | "param_grid = {'C': [0.1, 1, 10, 100, 1000], \n", 310 | " 'gamma': [1, 0.1, 0.01, 0.001, 0.0001], \n", 311 | " 'kernel': ['linear','rbf']} \n", 312 | " \n", 313 | "svr_regressor_1 = RandomizedSearchCV(SVR(), param_distributions = param_grid) \n", 314 | " \n", 315 | "# fitting the model for grid search \n", 316 | "svr_regressor_1.fit(StandardScaler().fit_transform(final_data_X_train), final_data_Y_train) \n", 317 | "y_pred_svr = svr_regressor_1.predict(StandardScaler().fit_transform(final_data_X_test))" 318 | ] 319 | }, 320 | { 321 | "cell_type": "code", 322 | "execution_count": 43, 323 | "metadata": {}, 324 | "outputs": [ 325 | { 326 | "name": "stdout", 327 | "output_type": "stream", 328 | "text": [ 329 | "[744, 672, 744, 720, 744, 720, 744, 744, 720, 744, 720, 720]\n" 330 | ] 331 | } 332 | ], 333 | "source": [ 334 | "results_df = final_data[final_data.Year == 2018]\n", 335 | "results_df = results_df[['Day', 'Month','Hour', 'Year', 'CAISO Total']]\n", 336 | "results_df['RF_Tuned_Prediction'] = rf_tree.predict(final_data_X_test)\n", 337 | "results_df['SVR_Prediction'] = y_pred_svr\n", 338 | "results_df['DTree_Tuned_Prediction'] = y_pred_tuned_tree\n", 339 | "\n", 340 | "results_df['Hourly_MAPE_RF_Tuned'] = abs((results_df['CAISO Total'] - results_df['RF_Tuned_Prediction'])/results_df['CAISO Total'])*100\n", 341 | "results_df['Hourly_MAPE_SVR'] = abs((results_df['CAISO Total'] - results_df['SVR_Prediction'])/results_df['CAISO Total'])*100\n", 342 | "results_df['Hourly_MAPE_DTree_Tuned'] = abs((results_df['CAISO Total'] - results_df['DTree_Tuned_Prediction'])/results_df['CAISO Total'])*100\n", 343 | "results_df\n", 344 | "\n", 345 | "#mape functions\n", 346 | "\n", 347 | "def get_month_count(df):\n", 348 | " month = [0]*12 \n", 349 | " for i in range(0, len(df)):\n", 350 | " if df['Month'].iloc[i] == 1:\n", 351 | " month[0] += 1\n", 352 | " elif df['Month'].iloc[i] == 2:\n", 353 | " month[1] += 1\n", 354 | " elif df['Month'].iloc[i] == 3:\n", 355 | " month[2] += 1\n", 356 | " elif df['Month'].iloc[i] == 4:\n", 357 | " month[3] += 1\n", 358 | " elif df['Month'].iloc[i] == 5:\n", 359 | " month[4] += 1\n", 360 | " elif df['Month'].iloc[i] == 6:\n", 361 | " month[5] += 1\n", 362 | " elif df['Month'].iloc[i] == 7:\n", 363 | " month[6] += 1\n", 364 | " elif df['Month'].iloc[i] == 8:\n", 365 | " month[7] += 1\n", 366 | " elif df['Month'].iloc[i] == 9:\n", 367 | " month[8] += 1\n", 368 | " elif df['Month'].iloc[i] == 10:\n", 369 | " month[9] += 1\n", 370 | " elif df['Month'].iloc[i] == 11:\n", 371 | " month[10] += 1\n", 372 | " elif df['Month'].iloc[i] == 12:\n", 373 | " month[11] += 1\n", 374 | " return month\n", 375 | "\n", 376 | "d = get_month_count(results_df)\n", 377 | "print(d)\n", 378 | "\n", 379 | "def get_mape_by_month(df, column_name):\n", 380 | "\n", 381 | " final = df.pivot_table(column_name, index = 'Month', aggfunc='sum')\n", 382 | " return final \n", 383 | "\n", 384 | "import pandas as pd \n", 385 | "\n", 386 | "def get_mape_by_month(df, column_name):\n", 387 | " final = df.pivot_table(column_name, index = 'Month', aggfunc='sum')\n", 388 | " return final \n", 389 | "\n", 390 | "def mean(dataframe, d):\n", 391 | " for i in range(0, len(dataframe)):\n", 392 | " dataframe.iloc[i] = dataframe.iloc[i] / d[i]\n", 393 | " \n", 394 | " return dataframe\n", 395 | "\n", 396 | "\n", 397 | "def create_mape_table(df, d):\n", 398 | " final_frame = pd.DataFrame()\n", 399 | " columns = list(df.columns[8:len(df.columns)])\n", 400 | " for i, val in enumerate(columns): \n", 401 | " temp = get_mape_by_month(df,val)\n", 402 | " temp_frame = mean(temp, d)\n", 403 | " final_frame = pd.concat([final_frame, temp_frame], axis = 1)\n", 404 | " return final_frame \n", 405 | "\n", 406 | "final_frame = create_mape_table(results_df, d)\n", 407 | "final_frame = final_frame.reset_index(drop = True)" 408 | ] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "execution_count": 46, 413 | "metadata": {}, 414 | "outputs": [ 415 | { 416 | "data": { 417 | "text/html": [ 418 | "
\n", 419 | "\n", 432 | "\n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | "
FeatureImportance
0fresno_relative_humidity0.373411
1Hour0.255585
2lemoore_temperature0.111071
3fresno_temperature0.063811
4Day_of_week0.059408
5lemoore_relative_humidity0.021034
6chico_relative_humidity0.015598
7Week0.012467
8Day0.011358
9chico_temperature0.006728
10san_diego_dew_point0.005414
11san_diego_temperature0.005129
12los_angeles_temperature0.003860
13roseville_relative_humidity0.003626
14Month0.003414
15los_angeles_wind_speed0.003391
16sacramento_relative_humidity0.003040
17chico_wind_speed0.002434
18san_diego_wind_speed0.002428
19fresno_wind_speed0.002338
20los_angeles_dew_point0.002248
21roseville_temperature0.002050
22san_diego_relative_humidity0.001976
23san_jose_wind_speed0.001913
24los_angeles_relative_humidity0.001855
25lemoore_wind_speed0.001718
26sacramento_temperature0.001360
27petaluma_relative_humidity0.001332
28san_jose_relative_humidity0.001241
29petaluma_dew_point0.001182
30san_francisco_relative_humidity0.001125
31san_francisco_wind_speed0.001094
32lemoore_dew_point0.001045
33chico_dew_point0.001042
34petaluma_wind_speed0.001038
35roseville_dew_point0.001030
36sacramento_wind_speed0.000986
37san_jose_dew_point0.000977
38fresno_dew_point0.000958
39sacramento_dew_point0.000957
40roseville_wind_speed0.000861
41san_jose_temperature0.000822
42san_francisco_dew_point0.000719
43san_francisco_temperature0.000588
44petaluma_temperature0.000514
45los_angeles_cloud_type0.000450
46san_francisco_cloud_type0.000431
47chico_cloud_type0.000417
48sacramento_cloud_type0.000407
49san_diego_cloud_type0.000395
50roseville_cloud_type0.000379
51petaluma_cloud_type0.000360
52san_jose_cloud_type0.000345
53lemoore_cloud_type0.000324
54fresno_cloud_type0.000314
55Year0.000005
\n", 723 | "
" 724 | ], 725 | "text/plain": [ 726 | " Feature Importance\n", 727 | "0 fresno_relative_humidity 0.373411\n", 728 | "1 Hour 0.255585\n", 729 | "2 lemoore_temperature 0.111071\n", 730 | "3 fresno_temperature 0.063811\n", 731 | "4 Day_of_week 0.059408\n", 732 | "5 lemoore_relative_humidity 0.021034\n", 733 | "6 chico_relative_humidity 0.015598\n", 734 | "7 Week 0.012467\n", 735 | "8 Day 0.011358\n", 736 | "9 chico_temperature 0.006728\n", 737 | "10 san_diego_dew_point 0.005414\n", 738 | "11 san_diego_temperature 0.005129\n", 739 | "12 los_angeles_temperature 0.003860\n", 740 | "13 roseville_relative_humidity 0.003626\n", 741 | "14 Month 0.003414\n", 742 | "15 los_angeles_wind_speed 0.003391\n", 743 | "16 sacramento_relative_humidity 0.003040\n", 744 | "17 chico_wind_speed 0.002434\n", 745 | "18 san_diego_wind_speed 0.002428\n", 746 | "19 fresno_wind_speed 0.002338\n", 747 | "20 los_angeles_dew_point 0.002248\n", 748 | "21 roseville_temperature 0.002050\n", 749 | "22 san_diego_relative_humidity 0.001976\n", 750 | "23 san_jose_wind_speed 0.001913\n", 751 | "24 los_angeles_relative_humidity 0.001855\n", 752 | "25 lemoore_wind_speed 0.001718\n", 753 | "26 sacramento_temperature 0.001360\n", 754 | "27 petaluma_relative_humidity 0.001332\n", 755 | "28 san_jose_relative_humidity 0.001241\n", 756 | "29 petaluma_dew_point 0.001182\n", 757 | "30 san_francisco_relative_humidity 0.001125\n", 758 | "31 san_francisco_wind_speed 0.001094\n", 759 | "32 lemoore_dew_point 0.001045\n", 760 | "33 chico_dew_point 0.001042\n", 761 | "34 petaluma_wind_speed 0.001038\n", 762 | "35 roseville_dew_point 0.001030\n", 763 | "36 sacramento_wind_speed 0.000986\n", 764 | "37 san_jose_dew_point 0.000977\n", 765 | "38 fresno_dew_point 0.000958\n", 766 | "39 sacramento_dew_point 0.000957\n", 767 | "40 roseville_wind_speed 0.000861\n", 768 | "41 san_jose_temperature 0.000822\n", 769 | "42 san_francisco_dew_point 0.000719\n", 770 | "43 san_francisco_temperature 0.000588\n", 771 | "44 petaluma_temperature 0.000514\n", 772 | "45 los_angeles_cloud_type 0.000450\n", 773 | "46 san_francisco_cloud_type 0.000431\n", 774 | "47 chico_cloud_type 0.000417\n", 775 | "48 sacramento_cloud_type 0.000407\n", 776 | "49 san_diego_cloud_type 0.000395\n", 777 | "50 roseville_cloud_type 0.000379\n", 778 | "51 petaluma_cloud_type 0.000360\n", 779 | "52 san_jose_cloud_type 0.000345\n", 780 | "53 lemoore_cloud_type 0.000324\n", 781 | "54 fresno_cloud_type 0.000314\n", 782 | "55 Year 0.000005" 783 | ] 784 | }, 785 | "execution_count": 46, 786 | "metadata": {}, 787 | "output_type": "execute_result" 788 | } 789 | ], 790 | "source": [ 791 | "# Random Forest tree importances\n", 792 | "pd.DataFrame({'Feature':final_data_X_train.columns, 'Importance': rf_tree.feature_importances_}).sort_values(by = 'Importance', ascending = False).reset_index(drop=True)" 793 | ] 794 | }, 795 | { 796 | "cell_type": "code", 797 | "execution_count": 47, 798 | "metadata": {}, 799 | "outputs": [ 800 | { 801 | "data": { 802 | "text/html": [ 803 | "
\n", 804 | "\n", 817 | "\n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | " \n", 1080 | " \n", 1081 | " \n", 1082 | " \n", 1083 | " \n", 1084 | " \n", 1085 | " \n", 1086 | " \n", 1087 | " \n", 1088 | " \n", 1089 | " \n", 1090 | " \n", 1091 | " \n", 1092 | " \n", 1093 | " \n", 1094 | " \n", 1095 | " \n", 1096 | " \n", 1097 | " \n", 1098 | " \n", 1099 | " \n", 1100 | " \n", 1101 | " \n", 1102 | " \n", 1103 | " \n", 1104 | " \n", 1105 | " \n", 1106 | " \n", 1107 | "
FeatureImportance
0fresno_relative_humidity0.481964
1Hour0.267807
2Day_of_week0.062052
3fresno_temperature0.055203
4lemoore_temperature0.050826
5lemoore_relative_humidity0.017357
6Day0.011032
7Week0.007940
8san_diego_dew_point0.007538
9los_angeles_temperature0.004585
10chico_relative_humidity0.003697
11san_diego_temperature0.003477
12san_jose_wind_speed0.003111
13chico_temperature0.002460
14Month0.002422
15sacramento_relative_humidity0.002137
16san_diego_wind_speed0.002021
17los_angeles_dew_point0.001585
18chico_wind_speed0.001463
19roseville_relative_humidity0.001314
20roseville_temperature0.001256
21los_angeles_wind_speed0.000866
22roseville_dew_point0.000857
23lemoore_wind_speed0.000835
24los_angeles_relative_humidity0.000792
25san_francisco_dew_point0.000719
26san_jose_dew_point0.000712
27petaluma_wind_speed0.000608
28petaluma_temperature0.000580
29san_diego_relative_humidity0.000421
30lemoore_dew_point0.000414
31san_jose_cloud_type0.000412
32san_jose_temperature0.000279
33san_francisco_relative_humidity0.000256
34chico_dew_point0.000240
35sacramento_dew_point0.000231
36petaluma_relative_humidity0.000183
37san_jose_relative_humidity0.000178
38roseville_cloud_type0.000172
39fresno_wind_speed0.000000
40petaluma_cloud_type0.000000
41petaluma_dew_point0.000000
42fresno_dew_point0.000000
43lemoore_cloud_type0.000000
44fresno_cloud_type0.000000
45san_francisco_cloud_type0.000000
46san_francisco_temperature0.000000
47chico_cloud_type0.000000
48roseville_wind_speed0.000000
49san_francisco_wind_speed0.000000
50sacramento_temperature0.000000
51sacramento_cloud_type0.000000
52san_diego_cloud_type0.000000
53sacramento_wind_speed0.000000
54los_angeles_cloud_type0.000000
55Year0.000000
\n", 1108 | "
" 1109 | ], 1110 | "text/plain": [ 1111 | " Feature Importance\n", 1112 | "0 fresno_relative_humidity 0.481964\n", 1113 | "1 Hour 0.267807\n", 1114 | "2 Day_of_week 0.062052\n", 1115 | "3 fresno_temperature 0.055203\n", 1116 | "4 lemoore_temperature 0.050826\n", 1117 | "5 lemoore_relative_humidity 0.017357\n", 1118 | "6 Day 0.011032\n", 1119 | "7 Week 0.007940\n", 1120 | "8 san_diego_dew_point 0.007538\n", 1121 | "9 los_angeles_temperature 0.004585\n", 1122 | "10 chico_relative_humidity 0.003697\n", 1123 | "11 san_diego_temperature 0.003477\n", 1124 | "12 san_jose_wind_speed 0.003111\n", 1125 | "13 chico_temperature 0.002460\n", 1126 | "14 Month 0.002422\n", 1127 | "15 sacramento_relative_humidity 0.002137\n", 1128 | "16 san_diego_wind_speed 0.002021\n", 1129 | "17 los_angeles_dew_point 0.001585\n", 1130 | "18 chico_wind_speed 0.001463\n", 1131 | "19 roseville_relative_humidity 0.001314\n", 1132 | "20 roseville_temperature 0.001256\n", 1133 | "21 los_angeles_wind_speed 0.000866\n", 1134 | "22 roseville_dew_point 0.000857\n", 1135 | "23 lemoore_wind_speed 0.000835\n", 1136 | "24 los_angeles_relative_humidity 0.000792\n", 1137 | "25 san_francisco_dew_point 0.000719\n", 1138 | "26 san_jose_dew_point 0.000712\n", 1139 | "27 petaluma_wind_speed 0.000608\n", 1140 | "28 petaluma_temperature 0.000580\n", 1141 | "29 san_diego_relative_humidity 0.000421\n", 1142 | "30 lemoore_dew_point 0.000414\n", 1143 | "31 san_jose_cloud_type 0.000412\n", 1144 | "32 san_jose_temperature 0.000279\n", 1145 | "33 san_francisco_relative_humidity 0.000256\n", 1146 | "34 chico_dew_point 0.000240\n", 1147 | "35 sacramento_dew_point 0.000231\n", 1148 | "36 petaluma_relative_humidity 0.000183\n", 1149 | "37 san_jose_relative_humidity 0.000178\n", 1150 | "38 roseville_cloud_type 0.000172\n", 1151 | "39 fresno_wind_speed 0.000000\n", 1152 | "40 petaluma_cloud_type 0.000000\n", 1153 | "41 petaluma_dew_point 0.000000\n", 1154 | "42 fresno_dew_point 0.000000\n", 1155 | "43 lemoore_cloud_type 0.000000\n", 1156 | "44 fresno_cloud_type 0.000000\n", 1157 | "45 san_francisco_cloud_type 0.000000\n", 1158 | "46 san_francisco_temperature 0.000000\n", 1159 | "47 chico_cloud_type 0.000000\n", 1160 | "48 roseville_wind_speed 0.000000\n", 1161 | "49 san_francisco_wind_speed 0.000000\n", 1162 | "50 sacramento_temperature 0.000000\n", 1163 | "51 sacramento_cloud_type 0.000000\n", 1164 | "52 san_diego_cloud_type 0.000000\n", 1165 | "53 sacramento_wind_speed 0.000000\n", 1166 | "54 los_angeles_cloud_type 0.000000\n", 1167 | "55 Year 0.000000" 1168 | ] 1169 | }, 1170 | "execution_count": 47, 1171 | "metadata": {}, 1172 | "output_type": "execute_result" 1173 | } 1174 | ], 1175 | "source": [ 1176 | "#Decision tree importances\n", 1177 | "pd.DataFrame({'Feature':final_data_X_train.columns, 'Importance': tree.feature_importances_}).sort_values(by = 'Importance', ascending = False).reset_index(drop=True)" 1178 | ] 1179 | }, 1180 | { 1181 | "cell_type": "code", 1182 | "execution_count": 64, 1183 | "metadata": {}, 1184 | "outputs": [ 1185 | { 1186 | "data": { 1187 | "image/png": "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\n", 1188 | "text/plain": [ 1189 | "
" 1190 | ] 1191 | }, 1192 | "metadata": { 1193 | "needs_background": "light" 1194 | }, 1195 | "output_type": "display_data" 1196 | } 1197 | ], 1198 | "source": [ 1199 | "#Decision tree importances\n", 1200 | "feature_importance = tree.feature_importances_\n", 1201 | "mod_cols_x = [sub.replace('_', ' ') for sub in final_data_X_train.columns]\n", 1202 | "\n", 1203 | "gb_feat = pd.DataFrame({'feature':mod_cols_x, 'importance':feature_importance})\n", 1204 | "gb_feat = gb_feat.sort_values(by='importance', ascending=False).head(20)\n", 1205 | "\n", 1206 | "plt.figure(figsize=(8, 7.5))\n", 1207 | "plt.barh(width=gb_feat.importance, y=gb_feat.feature);" 1208 | ] 1209 | }, 1210 | { 1211 | "cell_type": "code", 1212 | "execution_count": 21, 1213 | "metadata": {}, 1214 | "outputs": [ 1215 | { 1216 | "data": { 1217 | "text/plain": [ 1218 | "array([ 5, 3, 4, 54, 10, 9, 55, 2, 45, 24, 29, 19, 43, 1, 8, 32, 13,\n", 1219 | " 38, 44, 40, 14, 22, 30, 17, 25, 42, 50, 18, 35, 33, 48, 23, 28, 39,\n", 1220 | " 12, 7, 47, 52, 20, 15, 27, 37, 49, 34, 46, 11, 53, 36, 21, 16, 6,\n", 1221 | " 51, 41, 31, 26, 0], dtype=int64)" 1222 | ] 1223 | }, 1224 | "execution_count": 21, 1225 | "metadata": {}, 1226 | "output_type": "execute_result" 1227 | } 1228 | ], 1229 | "source": [ 1230 | "#Random forest importances\n", 1231 | "\n", 1232 | "importances = rf_tree.feature_importances_\n", 1233 | "std = np.std([tree.feature_importances_ for tree in rf_tree.estimators_],\n", 1234 | " axis=0)\n", 1235 | "indices = np.argsort(importances)[::-1]\n", 1236 | "\n", 1237 | "indices\n", 1238 | "\n", 1239 | "#Print the feature ranking\n", 1240 | "print(\"Feature ranking:\")\n", 1241 | "\n", 1242 | "for f in range(0,11):\n", 1243 | " print(\"%d. %s (%f)\" % (f, final_data_X_train.columns[indices[f]], importances[indices[f]]))\n", 1244 | "\n", 1245 | "# Plot the feature importances of the forest\n", 1246 | "plt.figure()\n", 1247 | "plt.title(\"Feature importances\")\n", 1248 | "plt.bar(range(0,11), importances[indices],\n", 1249 | " color=\"r\", yerr=std[indices], align=\"center\")\n", 1250 | "plt.show()" 1251 | ] 1252 | }, 1253 | { 1254 | "cell_type": "code", 1255 | "execution_count": 52, 1256 | "metadata": {}, 1257 | "outputs": [], 1258 | "source": [ 1259 | "gb_feat = gb_feat.sort_values(by='importance', ascending= False).head(20)" 1260 | ] 1261 | }, 1262 | { 1263 | "cell_type": "code", 1264 | "execution_count": 53, 1265 | "metadata": {}, 1266 | "outputs": [ 1267 | { 1268 | "data": { 1269 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmsAAAG3CAYAAADrWBItAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeZRdVZ33//eHgCEMBpHhF/GRIEbGhEAqUaYwigO0gEaDBgT0AUEbxH6gxR8OoCLQ0C0iCgTEMInIEERimyCSgSlJJYRUQMUWYttgN/CIkRBBSD7PH2eXXCr33qoCkrpJfV5rZd1z99nD95xiLb5r733ukW0iIiIiojWt09cBRERERERjSdYiIiIiWliStYiIiIgWlmQtIiIiooUlWYuIiIhoYUnWIiIiIlrYun0dQEQ9m222mYcOHdrXYURERKwW8+bNe9r25vXOJVmLljR06FDa29v7OoyIiIjVQtLvG53LMmhEREREC0uyFhEREdHCkqxFREREtLAkaxEREREtLMlaRERERAtLshYRERHRwpKsRURERLSwJGsRERERLSzJWkREREQLS7IWERER0cKSrEVERES0sCRrERERES0syVpEREREC0uyFhEREdHCkqxFREREtLAkaxEREREtLMlaRERERAtLshYtqePxJQw9fUpfhxEREdHnkqxFREREtLAkaxEREREtLMlaRERERAvr98mapJMl/UrSdX0dS3ckfVDS6b1sM0nSuFUVU29IOlPSqX0dR0RExJpk3b4OoAV8Bni/7cc6CySta/ulPoypLtu3Abf1dRwRERGx+vTrmTVJlwJvB26TtETSREnTgKslDZB0vqS5khZK+nRpM0TSTEkLJC2StHcpXyrpbEkPSrpf0palfGtJd5Y+7pT0tgaxDJD0qCqbSFohaWw5N0vSOyQdI+niUjZJ0kWS7i3txpVySbpY0sOSpgBbdHMPzi11F0q6oKbvS8u4j0g6pCbGle5JOXdaTflZNeVnSPqNpF8A272qP1REREQ/1q+TNdsnAE8A+wHfAkYBh9r+OPApYInt0cBo4DhJ2wAfB6baHgnsAiwo3W0I3G97F2AmcFwpvxi42vYI4DrgogaxLAceAXYE9gLmAXtLGgi81fZ/1Gk2pNQ9BDi3lB1OlRQNLzHs0ej6JW1a6u9U4vtGzemhwD7AwcClktZvdE8kHQQMA8YAI4FRksZKGgUcAewKfKi0aUjS8ZLaJbUvX7akWdWIiIh+I8ugr3Sb7b+W44OAETX7vQZTJSRzgSslrQfcarszWfsbcHs5nge8pxzvTpWoAFwD/EuT8WcBY4FtgHOokq0ZZcx6brW9Ani4cyavtL++JH9PSPplk/H+AjwPXFFm4W6vOffj0vdvJT0KbE/je3JQ+fdAKd+olG8MTLa9DEBS0yVc2xOBiQADhwxzs7oRERH9Rb+eWavjuZpjASfZHln+bWN7mu2ZVAnR48A1kj5R6r9ouzPBWE7jRLhZEjIL2JtqhupnwCbAvlQzdfW80CXenozxcqVqX94Y4GbgMODnTfowDe5JKT+npvwdtr/fm1giIiKiviRrjU0FTiwzaEh6p6QNJW0NPGn7cuD7wG7d9HMv1VIgwATg7iZ1Z1MtW66w/TzVEuunqZK4npoJHFH2lw2hWuKtS9JGwGDbPwNOoVrC7PQRSetI2pZqX99vaHBPSvknS39I2krSFiWWwyUNkrQx8A+9uI6IiIggy6DNXEG1b2u+JAFPUc0+7QucJulFYCnwiUYdFCdTLZueVvo4tlFF2y9I+gNwfymaBXwM6OhF3JOB/UubR6iWURvZGPhJ2Y8m4PM1535T2m4JnGD7eUl174ntaZJ2AO6rilkKHGl7vqQbqJLO39O7pDMiIiIAvbxyF1GRNAm43fZNfRXDwCHDPOToC1l87sF9FUJERMRqI2me7bZ657IMGhEREdHCsgzaBySdAXykS/GNts9ehWNOpnrKtNYXbE/tWtf2MasqjoiIiOidLINGS2pra3N7e3tfhxEREbFaZBk0IiIiYg2VZC0iIiKihSVZi5bU8fgShp4+pa/DiIiI6HNJ1iIiIiJaWJK1iIiIiBaWZC0iIiKihSVZi4iIiGhhSdaakDRdUls5/pmkTVogpg9KOr2XbSZJGreqYuoNSWdKOrWv44iIiFhT5A0GPWT7A30dA4Dt24Db+jqOiIiIWD3WyJk1SRtKmiLpQUmLJI2X9BVJc8v3iZJU6k6XdJ6kOZIekbR3k34HSfqRpIWSbgAG1ZxbLGmzcnxk6W+BpMskDSjlnypjTJd0uaSLS/nWku4s/d4p6W0Nxh8g6VFVNpG0QtLYcm6WpHdIOqam30mSLpJ0b2k3rpRL0sWSHpY0Bdiim/t5bqm7UNIFNX1fWsZ9RNIhNTGeX+71QkmfrunntJrys2rKz5D0G0m/ALZrFktERES80hqZrAHvA56wvYvtnYGfAxfbHl2+DwIOqam/ru0xwCnAV5v0eyKwzPYI4GxgVNcKknYAxgN72h4JLAcmSHoL8GXg3cB7gO1rml0MXF36vQ64qN7gtpcDjwA7AnsB84C9JQ0E3mr7P+o0G1LqHgKcW8oOp0qKhgPHAXs0umBJm5b6O5X4vlFzeiiwD3AwcKmk9YFPAUtsjwZGA8dJ2kbSQcAwYAwwEhglaaykUcARwK7Ah0qbRrEcL6ldUvvyZUsaVYuIiOhX1tRkrQM4sMyY7W17CbCfpNmSOoD9gZ1q6t9SPudRJSCNjAWuBbC9EFhYp84BVEncXEkLyve3UyUpM2z/yfaLwI01bXYHfliOr6FKrhqZVeIYC5xT6o4G5jaof6vtFbYfBrasuY7rbS+3/QTwyybj/QV4HrhC0oeAZTXnflz6/i3wKFUCehDwiXLts4E3UyVpB5V/DwDzS91hwN7AZNvLbP+FJku4tifabrPdNmCDwU1CjoiI6D/WyGTN9iNUCVMHcI6krwDfA8bZHg5cDqxf0+SF8rmc7vfpdfdmewFX2R5Z/m1n+8xS3uNLaHJuFlWCMwb4GbAJsC8ws0H9F2qOa2Po7jqqSvZLZaybgcOoZikb9eEyxkk117+N7Wml/Jya8nfY/n5vYomIiIiVrZHJWllyXGb7WuACYLdy6mlJGwGv9snHmcCEMsbOwIg6de4ExknaotTbVNLWwBxgH0lvkrQu8OGaNvdSLQVS+r+7SQyzqZYtV9h+HlgAfJoqievNdRxR9pcNAfZrVLHcr8G2f0a1TDyy5vRHJK0jaVuq2cPfAFOBEyWtV9q/U9KGpfyTpT8kbVXu0Uzg8LIfcGPgH3pxHREREf3emvo06HDgfEkrgBep9podRjXTtpjGS4bduQT4gaSFVEnSnK4VbD8s6UvANEnrlPE/a/t+Sd+kSraeAB4GOjdenQxcKek04Cng2EYB2H5B0h+A+0vRLOBj5dp6ajLVUnAH1R64GU3qbgz8pOxHE/D5mnO/KW23BE6w/bykK6iWkueXhzieAg6zPa3s57uvPNuxFDjS9vzysMYC4Pf0LumMiIjo92Rnher1Imkj20vLzNpk4Erbk/s6rldD0iTgdts39cX4A4cM85CjL2TxuQf3xfARERGrlaR5ttvqnVsjl0Fb2Jll4/0i4DHg1j6OJyIiItZw/XJmTdJ7gfO6FD9m+/DVGMMZwEe6FN9o++xVOOZkYJsuxV+wPXVVjflqtbW1ub29va/DiIiIWC2azaz1y2QtWl+StYiI6E+yDBoRERGxhkqyFhEREdHCkqxFS+p4fAlDT5/S12FERET0uSRrERERES0syVpEREREC0uyFhEREdHCkqxFREREtLAkaz0kaZKklV4QL+ktklbbK5kkfU3Sgb1ss1jSZqsqpt6QNF1S3d+RiYiIiJWtqS9ybxm2nwBWSuJW4XhfWV1jRURERN/LzFoDkj4haaGkByVdU4rHSrpX0qOds2yShkpaVI4HSLpAUkdpe1IpP0DSA6X8SkkDG4w5RtIt5fhQSX+V9AZJ60t6tJRPqhl7saSzJM0vfW9fyt8saVoZ8zJATa5zQ0lTynUukjS+pu/zJM0p/95RyjeXdLOkueXfnjX9XFnKHpB0aCkfJOlH5X7cAAx6TX+YiIiIfibJWh2SdgLOAPa3vQvwuXJqCLAXcAhwbp2mx1O9e3NX2yOA6yStD0wCxtseTjWbeWKDoecDu5bjvaleCD8aeBcwu0Gbp23vBlwCnFrKvgrcbXtX4DbgbU0u933AE7Z3sb0z8POac3+xPQa4GLiwlH0b+Jbt0cCHgStK+RnAL0v5fsD5kjYs17qs3I+zgVGNApF0vKR2Se3Lly1pEnJERET/kWStvv2Bm2w/DWD7T6X8VtsrbD8MbFmn3YHApbZfqmm3HdVL4h8pda4CxtYbtLT7D0k7AGOAfyt19wZmNYj1lvI5DxhajscC15Y+pwDPNLnWDuDAMou2t+3aLOn6ms/da67xYkkLqBLBN0raGDgIOL2UTwfWp0oSa2NZCCxsFIjtibbbbLcN2GBwk5AjIiL6j+xZq09AvTfcv9ClTk/aNVyCbGAW8H7gReAXVLNyA3h51qxRTMt55d+zXvwrsf2IpFHAB4BzJE2z/bU6fXQerwPsbvuvtf1IEvBh27/pUt7jWCIiImJlmVmr707go5LeDCBp0x62mwacIGndmna/BoZ27vkCjgJmNOljJnAKcJ/tp4A3A9sDD/Ui/pnAhBLD+4E3Naoo6S1Uy5TXAhcAu9WcHl/zeV85ngb8Y037keVwKnBSSdqQ1LmcWxvLzsCIXlxHREREv5eZtTpsPyTpbGCGpOXAAz1segXwTmChpBeBy21fLOlY4MaSxM0FLm3Sx2yqJdaZ5ftC4EnbvZmdOgu4XtJ8qsTwP5vUHU61v2wF1Wxe7X66gZJmUyX1HytlJwPflbSQ6r+fmcAJwNep9rUtLAnbYqq9fZcAPyj1FwBzenEdERER/Z56lwNEfyFpMdDWuW9vdRs4ZJiHHH0hi889uC+Gj4iIWK0kzbNd93dIswwaERER0cKyDNpHJE2m+pmPWl+wPXUVjfdmqr14XR1g+/92LbQ9dFXE0VPDtxpMe2bVIiIikqz1FduHr+bx/i8wstuKERER0VKyDBoRERHRwpKsRURERLSwJGvRkjoeX8LQ06cw9PQpfR1KREREn0qyFhEREdHCkqxFREREtLAkaxEREREtrF8ka5JOkbTBKh5jkqRx3dQ5pryLs/P7FZJ2fB1jWPp69dWl3xMkfaJO+VBJi8pxm6SLyvG+kvZYFbFERET0N6v1d9YkDbC9fHWOWZwCXAssey2dvA7xHwMsAp4AsP2/X0s8q4vtZu8y7azTDrSXr/sCS4F7V2FYERER/UK3M2uSNpQ0RdKDkhZJGi/pK5Lmlu8Ty4u7kfQOSb8odedL2rbMstwl6YdAR6l3q6R5kh6SdHzNWEslnVfO/ULSGEnTJT0q6YOlzgBJ55fxF0r6dCnft9S9SdKvJV2nysnAW4C7JN1V6n5MUkeJ/7xurn+ppK+VF5rvLmmUpBklxqmShtRps9L9KbNubcB1khZIGlTibZN0oqR/qWl/jKTvlOMjJc0pbS6TNKCbeM8u9/9+SVuWslfM+nXOwJV7NkPSjyU9IulcSRPKeB2Sti31zpR0ajkeVfq/D/hsTZ/7Srpd0lCqF7t/vsS8t6THJK1X6r1R0uLO7xEREdFcT5ZB3wc8YXsX2zsDPwcutj26fB8EHFLqXgd81/YuwB7AH0v5GOAM251Lfp+0PYoqeTlZ1auQADYEppdzzwLfAN4DHA58rdT5FLDE9mhgNHCcpM7XNu1KNYu2I/B2YE/bF1HNZO1nez9Vy5DnAftT/aL/aEmHNbn+DYFFtt8FzAa+A4wrMV4JnF2nzUr3x/ZNVDNPE2yPtP3Xmvo3AR+q+T4euEHSDuV4T9sjgeXAhG5ivb/c/5nAcU3qdtoF+BwwHDgKeKftMcAVwEl16v8AONn27vU6s70YuBT4VrnOWcB0oPPdUUcAN9t+sWtbScdLapfUvnzZkh6EHhERsfbrSbLWARxYZrz2tr0E2E/SbEkdVEnPTpI2BrayPRnA9vO2O5cd59h+rKbPkyU9CNwP/C9gWCn/G1Uy2DnujPI/9Q5gaCk/CPiEpAVUydOba9rPsf1ftlcAC2ra1BpNlRA+ZfslqgRzbJPrXw7cXI63A3YG7ijjfwl4a502K92fJv1j+yngUUnvLonrdsA9wAHAKGBuGe8AqiS0kb8Bt5fjedS//q7m2v6j7ReA3wHTSnntPQdA0mBgE9szStE1PegfqsTv2HJ8LFXCtxLbE2232W4bsMHgHnYdERGxdut2z5rtRySNAj4AnCNpGtXyV5vtP0g6E1gfUJNunus8kLQvcCCwu+1lkqaX9gAv2nY5XgG8UGJYIakzVgEndX3heen3hZqi5Q2ur1mc9Txfs09NwEONZpVKHOsD32Pl+9OdG4CPAr8GJtu2JAFX2f5iD2OtvX+11/8SJTEvfb6hpk3tPVtR830FK98/AaaXbN+j6mGEfYABthf1to+IiIj+qid71t4CLLN9LXABsFs59bSkjYBxALb/AvxX55KipIGq/wTmYOCZkqhtD7y7lzFPBU6s2QP1TkkbdtPmWWDjcjwb2EfSZmX/18eAGQ1bvtJvgM0l7V7GXk9S11mzzsTsFfenThxd3QIcVuK5oZTdCYyTtEUZb1NJW/cw1lqLqWboAA4FXtV+Mdt/BpZI2qsUNVqSrXedVwPX02BWLSIiIurryTLocGBOWYY7g2of2eVUy2S3AnNr6h5FtcS5kOpJwP+vTn8/B9Ytdb5OtRTaG1cADwPzVf1sxGV0P0M4Efh3SXfZ/iPwReAu4EFgvu2f9GRg23+jSr7OK8u4C6j25tXW+TON788k4NLOBwy6tHumXNfWtueUsoepllqnlft1B7DSAw09cDlVgjoHeBc1M52vwrHAd8sDBn9tUOenwOGdDxiUsuuAN1ElbBEREdFDennVLGLVKU+jHmr7qJ7UHzhkmIccfSEAi889uJvaERERazZJ82y31Tu3Wn9nLfqn8jMk76fa9xgRERG9kGStUPU7agO7FB9lu6Mv4mlmTYoVwHa9nwCJiIiIHsgyaLSktrY2t7e3d18xIiJiLdBsGbRfvBs0IiIiYk2VZC0iIiKihSVZi4iIiGhhSdaiJXU8voShp09h6OlT+jqUiIiIPpVkLSIiIqKFJVmLiIiIaGFJ1iIiIiJaWEsma5KW9nUMvSFpsaTNVtNYJ0j6RC/bTJdU97dbVjdJk8qrpyIiIqIH8gaDNYztS/s6hoiIiFh9WnJmrZMq50taJKlD0vhSPkTSTEkLyrm9m/RxiaR2SQ9JOqumfLGksyTNL31vX8o3l3RHKb9M0u87Z80kHSlpThn3MkkD6oy3Up3yb1LNdXy+QaxbSJpXjneRZElvK99/J2kDSWdKOrWUTZd0Xhnvkc77IGmQpB9JWijpBmBQk/tTN7bS94WS7i3nxpTyDSVdKWmupAckHVrTz/mlfKGkT9f8DS+W9LCkKcAWjWKJiIiIlbV0sgZ8CBgJ7AIcCJwvaQjwcWCq7c5zC5r0cUZ5fcMIYB9JI2rOPW17N+AS4NRS9lXgl6V8MtCZLO0AjAf2LOMuBybUDtSkzkhgK9s72x4O/KBeoLafBNaX9EZgb6Ad2FvS1sCTtpfVabau7THAKSV2gBOBZbZHAGcDo5rcn2axbWh7D+AzwJWl7Ixyf0YD+1H9TTYEPgUsKeWjgeMkbQMcDmwHDAeOA/ZoFIik40ti3b582ZImIUdERPQfrb4Muhdwve3lwP9ImkGVCMwFrpS0HnCr7WbJ2kclHU91rUOAHYGF5dwt5XMeVWLYOebhALZ/LumZUn4AVdIzVxJUs1VPdhmrUZ2fAm+X9B1gCjCtSbz3AnsCY4FvAu8DBMxqUL/2GoaW47HAReUaFkpaWKddp0ebxHZ96WOmpDdK2gQ4CPhg5+wesD5VQnsQMKJmP9pgYFiJpfNv+ISkXzYKxPZEYCLAwCHD8tLaiIgIWj9ZU73CkjyMBQ4GrpF0vu2rV2pczeycCoy2/YykSVTJRacXyudyXr4Xdccs5VfZ/mI38datI2kX4L3AZ4GPAp9s0Mcsqlm1rYGfAF8ADNzeoH69a6C06Va5L41i69qHqa7xw7Z/U3tCVXZ6ku2pXco/0NNYIiIiYmWtvgw6Exhf9kNtTjVLM6dmWfBy4PvAbg3avxF4DlgiaUvg/T0Y826qhAVJBwFvKuV3AuMkbVHObVriqFW3Ttnzto7tm4EvN4m385qPBH5rewXwJ+ADwD09iL22jwklhp2ploDr6ia2zj2Ce1EtcS4BpgInleQMSbuWulOBE8tsJ5LeWZZHZwJHlL/hEKql04iIiOihVp9ZmwzsDjxINTvzz7b/W9LRwGmSXgSWAnV/ysL2g5IeAB6iWu7rScJzFnC9qocZZgB/BJ61/bSkLwHTJK0DvEg1E/X7mvEeblDnr8APShlAw9k524tLHjSzFN0NvNX2M43a1HFJGW8h1X6+OU3qbtUktmck3UuV9HbOtn0duBBYWBK2xcAhwBVUy7DzS/lTwGFUf8P9gQ7gEap7GhERET0kOytUtSQNBJbbfknS7sAl5WGBfkXSdOBU2+19Mf7AIcM85OgLAVh87sF9EUJERMRqI2leeSByJa0+s9YX3gb8uMw0/Y3qCcaIiIiIPrHWzKxJmg0M7FJ8lO2OvoinO5K+S/XUZ61v2677sx6v05hrzD1qa2tze3ufTOpFRESsdv1iZs32u/o6ht6w/dk+GHONukcRERHR+k+DRkRERPRrSdYiIiIiWliStWhJHY8vYejpUxh6+pS+DiUiIqJPJVmLiIiIaGFJ1iIiIiJaWJK1iIiIiBaWZK2fk2RJ19R8X1fSU5IavTi+u/42kfSZmu/7vtq+IiIiIslaVC+631nSoPL9PcDjr6G/TYDPdFsrIiIieiTJWgD8O9D5As6PAdd3npC0qaRbJS2UdL+kEaX8TElXSpou6VFJJ5cm5wLbSlog6fxStpGkmyT9WtJ15UXvERER0QNJ1gLgR8ARktYHRgCza86dBTxgewTw/wNX15zbHngvMAb4qqT1gNOB39keafu0Um9X4BRgR+DtrPyarYiIiGggyVpgeyEwlGpW7WddTu8FXFPq/RJ4s6TB5dwU2y/Yfhp4EtiywRBzbP+X7RXAgjLWSiQdL6ldUvvyZUteyyVFRESsNZKsRafbgAuoWQIt6i1Zuny+UFO2nMbvmu1RPdsTbbfZbhuwweB6VSIiIvqdJGvR6Urga7Y7upTPBCZA9WQn8LTtvzTp51lg41USYURERD/UaCYk+hnb/wV8u86pM4EfSFoILAOO7qaf/yvpHkmLqB5cyPuiIiIiXgPZ7r5WxGo2cMgwDzn6QgAWn3twN7UjIiLWbJLm2W6rdy7LoBEREREtLMlaRERERAvLnrVoScO3Gkx7lj8jIiIysxYRERHRypKsRURERLSwJGsRERERLSx71qIldTy+hKGnv/wTbfn5joiI6K8ysxYRERHRwpKsRURERLSwJGsRERERLWytS9YkfU3SgeV4uqS2crxY0marcNxJksZ1U+cYSW+p+X6FpB1fxxiWvl59den3BEmfqFM+tLwDFEltki4qx/tK2mNVxBIREdHfrPYHDCSJ6p2kK1ZF/7a/sir6BZA0wPby19DFMcAi4AkA2//79YhrVbN9aQ/qtAPt5eu+wFLg3lUYVkRERL+wWmbWygzMryR9D5gPHCWpQ9IiSeeVOgPK7NSicu7zpXxbST+XNE/SLEnbSxpcZsrWKXU2kPQHSev1cIbrSElzJC2QdJmkAU3qLi2zdbOB3SWNkjSjxDNV0pA6bb4iaW65lomqjAPagOvKuIM6Z/4knSjpX2raHyPpO72NtdQ/W9KDku6XtGUpe8U96ZyBKzNgMyT9WNIjks6VNKGM1yFp21LvTEmnluNRpf/7gM/W9LmvpNslDQVOAD5fYt5b0mOS1iv13lj+dus1u46IiIiorM5l0O2Aq4GDga8D+wMjgdGSDivHW9ne2fZw4Ael3UTgJNujgFOB79leAjwI7FPq/AMw1faL3QUhaQdgPLCn7ZHAcmBCkyYbAotsvwuYDXwHGFfiuRI4u06bi22Ptr0zMAg4xPZNVDNPE2yPtP3Xmvo3AR+q+T4euOFVxnq/7V2AmcBxTep22gX4HDAcOAp4p+0xwBXASXXq/wA42fbu9TqzvRi4FPhWuc5ZwHSqvzvAEcDN9f5Wko6X1C6pffmyJT0IPSIiYu23OpO139u+HxgNTLf9lO2XgOuAscCjwNslfUfS+4C/SNoI2AO4UdIC4DKgcybrBqpEBqoE4IYexnEAMAqYW/o8AHh7k/rLgZvL8XbAzsAdpe2XgLfWabOfpNmSOqiS0p2aBWT7KeBRSe+W9OYyzj2vIta/AbeX43nA0GbjFnNt/9H2C8DvgGmlvKNre0mDgU1szyhF1/Sgf6gSv2PL8bG8nIi/gu2Jtttstw3YYHAPu46IiFi7rc49a8+VT9U7afsZSbsA76VaXvsocArw5zKr1NVtwDmSNqVKaH7ZwzgEXGX7iz2s/3zNPjUBDzWaVQKQtD7wPaDN9h8knQms34NxbqC65l8Dk2277O/rTawv2nY5Xs7Lf9+XKIl56fMNNW1eqDleUfN9BSv/9yHA9JLte8pS+D7AANuLettHREREf9UXT4POBvaRtFnZf/UxYIaqJzXXsX0z8GVgN9t/AR6T9BGoEo2S0GF7KTAH+DZwey82/t8JjJO0RelzU0lb97Dtb4DNJe1e2q4nqeusWWdi9nSZGazdP/cssHGDvm8BDqO6H52zhK8l1lqLqRJagEOBV7VfzPafgSWS9ipFjZZk613n1cD1NJhVi4iIiPpWe7Jm+4/AF4G7qPadzbf9E2ArYHpZ7ptU6kCVEHxK0oPAQ1TJRqcbgCPp+RIoth+mWr6cJmkhcAcvL6121/ZvVMnXeSWeBVTLtLV1/gxcTrWMeCswt+b0JODSzgcMurR7BngY2Nr2nNcaaxeXUyXIc4B38fIs56txLPDd8oDBXxvU+SlweOD7vt0AACAASURBVOcDBqXsOuBNVAlbRERE9JBeXjWLWHXK06iH2j6qJ/UHDhnmIUdf+PfveTdoRESszSTNs91W71xe5B6rXPkZkvcDH+jrWCIiItY0SdaK8jtqA7sUH2W7oy/iaWZNihXAdr2fAImIiIgeyDJotKS2tja3t7d3XzEiImIt0GwZdK17N2hERETE2iTJWkREREQLS7IWERER0cLygEG0pI7HlzD09Cl//56f7oiIiP4qM2sRERERLSzJWkREREQLS7IWERER0cJaIlmTtLSvY+gNSYvLi+dfj76OkfSW16OvVUnSvpL26L5mREREvJ5aIlnr544BWiJZk9TsgZN96fLS+h70N+A1BRQRERGtlaypcr6kRZI6JI0v5UMkzZS0oJzbu0kfl0hql/SQpLNqyhdLOkvS/NL39qV8c0l3lPLLJP2+c9ZM0pGS5pRxL6uXfNSrU/5NqrmOzzeIdRzQBlxX2g+SNErSDEnzJE2VNKTUnS7pW+U+/ErSaEm3SPqtpG+UOkMl/VrSVZIWSrpJ0gblXLN+vylpBvA5Sf8gabakByT9QtKWkoYCJwCfL3HuXa5vXM21LC2f+0q6S9IPgY6e3seIiIior6WSNeBDwEhgF+BA4PySVHwcmGq789yCJn2cUV7XMALYR9KImnNP294NuAQ4tZR9FfhlKZ8MvA1A0g7AeGDPMu5yYELtQE3qjAS2sr2z7eHAD+oFavsmoB2YUNq/BHwHGGd7FHAlcHZNk7/ZHgtcCvwE+CywM3CMpDeXOtsBE22PAP4CfEbSet30u4ntfWz/K3A38G7buwI/Av7Z9uIy5rdsj7Q9q9711BhD9XfYsSf3seZ+Hl8S7fbly5Z0M0RERET/0Gq/s7YXcL3t5cD/lNme0cBc4MqSdNxqu1my9lFJx1Nd2xBgR2BhOXdL+ZxHlRh2jnk4gO2fS3qmlB8AjALmSgIYBDzZZaxGdX4KvF3Sd4ApwLQeXv92VMnXHaW/AcAfa87fVj47gIds/xFA0qPA/wL+DPzB9j2l3rXAycDPu+n3hprjtwI3lCT5DcBjPYy91hzbne16ch8BsD0RmAgwcMiwvLQ2IiKC1kvWVK/Q9kxJY4GDgWsknW/76pUaS9tQzZiNtv2MpEnA+jVVXiify3n52uuOWcqvsv3FbuKtW0fSLsB7qWa/Pgp8skk/tf09ZHv3Buc7419Rc9z5vfN6uiY57kG/z9Ucfwf4N9u3SdoXOLNBm5coM7OqsrA3NOivJ/cxIiIiGmi1ZdCZwPiy52tzYCwwR9LWwJO2Lwe+D+zWoP0bqRKFJZK2BN7fgzHvpkqmkHQQ8KZSficwTtIW5dymJY5adeuUPW/r2L4Z+HKTeAGeBTYux78BNpe0e+lvPUk79eAaar2tsz3wsXJ9vel3MPB4OT66QZwAi6lmzAAOBdZr0F9P7mNEREQ00GrJ2mSqJcsHgV9S7Zf6b6onERdIegD4MPDteo1tPwg8ADxEtS/rnnr1ujgLOEjSfKrk7o/As7YfBr4ETJO0ELiDalm1drxGdbYCpktaAEwCms0qTQIuLXUHAOOA8yQ9SLU3r7c/l/Er4OgSz6bAJbb/1ot+zwRulDQLeLqm/KfA4Z0PGACXU+0JnAO8i1fOpv1dT+5jRERENCa7f28NkjQQWG77pTLzdEnZCL/GKU9t3m575z4O5TUbOGSYhxx94d+/592gERGxNpM0rzwguZJW27PWF94G/FjSOsDfgOP6OJ6IiIiIv1tjkzVJs4GBXYqPst3Rm35s/xbY9XULrAFJ3wX27FL8bdt1f9bj1Sg/sbHGz6pFRETEy/r9Mmi0pra2Nre3t/d1GBEREatFs2XQVnvAICIiIiJqJFmLiIiIaGFr7J61WLt1PL6EoadPeUVZngiNiIj+KDNrERERES0syVpEREREC0uyFhEREdHCkqxFREREtLAkazUkTZfUVo5/JmmT1TDmYZJ2XNXjvFaSRkr6QF/HERER0d8kWWvA9gds/3k1DHUY0BLJmqRmTwePBHqVrKmS/8YiIiJegzXipzskbQj8GHgrMAD4OrAd8A/AIOBe4NO2LWk6MBvYD9gE+JTtWQ36HQT8gCpZ+lXpq/PcYqDN9tOSjgROBt5Q+v6M7eWSPgV8AXgC+C3wgu1/lLQ1cCWwOfAUcKzt/6wz/h7AB4F9JH0J+HA59d3SdhlwnO1fS5oE/BXYHtgaOBY4GtgdmG37mNLnUuCycv3PAEfYfkrStk36/RPVK7fmS7oBuLDci7+WcR4DvgYMkrQXcA6wA7DU9gVl3EXAISX+fwfuKrEdJmk74Cyq14P9rtyPpfX+JhEREfFKa8qsx/uAJ2zvYntn4OfAxbZHl++DeDlRAFjX9hjgFOCrTfo9EVhmewRwNjCqawVJOwDjgT1tjwSWAxMkvQX4MvBu4D1USVSni4GrS7/XARfVG9z2vcBtwGm2R9r+HTAROMn2KOBU4Hs1Td4E7A98Hvgp8C1gJ2C4pJGlzobAfNu7ATNqrr9Zv+8EDrT9f4BfA2Nt7wp8Bfim7b+V4xtKnDfUv51/t125/l2B54Avlf53A9qBf6rXSNLxktoltS9ftqSbISIiIvqHNWJmDegALpB0HnC77VmSPizpn4ENgE2Bh6gSGIBbyuc8YGiTfsdSEinbCyUtrFPnAKokbq4kqBLDJ4ExwAzbfwKQdCNV0gPVjNKHyvE1wL/05CIlbQTsAdxYxoJXvqz+p2X2sAP4n86X1kt6qFznAmAF0JlMXQvc0oN+b7S9vBwPBq6SNAwwsF5PYu/i97bvL8fvppq5vKeM/QbgvnqNbE+kSioZOGRYXlobERHBGpKs2X5E0iiqPVPnSJoGfJZqmfIPks4E1q9p8kL5XE7319hdUiDgKttffEWhdHhP4+/BGJ3WAf5cZvDq6byuFTXHnd8bXad70O9zNcdfB+6yfbikocD0Bm1e4pUzs7X3v7Y/AXfY/liDfiIiIqKJNWIZtCw5LrN9LXABsFs59XSZNRr3KrueCUwoY+wMjKhT505gnKQtSr1Ny560OVR7zd5UNuZ/uKbNvcAR5XgCcHeTGJ4FNgaw/RfgMUkfKWNJ0i69vKZ1ePl+fBy4u5f9DgYeL8fH1IuzWEz5O0jaDdimQX/3A3tKekepu4GkdzaoGxEREV2sEckaMByYI2kBcAbwDeByquXRW4G5r7LfS4CNyvLnP1MlYK9g+2GqPVfTSr07gCG2Hwe+SfXAwS+Ah4HOjVYnA8eW+kcBn2sSw4+A0yQ9UB4CmAB8StKDVEu7h/bymp4DdpI0j2p/29dKeU/7/Req2ct7qB7m6HQXsKOkBZLGAzcDm5a/yYnAI/U6s/0UVdJ3fbkf9/PK/X0RERHRhOxsDXq1JG1ke2mZWZsMXGl7ch/HtNT2Rn0Zw+th4JBhHnL0ha8oy4vcIyJibSVpnu22eufWlJm1VnVmmVlaRPXzFrf2cTwRERGxlukXM2uS3guc16X4Mdu9eUjgtcZwBvCRLsU32j57dcWwJmlra3N7e3tfhxEREbFaNJtZWyOeBn2tbE8FpvZxDGdT/ZZbRERERI9lGTQiIiKihSVZi4iIiGhh/WIZNNY8HY8vYejpU1YqzxOhERHR32RmLSIiIqKFJVmLiIiIaGFJ1iIiIiJaWJK1iIiIiBaWZO01kDRdUls5/pmkTfoghqWre8x6JH1N0oHd1NlX0h6rK6aIiIi1QZ4GfZ3Y/kBfx9CXbH+lB9X2BZYC967aaCIiItYea+XMmqQNJU2R9KCkRZLGS/qKpLnl+0RJKnWnSzpP0hxJj0jau0m/gyT9SNJCSTcAg2rOLZa0WTk+svS3QNJlkgaU8k+VMaZLulzSxaV8a0l3ln7vlPS2JjFsI+m+ci1f73LutFK+UNJZpeyfJZ1cjr8l6Zfl+ABJ1zYZZ6mkf5U0v8S0eSkfKen+MsZkSW8q5ZMkjau5F2eVth2Stpc0FDgB+Hy5Lw3vc0RERLxsrUzWgPcBT9jexfbOwM+Bi22PLt8HAYfU1F/X9hjgFOCrTfo9EVhmewTVq6NGda0gaQdgPLCn7ZHAcmCCpLcAXwbeDbwH2L6m2cXA1aXf64CLmsTwbeAS26OB/64Z9yBgGDAGGAmMkjQWmAl0JkZtwEaS1gP2AmY1GWdDYL7t3YAZvHxfrga+UGLtoPH9erq0vQQ41fZi4FLgW7ZH2l5pbEnHS2qX1L582ZImoUVERPQfa2uy1gEcWGbM9ra9BNhP0mxJHcD+wE419W8pn/OAoU36HQtcC2B7IbCwTp0DqJK4uZIWlO9vp0qiZtj+k+0XgRtr2uwO/LAcX0OVSDWyJ3B9Td1OB5V/DwDzqZLBYeWaRknaGHgBuI8qadub5snaCuCGcnwtsJekwcAmtmeU8quo7kk9Pb2nf2d7ou02220DNhjckyYRERFrvbVyz5rtRySNAj4AnCNpGvBZoM32HySdCaxf0+SF8rmc7u+Juzkv4CrbX3xFoXR4T+PvwRj1zgs4x/ZlK52QFgPHUu0VWwjsB2wL/Op1jKmr3tzTiIiIaGCtnFkrS47LbF8LXADsVk49LWkjYNyr7HomMKGMsTMwok6dO4FxkrYo9TaVtDUwB9hH0pskrQt8uKbNvcAR5XgCcHeTGO7pUrfTVOCT5fqQtFVnDCXuU8vnLKq9YwtsN0vA1uHl+/Rx4O4yQ/lMzX6zo6iWSHvqWWDjXtSPiIjo99bWGY/hwPmSVgAvUu01O4xqeXQxMPdV9nsJ8ANJC4EFVAnYK9h+WNKXgGmS1injf9b2/ZK+CcwGngAeBjo3Zp0MXCnpNOApqlmwRj4H/FDS54Cba8adVvbL3VeenVgKHAk8SZWgnQHcZ/s5Sc/TfAkU4DlgJ0nzSpzjS/nRwKWSNgAe7SbWrn4K3CTpUOCkevvWIiIi4pXUfHIlXk+SNrK9tMysTQautD25r+OqR9JS2xv11fgDhwzzkKMvXKk8L3KPiIi1kaR5ttvqnVsrl0Fb2JnloYNFwGPArX0cT0RERLS4tXUZ9DWR9F7gvC7Fj9nuzUMCK7F9ai9iOAP4SJfiG22f/VpiqDPObGBgl+Kj+nJWDWD4VoNpzyxaRERElkGjNbW1tbm9vb2vw4iIiFgtsgwaERERsYZKshYRERHRwrJnLVpSx+NLGHr6lLrn8kRoRET0J5lZi4iIiGhhSdYiIiIiWliStYiIiIgWlmStAUmTJK30DlFJb5F00+s4zinl1U0tTdJhknbs6zgiIiL6myRrvWT7Cduv9kXw9ZwCtESyJmlAk9OHAb1K1sprtSIiIuI1SLJWSPqEpIWSHpR0TSkeK+leSY92zrJJGippUTkeIOkCSR2l7Uml/ABJD5TyKyV1fUNA55gnA28B7pJ0Vyk7SNJ9kuZLulHSRqV8saRvlnPtknaTNFXS7ySdUOrsK2mmpMmSHpZ0aXmZfHf9fkXS3cBHJB0naW65DzdL2kDSHsAHgfMlLZC0raTpktpKH5tJWlyOjyn9/xSYVspOK30ulHTW6/uXi4iIWLslWQMk7QScAexvexfgc+XUEGAv4BDg3DpNjwe2AXa1PQK4TtL6wCRgvO3hVD+PcmK9cW1fBDwB7Gd7P0mbAV8CDrS9G9AO/FNNkz/Y3h2YVcYYB7wb+FpNnTHA/wGGA9sCH+pBv8/b3sv2j4BbbI8u9+FXwKds3wvcBpxme6Tt3zW6l8XuwNG295d0EDCsxDUSGCVpbL1Gko4viWj78mVLuhkiIiKif8gyVWV/4CbbTwPY/pMkgFttrwAelrRlnXYHApfafqmm3S5U7xF9pNS5CvgscGEP4ng31VLjPWX8NwD31Zy/rXx2ABvZfhZ4VtLzkjYp5+bYfhRA0vVUyebz3fR7Q83xzpK+AWwCbARM7UHcXd1h+0/l+KDy74HyfSOq5G1m10a2JwITAQYOGZb3oEVERJBkrZOAesnBC13q9KRdvXq9ieMO2x9rcL4znhVdYlvBy3/LrvG4B/0+V3M8CTjM9oOSjgH2bdDmJV6emV2/SX8CzrF9WYN+IiIiooksg1buBD4q6c0AkjbtYbtpwAmdG+lLu18DQyW9o9Q5CpjRpI9ngY3L8f3Anp1ty36xd/bqSmCMpG3KXrXxwN297Hdj4I+S1gMmNIgTYDEwqhw3e+BiKvDJmj1yW0naopfXFBER0W8lWQNsPwScDcyQ9CDwbz1segXwn8DC0u7jtp8HjgVulNRBNet1aZM+JgL/Luku208BxwDXS1pIlWRt38vLuY9qf90i4DFgci/7/TIwG7iDKvHs9CPgtPLgxLbABcCJku4FNmsUjO1pwA+B+8r9uIlXJn0RERHRhOxsDVpbSNoXONX2IX0dy2s1cMgwDzm6/ja/vBs0IiLWNpLm2W6rdy4zaxEREREtLA8YrCaSJlP9zEetL9h+NU9b1mV7OjD99eovIiIi+l6StdXE9uF9HcOaZPhWg2nPcmdERESWQSMiIiJaWZK1iIiIiBaWZC0iIiKihWXPWrSkjseXMPT0Kb1qk5/0iIiItVFm1iIiIiJaWJK1iIiIiBaWZdDoFUnLgQ5gPaqXuV8FXGh7RZ8GFhERsZZKsha99VfbIwHKC9l/CAwGvtqnUUVERKylsgwar5rtJ4HjgX9UZaikWZLml397AEi6RtKhne0kXSfpg30Vd0RExJokyVq8JrYfpfrvaAvgSeA9tncDxgMXlWpXAMcCSBoM7AH8bPVHGxERsebJMmi8HlQ+1wMuljQSWA68E8D2DEnfLcumHwJutv3SSp1Ix1PN1DHgjZuvlsAjIiJaXZK1eE0kvZ0qMXuSat/a/wC7UM22PV9T9RpgAnAE8Ml6fdmeCEwEGDhkmFdd1BEREWuOJGvxqknaHLgUuNi2yxLnf9leIeloYEBN9UnAHOC/bT+0+qONiIhYMyVZi94aJGkBL/90xzXAv5Vz3wNulvQR4C7guc5Gtv9H0q+AW1dzvBEREWu0JGvRK7YHNDn3W2BETdEXOw8kbQAMA65fddFFRESsffI0aKxykg4Efg18x/aSvo4nIiJiTZKZtVjlbP8CeFtfxxEREbEmysxaRERERAvLzFq0pOFbDab93IP7OoyIiIg+l5m1iIiIiBaWZC0iIiKihWUZNFpSx+NLGHr6lF63W5yl04iIWMtkZi0iIiKihSVZi4iIiGhhSdYiIiIiWliStfg7Sd+SdErN96mSrqj5/q+S/ulV9Lv09YoxIiKiv0myFrXuBfYAkLQOsBmwU835PYB7+iCuiIiIfivJWtS6h5KsUSVpi4BnJb1J0kBgB+ABSadJmitpoaSzOhtLOlLSHEkLJF0m6RUvfZe0maT7JOWRzYiIiB5KshZ/Z/sJ4CVJb6NK2u4DZgO7A23AQmBfYBgwBhgJjJI0VtIOwHhgT9sjgeXAhM6+JW0JTAG+Yrv3v8kRERHRT+V31qKrztm1PYB/A7Yqx0uolkkPKv8eKPU3okreRgCjgLmSAAYBT5Y66wF3Ap+1PaPRwJKOB44HGPDGzV/Pa4qIiFhjZWYtuurctzacahn0fqqZtc79agLOsT2y/HuH7e+X8qtqyrezfWbp8yVgHvDeZgPbnmi7zXbbgA0Gr5KLi4j/1969x9s13f0e/3ylxCVE3XpST2W7RDUqgu1OBKm2tGhxeESbiCOlil44T55HTx+Xl1Y5p6VFSVMiaRCXHk3pI2mJu5Cd604QSqItDlVtCHFJ8jt/zLFkZVl7rbWzd/aae+3v+/VarzXXmGOM+Rtz7tfKL2POuaaZdTdO1qzUo8CXgDciYmVEvAFsTpawPQ5MBUZJ6gMgaVtJ25DNnB2flpG0haT+qc8ARgG7SBrTtcMxMzPr3nwa1Eq1kt0FenNJWZ+IeB2Ylq5Pezyd7lwGnBIRT0n6flq/HvABcBbwIkBErJR0EvA7SW9GxLVdNyQzM7Puy8marSEiVgKblZSNLPl8FXBVmbaTgcllyvuk9/epcirUzMzM1uTToGZmZmY55mTNzMzMLMd8GtRyabdt+9JymX8718zMzDNrZmZmZjnmZM3MzMwsx5ysmZmZmeWYr1mzXGp9aSlNYzr2CNElvubNzMwagGfWzMzMzHLMyZqZmZlZjjlZMzMzM8uxbpusSRov6fgy5Z+UdEcd4rlQ0nlV6hwraWDR54slDevEGJZI2qqz+ivq9+i2HsAuaVl6/3C/Sxos6cjOjsPMzKwn6rbJWlsi4uWI+EgS1xkk9epgF8cCHyZrEfGDiPhjB/tc5yJiSkRcVqVO8X4fDDhZMzMz6wTdJlmT9HVJ8yXNkzQxFQ+R9JikFwqzbJKaJC1Iy70k/W9Jrant2an8cElzUvkNknpX2O4SST+Q9AhwgqQdJd0raZakhyXtUqbN6ZJmpljvlLSxpAOAo4ErJM1N/YyXdLykL0q6raj9UEm/S8tHSHpc0mxJt0vqU2VXnZ3qthZiK531k7Qg7acmSc9IGpfKJkkaJulRSc9J2ifVHynp6rS8fYpnpqRLivpsSn1sAFwMnJjGeWLqa+tUbz1Jf1oXM4BmZmaNqFska5J2BS4ADouI3YFz06p+wEHAl4ByMz+jge2BPSJiEDBJ0obAeODEiNiN7OdLzqwSwrsRcVBE3AqMBc6OiL2A84Bry9T/TUTsnWJ9GjgtIh4DpgDnR8TgiHi+qP4fgP0kbZI+nwhMTgnN94FhEbEn0AJ8t0qsr6e6v0jxVbMTcBUwCNgFOJlsn54H/EeZ+lcBv4iIvYH/V7oyIt4HfgBMTuOcDPwaGJ6qDAPmRcTrpW0ljZbUIqll5TtLawjdzMys8XWLZA04DLij8A98RLyRyu+KiFUR8RTwiTLthgHXRcSKonafBhZHxLOpzk3AkCrbnwyQZrUOAG6XNBe4nixhLPXZNOvWSpak7Fqp8xTfvcCXJX0MOAr4LbAf2WnTR9P2RgD9q8T6m/Q+C2iqUheyfdEaEauAhcB9ERFAaxvtDwRuScsTy6wv5wbg62l5FHBjuUoRMTYimiOiudfGfWvs2szMrLF1lx/FFRBlyt8rqVNLu3L1qnk7va8H/DMiBlepPx44NiLmSRoJDK1hG5OBs4A3gJkR8ZYkAX+IiH9tR6yFfbKS1cd3BWsm5huWqQ+wqujzKtr++yh3LNoUEX+R9Kqkw4B9WT3LZmZmZlV0l5m1+4D/LmlLAElb1NhuGnBGmq0qtHsGaJK0U6rzNeDBWjqLiDeBxZJOSP1J0u5lqm4KvCJpfdZMTN5K68p5ANgTOJ00kwfMAA4sxJqufdu5llhLLEl9I2lPslPDa+tR4KS03FbSVW6c48hOh94WESs7sH0zM7MepVskaxGxELgUeFDSPOAnNTYdB/wZmJ/anRwR7wKnkp3KbCWbQbquHeEMB05L/S0EjilT538BT5Bdi/ZMUfmtwPnp5oYdixukBOZu4IvpnYj4GzASuEXSfLLk7SM3NNTgTmCLdCr1TODZKvUrORc4S9JMoK1zldOBgYUbDFLZFKAPbZwCNTMzs/KUXZ5ktm5JagZ+GhEH11K/d78B0W/ElR3app8NamZm3YWkWRHRXG5dd7lmzboxZT+oeya+Vs3MzKzdnKwlkv4vH72W698iYmo94qmkO8UKkH5Qt+KP6pqZmVl5Pg1qudTc3BwtLS31DsPMzKxLVDoN2i1uMDAzMzPrqZysmZmZmeWYkzUzMzOzHPMNBpZLrS8tpWnMPeusf/+sh5mZdReeWTMzMzPLMSdrZmZmZjnmZM3MzMwsx7osWZO0rKu2VQ+Slkjaqkqd/yj5/Fgnbn+opLs7q7+SvsdJGlimfKSkq9PyGZK+XlT+yXURi5mZWU/To2bWJK31DRWSenVCCGskaxFxQCf0uc5FxP+IiKeq1LkuIiakjyMBJ2tmZmadoC7JmqTzJc2UNF/SRamsSdIzaRZngaRJkoZJelTSc5L2SfW2kHRXajtD0qAq5RdKGitpGjBBUi9JVxRt/xsV4hwqabqkm4HWVHaKpCclzZV0fbkkLsUxS9JCSaNT2WXARqndpFS2LL1PlnRkUfvxko5rT6xJH0l3pP04SZJSfx/O+klqlvRA0b65SdK0VOerki6X1CrpXknrp3oPpAexI+lUSc9KehA4sCjmCyWdJ+l4oBmYlMZ6VHo8VqHe5yT9pso4zMzMLOnyZE3SEcAAYB9gMLCXpCFp9U7AVcAgYBfgZOAg4DxWz0pdBMyJiEGpbEKVcoC9gGMi4mTgNGBpROwN7A2cLqn0OZvF9gEuiIiBkj4DnAgcGBGDgZWUfzj5qIjYiyxpOUfSlhExBlgeEYMjorTNralfJG0AHA78fi1i3QP4NjAQ2IGiZKqCHYGjgGOAXwPTI2I3YHkq/5CkfmT7+UDgc2k7a4iIO4AWYHjaR78HPiNp61TlVODGcoFIGi2pRVLLyneW1hC6mZlZ46vHzNoR6TUHmE2WlA1I6xZHRGtErAIWAvdF9vDSVqAp1TkImAgQEfcDW0rqW6EcYEpELC/a/tclzQWeALYs2n45T0bE4rR8OFniNzO1P5wsKSp1jqR5wAzgU1X6B/gv4DBJvYEvAg+leNcm1r+m/TeX1fus4rYj4gOyfdwLuDeVF+/zgn2BByLibxHxPjC5Wufp+E0ETpG0ObB/Gm+5umMjojkimntt3LdcFTMzsx6nHj+KK+BHEXH9GoVSE/BeUdGqos+rWB2ryvQZFcoB3i7Z/tkRMbXGeEvb3hQR/95WZUlDgWHA/hHxTjrluGGlDUTEu6ne58lm2G5Zy1iL999KVu+zFaxOzEtjeS/FsErSBym5gjX3+Rrh1hhLsRuB3wHvArdHxIq16MPMzKxHqsfM2lRglKQ+AJK2lbRNO9o/RDr1mBKj1yPizQrl5bZ/ZtH1WDtL2qTGbd8HHF+IN10n17+kTl/gHylR2wXYr2jdB4XtlnEr2SnCg1OMHY212BKyGUGA49aiqKVBOQAAGHtJREFUfcETwFBJW6aYTmij3lvApoUPEfEy8DLwfWB8B7ZvZmbW43T5zFpETEvXfj2ern9fBpxCNhNUiwuBGyXNB94BRlQpLzWO7PTe7HQB/t+AY2uM/SlJ3wemSVoP+AA4C3ixqNq9wBkpjkVkp0ILxgLzJc0uc93aNLLr7KakU4wdirXERcCvlP10yBNr0R6AiHhF0oXA48ArZKexy90lOx64TtJyshnG5cAkYOtqd5WamZnZmrT6rJfZuqPs99jmRMSvaqnfu9+A6DfiynUWj58NamZmeSJpVkQ0l1vnB7nbOidpFtm1f9+rdyxmZmbdjZM1QNJupDtJi7wXEfvWI55KulOsBelnTMzMzGwt+DSo5VJzc3O0tLTUOwwzM7MuUek0aI963JSZmZlZd+NkzczMzCzHfM2a5VLrS0tpGnNPvcPIBd+5ambWs3lmzczMzCzHnKyZmZmZ5ZiTNTMzM7Mcc7JmZmZmlmNO1upE0kpJcyUtlDRP0nfT80a7Ytu3SJov6TtdtL2R6XFTZmZm1k6+G7R+lkfEYABJ2wA3A32B/1yXG5X034ADIqL/utyOmZmZdQ7PrOVARLwGjAa+pUyTpIclzU6vAwAkTZR0TKGdpEmSji7Xp6QNJd0oqVXSHEmHplXTgG3SrN7BZdptk57liaTdJYWk7dLn5yVtLGlrSXdKmpleB6b1m0i6IZXNKY61qP+jJD0uaauO7TUzM7OewTNrORERL6TToNsArwGfi4h3JQ0AbgGagXHAd4DfSuoLHACMaKPLs1K/u0naBZgmaWfgaODuwqxemTheS4neZsDBQAtwsKRHgNci4h1J44CfRsQjKZGbCnwGuAC4PyJGSdoceFLSHwt9S/oK8F3gyIj4R+m2JY0mS1rptdnWNe87MzOzRuZkLV+U3tcHrpY0GFgJ7AwQEQ9KuiadNv0qcGdErGijr4OAn6d2z0h6MfXzZg1xPAYcCAwBfgh8IcX2cFo/DBgoFcJlM0mbAkcAR0s6L5VvCGyXlg8lSziPiIiyMUTEWGAsQO9+A/zQWjMzM5ys5YakHcgSs9fIrlt7Fdid7FT1u0VVJwLDgZOAUZW67EA4D5PNqvUHfgv8GxDA3Wn9esD+EbG8ZAwCjouIRSXl+wIvADuQJYx+QruZmVmNfM1aDkjaGrgOuDoiguxGg1ciYhXwNaBXUfXxwLcBImJhhW4fIkvqSKc/twMWVahf2vYU4LkUwxvAkcCjaf004FtF8RdOqU4Fzk5JG5L2KOrzRbLZwAmSdq0xDjMzsx7PyVr9bFT46Q7gj2QJ0EVp3bXACEkzyGai3i40iohXgaeBG6v0fy3QS1IrMBkYGRHv1RJYRCxJiw+l90eAfxZdZ3YO0Jx+/uMp4IxUfgnZKdz5khakz8X9LiJLIG+XtGMtsZiZmfV0yiZyrLuQtDHQCuwZEUvrHc+60rvfgOg34sp6h5ELfpC7mVnjkzQrIprLrfPMWjciaRjwDPDzRk7UzMzMbDXPrHVzkj4P/LikeHFEfKWGtteQ3fVZ7KqIqHaKdZ1rbm6Olhbfh2BmZj1DpZk13w3azUXEVLIL+9em7VmdHI6ZmZl1Mp8GNTMzM8sxJ2tmZmZmOebToJZLrS8tpWnMPfUOI7d8h6iZWc/hmTUzMzOzHHOyZmZmZpZjTtbMzMzMcszJmpmZmVmO9chkTdI5kp6WNCkHsRwraWC946hG0mBJR9Y7DjMzs56mRyZrwDeBIyNieKFAUr3ujD0WyEWyVmUfDAbalawp01P/xszMzDpFj/uHVNJ1wA7AFElLJY2VNA2YIKmXpCskzZQ0X9I3Upt+kh6SNFfSAkkHp/Jlki6VNE/SDEmfSOX9Jd2X+rhP0nZtxHIAcDRwRep7x/S6V9IsSQ9L2iXVHS/pF5KmS3pB0iGSbkgzhOOL+lwm6f9Imp22vXUqr9TvTyRNB34saR9Jj0mak94/LWkD4GLgxBTniZIulHRe0XYXSGpKr6clXQvMBj4l6QhJj6eYbpfUp1MPqpmZWQPrcclaRJwBvAwcCvwU2As4JiJOBk4DlkbE3sDewOmStgdOBqZGxGBgd2Bu6m4TYEZE7A48BJyeyq8GJkTEIGAS8LM2YnkMmAKcHxGDI+J5YCxwdkTsBZwHXFvU5OPAYcB3gN+l+HcFdpM0uCim2RGxJ/Ag8J+pvFK/OwPDIuJ7ZA+KHxIRewA/AH4YEe+n5ckpzsmV9zKfTuPfA3gb+H7qf0+gBfhuuUaSRktqkdSy8h0/p97MzAz8o7gAUyJieVo+Ahgk6fj0uS8wAJgJ3CBpfeCuiCgka+8Dd6flWcDn0vL+wFfT8kTg8loCSTNOBwC3SyoU9y6q8ruICEmtwKsR0ZraLQSayJLIVUAhmfo18Jsa+r09IlYWjfkmSQOAANavJfYSL0bEjLS8H9lp3kfTtjcAHi/XKCLGkiWV9O43INZiu2ZmZg3HyVo281MgstmnjzwYXdIQ4ChgoqQrImIC8EFEFJKKlbS9P2tNPNYD/plm8Mp5L72vKloufK607Wr9Fu+DS4DpEfEVSU3AA220WcGaM7MbttGfgD9ExL+20Y+ZmZlV0ONOg1YxFTgzzaAhaWdJm0jqD7wWEb8EfgXsWaWfx4CT0vJw4JEKdd8CNgWIiDeBxZJOSNuXpN3bOYb1gMLM4MnAI+3sty/wUloeWS7OZAlpP0jaE9i+jf5mAAdK2inV3VjSzu0ZkJmZWU/mZG1N44CngNmSFgDXk81YDQXmSpoDHAdcVaWfc4BTJc0HvgacW6HurcD56YL+HcmSu9MkzQMWAse0cwxvA7tKmkV2fdvFqbzWfi8HfiTpUaBXUfl0YGDhBgPgTmALSXOBM4Fny3UWEX8jS/puSftjBrBLO8dkZmbWY2n1WTxrBJKWRUS3v9uyd78B0W/ElfUOI7f8IHczs8YiaVZENJdb55k1MzMzsxzzDQZdRNIFwAklxbdHxKWduZ1GmFUD2G3bvrR49sjMzMzJWldJSVmnJmZmZmbW+Hwa1MzMzCzHnKyZmZmZ5ZhPg1outb60lKYx99Q7DOtivsvVzOyjPLNmZmZmlmNO1szMzMxyzMmamZmZWY41VLImaVm9Y2gvSU2STq53HLWQ9B/1jsHMzKynaahkLQ8ktfemjSayB67XnaReVaq0O1lbi/1hZmZmRRo2WZN0vqSZkuZLuiiVNUl6RtI4SQskTZI0TNKjkp6TtE+qt4Wku1LbGZIGVSm/UNJYSdOACZJ6SbqiaPvfqBDqZcDB6QHp32mrraShkh6UdJukZyVdJmm4pCcltaaHwCNpvKTrJD2c6n0plVfqd7qkm4HWVHaXpFmSFkoancouAzZKcU5K+3JB0f4+T9KFafkBST+U9CBwrqStJd2Ztj1T0oGddJjNzMwaXkPOekg6AhgA7AMImCJpCPBnYCeyxz6NBmaSzWodBBxNNnN0LHARMCcijpV0GDABGFyhHGAv4KCIWJ4SnKURsbek3sCjkqZFxOIy4Y4BzouIQlJVtm2quzvwGeAN4AVgXETsI+lc4Gzg26leE3AIsCMwXdJOwNcr9LsP8Nmi+EZFxBuSNgJmSrozIsZI+lZEDE5xNlU5DJtHxCGp7s3ATyPiEUnbAVPTONaQxj4aoNdmW1fp3szMrGdoyGQNOCK95qTPfciStz8DiyOiMIO0ELgvIkJSK1mSA1nydhxARNwvaUtJfSuUA0yJiOVF2x8k6fj0uW/afrlkrVzs5dq+D8yMiFdS7M8DhWSrFTi0qI/bImIV8JykF4BdqvT7ZEkieY6kr6TlT6V6f68h9mKTi5aHAQMlFT5vJmnTiHiruEFEjAXGAvTuNyDauT0zM7OG1KjJmoAfRcT1axRms0HvFRWtKvq8itX7Q3xUVCgHeLtk+2dHxNR2RV2hraSh1BZ7cUzFnyv1+3bJ52HA/hHxjqQHgA3LxLmCNU+jl9Yp3h/rpf6WY2ZmZu3SqNesTQVGSeoDIGlbSdu0o/1DwPDUdijwekS8WaG83PbPlLR+qruzpE3a2NZbwKZr2bYtJ0haL13HtgOwqB399gX+kRK1XYD9itZ9UGgPvApsk2YXewNfqhDPNOBbhQ+SBleoa2ZmZkUacmYtIqZJ+gzweDr1tgw4BVhZYxcXAjdKmg+8A4yoUl5qHNkp1dnKAvgb2bVw5cwHVkiaB4wHrmpH27YsAh4EPgGcERHvSqo1pnuBM9IYFwEzitaNBeZLmh0RwyVdDDxBdnr3mQrxnANck/r8GFnSe0Y7x2RmZtYjKcKXBjUSSeOBuyPijnrH0hG9+w2IfiOurHcY1sX8bFAz66kkzYqI5nLrGvU0qJmZmVlDaMjToHkkaTdgYknxexGxb2duJyJGdmZ/ZmZmVl8+DWq51NzcHC0tLfUOw8zMrEv4NKiZmZlZN+VkzczMzCzHnKyZmZmZ5ZhvMLBcan1pKU1j7ql3GGbWw/nnZCwPPLNmZmZmlmNO1szMzMxyzMmaVSRpWcnnkZKurlc8ZmZmPY2TNasLSb3qHYOZmVl34GTN1pqk/pLukzQ/vW+XysdLOr6o3rL0PlTSdEk3A611CtvMzKxb8d2gVs1GkuYWfd4CmJKWrwYmRMRNkkYBPwOOrdLfPsBnI2Jx54dqZmbWeJysWTXLI2Jw4YOkkUDhcRj7A19NyxOBy2vo78m2EjVJo4HRAL0223pt4zUzM2soPg1qnanwoNkVpL8tSQI2KKrzdpuNI8ZGRHNENPfauO+6i9LMzKwbcbJmHfEYcFJaHg48kpaXAHul5WOA9bs2LDMzs8bhZM064hzgVEnzga8B56byXwKHSHoS2JcKs2lmZmZWmSKiei2zLta734DoN+LKeodhZj2cHzdlXUXSrIhoLrfOM2tmZmZmOeZkzczMzCzHnKyZmZmZ5Zh/Z81yabdt+9Lia0XMzMw8s2ZmZmaWZ07WzMzMzHLMp0Etl1pfWkrTmHvqHYaZmdlHdPVPunhmzczMzCzHnKyZmZmZ5ZiTNTMzM7Mcc7JmZmZmlmO5S9YknSPpaUmT6h1LrSQNlXR3lTqDJR1Z9PloSWM6MYbxko7vrP6K+v2kpDvaWPeApOa0/HtJm6fXNzs7DjMzs54qd8ka8E3gyIgYXiiQVPe7VjshhsHAh8laREyJiMs62Oc6FxEvR0TVJDAijoyIfwKbkx1DMzMz6wS5StYkXQfsAEyRtFTSWEnTgAmSekm6QtJMSfMlfSO16SfpIUlzJS2QdHAqXybpUknzJM2Q9IlU3l/SfamP+yRtVyGe8ZJ+Imk68GNJm0i6IcUwR9IxZdrsI+mxtP4xSZ+WtAFwMXBiivNESSMlXS2pr6QlktZL7TeW9BdJ60vaUdK9kmZJeljSLlV24ZC0zRcKs2yls35pmyPT8hJJP5T0uKQWSXtKmirpeUlnpDpNkhak5Y0k3Zr23WRgo6J+l0jaCrgM2DGN8wpJE4v3k6RJko6uMg4zMzNLcpWsRcQZwMvAocBPgb2AYyLiZOA0YGlE7A3sDZwuaXvgZGBqRAwGdgfmpu42AWZExO7AQ8DpqfxqYEJEDAImAT+rEtbOwLCI+B5wAXB/iuFQ4ApJm5TUfwYYEhF7AD8AfhgR76flyRExOCImF415KTAPOCQVfTmN5wNgLHB2ROwFnAdcWyXWfsBBwJfIkqZa/CUi9gceBsYDxwP7kSWXpc4E3kn77lKy41NqDPB8Guf5wDjgVABJfYEDgN+XC0TS6JQ0tqx8Z2mN4ZuZmTW2up9erGJKRCxPy0cAg4quy+oLDABmAjdIWh+4KyIKydr7QGFGaRbwubS8P/DVtDwRuLxKDLdHxMqiGI6WdF76vCFQOjPXF7hJ0gAggPWrD5PJwInAdOAk4FpJfcgSm9slFer1rtLPXRGxCniqMJNYgynpvRXoExFvAW9JelfS5iV1h5CS24iYL2l+tc4j4kFJ10jahmy/3xkRK9qoO5YsQaV3vwFRY/xmZmYNLe/J2ttFyyKbZZpaWknSEOAoYKKkKyJiAvBBRBT+wV9J22OtlhSUxnBcRCwq2X5xYnQJMD0iviKpCXigSv+QJUw/krQF2WzV/WQzg/9MM4a1eq8kVoAVrDmDumEbbVaVtF9F+X22NknURGA4WSI6ai3am5mZ9Vi5Og1axVTgzDSDhqSd0zVk/YHXIuKXwK+APav08xhZ0gBZAvFIO2M4W2mqS9IeZer0BV5KyyOLyt8CNi3XaUQsA54ErgLujoiVEfEmsFjSCWlbkrR7O2IteBEYKKl3Og15+Fr0UfAQ2T5D0meBQWXqlBvneODbABGxsAPbNzMz63G6U7I2DngKmJ0ueL+ebOZnKDBX0hzgOLKEp5JzgFPTKbyvAee2I4ZLyE5rzk8xXFKmzuVks2SPAr2KyqeTJU1zJZ1Ypt1k4JT0XjAcOE3SPGAh8JEbGqqJiL8AtwHzya7Rm9PePor8AuiT9t3/JEswS7f3d+DRdLPHFansVeBp4MYObNvMzKxH0uozhWbrhqSNya6J2zPdUFFV734Dot+IK9dtYGZmZmthXTzIXdKsiGgut647zaxZNyRpGNkdsj+vNVEzMzOz1TyzBki6ADihpPj2iLi0HvFU0p1i7Yjm5uZoaWmpdxhmZmZdotLMmpM1yyUna2Zm1pP4NKiZmZlZN+VkzczMzCzHnKyZmZmZ5ZiTNTMzM7Mcc7JmZmZmlmNO1szMzMxyzMmamZmZWY45WTMzMzPLMSdrZmZmZjnmZM3MzMwsx5ysmZmZmeWYkzUzMzOzHHOyZmZmZpZjTtbMzMzMcszJmpmZmVmOOVkzMzMzyzEna2ZmZmY5poiodwxmHyHpLWBRveNYx7YCXq93EOtQo48PPMZG4TE2hu4+xv4RsXW5FR/r6kjMarQoIprrHcS6JKmlkcfY6OMDj7FReIyNoZHH6NOgZmZmZjnmZM3MzMwsx5ysWV6NrXcAXaDRx9jo4wOPsVF4jI2hYcfoGwzMzMzMcswza2ZmZmY55mTNupSkL0haJOlPksaUWd9b0uS0/glJTUXr/j2VL5L0+a6Muz3WdoySmiQtlzQ3va7r6thrVcMYh0iaLWmFpONL1o2Q9Fx6jei6qNung2NcWXQcp3Rd1O1Twxi/K+kpSfMl3Sepf9G6RjmOlcbYKMfxDEmtaRyPSBpYtK5RvlfLjrE7fa9WFBF++dUlL6AX8DywA7ABMA8YWFLnm8B1afkkYHJaHpjq9wa2T/30qveYOnmMTcCCeo+hk8bYBAwCJgDHF5VvAbyQ3j+elj9e7zF15hjTumX1HkMnjfFQYOO0fGbR32ojHceyY2yw47hZ0fLRwL1puZG+V9saY7f4Xq328syadaV9gD9FxAsR8T5wK3BMSZ1jgJvS8h3A4ZKUym+NiPciYjHwp9Rf3nRkjN1F1TFGxJKImA+sKmn7eeAPEfFGRPwD+APwha4Iup06MsbuopYxTo+Id9LHGcC/pOVGOo5tjbG7qGWMbxZ93AQoXKzeMN+rFcbYEJysWVfaFvhL0ee/prKydSJiBbAU2LLGtnnQkTECbC9pjqQHJR28roNdSx05Fo10HCvZUFKLpBmSju3c0DpNe8d4GvBfa9m2XjoyRmig4yjpLEnPA5cD57SnbQ50ZIzQPb5XK/ITDKwrlZs9Kv3fT1t1ammbBx0Z4yvAdhHxd0l7AXdJ2rXkf4x50JFj0UjHsZLtIuJlSTsA90tqjYjnOym2zlLzGCWdAjQDh7S3bZ11ZIzQQMcxIq4BrpF0MvB9YEStbXOgI2PsLt+rFXlmzbrSX4FPFX3+F+DltupI+hjQF3ijxrZ5sNZjTKci/g4QEbPIrtHYeZ1H3H4dORaNdBzbFBEvp/cXgAeAPTozuE5S0xglDQMuAI6OiPfa0zYHOjLGhjqORW4FCrOEDXUci3w4xm70vVpZvS+a86vnvMhmcl8gu5C1cJHoriV1zmLNi+9vS8u7suaFsC+QzwthOzLGrQtjIruQ9iVgi3qPaW3GWFR3PB+9wWAx2UXpH0/LjTbGjwO90/JWwHOUXAydh1eNf6t7kP3jNqCkvGGOY4UxNtJxHFC0/GWgJS030vdqW2PsFt+rVfdBvQPwq2e9gCOBZ9OX4wWp7GKy/9ECbAjcTnah65PADkVtL0jtFgFfrPdYOnuMwHHAwvRFNBv4cr3H0oEx7k32v+G3gb8DC4vajkpj/xNwar3H0tljBA4AWtNxbAVOq/dYOjDGPwKvAnPTa0oDHseyY2yw43hV+m6ZC0ynKNFpoO/VsmPsTt+rlV5+goGZmZlZjvmaNTMzM7Mcc7JmZmZmlmNO1szMzMxyzMmamZmZWY45WTMzMzPLMSdrZmZmZjnmZM3MzMwsx5ysmZmZmeXY/wdS5CHkAlIg7wAAAABJRU5ErkJggg==\n", 1270 | "text/plain": [ 1271 | "
" 1272 | ] 1273 | }, 1274 | "metadata": { 1275 | "needs_background": "light" 1276 | }, 1277 | "output_type": "display_data" 1278 | } 1279 | ], 1280 | "source": [ 1281 | "plt.figure(figsize=(8, 7.5))\n", 1282 | "plt.barh(width=gb_feat.importance, y=gb_feat.feature);" 1283 | ] 1284 | }, 1285 | { 1286 | "cell_type": "code", 1287 | "execution_count": 34, 1288 | "metadata": {}, 1289 | "outputs": [ 1290 | { 1291 | "data": { 1292 | "text/html": [ 1293 | "
\n", 1294 | "\n", 1307 | "\n", 1308 | " \n", 1309 | " \n", 1310 | " \n", 1311 | " \n", 1312 | " \n", 1313 | " \n", 1314 | " \n", 1315 | " \n", 1316 | " \n", 1317 | " \n", 1318 | " \n", 1319 | " \n", 1320 | " \n", 1321 | " \n", 1322 | " \n", 1323 | " \n", 1324 | " \n", 1325 | " \n", 1326 | " \n", 1327 | " \n", 1328 | " \n", 1329 | " \n", 1330 | " \n", 1331 | " \n", 1332 | " \n", 1333 | " \n", 1334 | " \n", 1335 | " \n", 1336 | " \n", 1337 | " \n", 1338 | " \n", 1339 | " \n", 1340 | " \n", 1341 | " \n", 1342 | " \n", 1343 | " \n", 1344 | " \n", 1345 | " \n", 1346 | " \n", 1347 | " \n", 1348 | " \n", 1349 | " \n", 1350 | " \n", 1351 | " \n", 1352 | " \n", 1353 | " \n", 1354 | " \n", 1355 | " \n", 1356 | " \n", 1357 | " \n", 1358 | " \n", 1359 | " \n", 1360 | " \n", 1361 | " \n", 1362 | " \n", 1363 | " \n", 1364 | " \n", 1365 | " \n", 1366 | " \n", 1367 | " \n", 1368 | " \n", 1369 | " \n", 1370 | " \n", 1371 | " \n", 1372 | " \n", 1373 | " \n", 1374 | " \n", 1375 | " \n", 1376 | " \n", 1377 | " \n", 1378 | " \n", 1379 | " \n", 1380 | " \n", 1381 | " \n", 1382 | " \n", 1383 | " \n", 1384 | " \n", 1385 | " \n", 1386 | " \n", 1387 | " \n", 1388 | " \n", 1389 | " \n", 1390 | " \n", 1391 | " \n", 1392 | " \n", 1393 | " \n", 1394 | " \n", 1395 | " \n", 1396 | " \n", 1397 | " \n", 1398 | " \n", 1399 | " \n", 1400 | " \n", 1401 | " \n", 1402 | " \n", 1403 | " \n", 1404 | " \n", 1405 | " \n", 1406 | " \n", 1407 | " \n", 1408 | " \n", 1409 | " \n", 1410 | " \n", 1411 | " \n", 1412 | " \n", 1413 | " \n", 1414 | " \n", 1415 | " \n", 1416 | " \n", 1417 | "
featureimportance
5fresno_relative_humidity0.449245
3Hour0.260940
4fresno_temperature0.097121
54Day_of_week0.059365
10chico_relative_humidity0.017765
9chico_temperature0.017347
55Week0.012169
2Day0.011900
45redding_relative_humidity0.006338
24ontario_temperature0.004155
29moreno_valley_temperature0.003867
19anaheim_temperature0.003583
43concord_wind_speed0.003421
1Month0.003416
8fresno_wind_speed0.002980
32moreno_valley_dew_point0.002770
13chico_wind_speed0.002438
38san_francisco_wind_speed0.002303
44redding_temperature0.002288
40concord_relative_humidity0.002004
\n", 1418 | "
" 1419 | ], 1420 | "text/plain": [ 1421 | " feature importance\n", 1422 | "5 fresno_relative_humidity 0.449245\n", 1423 | "3 Hour 0.260940\n", 1424 | "4 fresno_temperature 0.097121\n", 1425 | "54 Day_of_week 0.059365\n", 1426 | "10 chico_relative_humidity 0.017765\n", 1427 | "9 chico_temperature 0.017347\n", 1428 | "55 Week 0.012169\n", 1429 | "2 Day 0.011900\n", 1430 | "45 redding_relative_humidity 0.006338\n", 1431 | "24 ontario_temperature 0.004155\n", 1432 | "29 moreno_valley_temperature 0.003867\n", 1433 | "19 anaheim_temperature 0.003583\n", 1434 | "43 concord_wind_speed 0.003421\n", 1435 | "1 Month 0.003416\n", 1436 | "8 fresno_wind_speed 0.002980\n", 1437 | "32 moreno_valley_dew_point 0.002770\n", 1438 | "13 chico_wind_speed 0.002438\n", 1439 | "38 san_francisco_wind_speed 0.002303\n", 1440 | "44 redding_temperature 0.002288\n", 1441 | "40 concord_relative_humidity 0.002004" 1442 | ] 1443 | }, 1444 | "execution_count": 34, 1445 | "metadata": {}, 1446 | "output_type": "execute_result" 1447 | } 1448 | ], 1449 | "source": [ 1450 | "gb_feat['feature'] = df['B'].str.slice_replace(1, 3, 'AAA')" 1451 | ] 1452 | }, 1453 | { 1454 | "cell_type": "code", 1455 | "execution_count": 82, 1456 | "metadata": {}, 1457 | "outputs": [ 1458 | { 1459 | "name": "stdout", 1460 | "output_type": "stream", 1461 | "text": [ 1462 | "Feature ranking:\n", 1463 | "0. fresno_relative_humidity (0.373411)\n", 1464 | "1. Hour (0.255585)\n", 1465 | "2. lemoore_temperature (0.111071)\n", 1466 | "3. fresno_temperature (0.063811)\n", 1467 | "4. Day_of_week (0.059408)\n", 1468 | "5. lemoore_relative_humidity (0.021034)\n", 1469 | "6. chico_relative_humidity (0.015598)\n", 1470 | "7. Week (0.012467)\n", 1471 | "8. Day (0.011358)\n", 1472 | "9. chico_temperature (0.006728)\n", 1473 | "10. san_diego_dew_point (0.005414)\n", 1474 | "11. san_diego_temperature (0.005129)\n", 1475 | "12. los_angeles_temperature (0.003860)\n", 1476 | "13. roseville_relative_humidity (0.003626)\n", 1477 | "14. Month (0.003414)\n", 1478 | "15. los_angeles_wind_speed (0.003391)\n", 1479 | "16. sacramento_relative_humidity (0.003040)\n", 1480 | "17. chico_wind_speed (0.002434)\n", 1481 | "18. san_diego_wind_speed (0.002428)\n", 1482 | "19. fresno_wind_speed (0.002338)\n", 1483 | "20. los_angeles_dew_point (0.002248)\n", 1484 | "21. roseville_temperature (0.002050)\n", 1485 | "22. san_diego_relative_humidity (0.001976)\n", 1486 | "23. san_jose_wind_speed (0.001913)\n", 1487 | "24. los_angeles_relative_humidity (0.001855)\n", 1488 | "25. lemoore_wind_speed (0.001718)\n", 1489 | "26. sacramento_temperature (0.001360)\n", 1490 | "27. petaluma_relative_humidity (0.001332)\n", 1491 | "28. san_jose_relative_humidity (0.001241)\n", 1492 | "29. petaluma_dew_point (0.001182)\n", 1493 | "30. san_francisco_relative_humidity (0.001125)\n", 1494 | "31. san_francisco_wind_speed (0.001094)\n", 1495 | "32. lemoore_dew_point (0.001045)\n", 1496 | "33. chico_dew_point (0.001042)\n", 1497 | "34. petaluma_wind_speed (0.001038)\n", 1498 | "35. roseville_dew_point (0.001030)\n", 1499 | "36. sacramento_wind_speed (0.000986)\n", 1500 | "37. san_jose_dew_point (0.000977)\n", 1501 | "38. fresno_dew_point (0.000958)\n", 1502 | "39. sacramento_dew_point (0.000957)\n", 1503 | "40. roseville_wind_speed (0.000861)\n", 1504 | "41. san_jose_temperature (0.000822)\n", 1505 | "42. san_francisco_dew_point (0.000719)\n", 1506 | "43. san_francisco_temperature (0.000588)\n", 1507 | "44. petaluma_temperature (0.000514)\n", 1508 | "45. los_angeles_cloud_type (0.000450)\n", 1509 | "46. san_francisco_cloud_type (0.000431)\n", 1510 | "47. chico_cloud_type (0.000417)\n", 1511 | "48. sacramento_cloud_type (0.000407)\n", 1512 | "49. san_diego_cloud_type (0.000395)\n", 1513 | "50. roseville_cloud_type (0.000379)\n", 1514 | "51. petaluma_cloud_type (0.000360)\n", 1515 | "52. san_jose_cloud_type (0.000345)\n", 1516 | "53. lemoore_cloud_type (0.000324)\n", 1517 | "54. fresno_cloud_type (0.000314)\n", 1518 | "55. Year (0.000005)\n" 1519 | ] 1520 | }, 1521 | { 1522 | "data": { 1523 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABIEAAAJOCAYAAAAgWBeaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde7xlZV0/8M8XkKQkb4wad0qyyG4/x0u/vJxfYoEm2M8bZhaWoq8kKjW1NDLUMvWXdqFS0y6mglrapJOa1UDeGRVMVBJJYgRhQFA0Rcjn98daR/Ycz2XPmX04M/O836/XeXH2Xmuv9V3PWnsz63Oe59nVWgsAAAAAe7d91rsAAAAAANaeEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAA4Buq6jNVdex617G7qKpvqaqPV9Vd1ruWPVFVvb+qfmY3qOPYqrpgRtv6k6o6eQbbWbamqvqeqrppV/cDAJOEQAC7sfGG/CtV9aWJn4N3cZtzVbVtVjVOuc+/rKrn35L7XEpVPbeq/ma965jWWO+N47m/rqreW1U/st517arxmvjagmv70bdwDdMEXqckObe19rmq+seJWm9cUP+frWGdP1hV/1xV144/583XXVXHVdXFa7XvKWq7dVU9v6o+PbbDZ6rqlVV12Az38eSqeteubKO19q7W2g/OqKQXJXluVe07y5qq6nNVdd/Vbq+qzqqqGxa8pz64KzWuooZbV1Wrqi+P+7+6ql5TVQfeknUAsDQhEMDu76GttdtM/Fy+nsVU1X7ruf9dsQfXfnZr7TZJDkryr0neuM71zMqLFlzbZ+/sBnb1RnwKT0rymiRprR0/X2uS12bH+p+8Fjuvqn2SvC3J3ye5U5K7JHlaki+vxf52RlVVkrckeVCSRya5bZIfTnJhkrn1q2xHs37ft9Y+k+SyJMfPcrsz8rwF76l7LbbSYm2ys+20wvp3G98nd01ySJJn78y2V1sTACsTAgHsoarqPmOvkOuq6oKqmptY9viq+kRVXV9Vl1TVk8bnvy3JPyY5eLJn0cKeOgt7C41/3X9mVX00yZerar/xdX9bVdur6j+r6rQp6z5y/Evx46vqsrFnw5Or6p5V9dHxeP54Yv2Tq+o9VfVHVfWFqvpkVT1wYvnBVbWpqj5fVRdX1RMnlj23qt5UVX9TVV9M8uQkv5Hk0eOxX7Bce022RVU9raquqqorqurxE8sPqKr/V1WXjvW9u6oOmOIcnTzu6/qx/R67Utu11m7KED4cUlUbxu3cvqreOp6Ha8ffD53Yz5aqet7YhtdX1Tur6qCJ5Y8ba7+mqna4UathKNTLqury8edlVfUtC9rlGRPt8rCqenBV/cd4Pn5jpWNaTFV971j3dVV1YVWdMLHsL6vqT6tqc1V9Ocn/Get8SVX9V1VdWVV/NnEODhrb5Lqxpn+rqn2q6jVJDk/yD+O18IxF6jg8yXcl+cCUdX+gqh4y/n7seJ3/2Pj4J6vq/ePv+1bVb0/U++pauqfEwRluol/ZWruxtXZDa+3c1tr7quqOSd6c5Dvr5vfzHavqR8davjCet5fWxM10VT2kqj41tsnLasGQrap6UlVdNLbX26rqkCVqe0iS+yU5sbX24dba/7TWrm2tvay19ppF2ueFVfXnE493GO5UVU+s4bNm/n34yKr64SQvSzI3Ht/nxnUPGGu/rIYeNH80cW0eV8NnwW9W1ZVJ/rQW9JgaX/OrVfWxsZ1eW1X7Tyx/znhutlXVKeO5/Mb7KsmW8fi/SVWdXVVPGX+/6/janx8f333iGL5RU1W9MUPI987xOE+b2N7jxzq2V9WvLXEuljXf1mMbX5Zk82LPjes+vIYhkNdV1buq6ugF7fb0qrowyRdX2m9r7bokb01yzMQ2nlTD5/j143n6+Ylli527u1TV28d6rqmqf1lNGwAwEAIB7IHGm7K3JXl+kjskeXqSv60xGEhyVZKfTPLtSR6f5KVV9b9aa1/O8Nfry1fRs+gxGW56bpfk60n+IckFGW5QH5jkV6rqJ3biMO6d5Ogkj85wk/fsJMcm+b4kj6qqByxY95IMPWF+K8nfVdUdxmWvT7Itw83yI5L8Tk2ERElOTPKmse5XJfmdjD1rJoZiLNpeE9u4S4ZeDock+YUkZ1bV7cdlL0lyjyT/O8O5eEaSry93jmoI4/4wyfGttQPH156/UoONN6k/m+SaJNeOT++T5C+SHJEh1PhKkj9e8NKfHo/rTkn2H2tJVR2T5E+TPG5svzsmmbzRfXaS+yT5oSQ/mOReSZ6zoF1uPbbL6UlemeRnxva4X5LTq+o7VzquBcd4qwzX1jvHen8pyWur6m4LjucFSQ5M8u4kv5fku8c653senD6u+7QM18eGJHfOEAK21trjkvxXbu5p96JFyvn+JJeM4ds0zsnNPWDun+GafcDE43PG35+U5FEZ2ujo8Th/f4ltfi7JpUleV1UnVtWd5he01q5J8lNjjfPv52uS3Jjk1AzX3f2SPDTJE5KkhrmNzk7yq2ObXJ7hfGVcflKSXxlfc+ckH0my1PDJY5O8u7X2ueUaZRrj++nFSR44viful+RjrbWPjPVsGY9vfm6ml2a4Vr8/yd0ynP9nTWzyyCS3SnJYkqUC6kdk+Oy6a4bPmJ8ea3lYhsD4/uO2Fxsy+IkM74nFTHsdfENr7ZEZPod+fDzOPxwX7Ztk41jjg5O8YGffUxP2zXCcd8vwufhNz1XV3ZP8ZZJfzHBdnpNkU+3YI+fRGXp/3XGlHdYQVJ6Q5P0TT1+R4f9D356hnc+squ+bWH5kdjx3z0xyUYbP/+9I8tzpDheAxQiBAHZ/bxn/AnpdVb1lfO5nkmxurW1urX29tfZPSbZmuElIa+1trbVPt8E5GW6o77eLdfxha+2y1tpXktwzyYbW2hmtta+11i7JEACctBPbe15r7auttXdmGNry+tbaVa21zyb5twzDSuZdleRlY0+IszPcEDykhnlH7pvkmeO2zk/y5xlCjXnva629ZWynryxWyBTtdWOSM8b9b07ypSR3q2Gozs8n+eXW2mfHnhDvba3dkBXOUYYg7e5VdUBr7YrW2oXLtNWjquq6DAHPE5M8Yj6YaK1d01r729baf7fWrs8Qjjxgwev/orX2H+PxvyFDWJIMN8FvHXuW3JDkN8e65j12PO6rWmvbk/z2gra9MckLWms3Jjkrw03aH7TWrh+P58IkP7DMcT194tq+enzuPkluk+SF47X1Lxl6Ejxm4nV/31p7T2vt60luGNvkV1trnx/b4Hdy87V4Y4YbxyPG8/dvrbW2TE2Tbpfk+inXTYYb5smb/d+dePyA3Hzz/9gkL26tXdpa+2KGsO2xVVULNzie5wckuTJDWHpFDfMDHbVUEa21D7bWzhuvx09neE/M13FCkvNaa28dz9tLcnOgmAwB1fPH6+XGDOf8vlV150V2dccMN/SzdPequvX4fvrEYiuMgcT8++661toXkrwwO37+3JDhM+ZrS73vk7y0tXbleG1vzs3vi0dl6Hl10Ricn7HIa6/PcH0s5pwM5z/jf1848XjyOpjWb42fb+cl+WSWf089e+I9dV1VvXzB8tPHz4qvLPHcY5K8ubW2pbX2tQzvpYMyBFHzXtpau3yZdk2SC8fPrO3j6181v6C1tqm19p/j5+27MrTH5FxIC8/djRlC6sPH585dZr8ArEAIBLD7e1hr7Xbjz8PG545I8sjJf+xn+Ef0dyRJVR1fwxCPz4/LHpzhH+K74rKJ34/IMKRscv+/kaHnwLSunPj9K4s8vs3E488uuHG/NMNNwcFJ5m/8J5dNDl+ZrHtRU7TXNW3H3iD/PdZ3UIaeMJ9eZLNLnqPxxvLRGf4KfkUNQ26+Z5kS39Bau12G9v1Yduy58a1V9fIahnR9Mcm5SW5XO86VM9lTY772ZGi/b7TPWNc1E+senKE95823+7xrWmv/M/4+f0O43Hlc6CUT1/Z8ex+c5LIx4Jnc71LndEOSb03yoYl2fvv4fDL0Lrk4wzCbS6pqsrfISq7N0NtoWu9O8oM1DLe7W5K/yhAWHpSh18i7x/UWa9cDktyhhuFu80O7npokY1j05NbaUUnme4G8eqkiquqYGiaxvnK8Jk7PzdfzwnP+9SSfnXj5EUn+bKIttye5KTv2EJt3TcbPnF3VWrs2Qzh2WpLP1TDE865LrH5whp4iF07U+ZYMPVfmfW4MsZYz1fsii3+GHJjkuiW2+/Ek+4w97e6bYcje9VV1RJboCbSM/2mtXT3xeLLOxbxg4j11u9bakyaWfb19c8/Phc/tcG2O7+/PZic/U5N83/iZdeskf53k3LEnY6rqhKr64MTn7Y9lx8/bhefuBRl6rP3rOFTsqVPsH4AlCIEA9kyXJXnNgn/sf1tr7YU1zIvxtxn+wn/n8R/im5PM9zJYrBfElzPcSM9b7OuwJ193WZL/XLD/A1trD17kdbNwyIJeEodnuCm4PMON84ELlk3e1C483h0eT9Fey7k6yVczzBuz0JLnKElaa+9orT0ow030JzP0pFrWeDP4pAzfTDR/8/20DIHDvVtr356bexxMU/8VGYZcDC+o+tbsOMTj8gyhwLz5dl9Llyc5bOxlNbnfpc7p1RnCpu+baOfbtmFS2oy9kp7WWvvODEOcnjoxXHClHkEfzTDfzlST0449Uj6W5KlJPjTeyG4dH39s7PUzf4wL2/UrGQLNk9vNQ7u+aYhYa+3SDEP47r7MMbwyyYeTfNd4TZyRm6+HKzIR6IztvPAG/+QF1+0BrbUPLbKfdyX50SV6CS1m2c+ZNvTIe2CGIOK/xuNc7BivyBBMfdeCcz557U7b22sxO7RRJt4jE743w3DYbzIG1udmCLW+Or5vz8nw3t0vQ0i06EtXW/CUFtv+wud2uDbHMPmQLP+ZuvQOh95Er8owXO+7x6Gwb0zyvCR3Gj9v/yU7fl61Bdv4Qmvtl1trRyR5eJLnVNWPTlsDADsSAgHsmf4myUOr6idqmGT21jVM1HtohjlfviXjX/Cr6vgkPz7x2iuT3LGqbjvx3PlJHlxVdxjnDPmVFfb/wSRfrGGy6APGGu5eVfec2RHu6E5JTquqW1XVIzPcgG1urV2W5L1Jfndsgx/IMGfPa5fZ1pVJjpwIGVZqryWNvSheneT3a5iget+q+pExWFryHFXVnce/hn9bhqEPX0ryP8vsanKfn0zyjgxzDyVDj4SvJLmuhnmSfmua7YzelOQnq+q+41/pz8iO/zZ4fYYbrg1jb5bTs/T8MLPygQxhwTPG8z2XIbw5a7GVx3PwygzzON0pGebMqnF+qhomZL7rGCJ+MUM7z7f1lbm5Z81i296W5FMZ5kKa1jkZ5uOZ7+2xZcHjZGjXp1fV4WOA+fwkr1vQ2y1j/XeuqtOr6jtrcKckJ+fmOVauTHKnqprsHXJgki+01r5Uw1wrT5xYtinJvWuYwHu/DAHV7SeW/1mGc363cf+3r6qHL3Gsb0vyngxDVn9ovM5vW1WnVtXjFln//AwTeR9SwxxAz5w4zkNqmLD6W/PN74krMwSDt0qSMVx7dZI/qGHi76qqw6rqQUvUubPekOQJVXX0+B59ziLrPCDDJPtLOSfDfFYLr4NzFzvPo2Wvx1vI2Ul+qqruP7b3szL0+Nq6mo2N19jJGc7nfI+3W2UY4vv1GiZ9n1thGydU1VHje/gL2fE9DMBOEgIB7IHG8OPEDEOwtmf46/2vJdlnHBp1WoYbmWszTHa6aeK1n8xwE3rJOJTi4AxfgX1Bks9kmA9n2a/qHocIPDTDHBr/maE3xp9nmDx5LXwgwwS6V2cYGvCINkyAmwxzWByZ4S/Yb84wf8Y/LbOt+a9Xv6aqPrxSe03h6Un+Pcl5ST6fYZLifZY7R+PP08aaP5/hhvIXd2KfL05yyhgIvCzDjdXVGYKBt0+7kTbM2/OUJK/L0Pvh2gyTKM97foabv4+Ox/jh8bk1M/YcOCHDxLFXJ/mTJD87XrdLeWaGIV/vH4c/vStD76hkuG7eleEm9H1J/qS1tmVc9rsZAo/rqurpS2z75dlxHqSVnJMhhDl3icfJ0MPl7zIEmJ/OcA0sNcTlq+MxbMkwD80FGc7TE8blF2S4Xi8dj+MOGSZ9fkJVfSnJmZl4P7fWrsjwnvnDDO17aIZze8O4/PUZJhb/u7Etz88wCfA3GcOMEzP05Pi7DCHbBRl6KS32DU5vyzC/08czXKtvmVi2b5JfzzBE65oM84790rjs7Rk+m66qm7+18FcyvH+2ZggG3p5h8uRd1lp7c4beK+9J8h8Z5ihLxjaqYVjXERm/TWsJC8/7uRmGcS03n80LMkz8fF1VnbrK8n+zbh5O+KWJ9ppKa+2jGYL0l2f43Hpghm9/m3Zy9HkXjdff5zPMsXTi2Cvv6gyfmf+Q4Tw/LMu3YzKE/lsyXP/nZhhG+v5lXwHAkmrpP0YAwPqrqpOTPKG1dt+V1oVZG3t1fSTDt1bNehLkdTf21Phchm9Je99617M7quFr6t+X5IDWWquqMzMM91tyXiYA2F1NNcYdAKBHbfjWtGPWu45ZGoc8vjdDz5ZnZ5hseLE5f7pVVf83Q6+lb8/QY+wt88O4WmtPWc/aAGBXGA4GANCX+2cYxnlVhuE+PzUOw+Nmp2UYLndRhmFIp61vOQAwG4aDAQAAAHRATyAAAACADqzbnEAHHXRQO/LII9dr9wAAAAB7nQ996ENXt9Y2LLZs3UKgI488Mlu3bl2v3QMAAADsdarq0qWWGQ4GAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAq2hubm5zM3NrXcZAAAAAEIgAAAAgB4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6MBUIVBVHVdVF1XVxVX1rEWWn1xV26vq/PHnCbMvFQAAAIDV2m+lFapq3yRnJnlQkm1JzquqTa21jy9Y9ezW2qlrUCMAAAAAu2iankD3SnJxa+2S1trXkpyV5MS1LQsAAACAWZomBDokyWUTj7eNzy308Kr6aFW9qaoOW2xDVXVKVW2tqq3bt29fRbkAAAAArMY0IVAt8lxb8PgfkhzZWvuBJO9K8leLbai19orW2sbW2sYNGzbsXKUAAAAArNo0IdC2JJM9ew5NcvnkCq21a1prN4wPX5nkHrMpDwAAAIBZmCYEOi/J0VV1VFXtn+SkJJsmV6iq75h4eEKST8yuRAAAAAB21YrfDtZau6mqTk3yjiT7Jnl1a+3CqjojydbW2qYkp1XVCUluSvL5JCevYc0AAAAA7KQVQ6Akaa1tTrJ5wXOnT/z+60l+fbalAQAAADAr0wwHAwAAAGAPJwQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA5MFQJV1XFVdVFVXVxVz1pmvUdUVauqjbMrEQAAAIBdtWIIVFX7JjkzyfFJjknymKo6ZpH1DkxyWpIPzLpIAAAAAHbNND2B7pXk4tbaJa21ryU5K8mJi6z3vCQvSvLVGdYHAAAAwAxMEwIdkuSyicfbxue+oap+OMlhrbW3LrehqjqlqrZW1dbt27fvdLEAAAAArM40IVAt8lz7xsKqfZK8NMnTVtpQa+0VrbWNrbWNGzZsmL5KAAAAAHbJNCHQtiSHTTw+NMnlE48PTHL3JFuq6jNJ7pNkk8mhAQAAAHYf04RA5yU5uqqOqqr9k5yUZNP8wtbaF1prB7XWjmytHZnk/UlOaK1tXZOKAQAAANhpK4ZArbWbkpya5B1JPpHkDa21C6vqjKo6Ya0LBAAAAGDX7TfNSq21zUk2L3ju9CXWndv1sgAAAACYpWmGgwEAAACwhxMCAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAf2W+8C9gpVq1ve2uxrAQAAAFiEnkAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANCBqUKgqjquqi6qqour6lmLLH9yVf17VZ1fVe+uqmNmXyoAAAAAq7ViCFRV+yY5M8nxSY5J8phFQp7Xtda+v7X2Q0lelOT3Z14pAAAAAKs2TU+geyW5uLV2SWvta0nOSnLi5AqttS9OPPy2JG12JQIAAACwq/abYp1Dklw28XhbknsvXKmqnpLkqUn2T/Jji22oqk5JckqSHH744TtbKwAAAACrNE1PoFrkuW/q6dNaO7O19l1JnpnkOYttqLX2itbaxtbaxg0bNuxcpQAAAACs2jQh0LYkh008PjTJ5cusf1aSh+1KUQAAAADM1jQh0HlJjq6qo6pq/yQnJdk0uUJVHT3x8CFJPjW7EgEAAADYVSvOCdRau6mqTk3yjiT7Jnl1a+3CqjojydbW2qYkp1bVsUluTHJtkp9by6IBAAAA2DnTTAyd1trmJJsXPHf6xO+/POO6AAAAAJihaYaDAQAAALCHEwIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAJ1ZG5uLnNzc+tdBgAAALAOhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAi0B5ibm8vc3Nx6lwEAAADswYRAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRgv/UugAlVq1/e2mxrAQAAAPYqegIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0wLeD7QG2rHcBAAAAwB5PTyAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6MBUIVBVHVdVF1XVxVX1rEWWP7WqPl5VH62qf66qI2ZfKgAAAACrtWIIVFX7JjkzyfFJjknymKo6ZsFqH0mysbX2A0nelORFsy4UAAAAgNWbpifQvZJc3Fq7pLX2tSRnJTlxcoXW2r+21v57fPj+JIfOtkwAAAAAdsU0IdAhSS6beLxtfG4pv5DkHxdbULUfl04AAA83SURBVFWnVNXWqtq6ffv26asEAAAAYJdMEwLVIs+1RVes+pkkG5O8eLHlrbVXtNY2ttY2btiwYfoqAQAAANgl+02xzrYkh008PjTJ5QtXqqpjkzw7yQNaazfMpjwAAAAAZmGankDnJTm6qo6qqv2TnJRk0+QKVfXDSV6e5ITW2lWzLxMAAACAXbFiCNRauynJqUnekeQTSd7QWruwqs6oqhPG1V6c5DZJ3lhV51fVpiU2BwAAAMA6mGY4WFprm5NsXvDc6RO/HzvjuvYKW9a7AAAAAIDRNMPBAAAAANjDCYEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6sN96F8AaqFr98tZmWwsAAACwW9ATCAAAAKADQiAAAACADgiBWJW5ubnMzc2tdxkAAADAlIRAAAAAAB0QAgEAAAB0YKoQqKqOq6qLquriqnrWIsvvX1UfrqqbquoRsy8TAAAAgF2xYghUVfsmOTPJ8UmOSfKYqjpmwWr/leTkJK+bdYEAAAAA7Lr9pljnXkkubq1dkiRVdVaSE5N8fH6F1tpnxmVfX4MaAQAAANhF0wwHOyTJZROPt43P7bSqOqWqtlbV1u3bt69mEwAAAACswjQhUC3yXFvNzlprr2itbWytbdywYcNqNgEAAADAKkwTAm1LctjE40OTXL425QAAAACwFqYJgc5LcnRVHVVV+yc5KcmmtS0Lds7c3Fzm5ubWuwwAAADYba0YArXWbkpyapJ3JPlEkje01i6sqjOq6oQkqap7VtW2JI9M8vKqunAtiwYAAABg50zz7WBprW1OsnnBc6dP/H5ehmFiAAAAAOyGphkOBgAAAMAeTggEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB/Zb7wLYjVWtfp3WZlsLAAAAsEv0BGJdzc3NZW5ubr3LAAAAgL2eEAgAAACgA0IgAAAAgA6YE4hbxkrzC5lbCAAAANaUnkAAAAAAHRACAQAAAHTAcDDW1Zb1LgAAAAA6oScQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQT5ubmMjc3t95lAAAAwMwJgQAAAAA6IAQCAAAA6IAQCAAAAKAD+613AbBTqla3vLXZ1wIAAAB7ECEQq7JlvQsAAAAAdorhYLAGfMsYAAAAuxshEAAAAEAHhEAAAAAAHTAnEH0ywTQAAACd0RMIdnPmFwIAAGAW9ASCXbHaHkXJLd6raD5I2rJlyy26XwAAAHYPQiDYHawUJi23jiFqAAAATMFwMAAAAIAO6AkEu7kt610AAAAAewU9gYCdMquJqvfmCa/35mMDAAD2XHoCwRrYsl47NrfQqu2OE2fvjjUBAAB7LiEQTNiy3gXsTlb7zWcLw6RZbWcJgpKVaaNbjrYGAGB3NlUIVFXHJfmDJPsm+fPW2gsXLP+WJH+d5B5Jrkny6NbaZ2ZbKtC11YZJyY6B0i21neXWuYWDslmZVcAxy6Bkd6wJAAB2VyuGQFW1b5IzkzwoybYk51XVptbaxydW+4Uk17bW7lpVJyX5vSSPXouCgfW1ZS/dzl5hd+u9tbsFbnvQcMndLdwS3N1y9tbjAgB2D9P0BLpXkotba5ckSVWdleTEJJMh0IlJnjv+/qYkf1xV1Vrnk4wAe4wt613AGtqyl25nltva6e2scVC2ZYXlM9vOwm2t8Xam2tYtHErOLaxrnbcz1fIp23qnaprVdpbZ1h63nYXbWuPtTLWt3a2N1mo7S9ibA2kBMHBLqZVymqp6RJLjWmtPGB8/Lsm9W2unTqzzsXGdbePjT4/rXL1gW6ckOSVJDj/88HtceumlszwWVrA3/89lbz429jyux3459wAArLeq+lBrbeNiy6bpCbRYpL8wOZpmnbTWXpHkFUmyceNGvYSAvZIAoF/OPQAAu7N9plhnW5LDJh4fmuTypdapqv2S3DbJ52dRIAAAAAC7bpoQ6LwkR1fVUVW1f5KTkmxasM6mJD83/v6IJP9iPiAAAACA3ceKw8FaazdV1alJ3pHhK+Jf3Vq7sKrOSLK1tbYpyauSvKaqLs7QA+iktSwaAAAAgJ0zzZxAaa1tTrJ5wXOnT/z+1SSPnG1pAAAAAMzKNMPBAAAAANjDCYEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOiAEAgAAAOiAEAgAAACgA0IgAAAAgA4IgQAAAAA6IAQCAAAA6IAQCAAAAKADQiAAAACADgiBAAAAADogBAIAAADogBAIAAAAoANCIAAAAIAOCIEAAAAAOrDfehcAs7Bly5b1LgEAAAB2a0KgjghKAAAAoF+GgwEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB0QAgEAAAB0QAgEAAAA0AEhEAAAAEAHhEAAAAAAHRACAQAAAHRACAQAAADQASEQAAAAQAeEQAAAAAAdEAIBAAAAdEAIBAAAANABIRAAAABAB4RAAAAAAB2o1tr67Lhqe5JL12Xnt6yDkly93kXAjLmu2Ru5rtkbua7Z27im2Ru5rpm1I1prGxZbsG4hUC+qamtrbeN61wGz5Lpmb+S6Zm/kumZv45pmb+S65pZkOBgAAABAB4RAAAAAAB0QAq29V6x3AbAGXNfsjVzX7I1c1+xtXNPsjVzX3GLMCQQAAADQAT2BAAAAADogBAIAAADogBBoDVXVcVV1UVVdXFXPWu96YDWq6tVVdVVVfWziuTtU1T9V1afG/95+PWuEnVFVh1XVv1bVJ6rqwqr65fF51zV7rKq6dVV9sKouGK/r3x6fP6qqPjBe12dX1f7rXSvsrKrat6o+UlVvHR+7rtmjVdVnqurfq+r8qto6PuffIfz/9u4fNK8yiuP495BWEBWK1Yo0ShE6tINGkFKoQw0iVYt1UFAUOgguDgpKURdB6OCiLm4qdvAPRa12tFRFJ5GqoFAHFdGS0gxa1KVS/TncJxhClsS+7/Xm/X4gvPc8ucMZDuG85z73yVg4BBqRqpoCXgJuB7YD91fV9n6zklblNWDPkrUngeNJtgLHWywNxXng8STbgJ3AI+3vs3WtITsHzCa5AZgB9lTVTuA54IVW178CD/WYo7RajwInF8XWtdaCW5LMJLmpxfYhGguHQKOzA/guyQ9J/gTeAvb1nJO0Ykk+AX5ZsrwPONSuDwF3jzUp6T9IcjrJF+36d7ovFpuxrjVg6fzRwvXtJ8As8HZbt641OFU1DdwJvNziwrrW2mQforFwCDQ6m4GfF8Wn2pq0FlyV5DR0X6iBTT3nI61KVW0BbgQ+w7rWwLVXZr4C5oFjwPfA2STn2y32IhqiF4EDwN8t3oh1reEL8EFVnaiqh9uafYjGYl3fCaxhtcxaxp6FJGlZVXUp8A7wWJLfuofL0nAl+QuYqaoNwBFg23K3jTcrafWqai8wn+REVe1eWF7mVutaQ7MryVxVbQKOVdW3fSekyeFOoNE5BVyzKJ4G5nrKRbrQzlTV1QDtc77nfKQVqar1dAOg15O825ata60JSc4CH9OdebWhqhYe+tmLaGh2AXdV1Y90RyvM0u0Msq41aEnm2uc83dB+B/YhGhOHQKPzObC1/feCi4D7gKM95yRdKEeB/e16P/B+j7lIK9LOk3gFOJnk+UW/sq41WFV1ZdsBRFVdDNxKd97VR8A97TbrWoOS5Kkk00m20PXSHyZ5AOtaA1ZVl1TVZQvXwG3AN9iHaEwqcffkqFTVHXRPK6aAV5Mc7DklacWq6k1gN3AFcAZ4BngPOAxcC/wE3Jtk6eHR0v9SVd0MfAp8zb9nTDxNdy6Qda1Bqqrr6Q4SnaJ7yHc4ybNVdR3dDorLgS+BB5Oc6y9TaXXa62BPJNlrXWvIWv0eaeE64I0kB6tqI/YhGgOHQJIkSZIkSRPA18EkSZIkSZImgEMgSZIkSZKkCeAQSJIkSZIkaQI4BJIkSZIkSZoADoEkSZIkSZImgEMgSZIkSZKkCeAQSJIkSZIkaQL8A7g12laaqbLsAAAAAElFTkSuQmCC\n", 1524 | "text/plain": [ 1525 | "
" 1526 | ] 1527 | }, 1528 | "metadata": { 1529 | "needs_background": "light" 1530 | }, 1531 | "output_type": "display_data" 1532 | } 1533 | ], 1534 | "source": [ 1535 | "#Random Forest Importances\n", 1536 | "importances = rf_tree.feature_importances_\n", 1537 | "std = np.std([tree.feature_importances_ for tree in rf_tree.estimators_],\n", 1538 | " axis=0)\n", 1539 | "indices = np.argsort(importances)[::-1]\n", 1540 | "\n", 1541 | "# Print the feature ranking\n", 1542 | "print(\"Feature ranking:\")\n", 1543 | "\n", 1544 | "for f in range(final_data_X_train.shape[1]):\n", 1545 | " print(\"%d. %s (%f)\" % (f, final_data_X_train.columns[indices[f]], importances[indices[f]]))\n", 1546 | "\n", 1547 | "# Plot the feature importances of the forest\n", 1548 | "plt.figure()\n", 1549 | "plt.title(\"Feature Importances Random Forest (Two-Stage Clustering) with Error Bars\")\n", 1550 | "plt.bar(range(final_data_X_train.shape[1]), importances[indices],\n", 1551 | " color=\"r\", yerr=std[indices], align=\"center\")\n", 1552 | "plt.rcParams['figure.figsize'] = [20, 10]\n", 1553 | "plt.savefig(\"C:/Users/zohai/OneDrive/桌面/Comp 152/Final Project Material/Code/Data Folder/features_importances.png\")" 1554 | ] 1555 | }, 1556 | { 1557 | "cell_type": "code", 1558 | "execution_count": null, 1559 | "metadata": {}, 1560 | "outputs": [], 1561 | "source": [] 1562 | }, 1563 | { 1564 | "cell_type": "code", 1565 | "execution_count": null, 1566 | "metadata": {}, 1567 | "outputs": [], 1568 | "source": [] 1569 | } 1570 | ], 1571 | "metadata": { 1572 | "kernelspec": { 1573 | "display_name": "Python 3", 1574 | "language": "python", 1575 | "name": "python3" 1576 | }, 1577 | "language_info": { 1578 | "codemirror_mode": { 1579 | "name": "ipython", 1580 | "version": 3 1581 | }, 1582 | "file_extension": ".py", 1583 | "mimetype": "text/x-python", 1584 | "name": "python", 1585 | "nbconvert_exporter": "python", 1586 | "pygments_lexer": "ipython3", 1587 | "version": "3.7.4" 1588 | } 1589 | }, 1590 | "nbformat": 4, 1591 | "nbformat_minor": 2 1592 | } 1593 | --------------------------------------------------------------------------------