From 60e13d95b0b29f3f8ce2c17283d72929c0facfc1 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Wed, 18 Nov 2020 14:31:36 +0100 Subject: [PATCH] two new scripts. One for Nico. One for CMIP5. --- .../adamont_data/utils/download_cmip5.py | 24 ++++++++++ .../case_studies/nico/nico2.py | 48 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 extreme_data/meteo_france_data/adamont_data/utils/download_cmip5.py create mode 100644 extreme_data/meteo_france_data/scm_models_data/case_studies/nico/nico2.py diff --git a/extreme_data/meteo_france_data/adamont_data/utils/download_cmip5.py b/extreme_data/meteo_france_data/adamont_data/utils/download_cmip5.py new file mode 100644 index 00000000..71b5c599 --- /dev/null +++ b/extreme_data/meteo_france_data/adamont_data/utils/download_cmip5.py @@ -0,0 +1,24 @@ +import cdsapi + +c = cdsapi.Client() + +models = ['mpi_esm_lr', 'cnrm_cm5'] + + +def get_year_min_and_max(model, experiment): + pass + + +def retrieve(model, experiment): + year_min, year_max = get_year_min_and_max(model, experiment) + c.retrieve( + 'projections-cmip5-monthly-single-levels', + { + 'experiment': 'historical', + 'variable': '2m_temperature', + 'model': 'cnrm_cm5', + 'ensemble_member': 'r1i1p1', + 'period': '195001-200512', + 'format': 'zip', + }, + 'download.zip') diff --git a/extreme_data/meteo_france_data/scm_models_data/case_studies/nico/nico2.py b/extreme_data/meteo_france_data/scm_models_data/case_studies/nico/nico2.py new file mode 100644 index 00000000..4354aaa1 --- /dev/null +++ b/extreme_data/meteo_france_data/scm_models_data/case_studies/nico/nico2.py @@ -0,0 +1,48 @@ +import pandas as pd +import numpy as np +import xlsxwriter + + +from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy +from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSwe3Days +from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day, SafranSnowfall3Days +from extreme_data.meteo_france_data.scm_models_data.utils import FrenchRegion +from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \ + SCM_STUDY_CLASS_TO_ABBREVIATION +from extreme_fit.estimator.margin_estimator.utils import fitted_stationary_gev +from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies + + +def generate_excel_with_annual_maxima(fast=True): + if fast: + altitudes = [600, 900] + else: + altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600] + study_class = SafranSnowfall1Day + study_name = SCM_STUDY_CLASS_TO_ABBREVIATION[study_class] + writer = pd.ExcelWriter('{}.xlsx'.format(study_name), engine='xlsxwriter') + altitude_studies = AltitudesStudies(study_class, altitudes) + for massif_name in altitude_studies.study.all_massif_names(): + write_df_with_annual_maxima(massif_name, writer, altitude_studies) + writer.save() + + +def write_df_with_annual_maxima(massif_name, writer, altitude_studies) -> pd.DataFrame: + columns = [] + altitudes = [] + for altitude, study in altitude_studies.altitude_to_study.items(): + df_maxima = study.observations_annual_maxima.df_maxima_gev + if massif_name in study.study_massif_names: + altitudes.append(altitude) + s = df_maxima.loc[massif_name] + # Fit the data and add the parameters as the first columns + columns.append(s) + df = pd.concat(columns, axis=1) + altitude_str = [str(a) + ' m' for a in altitudes] + df.columns = altitude_str + df.to_excel(writer, sheet_name=massif_name) + return df + + +if __name__ == '__main__': + generate_excel_with_annual_maxima(fast=False) -- GitLab