diff --git a/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py b/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py index 537398a3de1620dc415b623430446ddbae4d41cf..6dd7f47dbcb1103ddba5c99dac79a8accd4fcfd8 100644 --- a/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py +++ b/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py @@ -24,16 +24,12 @@ from extreme_data.meteo_france_data.scm_models_data.utils import Season def main(): study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days][:1] - # study_classes = [SafranDateFirstSnowfall] - # study_classes = [CrocusSnowLoadTotal] - study_classes = [SafranPrecipitation1Day, CrocusSnowLoadTotal, SafranDateFirstSnowfall][2:] - study_classes = [CrocusSnowLoad3Days, SafranSnowfall3Days, SafranSnowfall5Days] seasons = [Season.annual, Season.winter, Season.spring, Season.automn][:1] fast = False if fast is None: massif_names = None - altitudes_list = altitudes_for_groups[2:3] + altitudes_list = altitudes_for_groups[1:2] elif fast: massif_names = ['Vanoise', 'Haute-Maurienne', 'Vercors'][:] altitudes_list = altitudes_for_groups[2:3] @@ -63,18 +59,21 @@ def plot_visualizers(massif_names, visualizer_list): for relative in [True, False]: plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative) # plot_coherence_curves(massif_names, visualizer_list) - pass + plot_coherence_curves(['Vanoise'], visualizer_list) def plot_visualizer(massif_names, visualizer): # Plot time series - visualizer.studies.plot_maxima_time_series(massif_names=massif_names) + # visualizer.studies.plot_maxima_time_series(massif_names) + visualizer.studies.plot_maxima_time_series(['Vanoise']) # Plot moments against altitude # for std in [True, False][:]: # for change in [True, False, None]: # studies.plot_mean_maxima_against_altitude(massif_names=massif_names, std=std, change=change) # Plot the results for the model that minimizes the individual aic plot_individual_aic(visualizer) + + # Plot the results for the model that minimizes the total aic # plot_total_aic(model_classes, visualizer) pass diff --git a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitude_group.py b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitude_group.py index 8a1114ca28e77e0322161301fa684280310ac74b..9b09d5abc3eb070d2ad686f68e5eb7ec505a950b 100644 --- a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitude_group.py +++ b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitude_group.py @@ -1,6 +1,8 @@ from enum import Enum # The order is important +MIDDLE_WORD = 'and' +START_WORD = 'between' altitudes_for_groups = [ [600, 900], [1200, 1500, 1800], @@ -25,8 +27,9 @@ class AbstractAltitudeGroup(object): @property def xlabel(self): - return 'Elevation = {} m. Models are estimated with\n' \ - 'maxima from range {}, i.e. {}'.format(self.reference_altitude, self.group_id, self.formula) + return 'Elevation = {} m. Models are fitted with\n' \ + 'maxima from elevation range {}, i.e.\n' \ + 'maxima {}'.format(self.reference_altitude, self.group_id, self.formula) @property def formula(self): @@ -40,14 +43,14 @@ class AbstractAltitudeGroup(object): formula = 'above 3000 m' else: min_altitude, max_altitude = 1000 * i, 1000 * (i + 1) - formula = 'from {} m to {} m'.format(min_altitude, max_altitude) + formula = '{} {} m {} {} m'.format(START_WORD, min_altitude, MIDDLE_WORD, max_altitude) return formula @property def formula_upper(self): f = self.formula - f = f.replace('from ', '') - f = f.replace(' to ', '-') + f = f.replace('{} '.format(START_WORD), '') + f = f.replace(' {} '.format(MIDDLE_WORD), '-') return f[0].upper() + f[1:] diff --git a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitudes_studies_visualizer_for_non_stationary_models.py b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitudes_studies_visualizer_for_non_stationary_models.py index ef29f0d6b75102fdbc0315aff4b31d424616d2c4..de0926238bbb7a74d2232a71e3805156b31c23b6 100644 --- a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitudes_studies_visualizer_for_non_stationary_models.py +++ b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitudes_studies_visualizer_for_non_stationary_models.py @@ -65,6 +65,11 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): type(self.altitude_group), self.display_only_model_that_pass_anderson_test) self._massif_name_to_one_fold_fit[massif_name] = old_fold_fit + # Print number of massif without any validated fit + massifs_without_any_validated_fit = [massif_name + for massif_name, old_fold_fit in self._massif_name_to_one_fold_fit.items() + if not old_fold_fit.has_at_least_one_valid_model] + print('Not validated:', len(massifs_without_any_validated_fit), massifs_without_any_validated_fit) # Cache self._method_name_and_order_to_massif_name_to_value = {} self._method_name_and_order_to_max_abs = {} @@ -97,7 +102,7 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): def massif_name_to_one_fold_fit(self) -> Dict[str, OneFoldFit]: return {massif_name: old_fold_fit for massif_name, old_fold_fit in self._massif_name_to_one_fold_fit.items() if not self.display_only_model_that_pass_anderson_test - or old_fold_fit.has_at_least_one_valid_non_stationary_model} + or old_fold_fit.has_at_least_one_valid_model} def plot_moments(self): for method_name in self.moment_names: @@ -270,7 +275,8 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): label=label, plot_name=label, fontsize_label=15, - add_x_label=True, graduation=0.1, massif_name_to_text=self.massif_name_to_best_name, + add_x_label=True, graduation=0.1, + massif_name_to_text=self.massif_name_to_best_name, cmap=matplotlib.cm.get_cmap('BrBG_r'), altitude=self.altitude_group.reference_altitude, add_colorbar=self.add_colorbar, diff --git a/projects/altitude_spatial_model/preliminary_analysis.py b/projects/altitude_spatial_model/preliminary_analysis.py index a8f5b66546736088da62cd464cfa703614434167..9b33c8d59e21109fe8bc33aa19c63494e648d590 100644 --- a/projects/altitude_spatial_model/preliminary_analysis.py +++ b/projects/altitude_spatial_model/preliminary_analysis.py @@ -43,7 +43,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): print(param_name, np.mean([c for c in massif_name_to_linear_coef.values()])) # Display x label - xticks = [1000 * i for i in range(1, 5)] + xticks = [1000 * i for i in range(1, 4)] ax.set_xticks(xticks) fontsize_label = 15 ax.tick_params(labelsize=fontsize_label)