Commit 7b451ec5 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting v2] fix one condition. keep all one fold fit, with at least one...

[contrasting v2] fix one condition. keep all one fold fit, with at least one valid (and not one non stationary model). change xlabel for in altitude_group.py
parent 91aa64a1
No related merge requests found
Showing with 23 additions and 15 deletions
+23 -15
...@@ -24,16 +24,12 @@ from extreme_data.meteo_france_data.scm_models_data.utils import Season ...@@ -24,16 +24,12 @@ from extreme_data.meteo_france_data.scm_models_data.utils import Season
def main(): def main():
study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days][:1] 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] seasons = [Season.annual, Season.winter, Season.spring, Season.automn][:1]
fast = False fast = False
if fast is None: if fast is None:
massif_names = None massif_names = None
altitudes_list = altitudes_for_groups[2:3] altitudes_list = altitudes_for_groups[1:2]
elif fast: elif fast:
massif_names = ['Vanoise', 'Haute-Maurienne', 'Vercors'][:] massif_names = ['Vanoise', 'Haute-Maurienne', 'Vercors'][:]
altitudes_list = altitudes_for_groups[2:3] altitudes_list = altitudes_for_groups[2:3]
...@@ -63,18 +59,21 @@ def plot_visualizers(massif_names, visualizer_list): ...@@ -63,18 +59,21 @@ def plot_visualizers(massif_names, visualizer_list):
for relative in [True, False]: for relative in [True, False]:
plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative) plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative)
# plot_coherence_curves(massif_names, visualizer_list) # plot_coherence_curves(massif_names, visualizer_list)
pass plot_coherence_curves(['Vanoise'], visualizer_list)
def plot_visualizer(massif_names, visualizer): def plot_visualizer(massif_names, visualizer):
# Plot time series # 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 # Plot moments against altitude
# for std in [True, False][:]: # for std in [True, False][:]:
# for change in [True, False, None]: # for change in [True, False, None]:
# studies.plot_mean_maxima_against_altitude(massif_names=massif_names, std=std, change=change) # 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 the results for the model that minimizes the individual aic
plot_individual_aic(visualizer) plot_individual_aic(visualizer)
# Plot the results for the model that minimizes the total aic # Plot the results for the model that minimizes the total aic
# plot_total_aic(model_classes, visualizer) # plot_total_aic(model_classes, visualizer)
pass pass
......
from enum import Enum from enum import Enum
# The order is important # The order is important
MIDDLE_WORD = 'and'
START_WORD = 'between'
altitudes_for_groups = [ altitudes_for_groups = [
[600, 900], [600, 900],
[1200, 1500, 1800], [1200, 1500, 1800],
...@@ -25,8 +27,9 @@ class AbstractAltitudeGroup(object): ...@@ -25,8 +27,9 @@ class AbstractAltitudeGroup(object):
@property @property
def xlabel(self): def xlabel(self):
return 'Elevation = {} m. Models are estimated with\n' \ return 'Elevation = {} m. Models are fitted with\n' \
'maxima from range {}, i.e. {}'.format(self.reference_altitude, self.group_id, self.formula) 'maxima from elevation range {}, i.e.\n' \
'maxima {}'.format(self.reference_altitude, self.group_id, self.formula)
@property @property
def formula(self): def formula(self):
...@@ -40,14 +43,14 @@ class AbstractAltitudeGroup(object): ...@@ -40,14 +43,14 @@ class AbstractAltitudeGroup(object):
formula = 'above 3000 m' formula = 'above 3000 m'
else: else:
min_altitude, max_altitude = 1000 * i, 1000 * (i + 1) 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 return formula
@property @property
def formula_upper(self): def formula_upper(self):
f = self.formula f = self.formula
f = f.replace('from ', '') f = f.replace('{} '.format(START_WORD), '')
f = f.replace(' to ', '-') f = f.replace(' {} '.format(MIDDLE_WORD), '-')
return f[0].upper() + f[1:] return f[0].upper() + f[1:]
......
...@@ -65,6 +65,11 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): ...@@ -65,6 +65,11 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
type(self.altitude_group), type(self.altitude_group),
self.display_only_model_that_pass_anderson_test) self.display_only_model_that_pass_anderson_test)
self._massif_name_to_one_fold_fit[massif_name] = old_fold_fit 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 # Cache
self._method_name_and_order_to_massif_name_to_value = {} self._method_name_and_order_to_massif_name_to_value = {}
self._method_name_and_order_to_max_abs = {} self._method_name_and_order_to_max_abs = {}
...@@ -97,7 +102,7 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): ...@@ -97,7 +102,7 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
def massif_name_to_one_fold_fit(self) -> Dict[str, OneFoldFit]: 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() 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 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): def plot_moments(self):
for method_name in self.moment_names: for method_name in self.moment_names:
...@@ -270,7 +275,8 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): ...@@ -270,7 +275,8 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
label=label, label=label,
plot_name=label, plot_name=label,
fontsize_label=15, 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'), cmap=matplotlib.cm.get_cmap('BrBG_r'),
altitude=self.altitude_group.reference_altitude, altitude=self.altitude_group.reference_altitude,
add_colorbar=self.add_colorbar, add_colorbar=self.add_colorbar,
......
...@@ -43,7 +43,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): ...@@ -43,7 +43,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies):
print(param_name, np.mean([c for c in massif_name_to_linear_coef.values()])) print(param_name, np.mean([c for c in massif_name_to_linear_coef.values()]))
# Display x label # 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) ax.set_xticks(xticks)
fontsize_label = 15 fontsize_label = 15
ax.tick_params(labelsize=fontsize_label) ax.tick_params(labelsize=fontsize_label)
......
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