Commit 3208f8fc authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[PAPER1][STARTING YEAR] write main for location & scale with common starting year spatially.

parent e939952d
No related merge requests found
Showing with 142 additions and 29 deletions
+142 -29
......@@ -26,7 +26,7 @@ class Crocus(AbstractStudy):
return super().apply_annual_aggregation(time_serie[91:-92, ...])
class CrocusRecentSwe(Crocus):
class CrocusSwe3Days(Crocus):
def __init__(self, *args, **kwargs):
Crocus.__init__(self, CrocusRecentSweVariable, *args, **kwargs)
......@@ -35,7 +35,7 @@ class CrocusRecentSwe(Crocus):
return self.winter_annual_aggregation(time_serie)
class CrocusTotalSwe(Crocus):
class CrocusSweTotal(Crocus):
def __init__(self, *args, **kwargs):
Crocus.__init__(self, CrocusTotalSweVariable, *args, **kwargs)
......@@ -44,7 +44,7 @@ class CrocusTotalSwe(Crocus):
return self.winter_annual_aggregation(time_serie)
class ExtendedCrocusTotalSwe(AbstractExtendedStudy, CrocusTotalSwe):
class ExtendedCrocusSweTotal(AbstractExtendedStudy, CrocusSweTotal):
pass
......@@ -72,6 +72,6 @@ class CrocusDaysWithSnowOnGround(Crocus):
if __name__ == '__main__':
for study in [CrocusRecentSwe(altitude=900)]:
for study in [CrocusSwe3Days(altitude=900)]:
a = study.year_to_daily_time_serie_array[1960]
print(a)
......@@ -14,7 +14,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
def get_full_parameters(altitude=None):
def get_full_parameters(altitude=None, offset_starting_year=10):
save_to_file = True
only_first_one = False
nb_data_reduced_for_speed = False
......@@ -22,8 +22,8 @@ def get_full_parameters(altitude=None):
altitudes = [altitude]
else:
altitudes = ALL_ALTITUDES[3:-6]
first_starting_year = 1958 + 10
last_starting_year = 2017 - 10
first_starting_year = 1958 + offset_starting_year
last_starting_year = 2017 - offset_starting_year
trend_test_class = GevLocationTrendTest
return altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class
......
......@@ -17,6 +17,7 @@ POSTER_ALTITUDES = [900, 1800, 2700]
def fast_poster():
for altitude in POSTER_ALTITUDES[:1]:
study_classes = SCM_STUDIES[:2]
# The QuantityHypercubeWithoutTrend object is used to have one single plot with all the results
results = get_fast_quantity_visualizer(QuantityHypercubeWithoutTrend,
altitude=altitude,
study_classes=study_classes).visualize_year_trend_test(
......
......@@ -5,8 +5,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
StudyVisualizer
from experiment.trend_analysis.abstract_score import MannKendall
from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusTotalSwe, ExtendedCrocusDepth, \
ExtendedCrocusTotalSwe, CrocusDaysWithSnowOnGround, CrocusRecentSwe
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSweTotal, ExtendedCrocusDepth, \
ExtendedCrocusSweTotal, CrocusDaysWithSnowOnGround, CrocusSwe3Days
from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, \
SafranRainfall, \
SafranTemperature, SafranTotalPrecip
......@@ -18,30 +18,30 @@ from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.
BetweenZeroAndOneNormalization, BetweenMinusOneAndOneNormalization
from utils import get_display_name_from_object_type
SCM_STUDIES = [SafranSnowfall, CrocusTotalSwe, CrocusDepth]
SCM_STUDIES = [SafranSnowfall, CrocusSweTotal, CrocusDepth, CrocusSwe3Days]
SCM_STUDIES_NAMES = [get_display_name_from_object_type(k) for k in SCM_STUDIES]
SCM_STUDY_NAME_TO_SCM_STUDY = dict(zip(SCM_STUDIES_NAMES, SCM_STUDIES))
SCM_STUDY_CLASS_TO_ABBREVIATION = {
SafranSnowfall: 'SF3',
CrocusTotalSwe: 'TSWE',
CrocusRecentSwe: 'SWE3',
CrocusSweTotal: 'SWET',
CrocusSwe3Days: 'SWE3',
CrocusDepth: 'SD',
}
altitude_massif_name_and_study_class_for_poster = [
(900, 'Chartreuse', CrocusTotalSwe),
(900, 'Chartreuse', CrocusSweTotal),
(1800, 'Vanoise', CrocusDepth),
(2700, 'Parpaillon', SafranSnowfall),
]
SCM_STUDY_NAME_TO_ABBREVIATION = {get_display_name_from_object_type(k): v for k, v in
SCM_STUDY_CLASS_TO_ABBREVIATION.items()}
SCM_COLORS = ['tab:orange', 'y', 'tab:purple']
SCM_COLORS = ['tab:orange', 'y', 'tab:purple', 'lightseagreen']
SCM_STUDY_CLASS_TO_COLOR = dict(zip(SCM_STUDIES, SCM_COLORS))
SCM_STUDY_NAME_TO_COLOR = {get_display_name_from_object_type(s): color
for s, color in zip(SCM_STUDIES, SCM_COLORS)}
SCM_EXTENDED_STUDIES = [ExtendedSafranSnowfall, ExtendedCrocusTotalSwe, ExtendedCrocusDepth]
SCM_EXTENDED_STUDIES = [ExtendedSafranSnowfall, ExtendedCrocusSweTotal, ExtendedCrocusDepth]
SCM_STUDY_TO_EXTENDED_STUDY = OrderedDict(zip(SCM_STUDIES, SCM_EXTENDED_STUDIES))
ALL_ALTITUDES = [0, 300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200, 4500, 4800]
......@@ -110,7 +110,7 @@ def annual_mean_vizu_compare_durand_study(safran=True, take_mean_value=True, alt
study_visualizer = StudyVisualizer(study)
study_visualizer.visualize_annual_mean_values(take_mean_value=True)
else:
for study_class in [CrocusTotalSwe, CrocusDepth, CrocusDaysWithSnowOnGround][-1:]:
for study_class in [CrocusSweTotal, CrocusDepth, CrocusDaysWithSnowOnGround][-1:]:
study = study_class(altitude=altitude, year_min=1958, year_max=2005)
study_visualizer = StudyVisualizer(study)
study_visualizer.visualize_annual_mean_values(take_mean_value=take_mean_value)
......@@ -199,7 +199,7 @@ def trend_analysis():
durand_altitude = [1800]
altitudes = durand_altitude
normalization_class = [None, BetweenMinusOneAndOneNormalization, BetweenZeroAndOneNormalization][-1]
study_classes = [CrocusTotalSwe, CrocusDepth, SafranSnowfall, SafranRainfall, SafranTemperature][2:3]
study_classes = [CrocusSweTotal, CrocusDepth, SafranSnowfall, SafranRainfall, SafranTemperature][2:3]
for study in study_iterator_global(study_classes, only_first_one=only_first_one, altitudes=altitudes):
study_visualizer = StudyVisualizer(study, save_to_file=save_to_file,
transformation_class=normalization_class,
......@@ -219,7 +219,7 @@ def maxima_analysis():
durand_altitude = [2700]
altitudes = durand_altitude
normalization_class = BetweenZeroAndOneNormalization
study_classes = [CrocusRecentSwe][:]
study_classes = [CrocusSwe3Days][:]
for study in study_iterator_global(study_classes, only_first_one=only_first_one, altitudes=altitudes):
study_visualizer = StudyVisualizer(study, save_to_file=save_to_file,
transformation_class=normalization_class,
......@@ -249,7 +249,7 @@ def max_graph_annual_maxima_poster():
def altitude_analysis():
study = CrocusTotalSwe(altitude=900)
study = CrocusSweTotal(altitude=900)
all_names = set(study.study_massif_names)
for a, names in study.altitude_to_massif_names.items():
print(a, len(names), all_names - set(names))
......
import time
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \
Altitude_Hypercube_Year_Visualizer, AltitudeHypercubeVisualizerWithoutTrendType
from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevScaleTrendTest, \
GevLocationTrendTest
from experiment.trend_analysis.univariate_test.gev_trend_test_two_parameters import GevLocationAndScaleTrendTest
"""
Visualize the 0.99 quantile initial value and its evolution
"""
from experiment.paper1_steps.utils import get_full_altitude_visualizer, FULL_ALTITUDES
def main_fast_spatial_risk_evolution():
for altitude in [1800]:
vizualiser = get_full_altitude_visualizer(AltitudeHypercubeVisualizerWithoutTrendType, altitude=altitude,
reduce_strength_array=True,
trend_test_class=GevLocationAndScaleTrendTest,
offset_starting_year=20)
vizualiser.save_to_file = False
res = vizualiser.visualize_year_trend_test(subtitle_specified='CrocusSwe3Days')
print(res)
vizualiser.visualize_massif_trend_test_one_altitude()
vizualiser.reduce_strength_array = True
vizualiser.visualize_massif_trend_test_one_altitude()
def main_full_spatial_risk_evolution():
# Compare the risk with and without taking into account the starting year
for altitude in FULL_ALTITUDES[:]:
for trend_test_class in [GevLocationAndScaleTrendTest]:
# Starting Year=1958
vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
exact_starting_year=1958, reduce_strength_array=True,
trend_test_class=trend_test_class)
vizualiser.visualize_massif_trend_test_one_altitude()
# Optimal common starting year
vizualiser = get_full_altitude_visualizer(AltitudeHypercubeVisualizerWithoutTrendType, altitude=altitude,
reduce_strength_array=True,
trend_test_class=trend_test_class,
offset_starting_year=20)
res = vizualiser.visualize_year_trend_test(subtitle_specified='CrocusSwe3Days')
best_year = res[0][1]
vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
exact_starting_year=best_year, reduce_strength_array=True,
trend_test_class=trend_test_class)
vizualiser.visualize_massif_trend_test_one_altitude()
def main_run():
main_full_spatial_risk_evolution()
# main_fast_spatial_risk_evolution()
if __name__ == '__main__':
start = time.time()
main_run()
duration = time.time() - start
print('Full run took {}s'.format(round(duration, 1)))
import time
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \
Altitude_Hypercube_Year_Visualizer
from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevScaleTrendTest, \
GevLocationTrendTest
from experiment.trend_analysis.univariate_test.gev_trend_test_two_parameters import GevLocationAndScaleTrendTest
"""
Visualize the 0.99 quantile initial value and its evolution
"""
from experiment.paper1_steps.utils import get_full_altitude_visualizer, FULL_ALTITUDES
def main_fast_spatial_risk_evolution():
for altitude in [1800]:
vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
reduce_strength_array=False,
trend_test_class=GevLocationAndScaleTrendTest)
vizualiser.save_to_file = False
vizualiser.visualize_massif_trend_test_one_altitude()
vizualiser.reduce_strength_array = True
vizualiser.visualize_massif_trend_test_one_altitude()
def main_full_spatial_risk_evolution():
# Compare the risk with and without taking into account the starting year
for altitude in FULL_ALTITUDES[:]:
for trend_test_class in [GevLocationAndScaleTrendTest]:
vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
exact_starting_year=1958, reduce_strength_array=True,
trend_test_class=trend_test_class)
vizualiser.visualize_massif_trend_test_one_altitude()
vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
reduce_strength_array=True,
trend_test_class=trend_test_class)
vizualiser.visualize_massif_trend_test_one_altitude()
vizualiser.reduce_strength_array = False
vizualiser.visualize_massif_trend_test_one_altitude()
def main_run():
main_full_spatial_risk_evolution()
# main_fast_spatial_risk_evolution()
if __name__ == '__main__':
start = time.time()
main_run()
duration = time.time() - start
print('Full run took {}s'.format(round(duration, 1)))
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusRecentSwe
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSwe3Days
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.main_files.main_full_hypercube import \
get_full_parameters
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.utils_hypercube import \
......@@ -10,12 +10,13 @@ FULL_ALTITUDES = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000]
def get_full_altitude_visualizer(altitude_hypercube_class, exact_starting_year=None, altitude=900,
reduce_strength_array=False,
trend_test_class = GevLocationTrendTest):
trend_test_class = GevLocationTrendTest,
offset_starting_year=10):
altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, _ = get_full_parameters(
altitude=altitude)
altitude=altitude, offset_starting_year=offset_starting_year)
if exact_starting_year is not None:
first_starting_year, last_starting_year = None, None
study_classes = [CrocusRecentSwe]
study_classes = [CrocusSwe3Days]
visualizer = load_altitude_visualizer(altitude_hypercube_class, altitudes, last_starting_year,
nb_data_reduced_for_speed, only_first_one, save_to_file, study_classes,
trend_test_class, first_starting_year=first_starting_year,
......
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusRecentSwe
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSwe3Days
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
study_iterator_global
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
......@@ -10,7 +10,7 @@ def maxima_analysis():
only_first_one = False
durand_altitude = [900, 1500, 1800, 2100, 2700][2:-2]
altitudes = durand_altitude
study_classes = [CrocusRecentSwe][:]
study_classes = [CrocusSwe3Days][:]
for study in study_iterator_global(study_classes, only_first_one=only_first_one, altitudes=altitudes):
study_visualizer = StudyVisualizer(study, save_to_file=save_to_file,
verbose=True,
......
import unittest
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusTotalSwe
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSweTotal
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
study_iterator_global
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
......@@ -20,7 +20,7 @@ class TestCoordinateSensitivity(unittest.TestCase):
transformation_classes = [None, BetweenZeroAndOneNormalization, BetweenZeroAndOneNormalizationMinEpsilon,
BetweenZeroAndOneNormalizationMaxEpsilon][1:2]
study_classes = [CrocusTotalSwe]
study_classes = [CrocusSweTotal]
for study in study_iterator_global(study_classes, altitudes=altitudes, verbose=False):
if self.DISPLAY:
print(study.altitude)
......
......@@ -2,7 +2,7 @@ from itertools import product
from typing import List
from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
from experiment.meteo_france_data.scm_models_data.crocus.crocus import Crocus, CrocusTotalSwe, CrocusDepth
from experiment.meteo_france_data.scm_models_data.crocus.crocus import Crocus, CrocusSweTotal, CrocusDepth
from extreme_estimator.estimator.full_estimator.abstract_full_estimator import SmoothMarginalsThenUnitaryMsp, \
FullEstimatorInASingleStepWithSmoothMargin
from extreme_estimator.estimator.max_stable_estimator.abstract_max_stable_estimator import MaxStableEstimator
......@@ -119,7 +119,7 @@ def load_safran_studies(altitudes) -> List[Safran]:
def load_crocus_studies(altitudes) -> List[Crocus]:
crocus_classes = [CrocusTotalSwe, CrocusDepth][:]
crocus_classes = [CrocusSweTotal, CrocusDepth][:]
return [crocus_class(altitude=altitude) for crocus_class, altitude in product(crocus_classes, altitudes)]
......
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