Commit 2c42bae4 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting] refactor folders for altitudes_fit, add one_fold_fit.py

parent 8a9c7fcb
No related merge requests found
Showing with 99 additions and 43 deletions
+99 -43
...@@ -17,6 +17,7 @@ from spatio_temporal_dataset.coordinates.spatio_temporal_coordinates.abstract_sp ...@@ -17,6 +17,7 @@ from spatio_temporal_dataset.coordinates.spatio_temporal_coordinates.abstract_sp
from spatio_temporal_dataset.coordinates.temporal_coordinates.generated_temporal_coordinates import \ from spatio_temporal_dataset.coordinates.temporal_coordinates.generated_temporal_coordinates import \
ConsecutiveTemporalCoordinates ConsecutiveTemporalCoordinates
from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
from spatio_temporal_dataset.slicer.utils import get_slicer_class_from_s_splits
from spatio_temporal_dataset.spatio_temporal_observations.annual_maxima_observations import AnnualMaxima from spatio_temporal_dataset.spatio_temporal_observations.annual_maxima_observations import AnnualMaxima
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
...@@ -43,20 +44,20 @@ class AltitudesStudies(object): ...@@ -43,20 +44,20 @@ class AltitudesStudies(object):
def spatio_temporal_dataset(self, massif_name, s_split_spatial: pd.Series = None, def spatio_temporal_dataset(self, massif_name, s_split_spatial: pd.Series = None,
s_split_temporal: pd.Series = None): s_split_temporal: pd.Series = None):
coordinates = self.spatio_temporal_coordinates(s_split_spatial, s_split_temporal)
coordinate_values_to_maxima = {} coordinate_values_to_maxima = {}
for altitude in self.altitudes: for altitude in self.altitudes:
study = self.altitude_to_study[altitude] study = self.altitude_to_study[altitude]
for year, maxima in zip(study.ordered_years, study.massif_name_to_annual_maxima[massif_name]): if massif_name in study.study_massif_names:
coordinate_values_to_maxima[(altitude, year)] = [maxima] for year, maxima in zip(study.ordered_years, study.massif_name_to_annual_maxima[massif_name]):
coordinate_values_to_maxima[(altitude, year)] = [maxima]
coordinates = self.spatio_temporal_coordinates(s_split_spatial, s_split_temporal)
observations = AnnualMaxima.from_coordinates(coordinates, coordinate_values_to_maxima) observations = AnnualMaxima.from_coordinates(coordinates, coordinate_values_to_maxima)
return AbstractDataset(observations=observations, coordinates=coordinates) return AbstractDataset(observations=observations, coordinates=coordinates)
# Coordinates Loader # Coordinates Loader
def spatio_temporal_coordinates(self, s_split_spatial: pd.Series = None, s_split_temporal: pd.Series = None): def spatio_temporal_coordinates(self, s_split_spatial: pd.Series = None, s_split_temporal: pd.Series = None):
slicer_class = AbstractCoordinates.slicer_class_from_s_splits(s_split_spatial=s_split_spatial, slicer_class = get_slicer_class_from_s_splits(s_split_spatial, s_split_temporal)
s_split_temporal=s_split_temporal)
return AbstractSpatioTemporalCoordinates(slicer_class=slicer_class, return AbstractSpatioTemporalCoordinates(slicer_class=slicer_class,
s_split_spatial=s_split_spatial, s_split_spatial=s_split_spatial,
s_split_temporal=s_split_temporal, s_split_temporal=s_split_temporal,
......
...@@ -2,27 +2,42 @@ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranS ...@@ -2,27 +2,42 @@ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranS
SafranSnowfall5Days, SafranSnowfall7Days, SafranPrecipitation1Day, SafranPrecipitation3Days, \ SafranSnowfall5Days, SafranSnowfall7Days, SafranPrecipitation1Day, SafranPrecipitation3Days, \
SafranPrecipitation5Days, SafranPrecipitation7Days SafranPrecipitation5Days, SafranPrecipitation7Days
from extreme_data.meteo_france_data.scm_models_data.utils import Season from extreme_data.meteo_france_data.scm_models_data.utils import Season
from extreme_fit.model.margin_model.polynomial_margin_model.utils import ALTITUDINAL_MODELS
from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.altitudes_studies_visualizer_for_non_stationary_models import \
AltitudesStudiesVisualizerForNonStationaryModels
def main_plots_moments(): def plot_altitudinal_fit(studies):
visualizer = AltitudesStudiesVisualizerForNonStationaryModels(studies=studies,
model_classes=ALTITUDINAL_MODELS,
massif_names=['Belledonne'])
def plot_time_series(studies):
studies.plot_maxima_time_series()
def plot_moments(studies):
for std in [True, False][1:]:
for change in [True, False, None]:
studies.plot_mean_maxima_against_altitude(std=std, change=change)
def main():
altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000] altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000]
# altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900] # altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900]
study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days][:2] study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days][:2]
study_classes = [SafranPrecipitation1Day, SafranPrecipitation3Days, SafranPrecipitation5Days, study_classes = [SafranPrecipitation1Day, SafranPrecipitation3Days, SafranPrecipitation5Days,
SafranPrecipitation7Days][:] SafranPrecipitation7Days][:]
study_classes = [SafranPrecipitation1Day, SafranSnowfall1Day, SafranSnowfall3Days, SafranPrecipitation3Days][2:] study_classes = [SafranPrecipitation1Day, SafranSnowfall1Day, SafranSnowfall3Days, SafranPrecipitation3Days][:1]
for study_class in study_classes: for study_class in study_classes:
studies = AltitudesStudies(study_class, altitudes, season=Season.winter_extended) studies = AltitudesStudies(study_class, altitudes, season=Season.winter_extended)
# massifs_names = ['Vercors', 'Chartreuse', 'Belledonne'] # plot_time_series(studies)
# studies.plot_mean_maxima_against_altitude(massif_names=massifs_names, show=True) # plot_moments(studies)
# studies.plot_maxima_time_series() plot_altitudinal_fit(studies)
for std in [True, False][1:]:
for change in [True, False, None]:
studies.plot_mean_maxima_against_altitude(std=std, change=change)
if __name__ == '__main__': if __name__ == '__main__':
main_plots_moments() main()
from typing import List
from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
from extreme_data.meteo_france_data.scm_models_data.visualization.study_visualizer import StudyVisualizer
from extreme_fit.model.margin_model.polynomial_margin_model.spatio_temporal_polynomial_model import \
AbstractSpatioTemporalPolynomialModel
from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.one_fold_fit import \
OneFoldFit
class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
def __init__(self, studies: AltitudesStudies,
model_classes: List[AbstractSpatioTemporalPolynomialModel],
show=False,
massif_names=None):
study = studies.study
self.massif_names = massif_names if massif_names is not None else self.study.study_massif_names
self.studies = studies
self.non_stationary_models = model_classes
super().__init__(study, show=show, save_to_file=not show)
self.massif_name_to_one_fold_fit = {}
for massif_name in self.massif_names:
dataset = studies.spatio_temporal_dataset(massif_name=massif_name)
old_fold_fit = OneFoldFit(dataset, model_classes)
self.massif_name_to_one_fold_fit[massif_name] = old_fold_fit
\ No newline at end of file
from extreme_fit.estimator.margin_estimator.utils import fitted_linear_margin_estimator_short
from extreme_fit.model.margin_model.utils import MarginFitMethod
class OneFoldFit(object):
def __init__(self, dataset, models_classes, fit_method=MarginFitMethod.extremes_fevd_mle):
self.dataset = dataset
self.models_classes = models_classes
self.fit_method = fit_method
# Fit Estimators
self.model_class_to_estimator = {}
for model_class in models_classes:
self.model_class_to_estimator[model_class] = fitted_linear_margin_estimator_short(model_class=model_class,
dataset=self.dataset,
fit_method=self.fit_method)
# Some display
for estimator in self.model_class_to_estimator.values():
print(estimator.result_from_model_fit.aic)
...@@ -4,7 +4,7 @@ import numpy as np ...@@ -4,7 +4,7 @@ import numpy as np
from extreme_fit.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator from extreme_fit.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator
from extreme_fit.estimator.margin_estimator.utils import fitted_linear_margin_estimator_short from extreme_fit.estimator.margin_estimator.utils import fitted_linear_margin_estimator_short
from projects.altitude_spatial_model.altitudes_fit.utils import get_key_with_min_value, Score, Grouping from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.utils import get_key_with_min_value, Score, Grouping
from spatio_temporal_dataset.slicer.split import Split from spatio_temporal_dataset.slicer.split import Split
......
...@@ -4,9 +4,9 @@ from cached_property import cached_property ...@@ -4,9 +4,9 @@ from cached_property import cached_property
from extreme_fit.model.margin_model.utils import \ from extreme_fit.model.margin_model.utils import \
MarginFitMethod MarginFitMethod
from projects.altitude_spatial_model.altitudes_fit.two_fold_datasets_generator import TwoFoldDatasetsGenerator from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.two_fold_datasets_generator import TwoFoldDatasetsGenerator
from projects.altitude_spatial_model.altitudes_fit.two_fold_detail_fit import TwoFoldMassifFit from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.two_fold_detail_fit import TwoFoldMassifFit
from projects.altitude_spatial_model.altitudes_fit.utils import Score, Grouping from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.utils import Score, Grouping
class TwoFoldFit(object): class TwoFoldFit(object):
......
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.slicer.spatio_temporal_slicer import SpatioTemporalSlicer
def get_slicer_class_from_s_splits(s_split_spatial, s_split_temporal):
if s_split_temporal is None and s_split_spatial is None:
return SpatioTemporalSlicer
else:
return AbstractCoordinates.slicer_class_from_s_splits(s_split_spatial=s_split_spatial,
s_split_temporal=s_split_temporal)
import unittest import unittest
import numpy as np
import pandas as pd
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
from extreme_fit.distribution.gev.gev_params import GevParams
from extreme_fit.model.margin_model.polynomial_margin_model.polynomial_margin_model import \
NonStationaryQuadraticLocationModel, \
NonStationaryQuadraticScaleModel, NonStationaryQuadraticLocationGumbelModel, NonStationaryQuadraticScaleGumbelModel
from extreme_fit.model.margin_model.polynomial_margin_model.spatio_temporal_polynomial_model import \ from extreme_fit.model.margin_model.polynomial_margin_model.spatio_temporal_polynomial_model import \
NonStationaryLocationSpatioTemporalLinearityModel, NonStationaryLocationSpatioTemporalLinearityModel2 NonStationaryLocationSpatioTemporalLinearityModel, NonStationaryLocationSpatioTemporalLinearityModel2
from extreme_fit.model.margin_model.polynomial_margin_model.utils import ALTITUDINAL_MODELS from extreme_fit.model.margin_model.polynomial_margin_model.utils import ALTITUDINAL_MODELS
from extreme_trend.abstract_gev_trend_test import fitted_linear_margin_estimator
from extreme_fit.model.margin_model.utils import \ from extreme_fit.model.margin_model.utils import \
MarginFitMethod MarginFitMethod
from extreme_fit.model.utils import r, set_seed_r
from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
from projects.altitude_spatial_model.altitudes_fit.two_fold_datasets_generator import TwoFoldDatasetsGenerator from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.two_fold_datasets_generator import TwoFoldDatasetsGenerator
from projects.altitude_spatial_model.altitudes_fit.two_fold_fit import TwoFoldFit from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.two_fold_fit import TwoFoldFit
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_coordinates import \
AbstractTemporalCoordinates
from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
from spatio_temporal_dataset.slicer.split import Split
from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_temporal_observations import \
AbstractSpatioTemporalObservations
from test.test_projects.test_contrasting.test_two_fold_fit import load_two_fold_fit
class TestGevTemporalQuadraticExtremesMle(unittest.TestCase): class TestGevTemporalQuadraticExtremesMle(unittest.TestCase):
......
...@@ -3,7 +3,7 @@ import numpy as np ...@@ -3,7 +3,7 @@ import numpy as np
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
from projects.altitude_spatial_model.altitudes_fit.two_fold_datasets_generator import TwoFoldDatasetsGenerator from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.two_fold_datasets_generator import TwoFoldDatasetsGenerator
from spatio_temporal_dataset.slicer.split import Split from spatio_temporal_dataset.slicer.split import Split
......
...@@ -7,10 +7,10 @@ from extreme_fit.model.margin_model.linear_margin_model.linear_margin_model impo ...@@ -7,10 +7,10 @@ from extreme_fit.model.margin_model.linear_margin_model.linear_margin_model impo
from extreme_fit.model.margin_model.utils import MarginFitMethod from extreme_fit.model.margin_model.utils import MarginFitMethod
from extreme_fit.model.utils import set_seed_for_test from extreme_fit.model.utils import set_seed_for_test
from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
from projects.altitude_spatial_model.altitudes_fit.two_fold_datasets_generator import TwoFoldDatasetsGenerator from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.two_fold_datasets_generator import TwoFoldDatasetsGenerator
from projects.altitude_spatial_model.altitudes_fit.two_fold_detail_fit import TwoFoldModelFit from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.two_fold_detail_fit import TwoFoldModelFit
from projects.altitude_spatial_model.altitudes_fit.two_fold_fit import TwoFoldFit from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.two_fold_fit import TwoFoldFit
from projects.altitude_spatial_model.altitudes_fit.utils import Score from projects.altitude_spatial_model.altitudes_fit.two_fold_analysis.utils import Score
from spatio_temporal_dataset.slicer.split import Split from spatio_temporal_dataset.slicer.split import Split
......
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