File size: 1,389 Bytes
baf834b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | """
Shared utilities for preprocessing modules.
Provides logging setup, seed initialization, and a timing decorator
used by all dataset-specific preprocessors.
"""
import os
import time
import logging
import random
import numpy as np
import joblib
import pandas as pd
from sklearn.preprocessing import LabelEncoder, StandardScaler, MinMaxScaler
try:
from utils.project_paths import LOGS_DIR
except ImportError:
from project_paths import LOGS_DIR
# Setup logging configuration
os.makedirs(LOGS_DIR, exist_ok=True)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s',
handlers=[
logging.StreamHandler(),
logging.FileHandler(os.path.join(LOGS_DIR, "preprocessing.log"))
]
)
logger = logging.getLogger(__name__)
def set_seeds(seed: int = 42):
"""Set random seeds for reproducibility."""
random.seed(seed)
np.random.seed(seed)
logger.info(f"Random seeds set to {seed} for reproducibility.")
def time_tracker(func):
"""Decorator to measure and log the execution time of functions."""
def wrapper(*args, **kwargs):
start_time = time.time()
logger.info(f"Starting: {func.__name__}")
result = func(*args, **kwargs)
elapsed = time.time() - start_time
logger.info(f"Finished: {func.__name__} ({elapsed:.2f}s)")
return result
return wrapper
|