Spaces:
Sleeping
Sleeping
| 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) | |