Cargar datos de población del INE en R
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")