Commit 41ef10f5 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting project] add global mean temperature data, and add test for...

[contrasting project] add global mean temperature data, and add test for adding these covariate to the coordinates.
parent fc9c8bf7
No related merge requests found
Showing with 70 additions and 7 deletions
+70 -7
import os
import os.path as op
import numpy as np
import pandas as pd import pandas as pd
from root_utils import get_full_path from root_utils import get_full_path
relative_path = r'local/EDF_data/Weather_types/CatalogueTT_EDF_France0_5308.txt' relative_path = r'local/EDF_data/Weather_types/CatalogueTT_EDF_France0_5308.txt'
......
"""
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
...@@ -268,7 +268,7 @@ class AbstractCoordinates(object): ...@@ -268,7 +268,7 @@ class AbstractCoordinates(object):
# Potentially transform the time covariate into another covariate # Potentially transform the time covariate into another covariate
if temporal_covariate_for_fit is not None: if temporal_covariate_for_fit is not None:
assert issubclass(temporal_covariate_for_fit, AbstractTemporalCovariateForFit) 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 return df
@property @property
......
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): class AbstractTemporalCovariateForFit(object):
@classmethod @classmethod
...@@ -14,6 +20,17 @@ class TimeTemporalCovariate(AbstractTemporalCovariateForFit): ...@@ -14,6 +20,17 @@ class TimeTemporalCovariate(AbstractTemporalCovariateForFit):
class MeanGlobalTemperatureCovariate(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 @classmethod
def get_temporal_covariate(cls, t): 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))
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()
...@@ -18,7 +18,9 @@ from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coo ...@@ -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 \ from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import \
CircleSpatialCoordinates CircleSpatialCoordinates
from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_covariate_for_fit import \ 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 \ from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.abstract_transformation import \
CenteredScaledNormalization CenteredScaledNormalization
from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \ from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \
...@@ -161,7 +163,13 @@ class TestCoordinatesWithModifiedCovariate(unittest.TestCase): ...@@ -161,7 +163,13 @@ class TestCoordinatesWithModifiedCovariate(unittest.TestCase):
old_df = coordinates.df_temporal_coordinates_for_fit().copy() old_df = coordinates.df_temporal_coordinates_for_fit().copy()
new_df = coordinates.df_temporal_coordinates_for_fit(temporal_covariate_for_fit=TimeTemporalCovariate) new_df = coordinates.df_temporal_coordinates_for_fit(temporal_covariate_for_fit=TimeTemporalCovariate)
pd.testing.assert_frame_equal(old_df, new_df) 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__': if __name__ == '__main__':
......
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