From 9d787939963d4bb2f47fa39074b64e3a6128e7f4 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Thu, 27 Feb 2020 18:42:59 +0100 Subject: [PATCH] [paper 2] rename safran precipitation total to safran precipitation. add snowfall, precipitation, and rainfall study classes for 1, 3, 5 and 7 days --- .../scm_models_data/safran/safran.py | 107 +++++++++++++++--- .../main_studies_visualizer.py | 4 +- .../main_study_visualizer.py | 4 +- papers/contrasting_snow_loads/main_result.py | 25 ++-- ...tive_change_in_maxima_at_fixed_altitude.py | 4 +- .../plot_contrasting_trend_curves.py | 4 +- .../qqplot/plot_qqplot.py | 4 +- test/test_experiment/test_SCM_study.py | 4 +- test/test_utils.py | 4 +- 9 files changed, 123 insertions(+), 37 deletions(-) diff --git a/experiment/meteo_france_data/scm_models_data/safran/safran.py b/experiment/meteo_france_data/scm_models_data/safran/safran.py index a45199aa..885ad453 100644 --- a/experiment/meteo_france_data/scm_models_data/safran/safran.py +++ b/experiment/meteo_france_data/scm_models_data/safran/safran.py @@ -27,6 +27,30 @@ class SafranSnowfall(Safran, CumulatedStudy): Safran.__init__(self, SafranSnowfallVariable, *args, **kwargs) +class SafranSnowfall1Day(SafranSnowfall): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=1, *args, **kwargs) + + +class SafranSnowfall3Days(SafranSnowfall): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=3, *args, **kwargs) + + +class SafranSnowfall5Days(SafranSnowfall): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=5, *args, **kwargs) + + +class SafranSnowfall7Days(SafranSnowfall): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=7, *args, **kwargs) + + class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall): pass @@ -37,7 +61,31 @@ class SafranRainfall(CumulatedStudy, Safran): super().__init__(SafranRainfallVariable, *args, **kwargs) -class SafranTotalPrecip(CumulatedStudy, Safran): +class SafranRainfall1Day(SafranRainfall): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=1, *args, **kwargs) + + +class SafranRainfall3Days(SafranRainfall): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=3, *args, **kwargs) + + +class SafranRainfall5Days(SafranRainfall): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=5, *args, **kwargs) + + +class SafranRainfall7Days(SafranRainfall): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=7, *args, **kwargs) + + +class SafranPrecipitation(CumulatedStudy, Safran): def __init__(self, *args, **kwargs): super().__init__(SafranTotalPrecipVariable, *args, **kwargs) @@ -50,7 +98,31 @@ class SafranTotalPrecip(CumulatedStudy, Safran): return self.variable_class(variable_array_snowfall, variable_array_rainfall, self.nb_consecutive_days) -class ExtendedSafranTotalPrecip(AbstractExtendedStudy, SafranTotalPrecip): +class SafranPrecipitation1Day(SafranPrecipitation): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=1, *args, **kwargs) + + +class SafranPrecipitation3Days(SafranPrecipitation): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=3, *args, **kwargs) + + +class SafranPrecipitation5Days(SafranPrecipitation): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=5, *args, **kwargs) + + +class SafranPrecipitation7Days(SafranPrecipitation): + + def __init__(self, *args, **kwargs): + super().__init__(nb_consecutive_days=7, *args, **kwargs) + + +class ExtendedSafranPrecipitation(AbstractExtendedStudy, SafranPrecipitation): pass @@ -64,23 +136,24 @@ class SafranTemperature(Safran): if __name__ == '__main__': - study = SafranSnowfall() + study = SafranRainfall1Day() + print(study.year_to_annual_maxima[1958]) # d = study.year_to_dataset_ordered_dict[1958] # print(d.variables) - print(study.study_massif_names) - d = { - name: '' for name in study.study_massif_names - } - print(d) - for i in range(1958, 1959): - d = study.year_to_dataset_ordered_dict[i] - # variable = 'station' - # print(np.array(d.variables[variable])) - variable = 'Tair' - a = np.mean(np.array(d.variables[variable]), axis=1) - d = study.year_to_dataset_ordered_dict[i + 1] - b = np.mean(np.array(d.variables[variable]), axis=1) - # print(a[-1] - b[0]) + # print(study.study_massif_names) + # d = { + # name: '' for name in study.study_massif_names + # } + # print(d) + # for i in range(1958, 1959): + # d = study.year_to_dataset_ordered_dict[i] + # # variable = 'station' + # # print(np.array(d.variables[variable])) + # variable = 'Tair' + # a = np.mean(np.array(d.variables[variable]), axis=1) + # d = study.year_to_dataset_ordered_dict[i + 1] + # b = np.mean(np.array(d.variables[variable]), axis=1) + # print(a[-1] - b[0]) # print(d.variables['time']) # print(study.all_massif_names) # print(study.massif_name_to_altitudes) diff --git a/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py index 3fbb7e9d..4b6eb7e4 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py @@ -3,7 +3,7 @@ from experiment.trend_analysis.abstract_score import MannKendall, WeigthedScore, from experiment.trend_analysis.univariate_test.extreme_trend_test.abstract_gev_trend_test import GevLocationChangePointTest, \ GevScaleChangePointTest, GevShapeChangePointTest from experiment.trend_analysis.univariate_test.abstract_univariate_test import MannKendallTrendTest -from experiment.meteo_france_data.scm_models_data.safran.safran import ExtendedSafranTotalPrecip +from experiment.meteo_france_data.scm_models_data.safran.safran import ExtendedSafranPrecipitation from experiment.meteo_france_data.scm_models_data.visualization import Studies from experiment.meteo_france_data.scm_models_data.visualization import StudiesVisualizer, \ AltitudeVisualizer @@ -15,7 +15,7 @@ from collections import OrderedDict def normal_visualization(): - for study_type in [ExtendedSafranTotalPrecip]: + for study_type in [ExtendedSafranPrecipitation]: extended_studies = Studies(study_type) studies_visualizer = StudiesVisualizer(extended_studies) studies_visualizer.mean_as_a_function_of_altitude(region_only=True) diff --git a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py index e1843a71..f1e6d9fd 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py @@ -14,7 +14,7 @@ from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDep CrocusSnowLoadEurocode, CrocusSnowLoad5Days, CrocusSnowLoad7Days from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, \ SafranRainfall, \ - SafranTemperature, SafranTotalPrecip + SafranTemperature, SafranPrecipitation from collections import OrderedDict @@ -142,7 +142,7 @@ def extended_visualization(): def annual_mean_vizu_compare_durand_study(safran=True, take_mean_value=True, altitude=1800): if safran: - for study_class in [SafranTotalPrecip, SafranRainfall, SafranSnowfall, SafranTemperature][-1:]: + for study_class in [SafranPrecipitation, SafranRainfall, SafranSnowfall, SafranTemperature][-1:]: study = study_class(altitude=altitude, year_min=1958, year_max=2002) study_visualizer = StudyVisualizer(study) study_visualizer.visualize_annual_mean_values(take_mean_value=True) diff --git a/papers/contrasting_snow_loads/main_result.py b/papers/contrasting_snow_loads/main_result.py index d152057b..9c9719dd 100644 --- a/papers/contrasting_snow_loads/main_result.py +++ b/papers/contrasting_snow_loads/main_result.py @@ -5,6 +5,12 @@ mpl.use('Agg') mpl.rcParams['text.usetex'] = True mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] +from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy +from experiment.meteo_france_data.scm_models_data.safran.safran import SafranPrecipitation3Days, \ + SafranPrecipitation1Day, SafranPrecipitation5Days, SafranPrecipitation7Days, SafranSnowfall1Day, \ + SafranSnowfall5Days, SafranSnowfall3Days, SafranSnowfall7Days, SafranRainfall1Day, SafranRainfall3Days, \ + SafranRainfall5Days, SafranRainfall7Days + from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal, CrocusSnowLoad3Days, \ CrocusSnowLoad5Days, CrocusSnowLoad7Days, CrocusSnowLoad1Day from extreme_fit.model.result_from_model_fit.result_from_extremes.confidence_interval_method import \ @@ -23,11 +29,9 @@ from papers.exceeding_snow_loads.result_trends_and_return_levels.plot_uncertaint from root_utils import NB_CORES - - def intermediate_result(altitudes, massif_names=None, model_subsets_for_uncertainty=None, uncertainty_methods=None, - study_class=CrocusSnowLoad3Days, + study_class=AbstractStudy, multiprocessing=False, save_to_file=True): """ @@ -64,9 +68,16 @@ def major_result(): ConfidenceIntervalMethodFromExtremes.ci_mle][1:] massif_names = None model_subsets_for_uncertainty = None - altitudes = paper_altitudes - # altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300] - study_classes = [CrocusSnowLoad1Day, CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days][:] + # altitudes = paper_altitudes + # altitudes = paper_altitudes + altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000][:4] + snow_load_classes = [CrocusSnowLoad1Day, CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days][:] + precipitation_classes = [SafranPrecipitation1Day, SafranPrecipitation3Days, SafranPrecipitation5Days, + SafranPrecipitation7Days][:] + snowfall_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days] + rainfall_classes = [SafranRainfall1Day, SafranRainfall3Days, SafranRainfall5Days, SafranRainfall7Days] + study_classes = precipitation_classes + snow_load_classes + study_classes = snowfall_classes + rainfall_classes for study_class in study_classes: intermediate_result(altitudes, massif_names, model_subsets_for_uncertainty, uncertainty_methods, study_class) @@ -78,4 +89,4 @@ if __name__ == '__main__': # uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.my_bayes, # ConfidenceIntervalMethodFromExtremes.ci_mle][1:], # multiprocessing=True, - # save_to_file=False) \ No newline at end of file + # save_to_file=False) diff --git a/papers/contrasting_snow_loads/main_spatial_relative_change_in_maxima_at_fixed_altitude.py b/papers/contrasting_snow_loads/main_spatial_relative_change_in_maxima_at_fixed_altitude.py index fe763ba0..17d48f3f 100644 --- a/papers/contrasting_snow_loads/main_spatial_relative_change_in_maxima_at_fixed_altitude.py +++ b/papers/contrasting_snow_loads/main_spatial_relative_change_in_maxima_at_fixed_altitude.py @@ -1,7 +1,7 @@ from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSnowLoad3Days, \ CrocusSnowLoadTotal from experiment.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusDepthVariable -from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranRainfall, SafranTotalPrecip +from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranRainfall, SafranPrecipitation from experiment.meteo_france_data.scm_models_data.safran.safran_variable import SafranTotalPrecipVariable from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ study_iterator_global, SCM_STUDY_CLASS_TO_ABBREVIATION, snow_density_str, ALL_ALTITUDES_WITHOUT_NAN @@ -25,7 +25,7 @@ def test(): def density_wrt_altitude(): save_to_file = True - study_class = [SafranTotalPrecip, SafranRainfall, SafranSnowfall, CrocusSnowLoad3Days, CrocusSnowLoadTotal][-2] + study_class = [SafranPrecipitation, SafranRainfall, SafranSnowfall, CrocusSnowLoad3Days, CrocusSnowLoadTotal][-2] altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000][::-1] for altitude in altitudes: diff --git a/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py b/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py index 8d4b154a..3a02570e 100644 --- a/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py +++ b/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py @@ -74,7 +74,9 @@ def plot_contrasting_trend_curves(altitude_to_visualizer: Dict[int, StudyVisuali ax_twinx.plot(altitudes, mean_change, label=label, linewidth=linewidth, marker='o') ax_twinx.legend(loc='upper right', prop={'size': size}) + ax.axhline(y=0, color='k') + # Save plot - visualizer.plot_name = 'Trend curves for' + visualizer.study.variable_name.split('(')[0] + visualizer.plot_name = 'Trend curves for' + visualizer.study.variable_name visualizer.show_or_save_to_file(no_title=True, dpi=dpi_paper1_figure, folder_for_variable=False) plt.close() diff --git a/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/plot_qqplot.py b/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/plot_qqplot.py index e9ec74bd..c1fdd744 100644 --- a/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/plot_qqplot.py +++ b/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/plot_qqplot.py @@ -92,9 +92,9 @@ def plot_exceedance_psnow(altitude_to_visualizer: Dict[int, StudyVisualizerForNo ax.set_xlabel('Altitude (m)') ax.set_ylabel('Mean ratio, i.e. French standards divided by return levels (%)') size = 10 - ax.legend(loc='upper left', prop={'size': size}) + ax.legend(loc='upper right', prop={'size': size}) ax.grid() - ax2.legend(loc='upper right', prop={'size': size}) + ax2.legend(loc='upper left', prop={'size': size}) plt.show() diff --git a/test/test_experiment/test_SCM_study.py b/test/test_experiment/test_SCM_study.py index 542cb35e..9ed69a54 100644 --- a/test/test_experiment/test_SCM_study.py +++ b/test/test_experiment/test_SCM_study.py @@ -7,7 +7,7 @@ import pandas as pd from experiment.meteo_france_data.scm_models_data.cumulated_study import NB_DAYS from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, \ SafranTemperature, \ - SafranTotalPrecip + SafranPrecipitation from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ study_iterator, study_iterator_global, SCM_STUDIES, ALL_ALTITUDES from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \ @@ -72,7 +72,7 @@ class TestSCMPrecipitation(TestSCMStudy): def setUp(self) -> None: super().setUp() - self.study = SafranTotalPrecip(altitude=1800, year_min=1958, year_max=2002, nb_consecutive_days=1) + self.study = SafranPrecipitation(altitude=1800, year_min=1958, year_max=2002, nb_consecutive_days=1) def test_durand(self): # Test based on Durand paper diff --git a/test/test_utils.py b/test/test_utils.py index c9faaed7..d5fe754c 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -15,7 +15,7 @@ from extreme_fit.model.max_stable_model.abstract_max_stable_model import \ from extreme_fit.model.max_stable_model.max_stable_models import Smith, BrownResnick, Schlather, \ Geometric, ExtremalT, ISchlather from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, Safran, SafranRainfall, \ - SafranTemperature, SafranTotalPrecip + SafranTemperature, SafranPrecipitation from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \ AbstractSpatialCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coordinates import \ @@ -113,7 +113,7 @@ def load_safran_studies(altitudes) -> List[Safran]: nb_days_list = [1] safran_studies = [safran_class(altitude=safran_altitude, nb_consecutive_days=nb_days) for safran_altitude in altitudes for nb_days in nb_days_list - for safran_class in [SafranSnowfall, SafranRainfall, SafranTotalPrecip]] + for safran_class in [SafranSnowfall, SafranRainfall, SafranPrecipitation]] safran_studies += [SafranTemperature(altitude) for altitude in altitudes] return safran_studies -- GitLab