Source code for tsgm.utils.data_processing

import numpy as np
from tensorflow.python.types.core import TensorLike
import typing as T


EPS = 1e-18


[docs]class TSGlobalScaler(): """ Scales time series data globally. Attributes: ----------- min : float Minimum value encountered in the data. max : float Maximum value encountered in the data. """
[docs] def fit(self, X: TensorLike) -> "TSGlobalScaler": """ Fits the scaler to the data. :parameter X: Input data. :type X: TensorLike :returns: The fitted scaler object. :rtype: TSGlobalScaler """ self.min = np.min(X) self.max = np.max(X) return self
[docs] def transform(self, X: TensorLike) -> TensorLike: """ Transforms the data. :parameter X: Input data. :type X: TensorLike :returns: Scaled X. :rtype: TensorLike """ return (X - self.min) / (self.max - self.min + EPS)
[docs] def inverse_transform(self, X: TensorLike) -> TensorLike: """ Inverse-transforms the data. :parameter X: Input data. :type X: TensorLike :returns: Original data. :rtype: TensorLike """ X *= (self.max - self.min + EPS) X += self.min return X
[docs] def fit_transform(self, X: TensorLike) -> TensorLike: """ Fits the scaler to the data and transforms it. :parameter X: Input data :type X: TensorLike :returns: Scaled input data X :rtype: TensorLike """ self.fit(X) scaled_X = self.transform(X) return scaled_X
[docs]class TSFeatureWiseScaler(): """ Scales time series data feature-wise. Parameters: ----------- feature_range : tuple(float, float), optional Tuple representing the minimum and maximum feature values (default is (0, 1)). Attributes: ----------- _min_v : float Minimum feature value. _max_v : float Maximum feature value. """ def __init__(self, feature_range: T.Tuple[float, float] = (0, 1)) -> None: """ Initializes a new instance of the TSFeatureWiseScaler class. :parameter feature_range: Tuple representing the minimum and maximum feature values, defaults to (0, 1) :type tuple(float, float), optional: """ assert len(feature_range) == 2 self._min_v, self._max_v = feature_range # X: N x T x D
[docs] def fit(self, X: TensorLike) -> "TSFeatureWiseScaler": """ Fits the scaler to the data. :parameter X: Input data. :type X: TensorLike :returns: The fitted scaler object. :rtype: TSGlobalScaler """ D = X.shape[2] self.mins = np.zeros(D) self.maxs = np.zeros(D) for i in range(D): self.mins[i] = np.min(X[:, :, i]) self.maxs[i] = np.max(X[:, :, i]) return self
[docs] def transform(self, X: TensorLike) -> TensorLike: """ Transforms the data. :parameter X: Input data. :type X: TensorLike :returns: Scaled X. :rtype: TensorLike """ return ((X - self.mins) / (self.maxs - self.mins + EPS)) * (self._max_v - self._min_v) + self._min_v
[docs] def inverse_transform(self, X: TensorLike) -> TensorLike: """ Inverse-transforms the data. :parameter X: Input data. :type X: TensorLike :returns: Original data. :rtype: TensorLike """ X -= self._min_v X /= self._max_v - self._min_v X *= (self.maxs - self.mins + EPS) X += self.mins return X
[docs] def fit_transform(self, X: TensorLike) -> TensorLike: """ Fits the scaler to the data and transforms it. :parameter X: Input data :type X: TensorLike :returns: Scaled input data X :rtype: TensorLike """ self.fit(X) return self.transform(X)