Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mejorar manejo de warnings por convencion de nombres de columnas #60

Open
iheredia opened this issue Jan 20, 2019 · 0 comments
Open

Mejorar manejo de warnings por convencion de nombres de columnas #60

iheredia opened this issue Jan 20, 2019 · 0 comments

Comments

@iheredia
Copy link
Contributor

iheredia commented Jan 20, 2019

¿Cuál es el comportamiento que esperabas y cuál fue el comportamiento recibido?

El comportamiento que esperaba es que el datacleaner solo dispare warnings de nombres de columnas cuando corresponde, lo cual no parece estar sucediendo por dos temas independientes.
Por un lado, se disparan warnings para todos los nombres de columnas que se encuentren en el input al momento de crear la instancia del data cleaner. Por otro lado, se disparan de vuelta warnings al momento de aplicar las reglas. Esto molesta en dos sentidos: primero porque hay warnings duplciados, y segundo porque hay columnas que ya se que hay que renombrar y su nuevo nombre se encuentra dentro de las reglas que le paso al datacleaner, con lo cual esperaria que en este caso no dispare warnings.
Ver el ejemplo a continuación. Al ejecutar el ejemplo esperaria que solo se genere un warning por la columna llamda TIRAME WARNINGS, pero obtengo dos warnings para NO ME TIRES WARNINGS y uno para TIRAME WARNINGS.

¿Cuáles son los pasos para reproducir el bug?

# Setup del environment
$ mkdir test
$ cd test
$ virtualenv venv
$ . venv/bin/activate
$ pip install data_cleaner

Una vez que está setupeado el environment, crear los siguientes archivos

example_input.csv

NO ME TIRES WARNINGS,TIRAME WARNINGS
1,2

script.py

from data_cleaner import DataCleaner

input_path = "example_input.csv"
output_path = "example_output.csv"

rules = [
    {
        "renombrar_columnas": [
            {"field": "NO ME TIRES WARNINGS", "new_field": "ya_se_que_tengo_que_renombrar_esta_columna"},
        ]
    }
]

DataCleaner(input_path).clean_file(rules, output_path)

Al ejecutar el script via python script.py se obtienen los siguientes warnings:

/Users/iheredia/personal/test/venv/lib/python2.7/site-packages/data_cleaner/data_cleaner.py:196: UserWarning: 

El campo "NO ME TIRES WARNINGS" no sigue las convenciones para escribir
campos (sólo se admiten caracteres alfanuméricos ASCII en
minúsculas, con palabras separadas por "_"). DataCleaner
normaliza automáticamente los campos en estos casos, lo
que puede llevar a resultados inesperados.

El nuevo nombre del campo normalizado es: "no_me_tires_warnings".
Método que llamó al normalizador de campos: __init__

  warnings.warn(msg)
/Users/iheredia/personal/test/venv/lib/python2.7/site-packages/data_cleaner/data_cleaner.py:196: UserWarning: 

El campo "TIRAME WARNINGS" no sigue las convenciones para escribir
campos (sólo se admiten caracteres alfanuméricos ASCII en
minúsculas, con palabras separadas por "_"). DataCleaner
normaliza automáticamente los campos en estos casos, lo
que puede llevar a resultados inesperados.

El nuevo nombre del campo normalizado es: "tirame_warnings".
Método que llamó al normalizador de campos: __init__

  warnings.warn(msg)
/Users/iheredia/personal/test/venv/lib/python2.7/site-packages/unidecode/__init__.py:46: RuntimeWarning: Argument <type 'str'> is not an unicode object. Passing an encoded string will likely have unexpected results.
  _warn_if_not_unicode(string)
/Users/iheredia/personal/test/venv/lib/python2.7/site-packages/data_cleaner/data_cleaner.py:196: UserWarning: 

El campo "NO ME TIRES WARNINGS" no sigue las convenciones para escribir
campos (sólo se admiten caracteres alfanuméricos ASCII en
minúsculas, con palabras separadas por "_"). DataCleaner
normaliza automáticamente los campos en estos casos, lo
que puede llevar a resultados inesperados.

El nuevo nombre del campo normalizado es: "no_me_tires_warnings".
Método que llamó al normalizador de campos: renombrar_columnas

  warnings.warn(msg)

Detalles del contexto: ¿qué sistema operativo, qué versión de navegador estás usando, por ejemplo?

$ uname -a # version del sistema operativo (mac os)
Darwin ARAR013089 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71.2~1/RELEASE_X86_64 x86_64

$ python --version
Python 2.7.15

$ pip --version
pip 18.1 from /Users/iheredia/personal/test/venv/lib/python2.7/site-packages/pip (python 2.7)

$ pip freeze
arrow==0.13.0
attrs==18.2.0
backports.functools-lru-cache==1.5
certifi==2018.11.29
chardet==3.0.4
Click==7.0
click-plugins==1.0.4
cligj==0.5.0
coverage==4.5.2
cycler==0.10.0
data-cleaner==0.1.20
descartes==1.1.0
enum34==1.1.6
Fiona==1.8.4
funcsigs==1.0.2
geopandas==0.2.1
idna==2.8
kiwisolver==1.0.1
matplotlib==2.2.3
mock==2.0.0
munch==2.3.2
nose==1.3.7
numpy==1.16.0
pandas==0.23.4
Parsley==1.3
pbr==5.1.1
PyCRS==0.1.3
pyparsing==2.3.1
pyproj==1.9.6
python-dateutil==2.7.5
pytz==2018.9
requests==2.21.0
Shapely==1.6.4.post2
six==1.12.0
subprocess32==3.5.3
unicodecsv==0.14.1
Unidecode==1.0.23
urllib3==1.24.1
xlrd==1.2.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant