haroon / src /custom_transformers.py
kouhaisamma's picture
Upload 6 files
55148a5 verified
Raw
History Blame Contribute Delete
1.06 kB
import pandas as pd
import numpy as np
from sklearn.base import BaseEstimator, TransformerMixin
class FeatureExtractor(BaseEstimator, TransformerMixin):
def fit(self, X, y=None):
return self
def transform(self, X):
X_ = X.copy()
X_["date"] = pd.to_datetime(X_["date"])
X_["day_of_week"] = X_["date"].dt.dayofweek
X_["month"] = X_["date"].dt.month
X_["day_of_year"] = X_["date"].dt.dayofyear
return X_[["name", "price", "rating", "smart_score", "review_count", "day_of_week", "month", "day_of_year"]]
def add_cyclical(df, col, max_val):
radians = 2 * np.pi * df[col] / max_val
return pd.DataFrame({
f"{col}_sin": np.sin(radians),
f"{col}_cos": np.cos(radians)
})
def cyclical_features(X):
X_ = X.copy()
dow = add_cyclical(X_, "day_of_week", 7)
month = add_cyclical(X_, "month", 12)
doy = add_cyclical(X_, "day_of_year", 365)
X_ = X_.drop(columns=["day_of_week", "month", "day_of_year"])
return pd.concat([X_, dow, month, doy], axis=1)