Cargar datos de población del INE en R

22 de marzo de 2020

Herramientas: ggplot2, dplyr, tidyr

Leo a Mariluz Congosto en Twitter que tiene problemas para cargar en R los datos obtenidos de un archivo Excel del INE. Este problema es muy habitual a la hora de obtener datos de este tipo de organizaciones (INE, EUSTAT), los que loa archivos Excel suelen estar maquetados para recoger también metadatos, y normalmente los datos ya están tabulados.

Este pequeño script carga el archivo de Excel (previamente descargado a la carpeta en la que tengamos el scrit) y realiza las siguientes tareas:

  • Al cargar el archivo, deja fuera las cinco primeras líneas
  • Convierte la primera fila en nombres de columnas
  • Convierte los nombres de columnas a un formato aceptable por R
  • Renombra la primera columna (que no tenía nombre)
  • Selecciona las filas de 4 a 55. Estos son los datos totales (todas las edades agregadas). IMPORTANTE: Si quisieramos tener todos los datos desagregados por edad, tendríamos que proceder de otra forma.
  • Reestructura el conjunto de datos para que la fecha pase a ser una variable
  • Separa el código de provincia del nombre de provincia
  • Elimina la “x” inicial que ha añadido la función clean_names() y convierte el texto “de” en “-”
  • Convierte la fecha, que está en formato texto, en una variable de tipo fecha propiamente dicha
  • Convierte la variable población en tipo numérico (estaba en tipo texto)
library(readxl)
library(dplyr)
library(tidyr)
library(janitor)
library(lubridate)
library(ggplot2)
library(here)
datos <- readxl::read_xlsx("31304.xlsx", skip = 5)
datos_limpios <- datos %>% 
  janitor::row_to_names(row_number = 1) %>% 
  janitor::clean_names() %>% 
  dplyr::rename(provincia = na) %>% 
  dplyr::slice(4:55) %>% 
  tidyr::pivot_longer(starts_with("x"), names_to = "Fecha", values_to = "Poblacion") %>% 
  tidyr::separate(provincia, sep =" ", into=c("Codigo","Provincia"), extra = "merge") %>% 
  dplyr::mutate(Fecha = gsub("^x","", Fecha)) %>% 
  dplyr::mutate(Fecha = gsub("_de_","-", Fecha)) %>% 
  dplyr::mutate(Fecha = as.Date(Fecha, "%d-%B-%Y")) %>% 
  dplyr::mutate(Poblacion = as.integer(Poblacion))

Un rápido vistazo a los datos con ggplot() parece mostrar que los datos tienen la forma esperada.

ggplot(datos_limpios, aes(Fecha, Poblacion, group = Provincia)) +
  geom_line() +
  ggtitle("Población por provincias")


Más posts