datosgobar / data-cleaner

Librería en python para para limpieza de datos, según estándares del Equipo de Datos Argentina.
http://data-cleaner.readthedocs.io/
MIT License
30 stars 12 forks source link

Agregar capacidad de leer y guardar ZIP #46

Open abenassi opened 7 years ago

abenassi commented 7 years ago

Dependencias: este issue requiere la implementación previa de #45

Una vez resuelta la capacidad de DataCleaner para leer y guardar archivos de distintos formatos, debería poder lidiar con leer/escribir archivos que vienen comprimidos en ZIP.

Esto es especialmente necesario para el caso de los SHP (que suelen venir en una carpeta ZIP) pero también es muy útil para hacer transparente la lectura de cualquier otro archivo CSV, etc que venga comprimido.

Al igual que en los issues #43, #44 y #45 se busca que la experiencia para el usuario sea transparente, pero esto es más difícil en el caso de escritura de ZIPs (¿Cómo debería indicarle el usuario que quiere guardar los datos en formato CSV, GEOJSON, KML o SHP pero también ZIPeados?).

Todas estas combinaciones de opciones deberían ser posibles para el usuario:

from data_cleaner import DataCleaner

input_path = "samples/provincias.zip"
input_path = "samples/provincias/provincias.shp"
input_path = "samples/provincias.geojson"
input_path = "samples/provincias.kml"
input_path = "samples/provincias.csv"

output_path = "samples/provincias.zip"
output_path = "samples/provincias/provincias.shp"
output_path = "samples/provincias.geojson"
output_path = "samples/provincias.kml"
output_path = "samples/provincias.csv"

dc = DataCleaner(input_path)
dc.save(output_path)

Hace falta pensar cuál es la mejor opción de interfaz para guardar el archivo en determinado formato, comprimido dentro de un ZIP:

dc.save("samples/provincias.zip", fmt="SHP")
dc.save("samples/provincias.zip", fmt="CSV")
dc.save("samples/provincias.zip", fmt="GEOJSON")

ó

dc.save("samples/provincias/provincias.shp", compress=True)
dc.save("samples/provincias.csv", compress=True)
dc.save("samples/provincias.geojson", compress=True)

para esto habría que hacer un poco de research de patrones ya usados en Pandas, GeoPandas y otras librerías de python + datos para ver cuál resulta mejor, o si hay un tercero mejor que estos dos.