Referencia de la API

data_cleaner.data_cleaner module

Cleaner de CSVs a partir de reglas de limpieza.

La clase DataCleaner permite limpiar archivos CSVs con datos a partir de la aplicación de reglas de limpieza.

class data_cleaner.data_cleaner.DataCleaner(input_path, encoding=None, sep=None, ignore_dups=False, quotechar=None, dtype=None)[source]

Bases: object

Crea un objeto DataCleaner cargando un CSV en un DataFrame y expone reglas de limpieza para operar sobre las columnas del objeto y retornar un CSV limplio.

DEFAULT_SUFIX = u'normalizado'
INPUT_DEFAULT_ENCODING = 'utf-8'
INPUT_DEFAULT_QUOTECHAR = '"'
INPUT_DEFAULT_SEPARATOR = ','
OUTPUT_ENCODING = 'utf-8'
OUTPUT_QUOTECHAR = '"'
OUTPUT_SEPARATOR = ','
clean(rules)[source]

Aplica las reglas de limpieza al objeto en memoria.

Parameters:rules (list) – Lista de reglas de limpieza.
clean_file(rules, output_path)[source]

Aplica las reglas de limpieza y guarda los datos en un csv.

Parameters:rules (list) – Lista de reglas de limpieza.
fecha_completa(field, time_format, keep_original=False, inplace=False)[source]

Regla para fechas completas que están en un sólo campo.

Parameters:
  • field (str) – Campo a limpiar.
  • time_format (str) – Formato temporal del campo.
Returns:

Serie de strings limpios

Return type:

pandas.Series

fecha_separada(fields, new_field_name, keep_original=True, inplace=False)[source]

Regla para fechas completas que están separadas en varios campos.

Parameters:
  • field (str) – Campo a limpiar.
  • new_field_name (str) – Sufijo para construir nombre del nuevo field.
Returns:

Serie de strings limpios.

Return type:

pandas.Series

fecha_simple(field, time_format, keep_original=False, inplace=False)[source]

Regla para fechas sin hora, sin día o sin mes.

Parameters:
  • field (str) – Campo a limpiar.
  • time_format (str) – Formato temporal del campo.
Returns:

Serie de strings limpios

Return type:

pandas.Series

mail_format(field, sufix=None, keep_original=False, inplace=False)[source]

Regla para dar formato a las direcciones de correo electronico.

Lleva todas las cadenas a minusculas y luego si hay varias las separa por comas.

Parameters:field (str) – Campo a limpiar
Returns:Serie de strings limpios
Return type:pandas.Series
nombre_propio(field, sufix=None, lower_words=None, keep_original=False, inplace=False)[source]

Regla para todos los nombres propios.

Capitaliza los nombres de países, ciudades, personas, instituciones y similares.

Parameters:field (str) – Campo a limpiar
Returns:Serie de strings limpios
Return type:pandas.Series
reemplazar(field, replacements, sufix=None, keep_original=False, inplace=False)[source]

Reemplaza listas de valores por un nuevo valor.

Parameters:
  • field (str) – Campo a limpiar
  • replacements (dict) – {“new_value”: [“old_value1”, “old_value2”]}
Returns:

Serie de strings limpios

Return type:

pandas.Series

reemplazar_string(field, replacements, sufix=None, keep_original=False, inplace=False)[source]
Reemplaza listas de strings por un nuevo string.
A diferencias de la funcion reemplazar hace reemplazos parciales.
Parameters:
  • field (str) – Campo a limpiar
  • replacements (dict) – {“new_value”: [“old_value1”, “old_value2”]}
Returns:

Serie de strings limpios

Return type:

pandas.Series

remover_columnas(field, inplace=False)[source]

Remueve columnas.

Parameters:field (str) – Campo a limpiar
Returns:Data frame con las columnas removidas.
Return type:pandas.DataFrame
renombrar_columnas(field, new_field, inplace=False)[source]

Renombra una columna.

Parameters:
  • field (str) – Campo a renombrar.
  • field – Nuevo nombre
Returns:

Data frame con las columnas renombradas.

Return type:

pandas.DataFrame

save(output_path)[source]

Guarda los datos en un nuevo CSV con formato estándar.

El CSV se guarda codificado en UTF-8, separado con ”,” y usando ‘”’ comillas dobles como caracter de enclosing.

string(field, sufix=None, sort_tokens=False, remove_duplicates=False, keep_original=False, inplace=False)[source]

Regla para todos los strings.

Aplica un algoritimo de clustering para normalizar strings que son demasiado parecidos, sin pérdida de información.

Parameters:field (str) – Campo a limpiar.
Returns:Serie de strings limpios.
Return type:pandas.Series
string_peg_split(field, grammar, new_field_names, keep_original=True, inplace=False)[source]

Regla para separar un campo a partir parsing expression grammars.

Parameters:
  • field (str) – Campo a limpiar.
  • grammar (str) – Reglas para compilar una PEG.
  • new_field_names (list) – Sufijos de los nuevos campos para los valores separados.
Returns:

Serie de strings limpios

Return type:

pandas.Series

string_regex_split(field, pattern, new_field_names, keep_original=True, inplace=False)[source]

Regla para separar un campo a partir de una expresión regular.

TODO!!! Falta implementar este método.

Parameters:
  • field (str) – Campo a limpiar.
  • pattern (str) – Expresión regular.
  • new_field_names (list) – Sufijos de los nuevos campos para los valores separados.
Returns:

Serie de strings limpios

Return type:

pandas.Series

string_regex_substitute(field, regex_str_match, regex_str_sub, sufix=None, keep_original=True, inplace=False)[source]

Regla para manipular y reeemplazar datos de un campo con regex.

Parameters:
  • field (str) – Campo a limpiar.
  • regex_str_match (str) – Expresion regular a buscar
  • regex_str_sub (str) – Expresion regular para el reemplazo.
Returns:

Serie de strings limpios

Return type:

pandas.Series

string_simple_split(field, separators, new_field_names, keep_original=True, inplace=False)[source]

Regla para separar un campo a partir de separadores simples.

Parameters:
  • field (str) – Campo a limpiar
  • separators (list) – Strings separadores.
  • new_field_names (list) – Sufijos de los nuevos campos para los valores separados.
Returns:

Serie de strings limpios

Return type:

pandas.Series

exception data_cleaner.data_cleaner.DuplicatedField(value)[source]

Bases: exceptions.ValueError

Salta cuando hay un campo duplicado en el dataset.

data_cleaner.capitalizer module

Nomalizacion de strings.

data_cleaner.capitalizer.capitalize(string, sep=None, encoding='utf-8', lower_words=None)[source]

Capitaliza una string que puede estar compuesta por varias palabras

Parameters:
  • string (str) – Palabra
  • sep (str) – Separador
Returns:

String normalizada

Return type:

str

data_cleaner.capitalizer.normalize_word(word, lower_words=None)[source]

Normaliza una palabra, capitalizándola cuando corresponde.

Si contiene signos de puntacion se capitaliza dentro de esas strings.

Parameters:word (str) – Palabra
Returns:Palabra normalizada
Return type:str

data_cleaner.fingerprint_keyer module

Implementa funciones para clusterizar strings.

Utiliza el algoritmo Key Collision: Fingerprint.

data_cleaner.fingerprint_keyer.fingerprint_keyer(key_string, sort_tokens=False, remove_duplicates=False)[source]

Convierte un string en su fingerprint key representation.

Parameters:key_string (str) – String para convertir en fingerprint key.
Returns:Fingerprint correspondiente al input.
Return type:str
data_cleaner.fingerprint_keyer.get_best_replacements(clusters, counts)[source]

Selecciona los strings más utilizados por cluster.

Itera por cada cluster para determinar la mejor string para reemplazar las strings originales. De momento solo utiliza un conteo simple pero podria agregarse algun criterio basado en la capitalizacion de las palabras

Parameters:
  • clusters (dict) – {fingerprint: [raw_string_1, raw_string_2]}
  • counts (dict) – {raw_string: cant_veces_utilizada}
Returns:

{fingerprint: string_mas_usada_para_esa_fingerprint}

Return type:

dict

data_cleaner.fingerprint_keyer.group_fingerprint_strings(raw_strs, sort_tokens=False, remove_duplicates=False)[source]

Clusteriza un conjunto de strings, según sus fingerprints.

Parameters:raw_strs (list) – Lista de strings sin procesar.
Returns:En el primer dict las keys son los fingerprints y los valores las strings originales. En el segundo las keys son las strings sin normalizar y los valores el conteo de la cantidad de veces que aparecen.
Return type:(dict, dict)
data_cleaner.fingerprint_keyer.replace_by_key(replacements, raw_strs)[source]

Reemplaza strings por sus mejores equivalentes.