From 4f4755829cdbeb4ec344e2734ceae00bad8bd6c9 Mon Sep 17 00:00:00 2001 From: alex-hse-repository Date: Wed, 27 Oct 2021 16:51:17 +0300 Subject: [PATCH 1/4] Make in_column first parametre --- etna/transforms/add_constant.py | 18 +++++++++--------- etna/transforms/lags.py | 15 +++++++-------- etna/transforms/scalers.py | 2 +- etna/transforms/statistics.py | 18 ++++++++++++------ tests/test_transforms/test_lag_transform.py | 2 +- 5 files changed, 30 insertions(+), 25 deletions(-) diff --git a/etna/transforms/add_constant.py b/etna/transforms/add_constant.py index e19185bbc..323cc5d28 100644 --- a/etna/transforms/add_constant.py +++ b/etna/transforms/add_constant.py @@ -5,21 +5,21 @@ class _OneSegmentAddConstTransform(Transform): - def __init__(self, value: float, in_column: str, inplace: bool = True): + def __init__(self, in_column: str, value: float, inplace: bool = True): """ Init _OneSegmentAddConstTransform. Parameters ---------- - value: - value that should be added to the series in_column: column to apply transform + value: + value that should be added to the series inplace: if True, apply add constant transformation inplace to in_column, if False, add column {in_column}_add_{value} to dataset """ - self.value = value self.in_column = in_column + self.value = value self.inplace = inplace self.out_column = self.in_column if self.inplace else f"{self.in_column}_add_{self.value}" @@ -72,24 +72,24 @@ def inverse_transform(self, df: pd.DataFrame) -> pd.DataFrame: class AddConstTransform(PerSegmentWrapper): """AddConstTransform add constant for given series.""" - def __init__(self, value: float, in_column: str, inplace: bool = True): + def __init__(self, in_column: str, value: float, inplace: bool = True): """ Init AddConstTransform. Parameters ---------- - value: - value that should be added to the series in_column: column to apply transform + value: + value that should be added to the series inplace: if True, apply add constant transformation inplace to in_column, if False, add column {in_column}_add_{value} to dataset """ - self.value = value self.in_column = in_column + self.value = value self.inplace = inplace super().__init__( - transform=_OneSegmentAddConstTransform(value=self.value, in_column=self.in_column, inplace=self.inplace) + transform=_OneSegmentAddConstTransform(in_column=self.in_column, value=self.value, inplace=self.inplace) ) diff --git a/etna/transforms/lags.py b/etna/transforms/lags.py index effa3c377..66f1d5f45 100644 --- a/etna/transforms/lags.py +++ b/etna/transforms/lags.py @@ -8,7 +8,8 @@ class _OneSegmentLagFeature(Transform): - def __init__(self, lags: Union[List[int], int], in_column: str): + def __init__(self, in_column: str, lags: Union[List[int], int]): + self.in_column = in_column if isinstance(lags, int): if lags < 1: raise ValueError(f"{type(self).__name__} works only with positive lags values, {lags} given") @@ -18,7 +19,6 @@ def __init__(self, lags: Union[List[int], int], in_column: str): raise ValueError(f"{type(self).__name__} works only with positive lags values") self.lags = lags - self.in_column = in_column self.out_postfix = "_lag" self.out_prefix = "regressor_" @@ -35,21 +35,20 @@ def transform(self, df: pd.DataFrame) -> pd.DataFrame: class LagTransform(PerSegmentWrapper): """Generates series of lags from given dataframe. Creates columns 'regressor__lag_'.""" - def __init__(self, lags: Union[List[int], int], in_column: str): + def __init__(self, in_column: str, lags: Union[List[int], int]): """Create instance of LagTransform. Parameters ---------- - lags: - int value or list of values for lags computation; if int, generate range of lags from 1 to given value in_column: name of processed column - + lags: + int value or list of values for lags computation; if int, generate range of lags from 1 to given value Raises ------ ValueError: if lags value contains non-positive values """ - self.lags = lags self.in_column = in_column - super().__init__(transform=_OneSegmentLagFeature(lags=self.lags, in_column=self.in_column)) + self.lags = lags + super().__init__(transform=_OneSegmentLagFeature(in_column=self.in_column, lags=self.lags)) diff --git a/etna/transforms/scalers.py b/etna/transforms/scalers.py index c955d0238..184942580 100644 --- a/etna/transforms/scalers.py +++ b/etna/transforms/scalers.py @@ -50,8 +50,8 @@ def __init__( if incorrect mode given """ super().__init__( - transformer=StandardScaler(with_mean=with_mean, with_std=with_std, copy=True), in_column=in_column, + transformer=StandardScaler(with_mean=with_mean, with_std=with_std, copy=True), inplace=inplace, mode=mode, ) diff --git a/etna/transforms/statistics.py b/etna/transforms/statistics.py index 70cfc8efd..93038e7c4 100644 --- a/etna/transforms/statistics.py +++ b/etna/transforms/statistics.py @@ -15,8 +15,8 @@ class WindowStatisticsTransform(Transform, ABC): def __init__( self, - window: int, in_column: str, + window: int, seasonality: int = 1, min_periods: int = 1, out_postfix: Optional[str] = None, @@ -27,6 +27,8 @@ def __init__( Parameters ---------- + in_column: str + name of processed column window: int size of window to aggregate seasonality: int @@ -39,6 +41,7 @@ def __init__( fillna: float value to fill results NaNs with """ + self.in_column = in_column self.window = window self.seasonality = seasonality self.min_periods = min_periods @@ -47,7 +50,6 @@ def __init__( self.kwargs = kwargs self.min_required_len = max(self.min_periods - 1, 0) * self.seasonality + 1 self.history = self.window * self.seasonality - self.in_column = in_column def fit(self, *args) -> "WindowStatisticsTransform": """Fits transform.""" @@ -111,8 +113,8 @@ class MeanTransform(WindowStatisticsTransform): def __init__( self, - window: int, in_column: str, + window: int, seasonality: int = 1, alpha: float = 1, min_periods: int = 1, @@ -123,6 +125,8 @@ def __init__( Parameters ---------- + in_column: str + name of processed column window: int size of window to aggregate seasonality: int @@ -138,8 +142,8 @@ def __init__( value to fill results NaNs with """ super().__init__( - window=window, in_column=in_column, + window=window, seasonality=seasonality, min_periods=min_periods, out_postfix=out_postfix, @@ -196,9 +200,9 @@ class QuantileTransform(WindowStatisticsTransform): def __init__( self, + in_column: str, quantile: float, window: int, - in_column: str, seasonality: int = 1, min_periods: int = 1, out_postfix: Optional[str] = None, @@ -208,6 +212,8 @@ def __init__( Parameters ---------- + in_column: str + name of processed column quantile: float quantile to calculate window: int @@ -224,8 +230,8 @@ def __init__( """ self.quantile = quantile super().__init__( - window=window, in_column=in_column, + window=window, seasonality=seasonality, min_periods=min_periods, out_postfix=out_postfix, diff --git a/tests/test_transforms/test_lag_transform.py b/tests/test_transforms/test_lag_transform.py index 45936c30f..65ef9fce6 100644 --- a/tests/test_transforms/test_lag_transform.py +++ b/tests/test_transforms/test_lag_transform.py @@ -41,7 +41,7 @@ def test_repr(): lags = list(range(8, 24, 1)) transform = LagTransform(lags=lags, in_column="target") transform_repr = transform.__repr__() - true_repr = f"{transform_class_repr}(lags = {lags}, in_column = 'target', )" + true_repr = f"{transform_class_repr}(in_column = 'target', lags = {lags}, )" assert transform_repr == true_repr From b2388fe95bd600fa2d314bc6038c430e04758f15 Mon Sep 17 00:00:00 2001 From: alex-hse-repository Date: Tue, 2 Nov 2021 08:32:48 +0300 Subject: [PATCH 2/4] Fixes --- etna/transforms/add_constant.py | 2 +- etna/transforms/sklearn.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/etna/transforms/add_constant.py b/etna/transforms/add_constant.py index 323cc5d28..54c0ac1a0 100644 --- a/etna/transforms/add_constant.py +++ b/etna/transforms/add_constant.py @@ -5,7 +5,7 @@ class _OneSegmentAddConstTransform(Transform): - def __init__(self, in_column: str, value: float, inplace: bool = True): + def __init__(self, in_column: str, value: float, inplace: bool = True): """ Init _OneSegmentAddConstTransform. diff --git a/etna/transforms/sklearn.py b/etna/transforms/sklearn.py index 0e3688514..8682196d4 100644 --- a/etna/transforms/sklearn.py +++ b/etna/transforms/sklearn.py @@ -22,8 +22,8 @@ class SklearnTransform(Transform): def __init__( self, + in_column: Union[str, List[str]], transformer: TransformerMixin, - in_column: Optional[Union[str, List[str]]] = None, inplace: bool = True, mode: Union[TransformMode, str] = "per-segment", ): @@ -32,10 +32,10 @@ def __init__( Parameters ---------- - transformer: - sklearn.base.TransformerMixin instance. in_column: columns to be transformed, if None - all columns will be scaled. + transformer: + sklearn.base.TransformerMixin instance. inplace: features are changed by transformed. mode: From 7367be5efdd03b244dcb06294f7a4c4b3fa8bb2c Mon Sep 17 00:00:00 2001 From: alex-hse-repository Date: Tue, 2 Nov 2021 08:39:25 +0300 Subject: [PATCH 3/4] Update Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index de83be49a..6ffa3c900 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Add possibility to set custom in_column for ConfidenceIntervalOutliersTransform ([#240](https://github.com/tinkoff-ai/etna-ts/pull/240)) +- Make `in_column` the first argument in every transform ([#247](https://github.com/tinkoff-ai/etna-ts/pull/247)) ### Fixed - Fixed broken links in docs command section ([#223](https://github.com/tinkoff-ai/etna-ts/pull/223)) From 3162984f3c7f85a59dbac6abfc89cdfa7810fdb0 Mon Sep 17 00:00:00 2001 From: alex-hse-repository Date: Tue, 2 Nov 2021 12:29:49 +0300 Subject: [PATCH 4/4] Add space --- etna/transforms/lags.py | 1 + 1 file changed, 1 insertion(+) diff --git a/etna/transforms/lags.py b/etna/transforms/lags.py index 66f1d5f45..0df801533 100644 --- a/etna/transforms/lags.py +++ b/etna/transforms/lags.py @@ -44,6 +44,7 @@ def __init__(self, in_column: str, lags: Union[List[int], int]): name of processed column lags: int value or list of values for lags computation; if int, generate range of lags from 1 to given value + Raises ------ ValueError: