rdt 1.12.1.dev1__tar.gz → 1.12.2.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.12.1.dev1/rdt.egg-info → rdt-1.12.2.dev0}/PKG-INFO +1 -1
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/pyproject.toml +27 -12
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/__init__.py +1 -1
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/boolean.py +18 -1
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/categorical.py +18 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/datetime.py +36 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/null.py +14 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/numerical.py +44 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/pii/anonymizer.py +24 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0/rdt.egg-info}/PKG-INFO +1 -1
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/LICENSE +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/README.md +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/errors.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/hyper_transformer.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/__init__.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/__init__.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/base.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/boolean.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/categorical.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/datetime.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/numerical.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/pii.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/text.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/datasets/utils.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/performance.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/performance/profiling.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/__init__.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/_validators.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/base.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/pii/__init__.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/pii/anonymization.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/pii/utils.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/text.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt/transformers/utils.py +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/SOURCES.txt +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/dependency_links.txt +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/entry_points.txt +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/requires.txt +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/rdt.egg-info/top_level.txt +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/setup.cfg +0 -0
- {rdt-1.12.1.dev1 → rdt-1.12.2.dev0}/tests/test_tasks.py +0 -0
|
@@ -137,7 +137,7 @@ collect_ignore = ['pyproject.toml']
|
|
|
137
137
|
exclude_lines = ['NotImplementedError()']
|
|
138
138
|
|
|
139
139
|
[tool.bumpversion]
|
|
140
|
-
current_version = "1.12.
|
|
140
|
+
current_version = "1.12.2.dev0"
|
|
141
141
|
parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.(?P<release>[a-z]+)(?P<candidate>\d+))?'
|
|
142
142
|
serialize = [
|
|
143
143
|
'{major}.{minor}.{patch}.{release}{candidate}',
|
|
@@ -178,13 +178,14 @@ preview = true
|
|
|
178
178
|
line-length = 100
|
|
179
179
|
indent-width = 4
|
|
180
180
|
src = ["rdt"]
|
|
181
|
-
target-version = "py312"
|
|
182
181
|
exclude = [
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
182
|
+
'docs',
|
|
183
|
+
'.tox',
|
|
184
|
+
'.git',
|
|
185
|
+
'__pycache__',
|
|
186
|
+
'.ipynb_checkpoints',
|
|
187
|
+
'tasks.py',
|
|
188
|
+
'tests/contributing.py'
|
|
188
189
|
]
|
|
189
190
|
|
|
190
191
|
[tool.ruff.lint]
|
|
@@ -194,13 +195,22 @@ select = [
|
|
|
194
195
|
# Pycodestyle
|
|
195
196
|
"E",
|
|
196
197
|
"W",
|
|
198
|
+
# pydocstyle
|
|
199
|
+
"D",
|
|
197
200
|
# isort
|
|
198
|
-
"I001"
|
|
201
|
+
"I001",
|
|
202
|
+
# print statements
|
|
203
|
+
"T201",
|
|
204
|
+
# pandas-vet
|
|
205
|
+
"PD"
|
|
199
206
|
]
|
|
200
207
|
ignore = [
|
|
201
208
|
"E501",
|
|
209
|
+
# pydocstyle
|
|
202
210
|
"D107", # Missing docstring in __init__
|
|
203
211
|
"D417", # Missing argument descriptions in the docstring, this is a bug from pydocstyle: https://github.com/PyCQA/pydocstyle/issues/449
|
|
212
|
+
"PD901",
|
|
213
|
+
"PD101",
|
|
204
214
|
]
|
|
205
215
|
|
|
206
216
|
[tool.ruff.format]
|
|
@@ -210,14 +220,19 @@ preview = true
|
|
|
210
220
|
docstring-code-format = true
|
|
211
221
|
docstring-code-line-length = "dynamic"
|
|
212
222
|
|
|
213
|
-
[tool.ruff.lint.pep8-naming]
|
|
214
|
-
extend-ignore-names = ["X", "C", "X_padded", "Y", "Y_padded"]
|
|
215
|
-
|
|
216
223
|
[tool.ruff.lint.isort]
|
|
217
224
|
known-first-party = ["rdt"]
|
|
225
|
+
lines-between-types = 0
|
|
218
226
|
|
|
219
227
|
[tool.ruff.lint.per-file-ignores]
|
|
220
228
|
"__init__.py" = ["F401", "E402", "F403", "F405", "E501", "I001"]
|
|
229
|
+
"errors.py" = ["D105"]
|
|
230
|
+
"tests/**.py" = ["D"]
|
|
231
|
+
"tests/contributing.py" = ["T201"]
|
|
221
232
|
|
|
222
233
|
[tool.ruff.lint.pydocstyle]
|
|
223
|
-
convention = "google"
|
|
234
|
+
convention = "google"
|
|
235
|
+
|
|
236
|
+
[tool.ruff.lint.pycodestyle]
|
|
237
|
+
max-doc-length = 100
|
|
238
|
+
max-line-length = 100
|
|
@@ -78,7 +78,7 @@ class BinaryEncoder(BaseTransformer):
|
|
|
78
78
|
data (pandas.Series):
|
|
79
79
|
Data to transform.
|
|
80
80
|
|
|
81
|
-
Returns
|
|
81
|
+
Returns:
|
|
82
82
|
np.ndarray
|
|
83
83
|
"""
|
|
84
84
|
data = pd.to_numeric(data, errors='coerce')
|
|
@@ -110,3 +110,20 @@ class BinaryEncoder(BaseTransformer):
|
|
|
110
110
|
data[isna] = np.nan
|
|
111
111
|
|
|
112
112
|
return data
|
|
113
|
+
|
|
114
|
+
def _set_fitted_parameters(self, column_name, null_transformer):
|
|
115
|
+
"""Manually set the parameters on the transformer to get it into a fitted state.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
column_name (str):
|
|
119
|
+
The name of the column to use for the transformer.
|
|
120
|
+
null_transformer (NullTransformer):
|
|
121
|
+
A fitted null transformer instance that can be used to generate
|
|
122
|
+
null values for the column.
|
|
123
|
+
"""
|
|
124
|
+
self.reset_randomization()
|
|
125
|
+
self.columns = [column_name]
|
|
126
|
+
self.output_columns = [column_name]
|
|
127
|
+
self.null_transformer = null_transformer
|
|
128
|
+
if self.null_transformer.models_missing_values():
|
|
129
|
+
self.output_columns.append(column_name + '.is_null')
|
|
@@ -135,6 +135,24 @@ class UniformEncoder(BaseTransformer):
|
|
|
135
135
|
|
|
136
136
|
self.frequencies, self.intervals = self._compute_frequencies_intervals(labels, freq)
|
|
137
137
|
|
|
138
|
+
def _set_fitted_parameters(self, column_name, intervals, dtype='object'):
|
|
139
|
+
"""Manually set the parameters on the transformer to get it into a fitted state.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
column_name (str):
|
|
143
|
+
The name of the column for this transformer.
|
|
144
|
+
intervals (dict[str, tuple]):
|
|
145
|
+
A dictionary mapping categories to the interval in the range [0, 1]
|
|
146
|
+
it should map to.
|
|
147
|
+
dtype (str, optional):
|
|
148
|
+
The dtype to convert the reverse transformed data back to. Defaults to 'object'.
|
|
149
|
+
"""
|
|
150
|
+
self.reset_randomization()
|
|
151
|
+
self.columns = [column_name]
|
|
152
|
+
self.output_columns = [column_name]
|
|
153
|
+
self.intervals = intervals
|
|
154
|
+
self.dtype = dtype
|
|
155
|
+
|
|
138
156
|
def _transform(self, data):
|
|
139
157
|
"""Map the category to a continuous value.
|
|
140
158
|
|
|
@@ -5,6 +5,7 @@ import pandas as pd
|
|
|
5
5
|
from pandas.api.types import is_datetime64_dtype, is_numeric_dtype
|
|
6
6
|
from pandas.core.tools.datetimes import _guess_datetime_format_for_array
|
|
7
7
|
|
|
8
|
+
from rdt.errors import TransformerInputError
|
|
8
9
|
from rdt.transformers.base import BaseTransformer
|
|
9
10
|
from rdt.transformers.null import NullTransformer
|
|
10
11
|
|
|
@@ -151,6 +152,41 @@ class UnixTimestampEncoder(BaseTransformer):
|
|
|
151
152
|
'next_transformer': None,
|
|
152
153
|
}
|
|
153
154
|
|
|
155
|
+
def _set_fitted_parameters(
|
|
156
|
+
self, column_name, null_transformer, min_max_values=None, dtype='object'
|
|
157
|
+
):
|
|
158
|
+
"""Manually set the parameters on the transformer to get it into a fitted state.
|
|
159
|
+
|
|
160
|
+
Args:
|
|
161
|
+
column_name (str):
|
|
162
|
+
The name of the column for this transformer.
|
|
163
|
+
null_transformer (NullTransformer):
|
|
164
|
+
A fitted null transformer instance that can be used to generate
|
|
165
|
+
null values for the column.
|
|
166
|
+
min_max_values (tuple or None):
|
|
167
|
+
None or a tuple containing the (min, max) values for the transformer.
|
|
168
|
+
Should be used to set self._min_value and self._max_value and must be
|
|
169
|
+
provided if self.enforce_min_max_values is True.
|
|
170
|
+
Defaults to None.
|
|
171
|
+
dtype (str, optional):
|
|
172
|
+
The dtype to convert the reverse transformed data back to. Defaults to 'object'.
|
|
173
|
+
"""
|
|
174
|
+
self.reset_randomization()
|
|
175
|
+
self.columns = [column_name]
|
|
176
|
+
self.output_columns = [column_name]
|
|
177
|
+
self._dtype = dtype
|
|
178
|
+
|
|
179
|
+
if self.enforce_min_max_values and not min_max_values:
|
|
180
|
+
raise TransformerInputError('Must provide min and max values for this transformer.')
|
|
181
|
+
|
|
182
|
+
if min_max_values:
|
|
183
|
+
self._min_value = min_max_values[0]
|
|
184
|
+
self._max_value = min_max_values[1]
|
|
185
|
+
|
|
186
|
+
self.null_transformer = null_transformer
|
|
187
|
+
if self.null_transformer.models_missing_values():
|
|
188
|
+
self.output_columns.append(column_name + '.is_null')
|
|
189
|
+
|
|
154
190
|
def _transform(self, data):
|
|
155
191
|
"""Transform datetime values to float values.
|
|
156
192
|
|
|
@@ -121,6 +121,20 @@ class NullTransformer:
|
|
|
121
121
|
if self._missing_value_generation == 'random':
|
|
122
122
|
self._null_percentage = null_values.sum() / len(data)
|
|
123
123
|
|
|
124
|
+
def _set_fitted_parameters(self, null_ratio):
|
|
125
|
+
"""Manually set the parameters on the transformer to get it into a fitted state.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
null_ratio (float):
|
|
129
|
+
The fraction of values to replace with null values.
|
|
130
|
+
"""
|
|
131
|
+
if null_ratio < 0 or null_ratio > 1.0:
|
|
132
|
+
raise ValueError('null_ratio should be a value between 0 and 1.')
|
|
133
|
+
|
|
134
|
+
if null_ratio != 0:
|
|
135
|
+
self.nulls = True
|
|
136
|
+
self._null_percentage = null_ratio
|
|
137
|
+
|
|
124
138
|
def transform(self, data):
|
|
125
139
|
"""Replace null values with the indicated ``missing_value_replacement``.
|
|
126
140
|
|
|
@@ -8,6 +8,7 @@ import pandas as pd
|
|
|
8
8
|
import scipy
|
|
9
9
|
from sklearn.mixture import BayesianGaussianMixture
|
|
10
10
|
|
|
11
|
+
from rdt.errors import TransformerInputError
|
|
11
12
|
from rdt.transformers.base import BaseTransformer
|
|
12
13
|
from rdt.transformers.null import NullTransformer
|
|
13
14
|
from rdt.transformers.utils import learn_rounding_digits
|
|
@@ -198,6 +199,49 @@ class FloatFormatter(BaseTransformer):
|
|
|
198
199
|
|
|
199
200
|
return data.astype(self._dtype)
|
|
200
201
|
|
|
202
|
+
def _set_fitted_parameters(
|
|
203
|
+
self,
|
|
204
|
+
column_name,
|
|
205
|
+
null_transformer,
|
|
206
|
+
rounding_digits=None,
|
|
207
|
+
min_max_values=None,
|
|
208
|
+
dtype='object',
|
|
209
|
+
):
|
|
210
|
+
"""Manually set the parameters on the transformer to get it into a fitted state.
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
column_name (str):
|
|
214
|
+
The name of the column to use for the transformer.
|
|
215
|
+
null_transformer (NullTransformer):
|
|
216
|
+
A fitted null transformer instance that can be used to generate
|
|
217
|
+
null values for the column.
|
|
218
|
+
min_max_values (Tuple(float) or None):
|
|
219
|
+
None or a tuple containing the (min, max) values for the transformer.
|
|
220
|
+
rounding_digits (int or None):
|
|
221
|
+
The number of digits to round to.
|
|
222
|
+
dtype (str):
|
|
223
|
+
The pandas dtype the reversed data will be converted into.
|
|
224
|
+
"""
|
|
225
|
+
self.reset_randomization()
|
|
226
|
+
self.null_transformer = null_transformer
|
|
227
|
+
self.columns = [column_name]
|
|
228
|
+
self.output_columns = [column_name]
|
|
229
|
+
if self.enforce_min_max_values:
|
|
230
|
+
if not min_max_values:
|
|
231
|
+
raise TransformerInputError('Must provide min and max values for this transformer.')
|
|
232
|
+
|
|
233
|
+
if min_max_values:
|
|
234
|
+
self._min_value = min(min_max_values)
|
|
235
|
+
self._max_value = max(min_max_values)
|
|
236
|
+
|
|
237
|
+
if rounding_digits:
|
|
238
|
+
self._rounding_digits = rounding_digits
|
|
239
|
+
|
|
240
|
+
if self.null_transformer.models_missing_values():
|
|
241
|
+
self.output_columns.append(column_name + '.is_null')
|
|
242
|
+
|
|
243
|
+
self._dtype = dtype
|
|
244
|
+
|
|
201
245
|
|
|
202
246
|
class GaussianNormalizer(FloatFormatter):
|
|
203
247
|
r"""Transformer for numerical data based on copulas transformation.
|
|
@@ -308,6 +308,30 @@ class AnonymizedFaker(BaseTransformer):
|
|
|
308
308
|
|
|
309
309
|
return reverse_transformed
|
|
310
310
|
|
|
311
|
+
def _set_fitted_parameters(self, column_name, nan_frequency=0.0, cardinality=None):
|
|
312
|
+
"""Manually set the parameters on the transformer to get it into a fitted state.
|
|
313
|
+
|
|
314
|
+
Args:
|
|
315
|
+
column_name (str):
|
|
316
|
+
The name of the column to use for the transformer.
|
|
317
|
+
nan_frequency (float):
|
|
318
|
+
The fraction of values that should be replaced with nan values
|
|
319
|
+
if self.missing_value_generation is 'random'.
|
|
320
|
+
cardinality (int or None):
|
|
321
|
+
The number of unique values to generate if cardinality rule is set to
|
|
322
|
+
'match'.
|
|
323
|
+
"""
|
|
324
|
+
self.reset_randomization()
|
|
325
|
+
self.columns = [column_name]
|
|
326
|
+
self.output_columns = [column_name]
|
|
327
|
+
if self.cardinality_rule == 'match':
|
|
328
|
+
if not cardinality:
|
|
329
|
+
raise TransformerInputError(
|
|
330
|
+
'Cardinality "match" rule must specify a cardinality value.'
|
|
331
|
+
)
|
|
332
|
+
self._data_cardinality = cardinality
|
|
333
|
+
self._nan_frequency = nan_frequency
|
|
334
|
+
|
|
311
335
|
def __repr__(self):
|
|
312
336
|
"""Represent initialization of transformer as text.
|
|
313
337
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|