Commit db5692b5 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[COORDINATES] refactor coordinates. add abstract spatial, temporal, and spatio_temporal

parent 1f9e24f4
No related merge requests found
Showing with 133 additions and 56 deletions
+133 -56
from typing import Union
from experiment.fit_diagnosis.split_curve import SplitCurve
from extreme_estimator.estimator.full_estimator import AbstractFullEstimator
from extreme_estimator.estimator.margin_estimator import AbstractMarginEstimator, ConstantMarginEstimator
from spatio_temporal_dataset.dataset.simulation_dataset import FullSimulatedDataset
import random
from experiment.fit_diagnosis.split_curve import SplitCurve from experiment.fit_diagnosis.split_curve import SplitCurve
from extreme_estimator.estimator.full_estimator import FullEstimatorInASingleStepWithSmoothMargin from extreme_estimator.estimator.full_estimator import FullEstimatorInASingleStepWithSmoothMargin
from extreme_estimator.estimator.margin_estimator import SmoothMarginEstimator
from extreme_estimator.extreme_models.margin_model.smooth_margin_model import ConstantMarginModel, \ from extreme_estimator.extreme_models.margin_model.smooth_margin_model import ConstantMarginModel, \
LinearAllParametersAllDimsMarginModel LinearAllParametersAllDimsMarginModel
from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith
from extreme_estimator.gev_params import GevParams from extreme_estimator.gev_params import GevParams
from spatio_temporal_dataset.coordinates.unidimensional_coordinates.coordinates_1D import LinSpaceCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import LinSpaceSpatialCoordinates
from spatio_temporal_dataset.dataset.simulation_dataset import FullSimulatedDataset from spatio_temporal_dataset.dataset.simulation_dataset import FullSimulatedDataset
...@@ -24,7 +14,7 @@ class SplitCurveExample(SplitCurve): ...@@ -24,7 +14,7 @@ class SplitCurveExample(SplitCurve):
super().__init__(nb_fit) super().__init__(nb_fit)
self.nb_points = 50 self.nb_points = 50
self.nb_obs = 60 self.nb_obs = 60
self.coordinates = LinSpaceCoordinates.from_nb_points(nb_points=self.nb_points, train_split_ratio=0.8) self.coordinates = LinSpaceSpatialCoordinates.from_nb_points(nb_points=self.nb_points, train_split_ratio=0.8)
# MarginModel Linear with respect to the shape (from 0.01 to 0.02) # MarginModel Linear with respect to the shape (from 0.01 to 0.02)
params_sample = { params_sample = {
(GevParams.GEV_LOC, 0): 10, (GevParams.GEV_LOC, 0): 10,
......
import random
import numpy as np import numpy as np
from extreme_estimator.estimator.full_estimator import FullEstimatorInASingleStepWithSmoothMargin from extreme_estimator.estimator.full_estimator import FullEstimatorInASingleStepWithSmoothMargin
from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction
from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearShapeDim1MarginModel, \ from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearAllParametersAllDimsMarginModel, \
LinearAllParametersAllDimsMarginModel, LinearScaleDim1MarginModel, ConstantMarginModel ConstantMarginModel
from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith
from extreme_estimator.gev_params import GevParams from extreme_estimator.gev_params import GevParams
from spatio_temporal_dataset.coordinates.unidimensional_coordinates.coordinates_1D import LinSpaceCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import LinSpaceSpatialCoordinates
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from spatio_temporal_dataset.dataset.simulation_dataset import FullSimulatedDataset from spatio_temporal_dataset.dataset.simulation_dataset import FullSimulatedDataset
...@@ -18,7 +16,7 @@ nb_obs = 60 ...@@ -18,7 +16,7 @@ nb_obs = 60
nb_estimator = 2 nb_estimator = 2
show = False show = False
coordinates = LinSpaceCoordinates.from_nb_points(nb_points=nb_points) coordinates = LinSpaceSpatialCoordinates.from_nb_points(nb_points=nb_points)
########## GENERATING THE DATA ##################### ########## GENERATING THE DATA #####################
......
...@@ -3,8 +3,8 @@ import unittest ...@@ -3,8 +3,8 @@ import unittest
from extreme_estimator.gev_params import GevParams from extreme_estimator.gev_params import GevParams
from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearShapeDim1MarginModel, \ from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearShapeDim1MarginModel, \
LinearAllParametersAllDimsMarginModel LinearAllParametersAllDimsMarginModel
from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleSpatialCoordinates
from spatio_temporal_dataset.coordinates.unidimensional_coordinates.coordinates_1D import LinSpaceCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import LinSpaceSpatialCoordinates
class VisualizationMarginModel(unittest.TestCase): class VisualizationMarginModel(unittest.TestCase):
...@@ -14,14 +14,14 @@ class VisualizationMarginModel(unittest.TestCase): ...@@ -14,14 +14,14 @@ class VisualizationMarginModel(unittest.TestCase):
@classmethod @classmethod
def example_visualization_2D(cls): def example_visualization_2D(cls):
spatial_coordinates = CircleCoordinates.from_nb_points(nb_points=cls.nb_points) spatial_coordinates = CircleSpatialCoordinates.from_nb_points(nb_points=cls.nb_points)
margin_model = cls.margin_model(coordinates=spatial_coordinates) margin_model = cls.margin_model(coordinates=spatial_coordinates)
if cls.DISPLAY: if cls.DISPLAY:
margin_model.margin_function_sample.visualize() margin_model.margin_function_sample.visualize()
@classmethod @classmethod
def example_visualization_1D(cls): def example_visualization_1D(cls):
coordinates = LinSpaceCoordinates.from_nb_points(nb_points=cls.nb_points) coordinates = LinSpaceSpatialCoordinates.from_nb_points(nb_points=cls.nb_points)
margin_model = cls.margin_model(coordinates=coordinates, params_sample={(GevParams.GEV_SHAPE, 1): 0.02}) margin_model = cls.margin_model(coordinates=coordinates, params_sample={(GevParams.GEV_SHAPE, 1): 0.02})
if cls.DISPLAY: if cls.DISPLAY:
margin_model.margin_function_sample.visualize() margin_model.margin_function_sample.visualize()
......
...@@ -5,7 +5,7 @@ from experiment.robustness_plot.display_item import DisplayItem ...@@ -5,7 +5,7 @@ from experiment.robustness_plot.display_item import DisplayItem
from experiment.robustness_plot.multiple_plot import MultiplePlot from experiment.robustness_plot.multiple_plot import MultiplePlot
from experiment.robustness_plot.single_plot import SinglePlot from experiment.robustness_plot.single_plot import SinglePlot
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleSpatialCoordinates
from spatio_temporal_dataset.dataset.simulation_dataset import MaxStableDataset from spatio_temporal_dataset.dataset.simulation_dataset import MaxStableDataset
...@@ -23,7 +23,7 @@ class CoordinateDisplayItem(DisplayItem): ...@@ -23,7 +23,7 @@ class CoordinateDisplayItem(DisplayItem):
class MaxStableProcessPlot(object): class MaxStableProcessPlot(object):
MaxStableModelItem = MaxStableDisplayItem('max_stable_model', Smith) MaxStableModelItem = MaxStableDisplayItem('max_stable_model', Smith)
CoordinateClassItem = CoordinateDisplayItem('coordinate_class', CircleCoordinates) CoordinateClassItem = CoordinateDisplayItem('coordinate_class', CircleSpatialCoordinates)
NbStationItem = DisplayItem('Number of stations', 50) NbStationItem = DisplayItem('Number of stations', 50)
NbObservationItem = DisplayItem('nb_obs', 60) NbObservationItem = DisplayItem('nb_obs', 60)
......
...@@ -4,8 +4,8 @@ from experiment.robustness_plot.estimation_robustness.max_stable_process_plot im ...@@ -4,8 +4,8 @@ from experiment.robustness_plot.estimation_robustness.max_stable_process_plot im
from experiment.robustness_plot.single_plot import SinglePlot from experiment.robustness_plot.single_plot import SinglePlot
from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_2D_coordinates import \ from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_2D_coordinates import \
AlpsStation2DCoordinatesBetweenZeroAndOne, AlpsStationCoordinatesBetweenZeroAndTwo AlpsStation2DCoordinatesBetweenZeroAndOne, AlpsStationCoordinatesBetweenZeroAndTwo
from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleCoordinates, \ from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleSpatialCoordinates, \
CircleCoordinatesRadius2 CircleSpatialCoordinatesRadius2
# def single_spatial_robustness_alps(): # def single_spatial_robustness_alps():
...@@ -49,8 +49,8 @@ def multiple_spatial_robustness_alps(): ...@@ -49,8 +49,8 @@ def multiple_spatial_robustness_alps():
MaxStableProcessPlot.NbStationItem.name: nb_stations, MaxStableProcessPlot.NbStationItem.name: nb_stations,
MaxStableProcessPlot.NbObservationItem.name: nb_observation, MaxStableProcessPlot.NbObservationItem.name: nb_observation,
MaxStableProcessPlot.MaxStableModelItem.name: msp_models, MaxStableProcessPlot.MaxStableModelItem.name: msp_models,
MaxStableProcessPlot.CoordinateClassItem.name: [CircleCoordinates, MaxStableProcessPlot.CoordinateClassItem.name: [CircleSpatialCoordinates,
CircleCoordinatesRadius2, CircleSpatialCoordinatesRadius2,
AlpsStation2DCoordinatesBetweenZeroAndOne, AlpsStation2DCoordinatesBetweenZeroAndOne,
AlpsStationCoordinatesBetweenZeroAndTwo][:], AlpsStationCoordinatesBetweenZeroAndTwo][:],
}) })
......
...@@ -4,8 +4,8 @@ from experiment.robustness_plot.estimation_robustness.max_stable_process_plot im ...@@ -4,8 +4,8 @@ from experiment.robustness_plot.estimation_robustness.max_stable_process_plot im
from experiment.robustness_plot.single_plot import SinglePlot from experiment.robustness_plot.single_plot import SinglePlot
from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_2D_coordinates import \ from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_2D_coordinates import \
AlpsStation2DCoordinatesBetweenZeroAndOne, AlpsStationCoordinatesBetweenZeroAndTwo AlpsStation2DCoordinatesBetweenZeroAndOne, AlpsStationCoordinatesBetweenZeroAndTwo
from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleCoordinates, \ from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleSpatialCoordinates, \
CircleCoordinatesRadius2 CircleSpatialCoordinatesRadius2
# def single_spatial_robustness_alps(): # def single_spatial_robustness_alps():
...@@ -49,8 +49,8 @@ def multiple_unidimensional_robustness(): ...@@ -49,8 +49,8 @@ def multiple_unidimensional_robustness():
MaxStableProcessPlot.NbStationItem.name: nb_stations, MaxStableProcessPlot.NbStationItem.name: nb_stations,
MaxStableProcessPlot.NbObservationItem.name: nb_observation, MaxStableProcessPlot.NbObservationItem.name: nb_observation,
MaxStableProcessPlot.MaxStableModelItem.name: msp_models, MaxStableProcessPlot.MaxStableModelItem.name: msp_models,
MaxStableProcessPlot.CoordinateClassItem.name: [CircleCoordinates, MaxStableProcessPlot.CoordinateClassItem.name: [CircleSpatialCoordinates,
CircleCoordinatesRadius2, CircleSpatialCoordinatesRadius2,
AlpsStation2DCoordinatesBetweenZeroAndOne, AlpsStation2DCoordinatesBetweenZeroAndOne,
AlpsStationCoordinatesBetweenZeroAndTwo][:], AlpsStationCoordinatesBetweenZeroAndTwo][:],
}) })
......
...@@ -84,6 +84,7 @@ class AbstractMaxStableModel(AbstractModel): ...@@ -84,6 +84,7 @@ class AbstractMaxStableModel(AbstractModel):
""" """
Return an numpy of maxima. With rows being the stations and columns being the years of maxima Return an numpy of maxima. With rows being the stations and columns being the years of maxima
""" """
maxima_frech = np.array( maxima_frech = np.array(
r.rmaxstab(nb_obs, coordinates_values, *list(self.cov_mod_param.values()), **self.params_sample)) r.rmaxstab(nb_obs, coordinates_values, *list(self.cov_mod_param.values()), **self.params_sample))
return np.transpose(maxima_frech) return np.transpose(maxima_frech)
......
...@@ -23,11 +23,11 @@ class AbstractCoordinates(object): ...@@ -23,11 +23,11 @@ class AbstractCoordinates(object):
SPATIAL_SPLIT = 'spatial_split' SPATIAL_SPLIT = 'spatial_split'
# Temporal columns # Temporal columns
COORDINATE_T = 'coord_t' COORDINATE_T = 'coord_t'
TEMPORAL_SPLIT = 'coord_temporal_split' TEMPORAL_SPLIT = 'temporal_split'
# Coordinates columns
COORDINATES_NAMES = COORDINATE_SPATIAL_NAMES + [COORDINATE_T] COORDINATES_NAMES = COORDINATE_SPATIAL_NAMES + [COORDINATE_T]
def __init__(self, df_coord: pd.DataFrame, s_split_spatial: pd.Series = None, s_split_temporal: pd.Series = None, def __init__(self, df_coord: pd.DataFrame, slicer_class: type, s_split_spatial: pd.Series = None, s_split_temporal: pd.Series = None):
slicer_class: type = SpatialSlicer):
self.df_all_coordinates = df_coord # type: pd.DataFrame self.df_all_coordinates = df_coord # type: pd.DataFrame
self.s_split_spatial = s_split_spatial # type: pd.Series self.s_split_spatial = s_split_spatial # type: pd.Series
self.s_split_temporal = s_split_temporal # type: pd.Series self.s_split_temporal = s_split_temporal # type: pd.Series
...@@ -38,7 +38,7 @@ class AbstractCoordinates(object): ...@@ -38,7 +38,7 @@ class AbstractCoordinates(object):
# ClassMethod constructor # ClassMethod constructor
@classmethod @classmethod
def from_df(cls, df: pd.DataFrame, train_split_ratio: float = None, slicer_class: type = SpatialSlicer): def from_df_and_slicer(cls, df: pd.DataFrame, slicer_class: type, train_split_ratio: float = None):
""" """
train_split_ratio is shared between the spatial part of the data, and the temporal part train_split_ratio is shared between the spatial part of the data, and the temporal part
""" """
...@@ -46,16 +46,19 @@ class AbstractCoordinates(object): ...@@ -46,16 +46,19 @@ class AbstractCoordinates(object):
assert len(set(df.index)) == len(df) assert len(set(df.index)) == len(df)
# Create a spatial split # Create a spatial split
s_split_spatial = s_split_from_df(df, cls.COORDINATE_X, cls.SPATIAL_SPLIT, train_split_ratio, concat=False) if slicer_class in [SpatialSlicer, SpatioTemporalSlicer]:
s_split_spatial = s_split_from_df(df, cls.COORDINATE_X, cls.SPATIAL_SPLIT, train_split_ratio, concat=False)
else:
s_split_spatial = None
# Create a temporal split # Create a temporal split
if slicer_class is SpatioTemporalSlicer: if slicer_class in [TemporalSlicer, SpatioTemporalSlicer]:
s_split_temporal = s_split_from_df(df, cls.COORDINATE_T, cls.TEMPORAL_SPLIT, train_split_ratio, concat=True) s_split_temporal = s_split_from_df(df, cls.COORDINATE_T, cls.TEMPORAL_SPLIT, train_split_ratio, concat=True)
else: else:
s_split_temporal = None s_split_temporal = None
return cls(df_coord=df, s_split_spatial=s_split_spatial, s_split_temporal=s_split_temporal, return cls(df_coord=df, slicer_class=slicer_class,
slicer_class=slicer_class) s_split_spatial=s_split_spatial, s_split_temporal=s_split_temporal)
@classmethod @classmethod
def from_csv(cls, csv_path: str = None): def from_csv(cls, csv_path: str = None):
......
import pandas as pd
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.slicer.spatial_slicer import SpatialSlicer
class AbstractSpatialCoordinates(AbstractCoordinates):
@classmethod
def from_df(cls, df: pd.DataFrame, train_split_ratio: float = None):
assert cls.COORDINATE_X in df.columns
assert cls.COORDINATE_T not in df.columns
return super().from_df_and_slicer(df, SpatialSlicer, train_split_ratio)
from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coordinates import AlpsStation3DCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coordinates import AlpsStation3DCoordinates
from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation_2D import \ from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.transformation_2D import \
BetweenZeroAndOne2DNormalization BetweenZeroAndOne2DNormalization
from spatio_temporal_dataset.coordinates.transformed_coordinates.transformed_coordinates import TransformedCoordinates from spatio_temporal_dataset.coordinates.transformed_coordinates.transformed_coordinates import TransformedCoordinates
......
...@@ -3,12 +3,14 @@ import os.path as op ...@@ -3,12 +3,14 @@ import os.path as op
import pandas as pd import pandas as pd
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.coordinates.transformed_coordinates.tranformation_3D import AnisotropyTransformation from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \
AbstractSpatialCoordinates
from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.tranformation_3D import AnisotropyTransformation
from spatio_temporal_dataset.coordinates.transformed_coordinates.transformed_coordinates import TransformedCoordinates from spatio_temporal_dataset.coordinates.transformed_coordinates.transformed_coordinates import TransformedCoordinates
from utils import get_full_path from utils import get_full_path
class AlpsStation3DCoordinates(AbstractCoordinates): class AlpsStation3DCoordinates(AbstractSpatialCoordinates):
""" """
For the Alps Stations, X, Y coordinates are in Lambert 2. Altitude is in meters For the Alps Stations, X, Y coordinates are in Lambert 2. Altitude is in meters
""" """
......
...@@ -4,13 +4,15 @@ import numpy as np ...@@ -4,13 +4,15 @@ import numpy as np
from rpy2.robjects import r from rpy2.robjects import r
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \
AbstractSpatialCoordinates
class AbstractUniDimensionalCoordinates(AbstractCoordinates): class AbstractUniDimensionalSpatialCoordinates(AbstractSpatialCoordinates):
pass pass
class LinSpaceCoordinates(AbstractUniDimensionalCoordinates): class LinSpaceSpatialCoordinates(AbstractUniDimensionalSpatialCoordinates):
@classmethod @classmethod
def from_nb_points(cls, nb_points, train_split_ratio: float = None, start=-1.0, end=1.0): def from_nb_points(cls, nb_points, train_split_ratio: float = None, start=-1.0, end=1.0):
...@@ -19,11 +21,16 @@ class LinSpaceCoordinates(AbstractUniDimensionalCoordinates): ...@@ -19,11 +21,16 @@ class LinSpaceCoordinates(AbstractUniDimensionalCoordinates):
return cls.from_df(df, train_split_ratio) return cls.from_df(df, train_split_ratio)
class UniformCoordinates(AbstractUniDimensionalCoordinates): class UniformSpatialCoordinates(AbstractUniDimensionalSpatialCoordinates):
@classmethod @classmethod
def from_nb_points(cls, nb_points, train_split_ratio: float = None, start=-1.0, end=1.0): def from_nb_points(cls, nb_points, train_split_ratio: float = None, start=-1.0, end=1.0):
# Sample uniformly inside the circle # Sample uniformly inside the circle
df = cls.df_spatial(nb_points, start, end)
return cls.from_df(df, train_split_ratio)
@classmethod
def df_spatial(cls, nb_points, start=-1.0, end=1.0):
axis_coordinates = np.array(r.runif(nb_points, min=start, max=end)) axis_coordinates = np.array(r.runif(nb_points, min=start, max=end))
df = pd.DataFrame.from_dict({cls.COORDINATE_X: axis_coordinates}) df = pd.DataFrame.from_dict({cls.COORDINATE_X: axis_coordinates})
return cls.from_df(df, train_split_ratio) return df
...@@ -6,8 +6,11 @@ from rpy2.robjects import r ...@@ -6,8 +6,11 @@ from rpy2.robjects import r
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \
AbstractSpatialCoordinates
class CircleCoordinates(AbstractCoordinates):
class CircleSpatialCoordinates(AbstractSpatialCoordinates):
@classmethod @classmethod
def df_spatial(cls, nb_points, max_radius=1.0): def df_spatial(cls, nb_points, max_radius=1.0):
...@@ -31,7 +34,7 @@ class CircleCoordinates(AbstractCoordinates): ...@@ -31,7 +34,7 @@ class CircleCoordinates(AbstractCoordinates):
super().visualization_2D() super().visualization_2D()
class CircleCoordinatesRadius2(CircleCoordinates): class CircleSpatialCoordinatesRadius2(CircleSpatialCoordinates):
@classmethod @classmethod
def from_nb_points(cls, nb_points, train_split_ratio: float = None, max_radius=1.0): def from_nb_points(cls, nb_points, train_split_ratio: float = None, max_radius=1.0):
......
import pandas as pd
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.slicer.spatio_temporal_slicer import SpatioTemporalSlicer
class AbstractSpatioTemporalCoordinates(AbstractCoordinates):
@classmethod
def from_df(cls, df: pd.DataFrame, train_split_ratio: float = None):
assert cls.COORDINATE_T in df.columns
assert cls.COORDINATE_X in df.columns
return super().from_df_and_slicer(df, SpatioTemporalSlicer, train_split_ratio)
\ No newline at end of file
import pandas as pd import pandas as pd
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.coordinates.spatial_coordinates.generated_spatial_coordinates import CircleCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import UniformSpatialCoordinates
from spatio_temporal_dataset.coordinates.spatio_temporal_coordinates.abstract_spatio_temporal_coordinates import \
AbstractSpatioTemporalCoordinates
from spatio_temporal_dataset.slicer.spatio_temporal_slicer import SpatioTemporalSlicer from spatio_temporal_dataset.slicer.spatio_temporal_slicer import SpatioTemporalSlicer
from spatio_temporal_dataset.slicer.split import s_split_from_df
class CircleTemporalCoordinates(CircleCoordinates): class UniformSpatioTemporalCoordinates(AbstractSpatioTemporalCoordinates):
@classmethod @classmethod
def from_nb_points(cls, nb_points, train_split_ratio: float = None, nb_time_steps=1, max_radius=1.0): def from_nb_points(cls, nb_points, train_split_ratio: float = None, nb_time_steps=1, max_radius=1.0):
assert isinstance(nb_time_steps, int) and nb_time_steps >= 1 assert isinstance(nb_time_steps, int) and nb_time_steps >= 1
df_spatial = CircleCoordinates.df_spatial(nb_points, max_radius) df_spatial = UniformSpatialCoordinates.df_spatial(nb_points)
df_time_steps = [] df_time_steps = []
for t in range(nb_time_steps): for t in range(nb_time_steps):
df_time_step = df_spatial.copy() df_time_step = df_spatial.copy()
df_time_step[cls.COORDINATE_T] = t df_time_step[cls.COORDINATE_T] = t
df_time_steps.append(df_time_step) df_time_steps.append(df_time_step)
df_time_steps = pd.concat(df_time_steps, ignore_index=True) df_time_steps = pd.concat(df_time_steps, ignore_index=True)
return AbstractCoordinates.from_df(df=df_time_steps, train_split_ratio=train_split_ratio, print(df_time_steps)
slicer_class=SpatioTemporalSlicer) return cls.from_df(df=df_time_steps, train_split_ratio=train_split_ratio)
import pandas as pd
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.slicer.temporal_slicer import TemporalSlicer
class AbstractTemporalCoordinates(AbstractCoordinates):
@classmethod
def from_df(cls, df: pd.DataFrame, train_split_ratio: float = None):
assert cls.COORDINATE_T in df.columns
assert not any([coordinate_name in df.columns for coordinate_name in cls.COORDINATE_SPATIAL_NAMES])
return super().from_df_and_slicer(df, TemporalSlicer, train_split_ratio)
\ No newline at end of file
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
# class TemporalCoordinates(AbstractCoordinates):
# pass
#
#
# @classmethod
# def from_nb_points(cls, nb_points, train_split_ratio: float = None, start=-1.0, end=1.0):
# # Sample uniformly inside the circle
# df = cls.df_spatial(nb_points, start, end)
# return cls.from_df(df, train_split_ratio)
#
# @classmethod
# def df_spatial(cls, nb_points, start=-1.0, end=1.0):
# axis_coordinates = np.array(r.runif(nb_points, min=start, max=end))
# df = pd.DataFrame.from_dict({cls.COORDINATE_X: axis_coordinates})
# return df
#
# @classmethod
# def from_nb_points(cls, nb_points, train_split_ratio: float = None, nb_time_steps=1, max_radius=1.0):
# assert isinstance(nb_time_steps, int) and nb_time_steps >= 1
# df_spatial = UniformSpatialCoordinates.df_spatial(nb_points)
# df_time_steps = []
# for t in range(nb_time_steps):
# df_time_step = df_spatial.copy()
# df_time_step[cls.COORDINATE_T] = t
# df_time_steps.append(df_time_step)
# df_time_steps = pd.concat(df_time_steps, ignore_index=True)
# print(df_time_steps)
# return cls.from_df(df=df_time_steps, train_split_ratio=train_split_ratio, slicer_class=SpatioTemporalSlicer)
\ No newline at end of file
import pandas as pd import pandas as pd
import numpy as np import numpy as np
from spatio_temporal_dataset.coordinates.transformed_coordinates.abstract_transformation import AbstractTransformation from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.abstract_transformation import AbstractTransformation
import math import math
......
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