diff --git a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/main_hypercube_visualization.py b/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/main_hypercube_visualization.py index 534541c89313e61bd426fefa090377a695398816..dce9a699af1fece48ff1ee39ddf8f5c2a4611d01 100644 --- a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/main_hypercube_visualization.py +++ b/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/main_hypercube_visualization.py @@ -93,9 +93,9 @@ def fast_trends_with_quantity_altitude_hypercube(): def main_run(): - # fast_trends_with_altitude_hypercube() + fast_trends_with_altitude_hypercube() # fast_trends_with_quantity_altitude_hypercube() - full_trends_with_quantity_altitude_hypercube() + # full_trends_with_quantity_altitude_hypercube() if __name__ == '__main__': diff --git a/experiment/trend_analysis/univariate_trend_test/abstract_gev_trend_test.py b/experiment/trend_analysis/univariate_trend_test/abstract_gev_trend_test.py index c9811d9e986bf0510fc7a1c1d022e7055ac51578..1b734763ef92815abfaf407eb110e5b10d42b54e 100644 --- a/experiment/trend_analysis/univariate_trend_test/abstract_gev_trend_test.py +++ b/experiment/trend_analysis/univariate_trend_test/abstract_gev_trend_test.py @@ -28,7 +28,7 @@ class AbstractGevTrendTest(AbstractTrendTest): df = pd.DataFrame({AbstractCoordinates.COORDINATE_T: years_after_change_point}) df_maxima_gev = pd.DataFrame(maxima_after_change_point, index=df.index) observations = AbstractSpatioTemporalObservations(df_maxima_gev=df_maxima_gev) - self.coordinates = AbstractTemporalCoordinates.from_df(df, transformation_class=CenteredScaledNormalization) + self.coordinates = AbstractTemporalCoordinates.from_df(df, transformation_class=CenteredScaledNormalization) # type: AbstractTemporalCoordinates self.dataset = AbstractDataset(observations=observations, coordinates=self.coordinates) try: @@ -81,7 +81,14 @@ class AbstractGevTrendTest(AbstractTrendTest): @property def test_trend_strength(self): - return 100 * np.abs(self.non_stationary_linear_coef) / np.abs(self.non_stationary_intercept_coef) + return self.percentage_of_change_per_year + + @property + def percentage_of_change_per_year(self): + ratio = np.abs(self.non_stationary_linear_coef) / np.abs(self.non_stationary_intercept_coef) + scaled_ratio = ratio * self.coordinates.transformed_distance_between_two_successive_years + percentage_of_change_per_year = 100 * scaled_ratio + return percentage_of_change_per_year @property def test_sign(self) -> int: diff --git a/spatio_temporal_dataset/coordinates/abstract_coordinates.py b/spatio_temporal_dataset/coordinates/abstract_coordinates.py index 523d51310dcf1d28569eeca21c363e7ffa3550ad..9a8f63de57e20bfde1e5d936b5d90a55cf2514b6 100644 --- a/spatio_temporal_dataset/coordinates/abstract_coordinates.py +++ b/spatio_temporal_dataset/coordinates/abstract_coordinates.py @@ -133,8 +133,8 @@ class AbstractCoordinates(object): # Normalize def transform(self, coordinate: np.ndarray) -> np.ndarray: - coordinate_float = coordinate.astype(self.COORDINATE_TYPE) - return self.transformation.transform_array(coordinate=coordinate_float) + coordinate_array_as_float = coordinate.astype(self.COORDINATE_TYPE) + return self.transformation.transform_array(coordinate=coordinate_array_as_float) # Split diff --git a/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_coordinates.py b/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_coordinates.py index 8084820e3788c1404d94e0cbe14ab07fc73b4b9f..8edda8474254c4bd0982b4b48e67634cb5d00007 100644 --- a/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_coordinates.py +++ b/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_coordinates.py @@ -1,5 +1,5 @@ import pandas as pd - +import numpy as np from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.slicer.temporal_slicer import TemporalSlicer @@ -10,6 +10,10 @@ class AbstractTemporalCoordinates(AbstractCoordinates): def temporal_coordinates(self): return self + @property + def transformed_distance_between_two_successive_years(self): + return self.transform(np.ones([1])) - self.transform(np.zeros([1])) + @classmethod def from_df(cls, df: pd.DataFrame, train_split_ratio: float = None, transformation_class: type = None): assert cls.COORDINATE_T in df.columns diff --git a/test/test_spatio_temporal_dataset/test_transformation.py b/test/test_spatio_temporal_dataset/test_transformation.py index bbce70517a838390ce587c149b075c0948741c06..e03b0eb5d1dbd99c70367432b33a7ebc26581f65 100644 --- a/test/test_spatio_temporal_dataset/test_transformation.py +++ b/test/test_spatio_temporal_dataset/test_transformation.py @@ -18,14 +18,15 @@ class TestTransformation(unittest.TestCase): nb_steps = 3 start = 1950 transformation_class_to_expected = { - BetweenZeroAndOneNormalization: [0.0, 0.5, 1.0], - BetweenMinusOneAndOneNormalization: [-1.0, 0.0, 1.0], - CenteredScaledNormalization: [-1.22474487, 0., 1.22474487], + BetweenZeroAndOneNormalization: (0.5, [0.0, 0.5, 1.0]), + BetweenMinusOneAndOneNormalization: (1.0, [-1.0, 0.0, 1.0]), + CenteredScaledNormalization: (1.22474487, [-1.22474487, 0., 1.22474487]), } - for transformation_class, expected in transformation_class_to_expected.items(): + for transformation_class, (expected_distance, expected) in transformation_class_to_expected.items(): temporal_coordinates = ConsecutiveTemporalCoordinates.from_nb_temporal_steps(nb_temporal_steps=nb_steps, start=start, transformation_class=transformation_class) + self.assertTrue(np.allclose(temporal_coordinates.transformed_distance_between_two_successive_years, expected_distance)) normalized_coordinates = temporal_coordinates.df_coordinates().iloc[:, 0].values expected_coordinates = np.array(expected) equal = np.allclose(normalized_coordinates , expected_coordinates)