diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py index 4d65c31b328c5b2015eaf903b6d491a296807b4c..b9be5632c3b2391dfad98b8c889f5f762922db28 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py @@ -21,21 +21,32 @@ class AbstractHypercubeVisualizer(object): trend_test_class, nb_data_reduced_for_speed=False, save_to_file=False, + first_starting_year=None, last_starting_year=None, + exact_starting_year=None, verbose=True): self.verbose = verbose - self.last_starting_year = last_starting_year + self.save_to_file = save_to_file + self.trend_test_class = trend_test_class + self.tuple_to_study_visualizer = tuple_to_study_visualizer # type: Dict[Tuple, StudyVisualizer] + + if exact_starting_year is not None: + assert first_starting_year is None + assert last_starting_year is None + self.first_starting_year, self.first_starting_year = exact_starting_year, exact_starting_year + else: + default_first_starting_year, *_, default_last_starting_year = self.all_potential_starting_years + self.first_starting_year = first_starting_year if first_starting_year is not None else default_first_starting_year + self.last_starting_year = last_starting_year if last_starting_year is not None else default_last_starting_year if isinstance(nb_data_reduced_for_speed, bool): self.nb_data_for_fast_mode = 7 if nb_data_reduced_for_speed else None else: assert isinstance(nb_data_reduced_for_speed, int) self.nb_data_for_fast_mode = nb_data_reduced_for_speed - self.save_to_file = save_to_file - self.trend_test_class = trend_test_class - self.tuple_to_study_visualizer = tuple_to_study_visualizer # type: Dict[Tuple, StudyVisualizer] + if self.verbose: print('Hypercube with parameters:') - print('Starting year:', self.last_starting_year) + print('Starting years:', self.starting_years) print('Trend test class:', get_display_name_from_object_type(self.trend_test_class)) # Main attributes defining the hypercube @@ -44,11 +55,13 @@ class AbstractHypercubeVisualizer(object): def trend_test_name(self): return get_display_name_from_object_type(self.trend_test_class) + @property + def all_potential_starting_years(self): + return self.study_visualizer.starting_years + @cached_property def starting_years(self): - starting_years = self.study_visualizer.starting_years - if self.last_starting_year is not None: - starting_years = [year for year in starting_years if year <= self.last_starting_year] + starting_years = [year for year in self.all_potential_starting_years if self.first_starting_year <= year <= self.last_starting_year] if self.nb_data_for_fast_mode is not None: starting_years = starting_years[:self.nb_data_for_fast_mode] return starting_years diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py index 31efe3ca0ed8a0a900cd5b3c715c361e657042bc..000032616d6fe865fcd82ceb823f7ca7215fba0a 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py @@ -132,14 +132,17 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): ylabel_to_series = self.ylabel_to_series(reduction_function, isin_parameters) assert len(axes_remaining) == len(ylabel_to_series), '{}, {}'.format(len(axes_remaining), len(ylabel_to_series)) for ax_idx, (ax, (ylabel, serie)) in enumerate(zip(axes_remaining, ylabel_to_series.items())): + assert isinstance(serie, pd.Series) xlabel_values = list(serie.index) values = list(serie.values) - argmax_idx = np.argmax(values) - best_year = xlabel_values[argmax_idx] - plot_title += '{}'.format(best_year) + + if plot_title is not None: + argmax_idx = np.argmax(values) + best_year = xlabel_values[argmax_idx] + plot_title += '{}'.format(best_year) + ax.set_title(plot_title) ax.plot(xlabel_values, values) ax.set_ylabel(ylabel) - ax.set_title(plot_title) specific_title = 'Evolution of {} trends (significative or not) wrt to the {} with {}'.format(subtitle, xlabel, self.trend_test_name) diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py index 13877ca4363139e3adfa54d962dbddf942187053..3589c2d1b81211cb5ea87f1870305ca133ef6f3b 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py @@ -5,6 +5,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual AltitudeHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ Altitude_Hypercube_Year_Visualizer, AltitudeHypercubeVisualizerBis, AltitudeHypercubeVisualizerWithoutTrendType +from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.quantity_altitude_visualizer import \ + QuantityAltitudeHypercubeVisualizer class AltitudeHypercubeVisualizerExtended(AltitudeHypercubeVisualizer): @@ -127,3 +129,12 @@ class AltitudeHypercubeVisualizerWithoutTrendExtended(AltitudeHypercubeVisualize class AltitudeYearHypercubeVisualizerExtended(AltitudeHypercubeVisualizerExtended, Altitude_Hypercube_Year_Visualizer): pass + + +# Quantity hypercube + +class QuantityHypercubeWithoutTrend(AltitudeHypercubeVisualizerWithoutTrendType, QuantityAltitudeHypercubeVisualizer): + pass + +class QuantityHypercubeWithoutTrendExtended(AltitudeHypercubeVisualizerExtended, QuantityHypercubeWithoutTrend): + pass diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py index 8908e6161b90bf037180172b9425e256164046a5..8fabfd1c31d4909b605c5090b5cf53796cb49e49 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py @@ -6,7 +6,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual AltitudeHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer_extended import \ AltitudeYearHypercubeVisualizerExtended, AltitudeHypercubeVisualizerExtended, \ - AltitudeHypercubeVisualizerBisExtended, AltitudeHypercubeVisualizerWithoutTrendExtended + AltitudeHypercubeVisualizerBisExtended, AltitudeHypercubeVisualizerWithoutTrendExtended, \ + QuantityHypercubeWithoutTrend, QuantityHypercubeWithoutTrendExtended from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ Altitude_Hypercube_Year_Visualizer, AltitudeHypercubeVisualizerWithoutTrendType from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.quantity_altitude_visualizer import \ @@ -45,18 +46,20 @@ def full_quantity_altitude_hypercube(): add_detailed_plots = True altitudes = ALL_ALTITUDES[3:-6] study_classes = SCM_STUDIES - for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:]: + for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:1]: visualizers = [StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) for study in study_iterator_global(study_classes=study_classes, only_first_one=only_first_one, altitudes=altitudes)] study_classes_str = [get_display_name_from_object_type(c) for c in study_classes] quantity_altitude_tuples = list(product(study_classes_str, altitudes)) quantity_altitude_to_visualizer = OrderedDict(zip(quantity_altitude_tuples, visualizers)) - visualizer = QuantityAltitudeHypercubeVisualizer(quantity_altitude_to_visualizer, save_to_file=save_to_file, - trend_test_class=trend_test_class, fast=fast) - visualizer.visualize_year_trend_test(add_detailed_plots=add_detailed_plots) - visualizer.visualize_massif_trend_test(add_detailed_plots=add_detailed_plots) - visualizer.visualize_altitude_trend_test(add_detailed_plots=add_detailed_plots) + visualizer = QuantityHypercubeWithoutTrendExtended(quantity_altitude_to_visualizer, + save_to_file=save_to_file, + trend_test_class=trend_test_class, + nb_data_reduced_for_speed=False, + last_starting_year=2007, + ) + visualizer.vsualize_year_trend_by_regions_and_altitudes() def fast_altitude_hypercube(): @@ -112,19 +115,18 @@ def fast_altitude_without_trend_type_hypercube_extended(): for study in study_iterator(study_class=study_class, only_first_one=only_first_one, altitudes=altitudes)] altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers)) - visualizer = AltitudeHypercubeVisualizerWithoutTrendExtended(altitude_to_visualizer, + visualizer = QuantityHypercubeWithoutTrendExtended(altitude_to_visualizer, save_to_file=save_to_file, trend_test_class=trend_test_class, nb_data_reduced_for_speed=nb_data_reduced_for_speed, last_starting_year=last_starting_year) visualizer.vsualize_year_trend_by_regions_and_altitudes() - - # visualizer = AltitudeHypercubeVisualizerWithoutTrendType(altitude_to_visualizer, - # save_to_file=save_to_file, - # trend_test_class=trend_test_class, - # nb_data_reduced_for_speed=nb_data_reduced_for_speed, - # last_starting_year=last_starting_year) + # visualizer = QuantityHypercubeWithoutTrend(altitude_to_visualizer, + # save_to_file=save_to_file, + # trend_test_class=trend_test_class, + # nb_data_reduced_for_speed=nb_data_reduced_for_speed, + # last_starting_year=last_starting_year) # visualizer.visualize_year_trend_test() @@ -134,7 +136,7 @@ def fast_altitude_year_hypercube_extended(): nb_data_reduced_for_speed = True altitudes = [ALL_ALTITUDES[3], ALL_ALTITUDES[-7]] for study_class in SCM_STUDIES[:2]: - for last_starting_year in [None, 1989, 1999][:2]: + for exact_starting_year in [1982]: for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:2]: visualizers = [ StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) @@ -144,7 +146,7 @@ def fast_altitude_year_hypercube_extended(): visualizer = AltitudeHypercubeVisualizerExtended(altitude_to_visualizer, save_to_file=save_to_file, trend_test_class=trend_test_class, nb_data_reduced_for_speed=nb_data_reduced_for_speed, - last_starting_year=last_starting_year) + last_starting_year=exact_starting_year) # visualizer.visualize_year_trend_test() # visualizer.visualize_altitude_trend_test() # visualizer.visualize_massif_trend_test_by_altitudes() @@ -225,13 +227,13 @@ def full_altitude_year_hypercube__without_trend_extended(): for study in study_iterator(study_class=study_class, only_first_one=only_first_one, altitudes=altitudes, nb_consecutive_days=days)] altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers)) - visualizer = AltitudeHypercubeVisualizerWithoutTrendExtended(altitude_to_visualizer, - save_to_file=save_to_file, - trend_test_class=trend_test_class, - nb_data_reduced_for_speed=nb_data_reduced_for_speed, - last_starting_year=last_starting_year, - ) - visualizer.vsualize_year_trend_by_regions_and_altitudes() + # visualizer = QuantityHypercubeWithoutTrendExtended(altitude_to_visualizer, + # save_to_file=save_to_file, + # trend_test_class=trend_test_class, + # nb_data_reduced_for_speed=nb_data_reduced_for_speed, + # last_starting_year=last_starting_year, + # ) + # visualizer.vsualize_year_trend_by_regions_and_altitudes() def fast_quantity_altitude_hypercube(): @@ -247,19 +249,21 @@ def fast_quantity_altitude_hypercube(): study_classes_str = [get_display_name_from_object_type(c) for c in study_classes] quantity_altitude_tuples = list(product(study_classes_str, altitudes)) quantity_altitude_to_visualizer = OrderedDict(zip(quantity_altitude_tuples, visualizers)) - visualizer = QuantityAltitudeHypercubeVisualizer(quantity_altitude_to_visualizer, save_to_file=save_to_file, - trend_test_class=trend_test_class, fast=fast) + visualizer = QuantityHypercubeWithoutTrend(quantity_altitude_to_visualizer, save_to_file=save_to_file, + trend_test_class=trend_test_class, nb_data_reduced_for_speed=True) visualizer.visualize_year_trend_test() - visualizer.visualize_massif_trend_test() - visualizer.visualize_altitude_trend_test() + # visualizer.visualize_massif_trend_test() + # visualizer.visualize_altitude_trend_test() def main_run(): # fast_altitude_hypercube() # fast_altitude_year_hypercube() + # fast_quantity_altitude_hypercube() # fast_altitude_without_trend_type_hypercube_extended() - full_altitude_year_hypercube__without_trend_extended() + # full_altitude_year_hypercube__without_trend_extended() + full_quantity_altitude_hypercube() # fast_altitude_year_hypercube_extended() # full_altitude_year_hypercube_extended()