Commit 661bfe29 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[SCM][HYPERCUBE] normalize gev trend_strength with distance between years....

[SCM][HYPERCUBE] normalize gev trend_strength with distance between years. update test to check this distance.
parent 07091db8
No related merge requests found
Showing with 23 additions and 11 deletions
+23 -11
...@@ -93,9 +93,9 @@ def fast_trends_with_quantity_altitude_hypercube(): ...@@ -93,9 +93,9 @@ def fast_trends_with_quantity_altitude_hypercube():
def main_run(): def main_run():
# fast_trends_with_altitude_hypercube() fast_trends_with_altitude_hypercube()
# fast_trends_with_quantity_altitude_hypercube() # fast_trends_with_quantity_altitude_hypercube()
full_trends_with_quantity_altitude_hypercube() # full_trends_with_quantity_altitude_hypercube()
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -28,7 +28,7 @@ class AbstractGevTrendTest(AbstractTrendTest): ...@@ -28,7 +28,7 @@ class AbstractGevTrendTest(AbstractTrendTest):
df = pd.DataFrame({AbstractCoordinates.COORDINATE_T: years_after_change_point}) df = pd.DataFrame({AbstractCoordinates.COORDINATE_T: years_after_change_point})
df_maxima_gev = pd.DataFrame(maxima_after_change_point, index=df.index) df_maxima_gev = pd.DataFrame(maxima_after_change_point, index=df.index)
observations = AbstractSpatioTemporalObservations(df_maxima_gev=df_maxima_gev) 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) self.dataset = AbstractDataset(observations=observations, coordinates=self.coordinates)
try: try:
...@@ -81,7 +81,14 @@ class AbstractGevTrendTest(AbstractTrendTest): ...@@ -81,7 +81,14 @@ class AbstractGevTrendTest(AbstractTrendTest):
@property @property
def test_trend_strength(self): 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 @property
def test_sign(self) -> int: def test_sign(self) -> int:
......
...@@ -133,8 +133,8 @@ class AbstractCoordinates(object): ...@@ -133,8 +133,8 @@ class AbstractCoordinates(object):
# Normalize # Normalize
def transform(self, coordinate: np.ndarray) -> np.ndarray: def transform(self, coordinate: np.ndarray) -> np.ndarray:
coordinate_float = coordinate.astype(self.COORDINATE_TYPE) coordinate_array_as_float = coordinate.astype(self.COORDINATE_TYPE)
return self.transformation.transform_array(coordinate=coordinate_float) return self.transformation.transform_array(coordinate=coordinate_array_as_float)
# Split # Split
......
import pandas as pd import pandas as pd
import numpy as np
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.slicer.temporal_slicer import TemporalSlicer from spatio_temporal_dataset.slicer.temporal_slicer import TemporalSlicer
...@@ -10,6 +10,10 @@ class AbstractTemporalCoordinates(AbstractCoordinates): ...@@ -10,6 +10,10 @@ class AbstractTemporalCoordinates(AbstractCoordinates):
def temporal_coordinates(self): def temporal_coordinates(self):
return self return self
@property
def transformed_distance_between_two_successive_years(self):
return self.transform(np.ones([1])) - self.transform(np.zeros([1]))
@classmethod @classmethod
def from_df(cls, df: pd.DataFrame, train_split_ratio: float = None, transformation_class: type = None): def from_df(cls, df: pd.DataFrame, train_split_ratio: float = None, transformation_class: type = None):
assert cls.COORDINATE_T in df.columns assert cls.COORDINATE_T in df.columns
......
...@@ -18,14 +18,15 @@ class TestTransformation(unittest.TestCase): ...@@ -18,14 +18,15 @@ class TestTransformation(unittest.TestCase):
nb_steps = 3 nb_steps = 3
start = 1950 start = 1950
transformation_class_to_expected = { transformation_class_to_expected = {
BetweenZeroAndOneNormalization: [0.0, 0.5, 1.0], BetweenZeroAndOneNormalization: (0.5, [0.0, 0.5, 1.0]),
BetweenMinusOneAndOneNormalization: [-1.0, 0.0, 1.0], BetweenMinusOneAndOneNormalization: (1.0, [-1.0, 0.0, 1.0]),
CenteredScaledNormalization: [-1.22474487, 0., 1.22474487], 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, temporal_coordinates = ConsecutiveTemporalCoordinates.from_nb_temporal_steps(nb_temporal_steps=nb_steps,
start=start, start=start,
transformation_class=transformation_class) 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 normalized_coordinates = temporal_coordinates.df_coordinates().iloc[:, 0].values
expected_coordinates = np.array(expected) expected_coordinates = np.array(expected)
equal = np.allclose(normalized_coordinates , expected_coordinates) equal = np.allclose(normalized_coordinates , expected_coordinates)
......
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