rdt 1.22.0__tar.gz → 2.0.0.dev0__tar.gz
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.
- {rdt-1.22.0/rdt.egg-info → rdt-2.0.0.dev0}/PKG-INFO +2 -2
- {rdt-1.22.0 → rdt-2.0.0.dev0}/README.md +1 -1
- {rdt-1.22.0 → rdt-2.0.0.dev0}/pyproject.toml +1 -1
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/__init__.py +1 -1
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/hyper_transformer.py +27 -69
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/__init__.py +0 -2
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/__init__.py +13 -18
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/base.py +1 -41
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/boolean.py +0 -8
- rdt-2.0.0.dev0/rdt/transformers/categorical.py +508 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/datetime.py +0 -13
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/id.py +8 -39
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/numerical.py +0 -37
- rdt-2.0.0.dev0/rdt/transformers/ordinal.py +279 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/pii/anonymizer.py +5 -20
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/utils.py +1 -19
- {rdt-1.22.0 → rdt-2.0.0.dev0/rdt.egg-info}/PKG-INFO +2 -2
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/SOURCES.txt +1 -2
- rdt-1.22.0/rdt/performance/datasets/text.py +0 -57
- rdt-1.22.0/rdt/transformers/categorical.py +0 -1057
- rdt-1.22.0/rdt/transformers/text.py +0 -12
- {rdt-1.22.0 → rdt-2.0.0.dev0}/LICENSE +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/_utils.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/errors.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/__init__.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/base.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/boolean.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/categorical.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/datetime.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/id.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/numerical.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/pii.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/datasets/utils.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/performance.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/performance/profiling.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/_validators.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/null.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/pii/__init__.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/pii/anonymization.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt/transformers/pii/utils.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/dependency_links.txt +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/entry_points.txt +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/requires.txt +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/rdt.egg-info/top_level.txt +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/setup.cfg +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/tests/test_scripts.py +0 -0
- {rdt-1.22.0 → rdt-2.0.0.dev0}/tests/test_tasks.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rdt
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0.dev0
|
|
4
4
|
Summary: Reversible Data Transforms
|
|
5
5
|
Author-email: "DataCebo, Inc." <info@sdv.dev>
|
|
6
6
|
License-Expression: BUSL-1.1
|
|
@@ -189,7 +189,7 @@ Config:
|
|
|
189
189
|
"transformers": {
|
|
190
190
|
"last_login": "UnixTimestampEncoder()",
|
|
191
191
|
"email_optin": "BinaryEncoder()",
|
|
192
|
-
"credit_card": "
|
|
192
|
+
"credit_card": "UniformEncoder()",
|
|
193
193
|
"age": "FloatFormatter()",
|
|
194
194
|
"dollars_spent": "FloatFormatter()"
|
|
195
195
|
}
|
|
@@ -110,7 +110,7 @@ Config:
|
|
|
110
110
|
"transformers": {
|
|
111
111
|
"last_login": "UnixTimestampEncoder()",
|
|
112
112
|
"email_optin": "BinaryEncoder()",
|
|
113
|
-
"credit_card": "
|
|
113
|
+
"credit_card": "UniformEncoder()",
|
|
114
114
|
"age": "FloatFormatter()",
|
|
115
115
|
"dollars_spent": "FloatFormatter()"
|
|
116
116
|
}
|
|
@@ -150,7 +150,7 @@ collect_ignore = ['pyproject.toml']
|
|
|
150
150
|
exclude_lines = ['NotImplementedError()']
|
|
151
151
|
|
|
152
152
|
[tool.bumpversion]
|
|
153
|
-
current_version = "
|
|
153
|
+
current_version = "2.0.0.dev0"
|
|
154
154
|
parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.(?P<release>[a-z]+)(?P<candidate>\d+))?'
|
|
155
155
|
serialize = [
|
|
156
156
|
'{major}.{minor}.{patch}.{release}{candidate}',
|
|
@@ -288,7 +288,7 @@ class HyperTransformer:
|
|
|
288
288
|
warnings.warn(self._REFIT_MESSAGE)
|
|
289
289
|
|
|
290
290
|
def _validate_update_transformers_by_sdtype(
|
|
291
|
-
self, sdtype,
|
|
291
|
+
self, sdtype, transformer_name, transformer_parameters
|
|
292
292
|
):
|
|
293
293
|
if not self.field_sdtypes:
|
|
294
294
|
raise ConfigNotSetError(
|
|
@@ -296,60 +296,25 @@ class HyperTransformer:
|
|
|
296
296
|
'pre-populate all the sdtypes and transformers from your dataset.'
|
|
297
297
|
)
|
|
298
298
|
|
|
299
|
-
if
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
if sdtype not in transformer.get_supported_sdtypes():
|
|
309
|
-
raise InvalidConfigError(
|
|
310
|
-
"The transformer you've assigned is incompatible with the sdtype."
|
|
311
|
-
)
|
|
312
|
-
|
|
313
|
-
else:
|
|
314
|
-
if (
|
|
315
|
-
transformer_name not in get_class_by_transformer_name()
|
|
316
|
-
or sdtype
|
|
317
|
-
not in get_class_by_transformer_name()[transformer_name].get_supported_sdtypes()
|
|
318
|
-
):
|
|
319
|
-
raise InvalidConfigError(
|
|
320
|
-
f"Invalid transformer name '{transformer_name}' for the '{sdtype}' sdtype."
|
|
321
|
-
)
|
|
322
|
-
|
|
323
|
-
if transformer_parameters is not None:
|
|
324
|
-
transformer = get_class_by_transformer_name()[transformer_name]
|
|
325
|
-
valid = inspect.signature(transformer).parameters
|
|
326
|
-
invalid_parameters = {arg for arg in transformer_parameters if arg not in valid}
|
|
327
|
-
if invalid_parameters:
|
|
328
|
-
raise TransformerInputError(
|
|
329
|
-
f'Invalid parameters {tuple(sorted(invalid_parameters))} '
|
|
330
|
-
f"for the '{transformer_name}'."
|
|
331
|
-
)
|
|
332
|
-
|
|
333
|
-
def _warn_update_transformers_by_sdtype(self, transformer, transformer_name):
|
|
334
|
-
if self._fitted:
|
|
335
|
-
warnings.warn(self._REFIT_MESSAGE)
|
|
299
|
+
if (
|
|
300
|
+
transformer_name not in get_class_by_transformer_name()
|
|
301
|
+
or sdtype
|
|
302
|
+
not in get_class_by_transformer_name()[transformer_name].get_supported_sdtypes()
|
|
303
|
+
):
|
|
304
|
+
raise InvalidConfigError(
|
|
305
|
+
f"Invalid transformer name '{transformer_name}' for the '{sdtype}' sdtype."
|
|
306
|
+
)
|
|
336
307
|
|
|
337
|
-
if
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
308
|
+
if transformer_parameters is not None:
|
|
309
|
+
transformer = get_class_by_transformer_name()[transformer_name]
|
|
310
|
+
valid = inspect.signature(transformer).parameters
|
|
311
|
+
invalid_parameters = {arg for arg in transformer_parameters if arg not in valid}
|
|
312
|
+
if invalid_parameters:
|
|
313
|
+
raise TransformerInputError(
|
|
314
|
+
f'Invalid parameters {tuple(sorted(invalid_parameters))} '
|
|
315
|
+
f"for the '{transformer_name}'."
|
|
343
316
|
)
|
|
344
317
|
|
|
345
|
-
else:
|
|
346
|
-
warnings.warn(
|
|
347
|
-
"The 'transformer' parameter will no longer be supported in future versions "
|
|
348
|
-
"of the RDT. Please use the 'transformer_name' and 'transformer_parameters' "
|
|
349
|
-
'parameters instead.',
|
|
350
|
-
FutureWarning,
|
|
351
|
-
)
|
|
352
|
-
|
|
353
318
|
def _remove_column_in_multi_column_fields(self, column):
|
|
354
319
|
"""Remove a column that is part of a multi-column field.
|
|
355
320
|
|
|
@@ -401,42 +366,35 @@ class HyperTransformer:
|
|
|
401
366
|
def update_transformers_by_sdtype(
|
|
402
367
|
self,
|
|
403
368
|
sdtype,
|
|
404
|
-
transformer=None,
|
|
405
369
|
transformer_name=None,
|
|
406
370
|
transformer_parameters=None,
|
|
407
371
|
):
|
|
408
372
|
"""Update the transformers for the specified ``sdtype``.
|
|
409
373
|
|
|
410
|
-
Given an ``sdtype`` and a ``
|
|
374
|
+
Given an ``sdtype`` and a ``transformer_name``, change all the fields of the ``sdtype``
|
|
411
375
|
to use the given transformer.
|
|
412
376
|
|
|
413
377
|
Args:
|
|
414
378
|
sdtype (str):
|
|
415
379
|
Semantic data type for the transformer.
|
|
416
|
-
transformer (rdt.transformers.BaseTransformer):
|
|
417
|
-
Transformer class or instance to be used for the given ``sdtype``.
|
|
418
|
-
Note: this parameter is deprecated, use ``transformer_name`` and
|
|
419
|
-
``transformer_parameters`` instead.
|
|
420
380
|
transformer_name (str):
|
|
421
381
|
A string with the class name of the transformer.
|
|
422
382
|
transformer_parameters (dict):
|
|
423
383
|
A dict of the kwargs of the transformer.
|
|
424
384
|
"""
|
|
425
385
|
self._validate_update_transformers_by_sdtype(
|
|
426
|
-
sdtype,
|
|
386
|
+
sdtype, transformer_name, transformer_parameters
|
|
427
387
|
)
|
|
428
|
-
self.
|
|
429
|
-
|
|
430
|
-
transformer_instance = transformer
|
|
388
|
+
if self._fitted:
|
|
389
|
+
warnings.warn(self._REFIT_MESSAGE)
|
|
431
390
|
|
|
432
|
-
if
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
)
|
|
391
|
+
if transformer_parameters is not None:
|
|
392
|
+
transformer_instance = get_class_by_transformer_name()[transformer_name](
|
|
393
|
+
**transformer_parameters
|
|
394
|
+
)
|
|
437
395
|
|
|
438
|
-
|
|
439
|
-
|
|
396
|
+
else:
|
|
397
|
+
transformer_instance = get_class_by_transformer_name()[transformer_name]()
|
|
440
398
|
|
|
441
399
|
for field, field_sdtype in self.field_sdtypes.items():
|
|
442
400
|
if field_sdtype == sdtype:
|
|
@@ -9,7 +9,6 @@ from rdt.performance.datasets import (
|
|
|
9
9
|
id,
|
|
10
10
|
numerical,
|
|
11
11
|
pii,
|
|
12
|
-
text,
|
|
13
12
|
)
|
|
14
13
|
from rdt.performance.datasets.base import BaseDatasetGenerator
|
|
15
14
|
|
|
@@ -20,7 +19,6 @@ __all__ = [
|
|
|
20
19
|
'id',
|
|
21
20
|
'numerical',
|
|
22
21
|
'pii',
|
|
23
|
-
'text',
|
|
24
22
|
'BaseDatasetGenerator',
|
|
25
23
|
]
|
|
26
24
|
|
|
@@ -10,19 +10,15 @@ from functools import lru_cache
|
|
|
10
10
|
from rdt.transformers.base import BaseMultiColumnTransformer, BaseTransformer
|
|
11
11
|
from rdt.transformers.boolean import BinaryEncoder
|
|
12
12
|
from rdt.transformers.categorical import (
|
|
13
|
-
CustomLabelEncoder,
|
|
14
|
-
FrequencyEncoder,
|
|
15
13
|
LabelEncoder,
|
|
16
14
|
OneHotEncoder,
|
|
17
|
-
OrderedLabelEncoder,
|
|
18
|
-
OrderedUniformEncoder,
|
|
19
15
|
UniformEncoder,
|
|
20
16
|
)
|
|
21
17
|
from rdt.transformers.datetime import (
|
|
22
18
|
OptimizedTimestampEncoder,
|
|
23
19
|
UnixTimestampEncoder,
|
|
24
20
|
)
|
|
25
|
-
from rdt.transformers.id import
|
|
21
|
+
from rdt.transformers.id import IndexGenerator, RegexGenerator
|
|
26
22
|
from rdt.transformers.null import NullTransformer
|
|
27
23
|
from rdt.transformers.numerical import (
|
|
28
24
|
ClusterBasedNormalizer,
|
|
@@ -31,21 +27,22 @@ from rdt.transformers.numerical import (
|
|
|
31
27
|
LogScaler,
|
|
32
28
|
LogitScaler,
|
|
33
29
|
)
|
|
30
|
+
from rdt.transformers.ordinal import (
|
|
31
|
+
OrderedLabelEncoder,
|
|
32
|
+
OrderedUniformEncoder,
|
|
33
|
+
)
|
|
34
34
|
from rdt.transformers.pii.anonymizer import (
|
|
35
35
|
AnonymizedFaker,
|
|
36
36
|
PseudoAnonymizedFaker,
|
|
37
37
|
)
|
|
38
|
-
from rdt.transformers.utils import WarnDict
|
|
39
38
|
|
|
40
39
|
__all__ = [
|
|
41
40
|
'BaseTransformer',
|
|
42
41
|
'BaseMultiColumnTransformer',
|
|
43
42
|
'BinaryEncoder',
|
|
44
43
|
'ClusterBasedNormalizer',
|
|
45
|
-
'CustomLabelEncoder',
|
|
46
44
|
'OrderedLabelEncoder',
|
|
47
45
|
'FloatFormatter',
|
|
48
|
-
'FrequencyEncoder',
|
|
49
46
|
'GaussianNormalizer',
|
|
50
47
|
'LabelEncoder',
|
|
51
48
|
'LogScaler',
|
|
@@ -56,7 +53,6 @@ __all__ = [
|
|
|
56
53
|
'RegexGenerator',
|
|
57
54
|
'AnonymizedFaker',
|
|
58
55
|
'PseudoAnonymizedFaker',
|
|
59
|
-
'IDGenerator',
|
|
60
56
|
'IndexGenerator',
|
|
61
57
|
'get_transformer_name',
|
|
62
58
|
'get_transformer_class',
|
|
@@ -94,15 +90,14 @@ TRANSFORMERS = {
|
|
|
94
90
|
for transformer in BaseTransformer.get_subclasses()
|
|
95
91
|
}
|
|
96
92
|
|
|
97
|
-
DEFAULT_TRANSFORMERS =
|
|
98
|
-
boolean
|
|
99
|
-
categorical
|
|
100
|
-
datetime
|
|
101
|
-
id
|
|
102
|
-
numerical
|
|
103
|
-
pii
|
|
104
|
-
|
|
105
|
-
)
|
|
93
|
+
DEFAULT_TRANSFORMERS = {
|
|
94
|
+
'boolean': UniformEncoder(),
|
|
95
|
+
'categorical': UniformEncoder(),
|
|
96
|
+
'datetime': UnixTimestampEncoder(),
|
|
97
|
+
'id': RegexGenerator(),
|
|
98
|
+
'numerical': FloatFormatter(),
|
|
99
|
+
'pii': AnonymizedFaker(),
|
|
100
|
+
}
|
|
106
101
|
|
|
107
102
|
|
|
108
103
|
@lru_cache()
|
|
@@ -111,16 +111,6 @@ class BaseTransformer:
|
|
|
111
111
|
'reverse_transform': np.random.RandomState(self.random_seed + 1),
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
@property
|
|
115
|
-
def model_missing_values(self):
|
|
116
|
-
"""Whether or not a new column is being used to model missing values."""
|
|
117
|
-
warnings.warn(
|
|
118
|
-
"Future versions of RDT will not support the 'model_missing_values' parameter. "
|
|
119
|
-
"Please switch to using the 'missing_value_generation' parameter instead.",
|
|
120
|
-
FutureWarning,
|
|
121
|
-
)
|
|
122
|
-
return self.missing_value_generation == 'from_column'
|
|
123
|
-
|
|
124
114
|
def _set_missing_value_generation(self, missing_value_generation):
|
|
125
115
|
if missing_value_generation not in (None, 'from_column', 'random'):
|
|
126
116
|
raise TransformerInputError(
|
|
@@ -130,18 +120,6 @@ class BaseTransformer:
|
|
|
130
120
|
|
|
131
121
|
self.missing_value_generation = missing_value_generation
|
|
132
122
|
|
|
133
|
-
def _set_model_missing_values(self, model_missing_values):
|
|
134
|
-
warnings.warn(
|
|
135
|
-
"Future versions of RDT will not support the 'model_missing_values' parameter. "
|
|
136
|
-
"Please switch to using the 'missing_value_generation' parameter to select your "
|
|
137
|
-
'strategy.',
|
|
138
|
-
FutureWarning,
|
|
139
|
-
)
|
|
140
|
-
if model_missing_values is True:
|
|
141
|
-
self._set_missing_value_generation('from_column')
|
|
142
|
-
elif model_missing_values is False:
|
|
143
|
-
self._set_missing_value_generation('random')
|
|
144
|
-
|
|
145
123
|
@classmethod
|
|
146
124
|
def get_name(cls):
|
|
147
125
|
"""Return transformer name.
|
|
@@ -169,20 +147,6 @@ class BaseTransformer:
|
|
|
169
147
|
|
|
170
148
|
return subclasses
|
|
171
149
|
|
|
172
|
-
@classmethod
|
|
173
|
-
def get_input_sdtype(cls):
|
|
174
|
-
"""Return the input sdtype supported by the transformer.
|
|
175
|
-
|
|
176
|
-
Returns:
|
|
177
|
-
string:
|
|
178
|
-
Accepted input sdtype of the transformer.
|
|
179
|
-
"""
|
|
180
|
-
warnings.warn(
|
|
181
|
-
'`get_input_sdtype` is deprecated. Please use `get_supported_sdtypes` instead.',
|
|
182
|
-
FutureWarning,
|
|
183
|
-
)
|
|
184
|
-
return cls.get_supported_sdtypes()[0]
|
|
185
|
-
|
|
186
150
|
@classmethod
|
|
187
151
|
def get_supported_sdtypes(cls):
|
|
188
152
|
"""Return the supported sdtypes by the transformer.
|
|
@@ -327,11 +291,7 @@ class BaseTransformer:
|
|
|
327
291
|
custom_args = []
|
|
328
292
|
args = inspect.getfullargspec(self.__init__)
|
|
329
293
|
keys = args.args[1:]
|
|
330
|
-
instanced = {
|
|
331
|
-
key: getattr(self, key)
|
|
332
|
-
for key in keys
|
|
333
|
-
if key != 'model_missing_values' and hasattr(self, key) # Remove after deprecation
|
|
334
|
-
}
|
|
294
|
+
instanced = {key: getattr(self, key) for key in keys if hasattr(self, key)}
|
|
335
295
|
|
|
336
296
|
default_values_list = args.defaults or []
|
|
337
297
|
default_arg_to_default_value = {}
|
|
@@ -20,11 +20,6 @@ class BinaryEncoder(BaseTransformer):
|
|
|
20
20
|
Indicate what to replace the null values with. If the string ``'mode'`` is given,
|
|
21
21
|
replace them with the most common value.
|
|
22
22
|
Defaults to ``mode``.
|
|
23
|
-
model_missing_values (bool):
|
|
24
|
-
**DEPRECATED** Whether to create a new column to indicate which values were null or
|
|
25
|
-
not. The column will be created only if there are null values. If ``True``, create
|
|
26
|
-
the new column if there are null values. If ``False``, do not create the new column
|
|
27
|
-
even if there are null values. Defaults to ``False``.
|
|
28
23
|
missing_value_generation (str or None):
|
|
29
24
|
The way missing values are being handled. There are three strategies:
|
|
30
25
|
|
|
@@ -42,14 +37,11 @@ class BinaryEncoder(BaseTransformer):
|
|
|
42
37
|
def __init__(
|
|
43
38
|
self,
|
|
44
39
|
missing_value_replacement='mode',
|
|
45
|
-
model_missing_values=None,
|
|
46
40
|
missing_value_generation='random',
|
|
47
41
|
):
|
|
48
42
|
super().__init__()
|
|
49
43
|
self.missing_value_replacement = missing_value_replacement
|
|
50
44
|
self._set_missing_value_generation(missing_value_generation)
|
|
51
|
-
if model_missing_values is not None:
|
|
52
|
-
self._set_model_missing_values(model_missing_values)
|
|
53
45
|
|
|
54
46
|
def _fit(self, data):
|
|
55
47
|
"""Fit the transformer to the data.
|