1 - Introduccion
El siguiente trabajo consiste en desarrollar un proceso de extracción, carga y transformación de datos de forma automática de la pagina del Indec.
Mediante el lenguaje de programación R se extraen los datos de la pagina, se transforman a una estructura deseada para almacenar en una base de datos y su posterior explotación visual y cuantitativa.
El trabajo contiene paso por paso un caso real explicado de forma teórica y con el código adjunto.
2 - PipeLine de Datos
Una pipeline de datos es una construcción lógica que representa un proceso dividido en fases. Las pipelines de datos se caracterizan por definir el conjunto de pasos o fases y las tecnologías involucradas en un proceso de movimiento o procesamiento de datos.
3 - Librerias
A continuación se detallan las librerías necesarias para el trabajo:
library(tidyverse)
library(ggplot2)
library(readr)
library(dplyr)
library(readxl)
library(plotly)
library(ggthemes)
library(reshape)
library(gdata)
library(highcharter)
library(DT)
library(rsconnect)4 - Importacion del archivo
Para este trabajo se estará utilizando un archivo de Excel suministrado por el Indec que contiene los indices de precios mensuales para cada rubro donde la ponderación de los mismos nos da como resultado el indice general. Todo estos datos están semi-estructurados, es decir, tenemos que programar en R para estructurar los datos. La idea es que los rubros de inflacionario queden como variables y que para cada uno de los valores de las variables se le asigne el mes y el año. Esta estructura nos servirá para obtener una planilla con series de tiempo de todos los rubros principales y poder trabajar mejor para ver los cambios en las tasas y el nivel de inflación de todos los rubros durante los últimos 5 años.
A continuación podemos observar una muestra de como vienen los datos del Indec:
download.file("https://www.indec.gob.ar/ftp/cuadros/economia/sh_ipc_aperturas.xls","indec_descargado.xls", mode="wb")
indec = read_excel('indec_descargado.xls')
datatable(indec[, 1:8])Podemos tomar desde la fila 8 a la 52 que contiene todos los rubros que necesitamos:
datatable(indec[8:52, 1:8])indec = indec[8:52,]Sabemos que los datos arrancan del 01/2017, por lo tanto creamos una secuencia de fechas que arranque en 01/2017, que corra por mes y llegue hasta el numero final de las columnas de nuestro nuevo set de datos:
# A n_col le tenemos que restar la variable de los rubros:
n_col = ncol(indec) - 1
periodos = seq(as.Date("2017/1/1"), by = "month", length.out = n_col)Hacemos la transpuesta de nuestro set de datos:
indec = data.frame(t(indec))Colocamos como nombre de columnas todos los rubros:
colnames(indec) = c(indec[1,])Modificamos las filas y eliminamos la fila que ya no nos sirve:
row.names(indec) = 1:nrow(indec)
indec = indec[-1,]Limpieza de algunos datos que vienen mal:
indec[ , c(1:(ncol(indec)))] = apply(indec[ , c(1:(ncol(indec)))], 2, trimws )
indec[ , c(1:(ncol(indec)))] = apply(indec[ , c(1:(ncol(indec)))], 2,
function(x) as.numeric(as.character(x))) Añadimos la columna periodos:
indec$periodos = periodos
indec[,c(1,2,3,4,5,6,46)] %>% datatable(extensions = 'Buttons',
options = list(
buttons = c('copy', 'csv', 'excel', 'pdf', 'print')))