From c7416d72c6290dee1898d65cf1a92d4d69e823f8 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Thu, 7 Mar 2019 17:31:12 +0100 Subject: [PATCH] [SCM] add function to compare with durand paper --- .../meteo_france_SCM_study/abstract_study.py | 23 +++++++++++-------- .../meteo_france_SCM_study/safran/safran.py | 21 ++++++++--------- .../main_study_visualizer.py | 11 +++++++-- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/experiment/meteo_france_SCM_study/abstract_study.py b/experiment/meteo_france_SCM_study/abstract_study.py index a89e7ea8..a64d29e1 100644 --- a/experiment/meteo_france_SCM_study/abstract_study.py +++ b/experiment/meteo_france_SCM_study/abstract_study.py @@ -20,11 +20,13 @@ from utils import get_full_path, cached_property class AbstractStudy(object): ALTITUDES = [1800, 2400] - def __init__(self, variable_class: type, altitude: int = 1800): + def __init__(self, variable_class: type, altitude: int = 1800, year_min=1000, year_max=3000): assert altitude in self.ALTITUDES, altitude self.altitude = altitude self.model_name = None self.variable_class = variable_class + self.year_min = year_min + self.year_max = year_max def write_to_file(self, df: pd.DataFrame): if not op.exists(self.result_full_path): @@ -59,7 +61,9 @@ class AbstractStudy(object): year_to_dataset = OrderedDict() nc_files = [(int(f.split('_')[-2][:4]), f) for f in os.listdir(self.safran_full_path) if f.endswith('.nc')] for year, nc_file in sorted(nc_files, key=lambda t: t[0]): - year_to_dataset[year] = Dataset(op.join(self.safran_full_path, nc_file)) + if self.year_min <= year < self.year_max: + year_to_dataset[year] = Dataset(op.join(self.safran_full_path, nc_file)) + print(year_to_dataset.keys()) return year_to_dataset @cached_property @@ -174,14 +178,13 @@ class AbstractStudy(object): # ax.scatter(x, y) # ax.text(x, y, massif_name) # Display the center of the massif - # ax.scatter(self.massifs_coordinates.x_coordinates, self.massifs_coordinates.y_coordinates, s=1) - # # Display the name of the massif - # for _, row in self.massifs_coordinates.df_all_coordinates.iterrows(): - # x, y = list(row) - # massif_name = row.name - # ax.text(x, y, massif_name) - # print(self.massifs_coordinates.df_all_coordinates.head()) - + ax.scatter(self.massifs_coordinates.x_coordinates, self.massifs_coordinates.y_coordinates, s=1) + # Display the name of the massif + for _, row in self.massifs_coordinates.df_all_coordinates.iterrows(): + x, y = list(row) + massif_name = row.name + value = massif_name_to_value[massif_name] + ax.text(x, y, str(round(value, 1))) if show: plt.show() diff --git a/experiment/meteo_france_SCM_study/safran/safran.py b/experiment/meteo_france_SCM_study/safran/safran.py index da82da34..27d83277 100644 --- a/experiment/meteo_france_SCM_study/safran/safran.py +++ b/experiment/meteo_france_SCM_study/safran/safran.py @@ -9,18 +9,17 @@ from experiment.meteo_france_SCM_study.safran.safran_variable import SafranSnowf class Safran(AbstractStudy): - def __init__(self, variable_class: type, altitude: int = 1800): - super().__init__(variable_class, altitude) + def __init__(self, variable_class: type, *args, **kwargs): + super().__init__(variable_class, *args, **kwargs) self.model_name = 'Safran' class SafranFrequency(Safran): - def __init__(self, variable_class: type, nb_days_of_snowfall=1, altitude: int = 1800, ): - super().__init__(variable_class, altitude) + def __init__(self, variable_class: type, nb_days_of_snowfall=1, *args, **kwargs): + super().__init__(variable_class, *args, **kwargs) self.nb_days_of_snowfall = nb_days_of_snowfall - def instantiate_variable_object(self, dataset) -> AbstractVariable: return self.variable_class(dataset, self.nb_days_of_snowfall) @@ -34,8 +33,8 @@ class SafranFrequency(Safran): class SafranSnowfall(SafranFrequency): - def __init__(self, altitude: int = 1800, nb_days_of_snowfall=1): - super().__init__(SafranSnowfallVariable, nb_days_of_snowfall, altitude) + def __init__(self, *args, **kwargs): + super().__init__(SafranSnowfallVariable, *args, **kwargs) class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall): @@ -44,14 +43,14 @@ class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall): class SafranPrecipitation(SafranFrequency): - def __init__(self, altitude: int = 1800, nb_days_of_snowfall=1): - super().__init__(SafranPrecipitationVariable, nb_days_of_snowfall, altitude) + def __init__(self, *args, **kwargs): + super().__init__(SafranPrecipitationVariable, *args, **kwargs) class SafranTemperature(Safran): - def __init__(self, altitude: int = 1800): - super().__init__(SafranTemperatureVariable, altitude) + def __init__(self, *args, **kwargs): + super().__init__(SafranTemperatureVariable, *args, **kwargs) def annual_aggregation_function(self, *args, **kwargs): return np.mean(*args, **kwargs) diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py b/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py index ac668df5..923e4918 100644 --- a/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py +++ b/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py @@ -47,11 +47,17 @@ def extended_visualization(): # study_visualizer.visualize_all_experimental_law() +def annual_mean_vizu_compare_durand_study(): + for study_class in [SafranPrecipitation, SafranSnowfall, SafranTemperature][1:]: + study = study_class(altitude=1800, year_min=1958, year_max=2002) + study_visualizer = StudyVisualizer(study) + study_visualizer.visualize_annual_mean_values() + def normal_visualization(): save_to_file = False only_first_one = True # for study_class in SCM_STUDIES[:1]: - for study_class in [SafranPrecipitation, SafranSnowfall, SafranTemperature][-1:]: + for study_class in [SafranPrecipitation, SafranSnowfall, SafranTemperature][1:]: for study in study_iterator(study_class, only_first_one=only_first_one): study_visualizer = StudyVisualizer(study, save_to_file=save_to_file) # study_visualizer.visualize_independent_margin_fits(threshold=[None, 20, 40, 60][0]) @@ -75,6 +81,7 @@ def complete_analysis(only_first_one=False): if __name__ == '__main__': - normal_visualization() + annual_mean_vizu_compare_durand_study() + # normal_visualization() # extended_visualization() # complete_analysis() -- GitLab