Commit 84ec6e70 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[HYPERCUBE] add first and last year argument. add exact year argument. fix...

[HYPERCUBE] add first and last year argument. add exact year argument. fix ploting issues in altitude_hypercube visualizer. add quantity extended visualization.
parent aaffc3b4
No related merge requests found
Showing with 71 additions and 40 deletions
+71 -40
...@@ -21,21 +21,32 @@ class AbstractHypercubeVisualizer(object): ...@@ -21,21 +21,32 @@ class AbstractHypercubeVisualizer(object):
trend_test_class, trend_test_class,
nb_data_reduced_for_speed=False, nb_data_reduced_for_speed=False,
save_to_file=False, save_to_file=False,
first_starting_year=None,
last_starting_year=None, last_starting_year=None,
exact_starting_year=None,
verbose=True): verbose=True):
self.verbose = verbose 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): if isinstance(nb_data_reduced_for_speed, bool):
self.nb_data_for_fast_mode = 7 if nb_data_reduced_for_speed else None self.nb_data_for_fast_mode = 7 if nb_data_reduced_for_speed else None
else: else:
assert isinstance(nb_data_reduced_for_speed, int) assert isinstance(nb_data_reduced_for_speed, int)
self.nb_data_for_fast_mode = nb_data_reduced_for_speed 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: if self.verbose:
print('Hypercube with parameters:') 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)) print('Trend test class:', get_display_name_from_object_type(self.trend_test_class))
# Main attributes defining the hypercube # Main attributes defining the hypercube
...@@ -44,11 +55,13 @@ class AbstractHypercubeVisualizer(object): ...@@ -44,11 +55,13 @@ class AbstractHypercubeVisualizer(object):
def trend_test_name(self): def trend_test_name(self):
return get_display_name_from_object_type(self.trend_test_class) 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 @cached_property
def starting_years(self): def starting_years(self):
starting_years = self.study_visualizer.starting_years starting_years = [year for year in self.all_potential_starting_years if self.first_starting_year <= year <= self.last_starting_year]
if self.last_starting_year is not None:
starting_years = [year for year in starting_years if year <= self.last_starting_year]
if self.nb_data_for_fast_mode is not None: if self.nb_data_for_fast_mode is not None:
starting_years = starting_years[:self.nb_data_for_fast_mode] starting_years = starting_years[:self.nb_data_for_fast_mode]
return starting_years return starting_years
......
...@@ -132,14 +132,17 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): ...@@ -132,14 +132,17 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer):
ylabel_to_series = self.ylabel_to_series(reduction_function, isin_parameters) 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)) 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())): 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) xlabel_values = list(serie.index)
values = list(serie.values) values = list(serie.values)
argmax_idx = np.argmax(values)
best_year = xlabel_values[argmax_idx] if plot_title is not None:
plot_title += '{}'.format(best_year) 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.plot(xlabel_values, values)
ax.set_ylabel(ylabel) ax.set_ylabel(ylabel)
ax.set_title(plot_title)
specific_title = 'Evolution of {} trends (significative or not) wrt to the {} with {}'.format(subtitle, xlabel, specific_title = 'Evolution of {} trends (significative or not) wrt to the {} with {}'.format(subtitle, xlabel,
self.trend_test_name) self.trend_test_name)
......
...@@ -5,6 +5,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual ...@@ -5,6 +5,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
AltitudeHypercubeVisualizer AltitudeHypercubeVisualizer
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \
Altitude_Hypercube_Year_Visualizer, AltitudeHypercubeVisualizerBis, AltitudeHypercubeVisualizerWithoutTrendType 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): class AltitudeHypercubeVisualizerExtended(AltitudeHypercubeVisualizer):
...@@ -127,3 +129,12 @@ class AltitudeHypercubeVisualizerWithoutTrendExtended(AltitudeHypercubeVisualize ...@@ -127,3 +129,12 @@ class AltitudeHypercubeVisualizerWithoutTrendExtended(AltitudeHypercubeVisualize
class AltitudeYearHypercubeVisualizerExtended(AltitudeHypercubeVisualizerExtended, Altitude_Hypercube_Year_Visualizer): class AltitudeYearHypercubeVisualizerExtended(AltitudeHypercubeVisualizerExtended, Altitude_Hypercube_Year_Visualizer):
pass pass
# Quantity hypercube
class QuantityHypercubeWithoutTrend(AltitudeHypercubeVisualizerWithoutTrendType, QuantityAltitudeHypercubeVisualizer):
pass
class QuantityHypercubeWithoutTrendExtended(AltitudeHypercubeVisualizerExtended, QuantityHypercubeWithoutTrend):
pass
...@@ -6,7 +6,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual ...@@ -6,7 +6,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
AltitudeHypercubeVisualizer AltitudeHypercubeVisualizer
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer_extended import \ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer_extended import \
AltitudeYearHypercubeVisualizerExtended, AltitudeHypercubeVisualizerExtended, \ AltitudeYearHypercubeVisualizerExtended, AltitudeHypercubeVisualizerExtended, \
AltitudeHypercubeVisualizerBisExtended, AltitudeHypercubeVisualizerWithoutTrendExtended AltitudeHypercubeVisualizerBisExtended, AltitudeHypercubeVisualizerWithoutTrendExtended, \
QuantityHypercubeWithoutTrend, QuantityHypercubeWithoutTrendExtended
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \
Altitude_Hypercube_Year_Visualizer, AltitudeHypercubeVisualizerWithoutTrendType Altitude_Hypercube_Year_Visualizer, AltitudeHypercubeVisualizerWithoutTrendType
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.quantity_altitude_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.quantity_altitude_visualizer import \
...@@ -45,18 +46,20 @@ def full_quantity_altitude_hypercube(): ...@@ -45,18 +46,20 @@ def full_quantity_altitude_hypercube():
add_detailed_plots = True add_detailed_plots = True
altitudes = ALL_ALTITUDES[3:-6] altitudes = ALL_ALTITUDES[3:-6]
study_classes = SCM_STUDIES 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) 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, for study in study_iterator_global(study_classes=study_classes, only_first_one=only_first_one,
altitudes=altitudes)] altitudes=altitudes)]
study_classes_str = [get_display_name_from_object_type(c) for c in study_classes] 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_tuples = list(product(study_classes_str, altitudes))
quantity_altitude_to_visualizer = OrderedDict(zip(quantity_altitude_tuples, visualizers)) quantity_altitude_to_visualizer = OrderedDict(zip(quantity_altitude_tuples, visualizers))
visualizer = QuantityAltitudeHypercubeVisualizer(quantity_altitude_to_visualizer, save_to_file=save_to_file, visualizer = QuantityHypercubeWithoutTrendExtended(quantity_altitude_to_visualizer,
trend_test_class=trend_test_class, fast=fast) save_to_file=save_to_file,
visualizer.visualize_year_trend_test(add_detailed_plots=add_detailed_plots) trend_test_class=trend_test_class,
visualizer.visualize_massif_trend_test(add_detailed_plots=add_detailed_plots) nb_data_reduced_for_speed=False,
visualizer.visualize_altitude_trend_test(add_detailed_plots=add_detailed_plots) last_starting_year=2007,
)
visualizer.vsualize_year_trend_by_regions_and_altitudes()
def fast_altitude_hypercube(): def fast_altitude_hypercube():
...@@ -112,19 +115,18 @@ def fast_altitude_without_trend_type_hypercube_extended(): ...@@ -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, for study in study_iterator(study_class=study_class, only_first_one=only_first_one,
altitudes=altitudes)] altitudes=altitudes)]
altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers)) altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers))
visualizer = AltitudeHypercubeVisualizerWithoutTrendExtended(altitude_to_visualizer, visualizer = QuantityHypercubeWithoutTrendExtended(altitude_to_visualizer,
save_to_file=save_to_file, save_to_file=save_to_file,
trend_test_class=trend_test_class, trend_test_class=trend_test_class,
nb_data_reduced_for_speed=nb_data_reduced_for_speed, nb_data_reduced_for_speed=nb_data_reduced_for_speed,
last_starting_year=last_starting_year) last_starting_year=last_starting_year)
visualizer.vsualize_year_trend_by_regions_and_altitudes() visualizer.vsualize_year_trend_by_regions_and_altitudes()
# visualizer = QuantityHypercubeWithoutTrend(altitude_to_visualizer,
# visualizer = AltitudeHypercubeVisualizerWithoutTrendType(altitude_to_visualizer, # save_to_file=save_to_file,
# save_to_file=save_to_file, # trend_test_class=trend_test_class,
# trend_test_class=trend_test_class, # nb_data_reduced_for_speed=nb_data_reduced_for_speed,
# nb_data_reduced_for_speed=nb_data_reduced_for_speed, # last_starting_year=last_starting_year)
# last_starting_year=last_starting_year)
# visualizer.visualize_year_trend_test() # visualizer.visualize_year_trend_test()
...@@ -134,7 +136,7 @@ def fast_altitude_year_hypercube_extended(): ...@@ -134,7 +136,7 @@ def fast_altitude_year_hypercube_extended():
nb_data_reduced_for_speed = True nb_data_reduced_for_speed = True
altitudes = [ALL_ALTITUDES[3], ALL_ALTITUDES[-7]] altitudes = [ALL_ALTITUDES[3], ALL_ALTITUDES[-7]]
for study_class in SCM_STUDIES[:2]: 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]: for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:2]:
visualizers = [ visualizers = [
StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True)
...@@ -144,7 +146,7 @@ def fast_altitude_year_hypercube_extended(): ...@@ -144,7 +146,7 @@ def fast_altitude_year_hypercube_extended():
visualizer = AltitudeHypercubeVisualizerExtended(altitude_to_visualizer, save_to_file=save_to_file, visualizer = AltitudeHypercubeVisualizerExtended(altitude_to_visualizer, save_to_file=save_to_file,
trend_test_class=trend_test_class, trend_test_class=trend_test_class,
nb_data_reduced_for_speed=nb_data_reduced_for_speed, 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_year_trend_test()
# visualizer.visualize_altitude_trend_test() # visualizer.visualize_altitude_trend_test()
# visualizer.visualize_massif_trend_test_by_altitudes() # visualizer.visualize_massif_trend_test_by_altitudes()
...@@ -225,13 +227,13 @@ def full_altitude_year_hypercube__without_trend_extended(): ...@@ -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, for study in study_iterator(study_class=study_class, only_first_one=only_first_one,
altitudes=altitudes, nb_consecutive_days=days)] altitudes=altitudes, nb_consecutive_days=days)]
altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers)) altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers))
visualizer = AltitudeHypercubeVisualizerWithoutTrendExtended(altitude_to_visualizer, # visualizer = QuantityHypercubeWithoutTrendExtended(altitude_to_visualizer,
save_to_file=save_to_file, # save_to_file=save_to_file,
trend_test_class=trend_test_class, # trend_test_class=trend_test_class,
nb_data_reduced_for_speed=nb_data_reduced_for_speed, # nb_data_reduced_for_speed=nb_data_reduced_for_speed,
last_starting_year=last_starting_year, # last_starting_year=last_starting_year,
) # )
visualizer.vsualize_year_trend_by_regions_and_altitudes() # visualizer.vsualize_year_trend_by_regions_and_altitudes()
def fast_quantity_altitude_hypercube(): def fast_quantity_altitude_hypercube():
...@@ -247,19 +249,21 @@ 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] 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_tuples = list(product(study_classes_str, altitudes))
quantity_altitude_to_visualizer = OrderedDict(zip(quantity_altitude_tuples, visualizers)) quantity_altitude_to_visualizer = OrderedDict(zip(quantity_altitude_tuples, visualizers))
visualizer = QuantityAltitudeHypercubeVisualizer(quantity_altitude_to_visualizer, save_to_file=save_to_file, visualizer = QuantityHypercubeWithoutTrend(quantity_altitude_to_visualizer, save_to_file=save_to_file,
trend_test_class=trend_test_class, fast=fast) trend_test_class=trend_test_class, nb_data_reduced_for_speed=True)
visualizer.visualize_year_trend_test() visualizer.visualize_year_trend_test()
visualizer.visualize_massif_trend_test() # visualizer.visualize_massif_trend_test()
visualizer.visualize_altitude_trend_test() # visualizer.visualize_altitude_trend_test()
def main_run(): def main_run():
# fast_altitude_hypercube() # fast_altitude_hypercube()
# fast_altitude_year_hypercube() # fast_altitude_year_hypercube()
# fast_quantity_altitude_hypercube()
# fast_altitude_without_trend_type_hypercube_extended() # 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() # fast_altitude_year_hypercube_extended()
# full_altitude_year_hypercube_extended() # full_altitude_year_hypercube_extended()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment