Commit 5b990dbc authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[DATA EXTRACTION] add all_days & all_daily_series property, that was useful to...

[DATA EXTRACTION] add all_days & all_daily_series property, that was useful to extract some data of snow depth for taline
parent 6cfb4131
No related merge requests found
Showing with 54 additions and 10 deletions
+54 -10
import datetime
import io import io
import os import os
import os.path as op import os.path as op
from collections import OrderedDict from collections import OrderedDict
from contextlib import redirect_stdout from contextlib import redirect_stdout
from itertools import chain
from multiprocessing.pool import Pool from multiprocessing.pool import Pool
from typing import List, Dict, Tuple, Union from typing import List, Dict, Tuple, Union
...@@ -41,8 +43,11 @@ class AbstractStudy(object): ...@@ -41,8 +43,11 @@ class AbstractStudy(object):
- a start and a end year - a start and a end year
Les fichiers netcdf de SAFRAN et CROCUS sont autodocumentés (on peut les comprendre avec ncdump -h notamment). Les fichiers netcdf de SAFRAN et CROCUS sont autodocumentés (on peut les comprendre avec ncdump -h notamment).
The year 2017 represents the nc file that correspond to the winter between the year 2017 and 2018.
""" """
REANALYSIS_FOLDER = 'SAFRAN_montagne-CROCUS_2019/alp_flat/reanalysis' REANALYSIS_FOLDER = 'SAFRAN_montagne-CROCUS_2019/alp_flat/reanalysis'
# REANALYSIS_FOLDER = 'SAFRAN_montagne-CROCUS_2019/alp_allslopes/reanalysis'
# REANALYSIS_FOLDER = 'SAFRAN_montagne-CROCUS_2019/postes/reanalysis' # REANALYSIS_FOLDER = 'SAFRAN_montagne-CROCUS_2019/postes/reanalysis'
def __init__(self, variable_class: type, altitude: int = 1800, year_min=1000, year_max=3000, def __init__(self, variable_class: type, altitude: int = 1800, year_min=1000, year_max=3000,
...@@ -56,6 +61,33 @@ class AbstractStudy(object): ...@@ -56,6 +61,33 @@ class AbstractStudy(object):
self.year_max = year_max self.year_max = year_max
self.multiprocessing = multiprocessing self.multiprocessing = multiprocessing
""" Time """
@cached_property
def year_to_days(self) -> OrderedDict:
# Map each year to the 'days since year-08-01 06:00:00'
year_to_days = OrderedDict()
for year in self.ordered_years:
date = datetime.datetime(year=year, month=8, day=1, hour=6, minute=0, second=0)
days = []
for i in range(366):
days.append(str(date).split()[0])
date += datetime.timedelta(days=1)
if date.month == 8 and date.day == 1:
break
year_to_days[year] = days
return year_to_days
@property
def all_days(self):
return list(chain(*list(self.year_to_days.values())))
@property
def all_daily_series(self):
all_daily_series = np.concatenate(list(self.year_to_daily_time_serie_array.values()))
assert len(all_daily_series) == len(self.all_days)
return all_daily_series
""" Annual maxima """ """ Annual maxima """
@property @property
......
from collections import OrderedDict
import numpy as np
import pandas as pd
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth
from experiment.meteo_france_data.scm_models_data.scm_constants import ALTITUDES
from utils import get_display_name_from_object_type
massif_name = 'Queyras'
study_class = CrocusDepth
all_days = study_class(altitude=0).all_days
altitude_to_queyras_depth = OrderedDict()
for altitude in ALTITUDES[:]:
study = study_class(altitude=altitude)
if massif_name in study.study_massif_names:
idx_queyras = study.study_massif_names.index(massif_name)
queyras_all_daily_series = study.all_daily_series[:, idx_queyras]
altitude_to_queyras_depth[altitude] = queyras_all_daily_series
df = pd.DataFrame.from_dict(altitude_to_queyras_depth)
df.index = all_days
df.to_csv('{}_{}.csv'.format(massif_name, get_display_name_from_object_type(study_class)))
\ No newline at end of file
...@@ -3,16 +3,6 @@ from collections import OrderedDict ...@@ -3,16 +3,6 @@ from collections import OrderedDict
from experiment.eurocode_data.eurocode_visualizer import display_region_limit from experiment.eurocode_data.eurocode_visualizer import display_region_limit
from experiment.eurocode_data.region_eurocode import C1, E from experiment.eurocode_data.region_eurocode import C1, E
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 \
StudyVisualizer
from experiment.trend_analysis.non_stationary_trends import \
ConditionalIndedendenceLocationTrendTest
from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \
BetweenZeroAndOneNormalization, BetweenZeroAndOneNormalizationMinEpsilon, BetweenZeroAndOneNormalizationMaxEpsilon
from utils import get_display_name_from_object_type
class TestCoordinateSensitivity(unittest.TestCase): class TestCoordinateSensitivity(unittest.TestCase):
......
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