def RegionalMetrics(y_pred, y_test, Regions, lons, lats, lons1, lats1, filenames_train, filenames_test, savefolder, areas_flat): Ntest, p = y_pred.shape print(y_pred.shape) # check Ntest == 1 full_metrics_dict = {} Nreg = len(Regions) # Do global metrics on full grid metrics_dict = CalcMetrics(y_test[0, :], y_pred[0, :], areas_flat) # Initialise full metric dictionary and add the full global metrics keys = metrics_dict.keys() full_metrics_dict = {"Regions": ["Full Grid"] + Regions + ["All Regions"]} for key in keys: full_metrics_dict[key] = np.zeros((Nreg + 2)) full_metrics_dict[key][0] = metrics_dict[key] # Now do regional metrics by taking average over regions if p > 1000: y_pred_reg = split_into_regions(y_pred, areas_flat, lons, lats, lons1, lats1, Regions) y_test_reg = split_into_regions(y_test, areas_flat, lons, lats, lons1, lats1, Regions) else: y_pred_reg = y_pred y_test_reg = y_test for (i, reg) in zip(range(Nreg), Regions): print(i, y_pred_reg[0, i]) metrics_dict = CalcMetrics(np.array([y_test_reg[0, i]]), np.array([y_pred_reg[0, i]]), np.array([1.0])) for key in metrics_dict.keys(): full_metrics_dict[key][i + 1] = metrics_dict[key] metrics_dict = CalcMetrics(y_test_reg[0, :], y_pred_reg[0, :], np.ones(Nreg)) for key in keys: full_metrics_dict[key][Nreg + 1] = metrics_dict[key] colnames = ["Regions"] + list(keys) print(colnames) print(full_metrics_dict) df = pd.DataFrame(data=full_metrics_dict, columns=colnames) print(df) df.to_csv(savefolder + 'RegionalMetrics.csv') return full_metrics_dict
def regional_y(self, regions): print((self.y.shape)) print(self.area_y.shape) y_regional = split_into_regions(self.y, self.area_y, self.lons, self.lats, self.lons1, self.lats1, regions) self.y = y_regional self.y_regions = regions self.area_y = np.ones(len(regions)) self.y_type = 'Regional' self.info = self.info + '\nRegional y'
def regional_X(self, regions): # this should only be used if X is still the original X # add an error catcher here for if regional_X or mean_X etc. # has been applied already- or if already split into training data X_regional = split_into_regions(self.X, self.area_X, self.lons, self.lats, self.lons1, self.lats1, regions) self.X = X_regional self.X_type = 'Regional' self.area_X = np.ones(len(regions)) self.info = self.info + '\nRegional X'