| """Debug prepare_features step by step.""" |
|
|
| import pandas as pd |
| from src.preprocessing import reduce_cardinality |
| import yaml |
| from pathlib import Path |
|
|
| |
| config_path = Path("config/model_parameters.yaml") |
| with open(config_path, "r") as f: |
| config = yaml.safe_load(f) |
|
|
| |
| df = pd.DataFrame( |
| { |
| "Country": ["United States of America"], |
| "YearsCode": [5.0], |
| "EdLevel": ["Bachelor's degree (B.A., B.S., B.Eng., etc.)"], |
| "DevType": ["Developer, full-stack"], |
| } |
| ) |
|
|
| print("=" * 70) |
| print("STEP-BY-STEP DEBUGGING OF prepare_features()") |
| print("=" * 70) |
|
|
| print("\n1. Original input:") |
| print(f" Columns: {list(df.columns)}") |
| print(f" Values: {df.iloc[0].to_dict()}") |
|
|
| |
| df_processed = df.copy() |
|
|
| |
| for col in ["Country", "EdLevel", "DevType"]: |
| if col in df_processed.columns: |
| df_processed[col] = df_processed[col].str.replace("\u2019", "'", regex=False) |
|
|
| print("\n2. After unicode normalization:") |
| print(f" Columns: {list(df_processed.columns)}") |
|
|
| |
| df_processed["YearsCode"] = df_processed["YearsCode"].fillna(0) |
| df_processed["Country"] = df_processed["Country"].fillna("Unknown") |
| df_processed["EdLevel"] = df_processed["EdLevel"].fillna("Unknown") |
| df_processed["DevType"] = df_processed["DevType"].fillna("Unknown") |
|
|
| print("\n3. After filling missing values:") |
| print(f" Columns: {list(df_processed.columns)}") |
| print(f" Country value: '{df_processed['Country'].iloc[0]}'") |
| print(f" EdLevel value: '{df_processed['EdLevel'].iloc[0]}'") |
| print(f" DevType value: '{df_processed['DevType'].iloc[0]}'") |
|
|
| |
| print("\n4. Before cardinality reduction:") |
| print(f" Country value: '{df_processed['Country'].iloc[0]}'") |
| df_processed["Country"] = reduce_cardinality(df_processed["Country"]) |
| print(f" After Country reduction: '{df_processed['Country'].iloc[0]}'") |
|
|
| print(f" EdLevel value: '{df_processed['EdLevel'].iloc[0]}'") |
| df_processed["EdLevel"] = reduce_cardinality(df_processed["EdLevel"]) |
| print(f" After EdLevel reduction: '{df_processed['EdLevel'].iloc[0]}'") |
|
|
| print(f" DevType value: '{df_processed['DevType'].iloc[0]}'") |
| df_processed["DevType"] = reduce_cardinality(df_processed["DevType"]) |
| print(f" After DevType reduction: '{df_processed['DevType'].iloc[0]}'") |
|
|
| |
| feature_cols = ["Country", "YearsCode", "EdLevel", "DevType"] |
| df_features = df_processed[feature_cols] |
|
|
| print("\n5. After selecting feature columns:") |
| print(f" Columns: {list(df_features.columns)}") |
| print(f" Values: {df_features.iloc[0].to_dict()}") |
|
|
| |
| drop_first = config["features"]["encoding"]["drop_first"] |
| print(f"\n6. One-hot encoding with drop_first={drop_first}:") |
| df_encoded = pd.get_dummies(df_features, drop_first=drop_first) |
|
|
| print(f" Result shape: {df_encoded.shape}") |
| print(f" Result columns: {list(df_encoded.columns)}") |
| print(f" Non-zero values: {df_encoded.columns[df_encoded.iloc[0] != 0].tolist()}") |
|
|