utils.py 3.67 KB
Newer Older
import os

from collections import OrderedDict

import pandas as pd
import os.path as op
import datetime
import time
import numpy as np
from scipy.special import softmax

from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \
    gcm_rcm_couple_to_str, SEPARATOR_STR, scenario_to_str, str_to_gcm_rcm_couple
from extreme_data.meteo_france_data.scm_models_data.altitudes_studies import AltitudesStudies
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
from extreme_data.meteo_france_data.scm_models_data.utils import Season
from extreme_data.utils import DATA_PATH
from extreme_fit.estimator.margin_estimator.abstract_margin_estimator import compute_nllh
from extreme_fit.model.margin_model.polynomial_margin_model.gev_altitudinal_models import StationaryAltitudinal
from extreme_fit.model.margin_model.polynomial_margin_model.utils import \
    ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
from extreme_trend.ensemble_fit.independent_ensemble_fit.independent_ensemble_fit import IndependentEnsembleFit
from extreme_trend.ensemble_fit.visualizer_for_projection_ensemble import VisualizerForProjectionEnsemble
from extreme_trend.one_fold_fit.altitude_group import altitudes_for_groups
from root_utils import get_display_name_from_object_type
from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_covariate_for_fit import \
    TimeTemporalCovariate
from spatio_temporal_dataset.coordinates.temporal_coordinates.temperature_covariate import \
    AnomalyTemperatureWithSplineTemporalCovariate

WEIGHT_COLUMN_NAME = "all weights"

WEIGHT_FOLDER = "ensemble weight"


def get_csv_filepath(gcm_rcm_couples, altitudes_list, year_min, year_max, scenario, weight_computer_class):
    nb_gcm_rcm_couples = len(gcm_rcm_couples)
    nb_altitudes_list = len(altitudes_list)
    ensemble_folder_path = op.join(DATA_PATH, WEIGHT_FOLDER)
    if not op.exists(ensemble_folder_path):
        os.makedirs(ensemble_folder_path, exist_ok=True)
    scenario_str = scenario_to_str(scenario)
    class_name = get_display_name_from_object_type(weight_computer_class)
    csv_filename = "weights_{}_{}_{}_{}_{}_{}.csv" \
        .format(nb_gcm_rcm_couples, nb_altitudes_list, year_min, year_max, scenario_str, class_name)
    weight_csv_filepath = op.join(ensemble_folder_path, csv_filename)
    return weight_csv_filepath


def save_to_filepath(df, gcm_rcm_couples, altitudes_list,
                     year_min, year_max,
                     scenario, weight_computer_class):
    filepath = get_csv_filepath(gcm_rcm_couples, altitudes_list, year_min, year_max, scenario, weight_computer_class)
    df = df.round(decimals=3)
    df.index = [gcm_rcm_couple_to_str(i) for i in df.index]
    df.columns = [gcm_rcm_couple_to_str(i) if j > 0 else i for j, i in enumerate(df.columns)]

    # df.columns = [gcm_rcm_couple_to_str(i) for i in df.index]
    print(df.head())
    df.to_csv(filepath)


def load_gcm_rcm_couple_to_weight(gcm_rcm_couples, altitudes_list, year_min, year_max, scenario,
                                  weight_class, gcm_rcm_couple_missing):
    filepath = get_csv_filepath(gcm_rcm_couples, altitudes_list, year_min, year_max, scenario, weight_class)
    df = pd.read_csv(filepath, index_col=0)
    df.index = [str_to_gcm_rcm_couple(i) for i in df.index]
    df.columns = [str_to_gcm_rcm_couple(i) if j > 0 else i for j, i in enumerate(df.columns)]
    if gcm_rcm_couple_missing is None:
        column_name = WEIGHT_COLUMN_NAME
    else:
        column_name = gcm_rcm_couple_missing
    d = df[column_name].to_dict()
    return d