Skip to content

ETL y servidor web para scrapear series de tiempo de Excels semi-estructurados y transformarlos en distribuciones de formato abierto, basado en una extensión experimental del Perfil Nacional de Metadatos de la política de apertura de datos de la APN.

License

Notifications You must be signed in to change notification settings

datosgobar/series-tiempo-ar-scraping

Repository files navigation

series-tiempo-ar-scraping

license python

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.

Índice

Instalación

Los siguientes pasos fueron probados en una instalación de Ubuntu 16.04.

  1. Instalar las dependencias necesarias para descargar y configurar el proyecto:
$ sudo apt install python3-pip git
  1. Clonar el repositorio y acceder al directorio creado:
$ git clone https://github.com/datosgobar/series-tiempo-ar-scraping.git
$ cd series-tiempo-ar-scraping
  1. 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 comando conda en el PATH.

    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
  2. 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.

  1. (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.

Uso

Correr el ETL

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/Salidas del ETL

  • Entradas:

    • index.yaml: Contiene un listado de catálogos con series de tiempo y sus URLs respectivas (Ver ejemplo).
    • 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.

Crear un catálogo con series de tiempo

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.

Nuevos campos para scraping

Distribución (distribution)
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
Campo (field)
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

Contacto

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].

About

ETL y servidor web para scrapear series de tiempo de Excels semi-estructurados y transformarlos en distribuciones de formato abierto, basado en una extensión experimental del Perfil Nacional de Metadatos de la política de apertura de datos de la APN.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published