Aplicación escrita en Python 3 que scrapea series de tiempo de archivos .xlsx
semi-estructurados y los transforma en distribuciones de formato abierto. La aplicación está basada en una extensión experimental del Perfil de Metadatos del Paquete de Apertura de Datos.
Los siguientes pasos fueron probados en una instalación de Ubuntu 16.04.
- Instalar las dependencias necesarias para descargar y configurar el proyecto:
$ sudo apt install python3-pip git
- Clonar el repositorio y acceder al directorio creado:
$ git clone https://github.com/datosgobar/series-tiempo-ar-scraping.git
$ cd series-tiempo-ar-scraping
-
Crear el entorno virtual de Python con Anaconda o Virtualenv e instalar las dependencias del proyecto:
Anaconda:
Si Anaconda no se encuentra instalado, instalarlo:
$ make install_anaconda
Durante el proceso de instalación, asegurar que el instalador modifique el archivo
.bashrc
para incluir el comandoconda
en elPATH
.Luego, habilitar el comando
conda
:$ source ~/.bashrc
Una vez instalado Anaconda y habilitado el comando
conda
, crear el entorno virtual:$ make setup_anaconda
Virtualenv:
Crear el entorno virtual e instalar las dependencias:
$ make anaconda_setup_virtualenv
Virtualenv:
$ make setup_virtualenv
-
Crear el índice de catálogos y el archivo de configuración general:
$ cp config/index.example.yaml config/index.yaml
$ cp config/config_general.example.yaml config/config_general.yaml
El archivo index.yaml
contiene el listado de catálogos a ser descargados y scrapeados. Por defecto, incluye un catálogo de ejemplo llamado example_catalog1
, cuyos archivos están almacenados en este repositorio.
- (Opcional) Crear los archivos de configuración para el envio de reportes por mail y para descargas, el cual permite ejecutar comandos a elección del usuario una vez que el ETL finaliza.
$ cp config/config_email.example.yaml config/config_email.yaml
$ cp config/config_downloads.example.yaml config/config_downloads.yaml
Luego, editar los archivos config_email.yaml
y config_downloads.yaml
con los parámetros deseados.
Los distintos pasos del scraper se pueden correr individualmente como recetas del Makefile
. Para correr el ETL completo:
Anaconda:
$ source activate series-tiempo-ar-scraping
$ make anaconda_all
Virtualenv:
$ make all
El proceso toma catálogos de datos abiertos en Excel con series de tiempo documentas para scraping, transforma el catálogo al formato data.json
y genera (distribuciones para scraping) o descarga (distribuciones ya generadas según la especificación) los archivos de distribuciones en el directorio data/output
.
Si se corre luego de los pasos de instalación, el proceso se ejecuta con el catálogo de ejemplo.
-
Entradas:
index.yaml
: Contiene un listado de catálogos con series de tiempo y sus URLs respectivas (Ver ejemplo).- El índice debe tener por lo menos un catálogo en Excel.
- El catálogo en Excel debe documentar por lo menos un dataset con por lo menos una distribución para scrapear a partir de un Excel con series de tiempo o para descargar de un CSV con series de tiempo.
config_general.yaml
: Contiene la configuración del servidor donde se servirán los archivos de salida (Ver ejemplo).
-
Salidas:
- Directorio
data/output/
: Por cada catálogo procesado, se crea un subdirectorio con:data.json
: Catálogo en formato.json
(data/output/catalog/{catalog_id}/data.json
).catalog.xlsx
: Catálogo en formato.xlsx
(data/output/catalog/{catalog_id}/catalog.xlsx
).- Archivos de distribuciones descargados vía
downloadURL
(data/output/catalog/{catalog_id}/dataset/{dataset_id}/distribution/{distribution_id}/distribucion-descargada-nombre.csv
). - Archivos de distribuciones scrapeadas (
data/output/catalog/{catalog_id}/dataset/{dataset_id}/distribution/{distribution_id}/distribucion-scrapeada-nombre.csv
).
- Directorio
data/reports/
: Por cada catálogo procesado, se crea un subdirectorio con:- Reporte del proceso de validación del catálogo.
- Reporte con información sobre los datasets del catálogo.
- Reportes del proceso de scraping del catálogo.
- Directorio
El scraper se basa en una extensión del Perfil Nacional de Metadatos que documenta cómo debe crearse un catálogo de datos abiertos.
El Perfil de Metadatos especifica cómo deben documentarse distribuciones CSV que contengan series de tiempo. Esta es una especificación estricta que propone generar CSVs estándares y documentarlos para su extracción e interpretación segura por aplicaciones de todo tipo.
Este proyecto, añade algunos campos de metadatos extra al catálogo que no son parte del Perfil de Metadatos y están pensados para poder generar estos CSVs estándares a partir de series que están publicadas en Excels semi-estructurados.
Nombre | Requerido | Descripción | Ejemplo | Variable (data.json) | Tipo (data.json) |
URL de Excel fuente | Si | URL que permite la descarga directa de un archivo XLSX que tiene series de tiempo. | https://github.com/datosgobar/series-tiempo-ar-scraping/raw/master/samples/sources/actividad_ied.xlsx | scrapingFileURL | String |
URL de Excel fuente | Si | Nombre de la hoja del Excel donde están las series a scrapear para generar la distribución. | 1.2 OyD real s.e. | scrapingFileSheet | String |
Nombre | Requerido | Descripción | Ejemplo | Variable (data.json) | Tipo (data.json) |
Celda comienzo de la serie | Si | Coordenadas de la celda donde comienzan los datos de la serie o los valores del índice de tiempo. | A9 | scrapingDataStartCell | String |
Celda identificador de la serie | Si | Coordenadas de la celda donde está el identificador o nomenclador de la serie. Este campo sólo es necesario para las series (no para el índice de tiempo). El identificador debe estar en una celda que sea el "encabezado" de la serie y debe coincidir con el documentado como `id` en el catálogo. | A8 | scrapingIdentifierCell | String |
Te invitamos a crearnos un issue en caso de que encuentres algún bug o tengas feedback de alguna parte de series-tiempo-ar-scraping
.
Para todo lo demás, podés mandarnos tu comentario o consulta a [email protected].