=== ORIGINAL ===
shape: (10, 8)
┌─────┬─────────┬──────┬──────────┬───────┬──────────┬──────────────────┬─────────────────────┐
│ ID  ┆ Name    ┆ Age  ┆ Income   ┆ Score ┆ City     ┆ Membership_Level ┆ Signup_Date         │
│ --- ┆ ---     ┆ ---  ┆ ---      ┆ ---   ┆ ---      ┆ ---              ┆ ---                 │
│ i64 ┆ str     ┆ i64  ┆ i64      ┆ f64   ┆ str      ┆ str              ┆ str                 │
╞═════╪═════════╪══════╪══════════╪═══════╪══════════╪══════════════════╪═════════════════════╡
│ 1   ┆ Alice   ┆ 25   ┆ 50000    ┆ 0.85  ┆ New York ┆ Silver           ┆ 2023-01-15 10:00:00 │
│ 2   ┆ Bob     ┆ 30   ┆ 60000    ┆ 0.9   ┆ London   ┆ Gold             ┆ 2023-02-20 14:30:00 │
│ 3   ┆ Charlie ┆ null ┆ 55000    ┆ 0.75  ┆ null     ┆ Bronze           ┆ 2023-03-05 09:15:00 │
│ 4   ┆ David   ┆ 45   ┆ 10000000 ┆ 0.92  ┆ Paris    ┆ Gold             ┆ 2023-04-10 16:45:00 │
│ 5   ┆ Eve     ┆ 28   ┆ 45000    ┆ 0.88  ┆ New York ┆ Silver           ┆ 2023-05-12 11:20:00 │
│ 6   ┆ Frank   ┆ 35   ┆ 70000    ┆ null  ┆ London   ┆ Silver           ┆ 2023-06-18 08:00:00 │
│ 7   ┆ Grace   ┆ 40   ┆ -500000  ┆ 0.95  ┆ New York ┆ Bronze           ┆ 2023-07-22 13:10:00 │
│ 8   ┆ Heidi   ┆ 32   ┆ 65000    ┆ 0.82  ┆ Paris    ┆ Gold             ┆ 2023-08-30 17:55:00 │
│ 9   ┆ Ivan    ┆ 29   ┆ 52000    ┆ 0.78  ┆ London   ┆ null             ┆ 2023-09-14 10:40:00 │
│ 10  ┆ Judy    ┆ 38   ┆ 75000    ┆ 0.89  ┆ New York ┆ Bronze           ┆ 2023-10-01 15:25:00 │
└─────┴─────────┴──────┴──────────┴───────┴──────────┴──────────────────┴─────────────────────┘
Columns: ['ID', 'Name', 'Age', 'Income', 'Score', 'City', 'Membership_Level', 'Signup_Date']
Dtypes: {'ID': 'Int64', 'Name': 'String', 'Age': 'Int64', 'Income': 'Int64', 'Score': 'Float64', 'City': 'String', 'Membership_Level': 'String', 'Signup_Date': 'String'}

--- MissingValuePlugin (priority=10) ---
  Analysis: {'has_missing_values': True, 'total_missing': 4, 'columns_affected': {'Age': 1, 'Score': 1, 'City': 1, 'Membership_Level': 1}}
  Should apply: True
  After apply -> shape=(10, 8), columns=['ID', 'Name', 'Age', 'Income', 'Score', 'City', 'Membership_Level', 'Signup_Date']
  Dtypes: {'ID': 'Int64', 'Name': 'String', 'Age': 'Float64', 'Income': 'Int64', 'Score': 'Float64', 'City': 'String', 'Membership_Level': 'String', 'Signup_Date': 'String'}
  Sample (first 3 rows):
shape: (3, 8)
┌─────┬─────────┬──────┬────────┬───────┬──────────┬──────────────────┬─────────────────────┐
│ ID  ┆ Name    ┆ Age  ┆ Income ┆ Score ┆ City     ┆ Membership_Level ┆ Signup_Date         │
│ --- ┆ ---     ┆ ---  ┆ ---    ┆ ---   ┆ ---      ┆ ---              ┆ ---                 │
│ i64 ┆ str     ┆ f64  ┆ i64    ┆ f64   ┆ str      ┆ str              ┆ str                 │
╞═════╪═════════╪══════╪════════╪═══════╪══════════╪══════════════════╪═════════════════════╡
│ 1   ┆ Alice   ┆ 25.0 ┆ 50000  ┆ 0.85  ┆ New York ┆ Silver           ┆ 2023-01-15 10:00:00 │
│ 2   ┆ Bob     ┆ 30.0 ┆ 60000  ┆ 0.9   ┆ London   ┆ Gold             ┆ 2023-02-20 14:30:00 │
│ 3   ┆ Charlie ┆ 32.0 ┆ 55000  ┆ 0.75  ┆ New York ┆ Bronze           ┆ 2023-03-05 09:15:00 │
└─────┴─────────┴──────┴────────┴───────┴──────────┴──────────────────┴─────────────────────┘

--- OutlierPlugin (priority=20) ---
  Analysis: {'has_outliers': True, 'outlier_columns': ['Income'], 'outlier_counts': {'Income': 2}}
  Should apply: True
  After apply -> shape=(10, 8), columns=['ID', 'Name', 'Age', 'Income', 'Score', 'City', 'Membership_Level', 'Signup_Date']
  Dtypes: {'ID': 'Int64', 'Name': 'String', 'Age': 'Float64', 'Income': 'Int64', 'Score': 'Float64', 'City': 'String', 'Membership_Level': 'String', 'Signup_Date': 'String'}
  Sample (first 3 rows):
shape: (3, 8)
┌─────┬─────────┬──────┬────────┬───────┬──────────┬──────────────────┬─────────────────────┐
│ ID  ┆ Name    ┆ Age  ┆ Income ┆ Score ┆ City     ┆ Membership_Level ┆ Signup_Date         │
│ --- ┆ ---     ┆ ---  ┆ ---    ┆ ---   ┆ ---      ┆ ---              ┆ ---                 │
│ i64 ┆ str     ┆ f64  ┆ i64    ┆ f64   ┆ str      ┆ str              ┆ str                 │
╞═════╪═════════╪══════╪════════╪═══════╪══════════╪══════════════════╪═════════════════════╡
│ 1   ┆ Alice   ┆ 25.0 ┆ 50000  ┆ 0.85  ┆ New York ┆ Silver           ┆ 2023-01-15 10:00:00 │
│ 2   ┆ Bob     ┆ 30.0 ┆ 60000  ┆ 0.9   ┆ London   ┆ Gold             ┆ 2023-02-20 14:30:00 │
│ 3   ┆ Charlie ┆ 32.0 ┆ 55000  ┆ 0.75  ┆ New York ┆ Bronze           ┆ 2023-03-05 09:15:00 │
└─────┴─────────┴──────┴────────┴───────┴──────────┴──────────────────┴─────────────────────┘

--- DatetimePlugin (priority=30) ---
  Analysis: {'has_datetime': True, 'datetime_columns': ['Signup_Date']}
  Should apply: True
  After apply -> shape=(10, 11), columns=['ID', 'Name', 'Age', 'Income', 'Score', 'City', 'Membership_Level', 'Signup_Date_year', 'Signup_Date_month', 'Signup_Date_day', 'Signup_Date_dayofweek']
  Dtypes: {'ID': 'Int64', 'Name': 'String', 'Age': 'Float64', 'Income': 'Int64', 'Score': 'Float64', 'City': 'String', 'Membership_Level': 'String', 'Signup_Date_year': 'Int32', 'Signup_Date_month': 'Int8', 'Signup_Date_day': 'Int8', 'Signup_Date_dayofweek': 'Int8'}
  Sample (first 3 rows):
shape: (3, 11)
┌─────┬─────────┬──────┬────────┬───┬───────────────┬───────────────┬───────────────┬──────────────┐
│ ID  ┆ Name    ┆ Age  ┆ Income ┆ … ┆ Signup_Date_y ┆ Signup_Date_m ┆ Signup_Date_d ┆ Signup_Date_ │
│ --- ┆ ---     ┆ ---  ┆ ---    ┆   ┆ ear           ┆ onth          ┆ ay            ┆ dayofweek    │
│ i64 ┆ str     ┆ f64  ┆ i64    ┆   ┆ ---           ┆ ---           ┆ ---           ┆ ---          │
│     ┆         ┆      ┆        ┆   ┆ i32           ┆ i8            ┆ i8            ┆ i8           │
╞═════╪═════════╪══════╪════════╪═══╪═══════════════╪═══════════════╪═══════════════╪══════════════╡
│ 1   ┆ Alice   ┆ 25.0 ┆ 50000  ┆ … ┆ 2023          ┆ 1             ┆ 15            ┆ 7            │
│ 2   ┆ Bob     ┆ 30.0 ┆ 60000  ┆ … ┆ 2023          ┆ 2             ┆ 20            ┆ 1            │
│ 3   ┆ Charlie ┆ 32.0 ┆ 55000  ┆ … ┆ 2023          ┆ 3             ┆ 5             ┆ 7            │
└─────┴─────────┴──────┴────────┴───┴───────────────┴───────────────┴───────────────┴──────────────┘

--- CategoricalEncoderPlugin (priority=40) ---
  Analysis: {'has_categorical': True, 'categorical_columns': ['City', 'Membership_Level'], 'cardinality': {'City': 3, 'Membership_Level': 3}}
  Should apply: True
  After apply -> shape=(10, 13), columns=['ID', 'Name', 'Age', 'Income', 'Score', 'City_London', 'City_Paris', 'Membership_Level_Bronze', 'Membership_Level_Gold', 'Signup_Date_year', 'Signup_Date_month', 'Signup_Date_day', 'Signup_Date_dayofweek']
  Dtypes: {'ID': 'Int64', 'Name': 'String', 'Age': 'Float64', 'Income': 'Int64', 'Score': 'Float64', 'City_London': 'UInt8', 'City_Paris': 'UInt8', 'Membership_Level_Bronze': 'UInt8', 'Membership_Level_Gold': 'UInt8', 'Signup_Date_year': 'Int32', 'Signup_Date_month': 'Int8', 'Signup_Date_day': 'Int8', 'Signup_Date_dayofweek': 'Int8'}
  Sample (first 3 rows):
shape: (3, 13)
┌─────┬─────────┬──────┬────────┬───┬───────────────┬───────────────┬───────────────┬──────────────┐
│ ID  ┆ Name    ┆ Age  ┆ Income ┆ … ┆ Signup_Date_y ┆ Signup_Date_m ┆ Signup_Date_d ┆ Signup_Date_ │
│ --- ┆ ---     ┆ ---  ┆ ---    ┆   ┆ ear           ┆ onth          ┆ ay            ┆ dayofweek    │
│ i64 ┆ str     ┆ f64  ┆ i64    ┆   ┆ ---           ┆ ---           ┆ ---           ┆ ---          │
│     ┆         ┆      ┆        ┆   ┆ i32           ┆ i8            ┆ i8            ┆ i8           │
╞═════╪═════════╪══════╪════════╪═══╪═══════════════╪═══════════════╪═══════════════╪══════════════╡
│ 1   ┆ Alice   ┆ 25.0 ┆ 50000  ┆ … ┆ 2023          ┆ 1             ┆ 15            ┆ 7            │
│ 2   ┆ Bob     ┆ 30.0 ┆ 60000  ┆ … ┆ 2023          ┆ 2             ┆ 20            ┆ 1            │
│ 3   ┆ Charlie ┆ 32.0 ┆ 55000  ┆ … ┆ 2023          ┆ 3             ┆ 5             ┆ 7            │
└─────┴─────────┴──────┴────────┴───┴───────────────┴───────────────┴───────────────┴──────────────┘

--- ScalingPlugin (priority=45) ---
  Analysis: {'has_scale_issues': True, 'columns_to_scale': ['ID', 'Age', 'Income', 'Score', 'City_London', 'City_Paris', 'Membership_Level_Bronze', 'Membership_Level_Gold', 'Signup_Date_month', 'Signup_Date_day', 'Signup_Date_dayofweek'], 'scale_ratio': inf}
  Should apply: True
  After apply -> shape=(10, 13), columns=['ID', 'Name', 'Age', 'Income', 'Score', 'City_London', 'City_Paris', 'Membership_Level_Bronze', 'Membership_Level_Gold', 'Signup_Date_year', 'Signup_Date_month', 'Signup_Date_day', 'Signup_Date_dayofweek']
  Dtypes: {'ID': 'Float64', 'Name': 'String', 'Age': 'Float64', 'Income': 'Float64', 'Score': 'Float64', 'City_London': 'Float64', 'City_Paris': 'Float64', 'Membership_Level_Bronze': 'Float64', 'Membership_Level_Gold': 'Float64', 'Signup_Date_year': 'Int32', 'Signup_Date_month': 'Float64', 'Signup_Date_day': 'Float64', 'Signup_Date_dayofweek': 'Float64'}
  Sample (first 3 rows):
shape: (3, 13)
┌───────────┬─────────┬───────────┬───────────┬───┬────────────┬───────────┬───────────┬───────────┐
│ ID        ┆ Name    ┆ Age       ┆ Income    ┆ … ┆ Signup_Dat ┆ Signup_Da ┆ Signup_Da ┆ Signup_Da │
│ ---       ┆ ---     ┆ ---       ┆ ---       ┆   ┆ e_year     ┆ te_month  ┆ te_day    ┆ te_dayofw │
│ f64       ┆ str     ┆ f64       ┆ f64       ┆   ┆ ---        ┆ ---       ┆ ---       ┆ eek       │
│           ┆         ┆           ┆           ┆   ┆ i32        ┆ f64       ┆ f64       ┆ ---       │
│           ┆         ┆           ┆           ┆   ┆            ┆           ┆           ┆ f64       │
╞═══════════╪═════════╪═══════════╪═══════════╪═══╪════════════╪═══════════╪═══════════╪═══════════╡
│ -1.486301 ┆ Alice   ┆ -1.373955 ┆ -0.298976 ┆ … ┆ 2023       ┆ -1.486301 ┆ 0.035629  ┆ 0.901491  │
│ -1.156012 ┆ Bob     ┆ -0.556125 ┆ -0.295819 ┆ … ┆ 2023       ┆ -1.156012 ┆ 0.629438  ┆ -1.557121 │
│ -0.825723 ┆ Charlie ┆ -0.228993 ┆ -0.297398 ┆ … ┆ 2023       ┆ -0.825723 ┆ -1.15199  ┆ 0.901491  │
└───────────┴─────────┴───────────┴───────────┴───┴────────────┴───────────┴───────────┴───────────┘

=== FINAL RESULT ===
shape: (10, 13)
┌───────────┬─────────┬───────────┬───────────┬───┬────────────┬───────────┬───────────┬───────────┐
│ ID        ┆ Name    ┆ Age       ┆ Income    ┆ … ┆ Signup_Dat ┆ Signup_Da ┆ Signup_Da ┆ Signup_Da │
│ ---       ┆ ---     ┆ ---       ┆ ---       ┆   ┆ e_year     ┆ te_month  ┆ te_day    ┆ te_dayofw │
│ f64       ┆ str     ┆ f64       ┆ f64       ┆   ┆ ---        ┆ ---       ┆ ---       ┆ eek       │
│           ┆         ┆           ┆           ┆   ┆ i32        ┆ f64       ┆ f64       ┆ ---       │
│           ┆         ┆           ┆           ┆   ┆            ┆           ┆           ┆ f64       │
╞═══════════╪═════════╪═══════════╪═══════════╪═══╪════════════╪═══════════╪═══════════╪═══════════╡
│ -1.486301 ┆ Alice   ┆ -1.373955 ┆ -0.298976 ┆ … ┆ 2023       ┆ -1.486301 ┆ 0.035629  ┆ 0.901491  │
│ -1.156012 ┆ Bob     ┆ -0.556125 ┆ -0.295819 ┆ … ┆ 2023       ┆ -1.156012 ┆ 0.629438  ┆ -1.557121 │
│ -0.825723 ┆ Charlie ┆ -0.228993 ┆ -0.297398 ┆ … ┆ 2023       ┆ -0.825723 ┆ -1.15199  ┆ 0.901491  │
│ -0.495434 ┆ David   ┆ 1.897367  ┆ 2.841659  ┆ … ┆ 2023       ┆ -0.495434 ┆ -0.558181 ┆ -1.557121 │
│ -0.165145 ┆ Eve     ┆ -0.883257 ┆ -0.300554 ┆ … ┆ 2023       ┆ -0.165145 ┆ -0.320657 ┆ 0.081954  │
│ 0.165145  ┆ Frank   ┆ 0.261706  ┆ -0.292663 ┆ … ┆ 2023       ┆ 0.165145  ┆ 0.391914  ┆ 0.901491  │
│ 0.495434  ┆ Grace   ┆ 1.079536  ┆ -0.472579 ┆ … ┆ 2023       ┆ 0.495434  ┆ 0.866961  ┆ 0.491723  │
│ 0.825723  ┆ Heidi   ┆ -0.228993 ┆ -0.294241 ┆ … ┆ 2023       ┆ 0.825723  ┆ 1.817056  ┆ -0.737584 │
│ 1.156012  ┆ Ivan    ┆ -0.719691 ┆ -0.298345 ┆ … ┆ 2023       ┆ 1.156012  ┆ -0.083133 ┆ -0.327815 │
│ 1.486301  ┆ Judy    ┆ 0.752404  ┆ -0.291085 ┆ … ┆ 2023       ┆ 1.486301  ┆ -1.627037 ┆ 0.901491  │
└───────────┴─────────┴───────────┴───────────┴───┴────────────┴───────────┴───────────┴───────────┘
