dragon-ml-toolbox 3.5.0__py3-none-any.whl → 3.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of dragon-ml-toolbox might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dragon-ml-toolbox
3
- Version: 3.5.0
3
+ Version: 3.6.0
4
4
  Summary: A collection of tools for data science and machine learning projects.
5
5
  Author-email: Karl Loza <luigiloza@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
- dragon_ml_toolbox-3.5.0.dist-info/licenses/LICENSE,sha256=2uUFNy7D0TLgHim1K5s3DIJ4q_KvxEXVilnU20cWliY,1066
2
- dragon_ml_toolbox-3.5.0.dist-info/licenses/LICENSE-THIRD-PARTY.md,sha256=6cfpIeQ6D4Mcs10nkogQrkVyq1T7i2qXjjNHFoUMOyE,1892
3
- ml_tools/ETL_engineering.py,sha256=9dojA9RqE7bq1A70tegsERszoqll7UmcJelVeQeefik,39519
1
+ dragon_ml_toolbox-3.6.0.dist-info/licenses/LICENSE,sha256=2uUFNy7D0TLgHim1K5s3DIJ4q_KvxEXVilnU20cWliY,1066
2
+ dragon_ml_toolbox-3.6.0.dist-info/licenses/LICENSE-THIRD-PARTY.md,sha256=6cfpIeQ6D4Mcs10nkogQrkVyq1T7i2qXjjNHFoUMOyE,1892
3
+ ml_tools/ETL_engineering.py,sha256=URol7s45fVIdLqnhyOU1Etbi-D7MksFg-qtNwsKiunY,39488
4
4
  ml_tools/GUI_tools.py,sha256=uFx6zIrQZzDPSTtOSHz8ptz-fxZiQz-lXHcrqwuYV_E,20385
5
5
  ml_tools/MICE_imputation.py,sha256=ed-YeQkEAeHxTNkWIHs09T4YeYNF0aqAnrUTcdIEp9E,11372
6
6
  ml_tools/ML_callbacks.py,sha256=gHZk-lyzAax6iEtG26zHuoobdAZCFJ6BmI6pWoXkOrw,13189
@@ -13,13 +13,13 @@ ml_tools/VIF_factor.py,sha256=4b3HmrrolN7ZIAo16TWwLlExqj_xaa8MxbkXD1xPCys,10295
13
13
  ml_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  ml_tools/_particle_swarm_optimization.py,sha256=b_eNNkA89Y40hj76KauivT8KLScH1B9wF2IXptOqkOw,22220
15
15
  ml_tools/_pytorch_models.py,sha256=bpWZsrSwCvHJQkR6UfoPpElsMv9AvmiNErNHC8NYB_I,10132
16
- ml_tools/data_exploration.py,sha256=IkpOyIRPKdu4qKeUdvvMvNPelSVWegNEKMqX3IInmpw,25003
16
+ ml_tools/data_exploration.py,sha256=Ne6LHtHJFkv5SVBvTK-kmSS9OD-N1tT6TacXRVxyI9A,25220
17
17
  ml_tools/datasetmaster.py,sha256=N-uwfzWnl_qnoAqjbfS98I1pVNra5u6rhKLdWbFIReA,30122
18
18
  ml_tools/ensemble_learning.py,sha256=PPtBBLgLvaYOdY-MlcjXuxWWXf3JQavLNEysFgzjc_s,37470
19
19
  ml_tools/handle_excel.py,sha256=lwds7rDLlGSCWiWGI7xNg-Z7kxAepogp0lstSFa0590,12949
20
20
  ml_tools/logger.py,sha256=jC4Q2OqmDm8ZO9VpuZqBSWdXryqaJvLscqVJ6caNMOk,6009
21
21
  ml_tools/utilities.py,sha256=7cVWXjdxgSoIbZunuxJEOnJDSYp29liYsZexbrVDabs,23132
22
- dragon_ml_toolbox-3.5.0.dist-info/METADATA,sha256=yxz0lVEDn3k40f3nZk_pocW8WCOXifF6ItuUMJ8LFsM,3273
23
- dragon_ml_toolbox-3.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
24
- dragon_ml_toolbox-3.5.0.dist-info/top_level.txt,sha256=wm-oxax3ciyez6VoO4zsFd-gSok2VipYXnbg3TH9PtU,9
25
- dragon_ml_toolbox-3.5.0.dist-info/RECORD,,
22
+ dragon_ml_toolbox-3.6.0.dist-info/METADATA,sha256=B_xp13t4M52KwRnUUv2AedBXAKBqHL04MBFha1eAYsI,3273
23
+ dragon_ml_toolbox-3.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
24
+ dragon_ml_toolbox-3.6.0.dist-info/top_level.txt,sha256=wm-oxax3ciyez6VoO4zsFd-gSok2VipYXnbg3TH9PtU,9
25
+ dragon_ml_toolbox-3.6.0.dist-info/RECORD,,
@@ -48,13 +48,12 @@ class ColumnCleaner:
48
48
  ## Usage Example
49
49
 
50
50
  ```python
51
- phone_rules = {
52
- # Matches (123) 456-7890 and reformats to 123-456-7890
53
- r'\((\d{3})\)\s*(\d{3})-(\d{4})': r'$1-$2-$3'
51
+ id_rules = {
52
+ # Matches 'ID-12345' or 'ID 12345' and reformats to 'ID:12345'
53
+ r'ID[- ](\d+)': r'ID:$1'
54
54
  }
55
55
 
56
- phone_cleaner = ColumnCleaner(column_name='phone_number', rules=phone_rules)
57
-
56
+ id_cleaner = ColumnCleaner(column_name='user_id', rules=id_rules)
58
57
  # This object would then be passed to a DataFrameCleaner.
59
58
  ```
60
59
  """
@@ -529,7 +528,7 @@ class KeywordDummifier:
529
528
 
530
529
  categorize_expr = categorize_expr.otherwise(None).alias("category")
531
530
 
532
- temp_df = pl.DataFrame(categorize_expr)
531
+ temp_df = pl.select(categorize_expr)
533
532
  df_with_dummies = temp_df.to_dummies(columns=["category"])
534
533
 
535
534
  final_columns = []
@@ -15,7 +15,7 @@ import re
15
15
  # Keep track of all available tools, show using `info()`
16
16
  __all__ = [
17
17
  "summarize_dataframe",
18
- "drop_zero_only_columns",
18
+ "drop_constant_columns",
19
19
  "drop_rows_with_missing_data",
20
20
  "split_features_targets",
21
21
  "show_null_columns",
@@ -62,44 +62,49 @@ def summarize_dataframe(df: pd.DataFrame, round_digits: int = 2):
62
62
  return summary
63
63
 
64
64
 
65
- def drop_zero_only_columns(df: pd.DataFrame, verbose: bool=True) -> pd.DataFrame:
65
+ def drop_constant_columns(df: pd.DataFrame, verbose: bool = True) -> pd.DataFrame:
66
66
  """
67
- Removes columns from a pandas DataFrame that contain only zeros and null/NaN values.
67
+ Removes columns from a pandas DataFrame that contain only a single unique
68
+ value or are entirely null/NaN.
68
69
 
69
- This utility is useful for cleaning data after dummification steps that may result in empty columns.
70
+ This utility is useful for cleaning data by removing constant features that
71
+ have no predictive value.
70
72
 
71
73
  Args:
72
74
  df (pd.DataFrame):
73
75
  The pandas DataFrame to clean.
76
+ verbose (bool):
77
+ If True, prints the names of the columns that were dropped.
78
+ Defaults to True.
74
79
 
75
80
  Returns:
76
81
  pd.DataFrame:
77
- A new DataFrame with the empty columns removed.
82
+ A new DataFrame with the constant columns removed.
78
83
  """
79
84
  if not isinstance(df, pd.DataFrame):
80
85
  raise TypeError("Input must be a pandas DataFrame.")
81
-
86
+
82
87
  original_columns = set(df.columns)
83
-
84
88
  cols_to_keep = []
89
+
85
90
  for col_name in df.columns:
86
91
  column = df[col_name]
87
92
 
88
- # Keep any column that is not numeric by default
89
- if not is_numeric_dtype(column):
93
+ # We can apply this logic to all columns or only focus on numeric ones.
94
+ # if not is_numeric_dtype(column):
95
+ # cols_to_keep.append(col_name)
96
+ # continue
97
+
98
+ # Keep a column if it has more than one unique value (nunique ignores NaNs by default)
99
+ if column.nunique(dropna=True) > 1:
90
100
  cols_to_keep.append(col_name)
91
- continue
92
101
 
93
- # For numeric columns, check if there's at least one non-zero value.
94
- if (column != 0).any():
95
- cols_to_keep.append(col_name)
96
-
97
- dropped_columns = original_columns - set(cols_to_keep)
102
+ dropped_columns = original_columns - set(cols_to_keep)
98
103
  if dropped_columns and verbose:
99
- print(f"Dropped {len(dropped_columns)} columns:")
104
+ print(f"Dropped {len(dropped_columns)} constant columns:")
100
105
  for dropped_column in dropped_columns:
101
106
  print(f" {dropped_column}")
102
-
107
+
103
108
  return df[cols_to_keep]
104
109
 
105
110