Script
Importar, revisar y limpiar
Un CSV que llegó de cualquier lado y un diccionario que dice qué tiene que haber en cada variable. El script mira el archivo, informa lo que encuentra y después lo limpia dejando anotado cada cambio.
Proyecto en R y Python · ZIP · 40 KB
No usa ningún paquete: corre con R recién instalado y con Python recién instalado.
Lo que hace antes de mirar un dato
Dos decisiones que casi todos los tutoriales dan por supuestas y que, si se resuelven mal, arruinan todo lo que venga después: con qué separador viene el archivo —coma, punto y coma o tabulador— y cuál es el separador decimal. Las dos se detectan mirando el archivo, y las dos quedan informadas en el resumen.
Con coma decimal, el punto es separador de miles; con punto decimal, lo es la coma. Por eso «1.234,56» y «1,234.56» se leen los dos bien, que es el problema de todos los días cuando el archivo salió de un Excel en español. También se saca la marca de orden de bytes que deja Excel al exportar, esa que hace que la primera columna se llame «ï»¿id».
Qué escribe
| salidas/perfil.csv | Una fila por columna del archivo crudo: qué tipo parece, cuántos faltantes tiene, cuántos valores distintos, un ejemplo y qué sospechar |
|---|---|
| datos/limpios/base.csv | La base limpia, con las variables del diccionario y en su orden |
| salidas/cambios.csv | Una fila por variable y regla aplicada, con cuántos valores tocó |
| salidas/resumen.csv | Los números del proceso, incluidos el separador y el decimal que detectó |
Nada se corrige en silencio
Cada valor que cambia queda contado en cambios.csv, por variable y por regla: cuántos códigos de faltante se pasaron a vacío, cuántos valores quedaron fuera de rango, cuántas categorías no estaban en la lista, cuántas fechas no se pudieron leer. Con el ejemplo que viene adentro, ese archivo dice, entre otras cosas, que hay 79 fechas normalizadas, una fecha imposible, una categoría desconocida y seis escritas distinto.
Esa tabla es la que conviene mirar antes de seguir. Si una variable tiene cuarenta valores «fuera de rango», eso no es un detalle de limpieza: es un problema del relevamiento.
El diccionario manda
Las reglas no están escondidas en el código: salen de diccionario.csv, una fila por variable con el tipo, el rango, los códigos válidos, el código de faltante y cuál identifica al caso. Es el mismo diccionario de la planilla de carga con validaciones: si cargaste los datos con esa planilla, ya lo tenés escrito.
Las columnas que el diccionario no declara no pasan a la base limpia, pero aparecen en el perfil con esa advertencia: es la forma de darse cuenta de que el archivo traía algo que nadie esperaba.
Cómo está verificado
El verificador descomprime lo publicado, corre el proyecto entero con Python y también con R, y exige que los cuatro archivos de salida sean idénticos. Compara además cada uno con una implementación aparte de las mismas reglas, y prueba cinco archivos más: separado por tabulador y con punto decimal, sin columna identificadora, con una variable declarada que el archivo no tiene, con una sola fila, y uno de fechas con el 29 de febrero de un año bisiesto, el de uno que no lo es y un 31 de abril. Son 902 comprobaciones. De quince sabotajes, catorce se detectan: el que queda saca una línea que en Windows no hace falta, porque R ya descarta esa marca al leer.