diff --git a/extreme_data/edf_data/weather_types.py b/extreme_data/edf_data/weather_types.py index e22672dd443a30c7e30ce8373d80af11379069f9..ca2c74dcb8d11ae2d4ff30b1e05d50beefbf72f3 100644 --- a/extreme_data/edf_data/weather_types.py +++ b/extreme_data/edf_data/weather_types.py @@ -1,7 +1,5 @@ -import os -import os.path as op -import numpy as np import pandas as pd + from root_utils import get_full_path relative_path = r'local/EDF_data/Weather_types/CatalogueTT_EDF_France0_5308.txt' diff --git a/extreme_data/nasa_data/global_mean_temperature.py b/extreme_data/nasa_data/global_mean_temperature.py new file mode 100644 index 0000000000000000000000000000000000000000..e8ff3ea1a6d782d2a13d1bde8b11a66fd8ad3be1 --- /dev/null +++ b/extreme_data/nasa_data/global_mean_temperature.py @@ -0,0 +1,20 @@ +""" +Source: +https://www.jpl.nasa.gov/edu/teach/activity/graphing-global-temperature-trends/ + +We took the csv file correspond to "Global annual mean temperature data" +""" +import pandas as pd + +from root_utils import get_full_path + +relative_path = r'local/NASA_data/global_annual_mean_temp_anomalies_land-ocean_1880-2016_modified.csv' +edf_filepath = get_full_path(relative_path=relative_path) + + +def load_year_to_mean_global_temperature(): + df = pd.read_csv(edf_filepath) + df = df.astype({'Year': 'float'}) + d = dict(zip(df['Year'], df['Actual Temp'])) + return d + diff --git a/spatio_temporal_dataset/coordinates/abstract_coordinates.py b/spatio_temporal_dataset/coordinates/abstract_coordinates.py index 3d4a3fb0f56eed17d720b07b03407bf2e5451d3b..f98974e9345b912e109c8cb1b1a0f2c101177960 100644 --- a/spatio_temporal_dataset/coordinates/abstract_coordinates.py +++ b/spatio_temporal_dataset/coordinates/abstract_coordinates.py @@ -268,7 +268,7 @@ class AbstractCoordinates(object): # Potentially transform the time covariate into another covariate if temporal_covariate_for_fit is not None: assert issubclass(temporal_covariate_for_fit, AbstractTemporalCovariateForFit) - df = df.apply(temporal_covariate_for_fit.get_temporal_covariate) + df.iloc[:, 0] = df.iloc[:, 0].apply(temporal_covariate_for_fit.get_temporal_covariate) return df @property diff --git a/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_covariate_for_fit.py b/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_covariate_for_fit.py index 7ce27a4037b1ebffff69483010b0f67e4b16811f..02777561c9ee68aa9f521f60712f8f718c5f508e 100644 --- a/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_covariate_for_fit.py +++ b/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_covariate_for_fit.py @@ -1,3 +1,9 @@ +import pandas as pd + +from extreme_data.nasa_data.global_mean_temperature import load_year_to_mean_global_temperature +from root_utils import classproperty + + class AbstractTemporalCovariateForFit(object): @classmethod @@ -14,6 +20,17 @@ class TimeTemporalCovariate(AbstractTemporalCovariateForFit): class MeanGlobalTemperatureCovariate(AbstractTemporalCovariateForFit): + _d = None + + @classproperty + def year_to_global_mean(cls): + if cls._d is None: + cls._d = load_year_to_mean_global_temperature() + return cls._d + @classmethod def get_temporal_covariate(cls, t): - pass + try: + return pd.Series(cls.year_to_global_mean[t]) + except KeyError: + raise KeyError('Global mean temperature is not known for Year t={}'.format(t)) diff --git a/test/test_extreme_data/test_nasa_data/test_mean_global_temperature.py b/test/test_extreme_data/test_nasa_data/test_mean_global_temperature.py new file mode 100644 index 0000000000000000000000000000000000000000..70d5bc9e2c2c618375eb6d72b00060540e52c2f3 --- /dev/null +++ b/test/test_extreme_data/test_nasa_data/test_mean_global_temperature.py @@ -0,0 +1,20 @@ +import unittest + +from extreme_data.edf_data.weather_types import load_df_weather_types +from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranTemperature +from extreme_data.nasa_data.global_mean_temperature import load_year_to_mean_global_temperature + + +class TestMeanGlobalTemperatures(unittest.TestCase): + + def test_year_to_mean_global_temperature(self): + d = load_year_to_mean_global_temperature() + self.assertNotIn(2019, d) + self.assertIn(2009, d) + key = list(d.keys())[0] + self.assertIsInstance(key, float) + value = list(d.values())[0] + self.assertIsInstance(value, float) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_spatio_temporal_dataset/test_coordinates.py b/test/test_spatio_temporal_dataset/test_coordinates.py index 5319c9d723ac0409982137b1118bd6fe92ca5563..c589a6069911fb528b409f68c5c5582f64be5290 100644 --- a/test/test_spatio_temporal_dataset/test_coordinates.py +++ b/test/test_spatio_temporal_dataset/test_coordinates.py @@ -18,7 +18,9 @@ from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coo from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import \ CircleSpatialCoordinates from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_covariate_for_fit import \ - AbstractTemporalCovariateForFit, TimeTemporalCovariate + AbstractTemporalCovariateForFit, TimeTemporalCovariate, MeanGlobalTemperatureCovariate +from spatio_temporal_dataset.coordinates.temporal_coordinates.generated_temporal_coordinates import \ + ConsecutiveTemporalCoordinates from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.abstract_transformation import \ CenteredScaledNormalization from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \ @@ -161,7 +163,13 @@ class TestCoordinatesWithModifiedCovariate(unittest.TestCase): old_df = coordinates.df_temporal_coordinates_for_fit().copy() new_df = coordinates.df_temporal_coordinates_for_fit(temporal_covariate_for_fit=TimeTemporalCovariate) pd.testing.assert_frame_equal(old_df, new_df) - # pd.as.assertEqual(old_df, new_df) + + def test_mean_global_time_covariate(self): + coordinates = ConsecutiveTemporalCoordinates.from_nb_temporal_steps(nb_temporal_steps=10, start=2000) + df = coordinates.df_temporal_coordinates_for_fit(temporal_covariate_for_fit=MeanGlobalTemperatureCovariate) + self.assertIsInstance(df, pd.DataFrame) + self.assertEqual(df.iloc[0].values[0], 14.3262) + self.assertEqual(df.iloc[-1].values[0], 14.5367) if __name__ == '__main__':