Saltar al contenido principal

DataPrep Service

godml incluye un motor de transformaciones declarativas. Define los pasos de limpieza en YAML — sin escribir una línea de Python.

Configuración en godml.yml

La receta embebida en dataset.dataprep usa el mismo schema que una receta standalone: necesita su propio inputs/outputs (aunque apunten al mismo archivo que dataset.uri — godml sobreescribe dataset.uri con el resultado al terminar).

dataset:
uri: ./data/raw.csv
target: churn
dataprep:
inputs:
- name: raw
connector: csv
uri: ./data/raw.csv
outputs:
- name: clean
connector: csv
uri: ./data/raw.csv
steps:
- op: drop_columns
params:
columns: [id, created_at, uuid]

# fillna no calcula media/mediana/moda automáticamente: calcula el
# valor con pandas antes y pásalo explícito. Un fillna por valor distinto.
- op: fillna
params:
columns: [age, income]
value: 0

- op: one_hot
params:
columns: [region, plan_type]
drop_first: true

- op: standard_scale
params:
columns: [age, income, tenure]

Transforms disponibles

Columnas

OperaciónopParams
Eliminar columnasdrop_columnscolumns: [...]
Renombrarrenamemapping: {viejo: nuevo}
Seleccionarselectcolumns: [...]
Castear tiposcast_types / safe_castmapping: {col: "int"/"float"/"str"/"datetime"} — ambas variantes coercionan errores a null, no hay diferencia funcional entre ellas hoy

Valores faltantes

OperaciónopParams
Rellenarfillnacolumns: [...], value: <valor fijo> — un valor compartido por todas las columnas listadas; usa varios pasos fillna para valores distintos. Si omites value, infiere 0/"MISSING" según el tipo de la primera columna
Eliminar filasdropnacolumns: [...] (usadas como subset)

Encoding

OperaciónopParams
One-Hotone_hotcolumns: [...], drop_first: false
Label Encodinglabel_encodecolumns: [...]

No hay transform de encoding de texto (TF-IDF/conteo) todavía.

Escalado

OperaciónopParams
Estandarizar (z-score)standard_scalecolumns: [...]
Min-Maxminmax_scalecolumns: [...], feature_range: [0, 1]

No hay RobustScaler; no existe un op: scale genérico con parámetro method.

Texto

OperaciónopParams
Minúsculaslowercolumn: "..." (una columna)
Trimstripcolumn: "..." (una columna)
Regex replaceregex_replacecolumn, pattern, repl — tiene una implementación acelerada con Cython cuando está disponible

Series de tiempo

OperaciónopParams
Laglagcolumn, periods: 1, new_column (default {column}_lag{periods})

No hay agregaciones por ventana temporal (rolling mean/sum, etc.) todavía.

Calidad

OperaciónopParams
Deduplicardrop_duplicatessubset: [...], keep: "first"
Marcar outliersoutlier_flagcolumn, method: "zscore"/"iqr", threshold: 3.0, new_column (default {column}_is_outlier) — agrega una columna booleana, no elimina filas

No hay un op: quality_check con min_rows/max_null_pct. Para validar el dataset usa la sección validations (ver abajo).

Validaciones (validations)

Se ejecutan después de los steps, antes de escribir el output. Si una falla, lanza una excepción y detiene la receta.

validations:
- type: expect_non_null
args: [monthly_charges, tenure] # columna o lista de columnas

- type: expect_unique
args: [customer_id]

- type: expect_range
args:
columns: [tenure]
min: 0
max: 100

- type: expect_regex
args:
columns: [email]
pattern: '^[^@]+@[^@]+\.[^@]+$'

Join con otro dataset

join existe como transform, pero necesita un pd.DataFrame en memoria como parámetro right — no es expresable en una receta YAML declarativa. Úsalo desde Python:

from godml.dataprep_service.transforms.join import Join
df_joined = Join().apply(df, right=otro_df, on=["customer_id"], how="left")

Ejemplo completo

dataset:
uri: ./data/customers_raw.csv
target: churned
dataprep:
inputs:
- name: raw
connector: csv
uri: ./data/customers_raw.csv
outputs:
- name: clean
connector: csv
uri: ./data/customers_raw.csv
steps:
# Eliminar columnas no útiles
- op: drop_columns
params:
columns: [customer_id, signup_timestamp, internal_note]

# Rellenar nulos (un fillna por columna/valor)
- op: fillna
params:
columns: [monthly_charges]
value: 0
- op: fillna
params:
columns: [tenure_months]
value: 0
- op: fillna
params:
columns: [contract_type]
value: "unknown"
- op: fillna
params:
columns: [payment_method]
value: "unknown"

# Encoding de categóricas
- op: one_hot
params:
columns: [contract_type, payment_method, internet_service]
drop_first: true

# Normalizar numéricas
- op: standard_scale
params:
columns: [monthly_charges, total_charges, tenure_months]

validations:
- type: expect_non_null
args: [monthly_charges, tenure_months]

Usar DataPrep standalone

godml dataprep run recipe.yml
recipe.yml
inputs:
- name: raw
connector: csv
uri: ./data/raw.csv

steps:
- op: drop_columns
params:
columns: [id]

outputs:
- name: clean
connector: csv
uri: ./data/clean.csv

También disponible desde notebook: nb.dataprep_run_inline(recipe) / nb.dataprep_run(path) / nb.dataprep_preview(path, limit), y por CLI: godml dataprep run/preview/validate/dry-run <archivo>.


Compliance Service