diff --git a/01_introduccion.Rmd b/01_introduccion.Rmd index fd2ebc2..0503a13 100644 --- a/01_introduccion.Rmd +++ b/01_introduccion.Rmd @@ -2,7 +2,7 @@ title: "INE con R: descargando datos del Instituto Nacional de Estadística desde R" subtitle: "Primera parte: Introducción" author: "Daniel Redondo-Sánchez - daniel.redondo.easp@juntadeandalucia.es" -date: "11-02-2019" +date: "13-06-2021" output: html_document: highlight: tango @@ -35,7 +35,7 @@ Dos enlaces nos serán muy útiles para comprender este generador, e incluso no * [Obtención de identificadores de objetos usando INEbase](https://www.ine.es/dyngs/DataLab/es/manual.html?cid=1259945947403). Permite reconocer el identificador de la operación estadística que se incluye en la URL. -### 1.2. Generar URL sabiendo número de tabla +### 1.2. Generar URL sabiendo el número de tabla Si queremos descargar información de una URL del tipo @@ -81,7 +81,7 @@ http://servicios.ine.es/wstempus/js/ES/DATOS_TABLA/t15/p417/a2017/l0/01007.px?ti ### 2.1. Primeros pasos Cargamos los paquetes necesarios: -```{r message=FALSE} +```{r message=FALSE, warning = FALSE} library(httr) library(rlist) library(dplyr) @@ -177,19 +177,23 @@ head(defunciones) ### 2.3. Ejemplo de uso -Con el data.frame obtenido, podemos trabajar. Por ejemplo: +Podemos hacer un gráfico con los datos descargados: -```{r} +```{r, warning = FALSE} library(ggplot2) -datos <- subset(defunciones, defunciones$codigo == "01-93 I-XXII.Todas las causas" & - defunciones$sexo != "Ambos sexos" & - ! defunciones$s_gest %in% c("Total", "No consta")) - -ggplot(datos, aes(x = s_gest, y = Valor, fill = sexo)) + - scale_fill_manual(values=c("darkblue", "deepskyblue")) + - geom_bar(stat = "identity", position = "dodge") + - ylab("Defunciones") + xlab("Semanas de gestación") + - ggtitle("Defunciones según semanas de gestación, por sexos") + - theme(legend.position="top") +defunciones %>% + filter( + codigo == "01-93 I-XXII.Todas las causas", + sexo != "Ambos sexos", + ! s_gest %in% c("Total", "No consta") + ) %>% + ggplot(aes(x = s_gest, y = Valor, fill = sexo)) + + scale_fill_manual(values = c("darkblue", "deepskyblue")) + + geom_bar(stat = "identity", position = "dodge") + + ylab("Defunciones") + + xlab("Semanas de gestación") + + ggtitle("Defunciones por sexos según semanas de gestación") + + theme_classic() + + theme(legend.position = "top") ``` \ No newline at end of file diff --git a/01_introduccion.html b/01_introduccion.html index 453411c..75d099f 100644 --- a/01_introduccion.html +++ b/01_introduccion.html @@ -1,11 +1,10 @@ - +
- @@ -15,1284 +14,58 @@Obtención de identificadores de objetos usando INEbase. Permite reconocer el identificador de la operación estadística que se incluye en la URL.
Si queremos descargar información de una URL del tipo
http://ine.es/jaxiT3/Tabla.htm?t=9687&L=0
que corresponde a “Población residente por fecha, sexo y edad”, podemos extraer de la URL el identificador de la tabla, que es 9687
, y podemos descargar la información en
Cargamos los paquetes necesarios:
- - +library(httr)
+library(rlist)
+library(dplyr)
+library(data.table)
<- "http://servicios.ine.es/wstempus/js/ES/DATOS_TABLA/t15/p417/a2017/l0/01007.px?tip=AM" url
Usamos la función GET
del paquete httr
, usando como único parámetro la URL obtenida en el paso anterior.
<- GET(url) defunciones_json
La variable status_code
indica el éxito (o no) de la petición realizada. Un código que empieza por 2, o 3, suele indicar que la petición ha sido exitosa. Si el status_code
comienza por 4, es que hay un problema en tu código (p.e. 404: la página no encuentra lo que solicitas), mientras que si comienza por 5, el problema está en la página web.
$status_code defunciones_json
## [1] 200
Podemos usar http_type
para conocer el tipo de información que hemos obtenido.
http_type(defunciones_json)
## [1] "application/json"
La información debe ser pre-procesada antes de poder ser usada. Vemos la información cruda:
- + defunciones_json
## Response [http://servicios.ine.es/wstempus/js/ES/DATOS_TABLA/t15/p417/a2017/l0/01007.px?tip=AM]
-## Date: 2019-10-23 10:02
+## Date: 2021-06-15 10:56
## Status: 200
## Content-Type: application/json;charset=UTF-8
-## Size: 1.48 MB
-## [{"Nombre":"01-93 I-XXII.Todas las causas, Ambos sexos, Total", "MetaDat...
-##
-, "Nombre":"01-93 I-XXII.Todas las causas", "Codigo":"0193ixxiitodaslas...
-##
-,
-##
-{"Variable":{"Nombre":"sexo", "Codigo":"sexo"}
-##
-, "Nombre":"Ambos sexos", "Codigo":"ambossexos"}
-##
-,
-##
-{"Variable":{"Nombre":"semanas de gestación", "Codigo":"semanasdegestac...
-##
-, "Nombre":"Total", "Codigo":"total"}
-##
-]
-##
-, "Data":[{"Valor":1274.0}
+## Size: 1.45 MB
+## [{"Nombre":"01-93 I-XXII.Todas las causas, Ambos sexos, Total", "MetaData":[{...
+## , "Nombre":"01-93 I-XXII.Todas las causas", "Codigo":"0193ixxiitodaslascausas"}
+## ,{"Variable":{"Nombre":"sexo", "Codigo":"sexo"}
+## , "Nombre":"Ambos sexos", "Codigo":"ambossexos"}
+## ,{"Variable":{"Nombre":"semanas de gestación", "Codigo":"semanasdegestacion"}
+## , "Nombre":"Total", "Codigo":"total"}
+## ]
+## , "Data":[{"Valor":1274.0}
+## ]
+## }
## ...
La función content
extrae el contenido de lo solicitado. Vemos las primeras dos componentes del contenido:
<- content(defunciones_json)
+ defunciones_contenido head(defunciones_contenido, 2)
## [[1]]
## [[1]]$Nombre
## [1] "01-93 I-XXII.Todas las causas, Ambos sexos, Total"
@@ -1793,27 +532,27 @@ 2.2. Pre-procesamiento
## [[2]]$Data[[1]]$Valor
## [1] 196
Ya podríamos acceder a algunos datos, como por ejemplo:
- +1]]$Nombre defunciones_contenido[[
## [1] "01-93 I-XXII.Todas las causas, Ambos sexos, Total"
-
+1]]$MetaData[[1]]$Codigo defunciones_contenido[[
## [1] "0193ixxiitodaslascausas"
-
+1]]$Data[[1]]$Valor defunciones_contenido[[
## [1] 1274
Pero esto no es lo ideal, así que seguimos procesando. Utilizaremos el paquete rlist
de manera iterativa para extraer los datos y metadatos de la información descargada, y formar así un data.frame.
n <- length(defunciones_contenido)
-
-for(i in 1:n){
- dato.i <- defunciones_contenido[[i]]
- defunciones.i <- list.select(dato.i$Data, Valor) %>% list.stack %>%
- cbind(codigo = dato.i$MetaData[[1]]$Codigo) %>%
- cbind(sexo = dato.i$MetaData[[2]]$Codigo) %>%
- cbind(s_gest = dato.i$MetaData[[3]]$Codigo)
- ifelse(i == 1,
- defunciones <- defunciones.i,
- defunciones <- rbindlist(list(defunciones, defunciones.i)))
-}
-
-head(defunciones)
<- length(defunciones_contenido)
+ n
+for(i in 1:n){
+<- defunciones_contenido[[i]]
+ dato.i <- list.select(dato.i$Data, Valor) %>% list.stack %>%
+ defunciones.i cbind(codigo = dato.i$MetaData[[1]]$Codigo) %>%
+ cbind(sexo = dato.i$MetaData[[2]]$Codigo) %>%
+ cbind(s_gest = dato.i$MetaData[[3]]$Codigo)
+ ifelse(i == 1,
+ <- defunciones.i,
+ defunciones <- rbindlist(list(defunciones, defunciones.i)))
+ defunciones
+ }
+head(defunciones)
## Valor codigo sexo s_gest
## 1: 1274 0193ixxiitodaslascausas ambossexos total
## 2: 196 0193ixxiitodaslascausas ambossexos menosde28semanas
@@ -1822,20 +561,20 @@ 2.2. Pre-procesamiento
## 5: 322 0193ixxiitodaslascausas ambossexos de37a41semanas
## 6: 0 0193ixxiitodaslascausas ambossexos 42semanasymas
También podríamos haber descargado las etiquetas de las variables, en lugar de los códigos:
-n <- length(defunciones_contenido)
-
-for(i in 1:n){
- dato.i <- defunciones_contenido[[i]]
- defunciones.i <- list.select(dato.i$Data, Valor) %>% list.stack %>%
- cbind(codigo = dato.i$MetaData[[1]]$Nombre) %>%
- cbind(sexo = dato.i$MetaData[[2]]$Nombre) %>%
- cbind(s_gest = dato.i$MetaData[[3]]$Nombre)
- ifelse(i == 1,
- defunciones <- defunciones.i,
- defunciones <- rbindlist(list(defunciones, defunciones.i)))
-}
-
-head(defunciones)
<- length(defunciones_contenido)
+ n
+for(i in 1:n){
+<- defunciones_contenido[[i]]
+ dato.i <- list.select(dato.i$Data, Valor) %>% list.stack %>%
+ defunciones.i cbind(codigo = dato.i$MetaData[[1]]$Nombre) %>%
+ cbind(sexo = dato.i$MetaData[[2]]$Nombre) %>%
+ cbind(s_gest = dato.i$MetaData[[3]]$Nombre)
+ ifelse(i == 1,
+ <- defunciones.i,
+ defunciones <- rbindlist(list(defunciones, defunciones.i)))
+ defunciones
+ }
+head(defunciones)
## Valor codigo sexo s_gest
## 1: 1274 01-93 I-XXII.Todas las causas Ambos sexos Total
## 2: 196 01-93 I-XXII.Todas las causas Ambos sexos Menos de 28 semanas
@@ -1846,20 +585,24 @@ 2.2. Pre-procesamiento
Con el data.frame obtenido, podemos trabajar. Por ejemplo:
-library(ggplot2)
-
-datos <- subset(defunciones, defunciones$codigo == "01-93 I-XXII.Todas las causas" &
- defunciones$sexo != "Ambos sexos" &
- ! defunciones$s_gest %in% c("Total", "No consta"))
-
-ggplot(datos, aes(x = s_gest, y = Valor, fill = sexo)) +
- scale_fill_manual(values=c("darkblue", "deepskyblue")) +
- geom_bar(stat = "identity", position = "dodge") +
- ylab("Defunciones") + xlab("Semanas de gestación") +
- ggtitle("Defunciones según semanas de gestación, por sexos") +
- theme(legend.position="top")
Podemos hacer un gráfico con los datos descargados:
+library(ggplot2)
+
+%>%
+ defunciones filter(
+ == "01-93 I-XXII.Todas las causas",
+ codigo != "Ambos sexos",
+ sexo ! s_gest %in% c("Total", "No consta")
+ %>%
+ ) ggplot(aes(x = s_gest, y = Valor, fill = sexo)) +
+ scale_fill_manual(values = c("darkblue", "deepskyblue")) +
+ geom_bar(stat = "identity", position = "dodge") +
+ ylab("Defunciones") +
+ xlab("Semanas de gestación") +
+ ggtitle("Defunciones por sexos según semanas de gestación") +
+ theme_classic() +
+ theme(legend.position = "top")
# Como la URL es:
-# http://ine.es/jaxiT3/Tabla.htm?t=9687&L=0,
-# ponemos el identificador 9678
-# Descargamos sin metadatos para que sea más rápido
-url <- "http://servicios.ine.es/wstempus/js/ES/DATOS_TABLA/9687?nult=5&tip=A"
-poblacion_json <- GET(url)
Parece que la descarga ha sido exitosa:
- +# Carga de paquetes
+library(httr)
+library(dplyr)
+library(rlist)
+library(data.table)
Se va a realizar una descarga de la población por provincias por edad simple de los últimos 6 periodos disponibles.
+# Como la URL es:
+# http://ine.es/jaxiT3/Tabla.htm?t=9687&L=0,
+# ponemos el identificador 9678
+# Descargamos sin metadatos para que sea más rápido
+<- "http://servicios.ine.es/wstempus/js/ES/DATOS_TABLA/9687?nult=6&tip=A"
+ url <- GET(url) poblacion_json
La descarga ha sido exitosa:
+$status_code poblacion_json
## [1] 200
-pero
- -## [1] "Petición en proceso. Actualice página pasados unos minutos."
-así que solicitamos la información hasta que es descargada con éxito:
-i <- 0
-while(is.null(content(poblacion_json)$status) == FALSE){
- i <- i + 1
- cat("Durmiendo...")
- Sys.sleep(5)
- cat(" Obteniendo información, puede tardar unos minutos... \n")
- poblacion_json <- GET(url)
- ifelse(is.null(content(poblacion_json)$status) == TRUE,
- print(paste0("Intento nº", i, ": Archivo descargado.")),
- print(paste0("Intento nº", i, ": ", content(poblacion_json)$status)))
-}
## Durmiendo... Obteniendo información, puede tardar unos minutos...
-## [1] "Intento nº1: Petición en proceso. Actualice página pasados unos minutos."
-## Durmiendo... Obteniendo información, puede tardar unos minutos...
-## [1] "Intento nº2: Petición en proceso. Actualice página pasados unos minutos."
-## Durmiendo... Obteniendo información, puede tardar unos minutos...
-## [1] "Intento nº3: Archivo descargado."
Extraemos la información necesaria (sexo, edad, provincia) que se encuentran dentro de un mismo campo. Usamos strsplit
para dividir la información y seleccionar la componente necesaria.
poblacion_contenido <- content(poblacion_json)
-n <- length(poblacion_contenido)
-
-for(i in 1:n){
- # Medidor de proceso
- # if(i %% 1000 == 0) print(paste0(i, "/", n))
- dato.i <- poblacion_contenido[[i]]$Data
- division <- strsplit(paste(poblacion_contenido[[i]]$Nombre), split = ". ", fixed = T)[[1]]
- poblacion.i <- dato.i %>% list.select(T3_Periodo, Anyo, Valor) %>% list.stack %>%
- cbind(edad = division[1]) %>%
- cbind(sexo = division[3]) %>%
- cbind(prov = division[2])
- ifelse(i == 1, poblacion <- poblacion.i, poblacion <- rbindlist(list(poblacion, poblacion.i)))
-}
<- content(poblacion_json)
+ poblacion_contenido <- length(poblacion_contenido)
+ n
+for(i in 1:n){
+<- poblacion_contenido[[i]]$Data
+ dato.i <- strsplit(paste(poblacion_contenido[[i]]$Nombre), split = ". ", fixed = T)[[1]]
+ division <- dato.i %>% list.select(T3_Periodo, Anyo, Valor) %>% list.stack %>%
+ poblacion.i cbind(edad = division[1]) %>%
+ cbind(prov = division[2]) %>%
+ cbind(sexo = division[3])
+ ifelse(i == 1, poblacion <- poblacion.i, poblacion <- rbindlist(list(poblacion, poblacion.i)))
+ }
Podemos ver las tablas de frecuencias de los datos:
+table(poblacion$edad)
##
-## Total Nacional Todas las edades 0 años 1 año
-## 1515 780 780 780
-## 2 años 3 años 4 años 5 años
-## 780 780 780 780
-## 6 años 7 años 8 años 9 años
-## 780 780 780 780
-## 10 años 11 años 12 años 13 años
-## 780 780 780 780
-## 14 años 15 años 16 años 17 años
-## 780 780 780 780
-## 18 años 19 años 20 años 21 años
-## 780 780 780 780
+## 0 años 1 año 10 años 100 y más años
+## 936 936 936 954
+## 11 años 12 años 13 años 14 años
+## 936 936 936 936
+## 15 años 16 años 17 años 18 años
+## 936 936 936 936
+## 19 años 2 años 20 años 21 años
+## 936 936 936 936
## 22 años 23 años 24 años 25 años
-## 780 780 780 780
+## 936 936 936 936
## 26 años 27 años 28 años 29 años
-## 780 780 780 780
-## 30 años 31 años 32 años 33 años
-## 780 780 780 780
-## 34 años 35 años 36 años 37 años
-## 780 780 780 780
-## 38 años 39 años 40 años 41 años
-## 780 780 780 780
-## 42 años 43 años 44 años 45 años
-## 780 780 780 780
-## 46 años 47 años 48 años 49 años
-## 780 780 780 780
-## 50 años 51 años 52 años 53 años
-## 780 780 780 780
-## 54 años 55 años 56 años 57 años
-## 780 780 780 780
-## 58 años 59 años 60 años 61 años
-## 780 780 780 780
+## 936 936 936 936
+## 3 años 30 años 31 años 32 años
+## 936 936 936 936
+## 33 años 34 años 35 años 36 años
+## 936 936 936 936
+## 37 años 38 años 39 años 4 años
+## 936 936 936 936
+## 40 años 41 años 42 años 43 años
+## 936 936 936 936
+## 44 años 45 años 46 años 47 años
+## 936 936 936 936
+## 48 años 49 años 5 años 50 años
+## 936 936 936 936
+## 51 años 52 años 53 años 54 años
+## 936 936 936 936
+## 55 años 56 años 57 años 58 años
+## 936 936 936 936
+## 59 años 6 años 60 años 61 años
+## 936 936 936 936
## 62 años 63 años 64 años 65 años
-## 780 780 780 780
+## 936 936 936 936
## 66 años 67 años 68 años 69 años
-## 780 780 780 780
-## 70 años 71 años 72 años 73 años
-## 780 780 780 780
-## 74 años 75 años 76 años 77 años
-## 780 780 780 780
-## 78 años 79 años 80 años 81 años
-## 780 780 780 780
-## 82 años 83 años 84 años 85 años
-## 780 780 780 780
-## 86 años 87 años 88 años 89 años
-## 780 780 780 780
-## 90 años 91 años 92 años 93 años
-## 780 780 780 780
-## 94 años 95 años 96 años 97 años
-## 780 780 780 780
-## 98 años 99 años 100 y más años
-## 780 780 795
-
+## 936 936 936 936
+## 7 años 70 años 71 años 72 años
+## 936 936 936 936
+## 73 años 74 años 75 años 76 años
+## 936 936 936 936
+## 77 años 78 años 79 años 8 años
+## 936 936 936 936
+## 80 años 81 años 82 años 83 años
+## 936 936 936 936
+## 84 años 85 años 86 años 87 años
+## 936 936 936 936
+## 88 años 89 años 9 años 90 años
+## 936 936 936 936
+## 91 años 92 años 93 años 94 años
+## 936 936 936 936
+## 95 años 96 años 97 años 98 años
+## 936 936 936 936
+## 99 años Todas las edades Total Nacional
+## 936 936 1818
+table(poblacion$sexo)
##
-## Total Hombres Mujeres
-## 27030 27030 27030
-
+## Hombres Mujeres Total
+## 32436 32436 32436
+table(poblacion$prov)
##
-## Todas las edades Albacete Alicante/Alacant
-## 15 1530 1530
-## Almería Araba/Álava Asturias
-## 1530 1530 1530
-## Ávila Badajoz Balears, Illes
-## 1530 1530 1530
-## Barcelona Bizkaia Burgos
-## 1530 1530 1530
-## Cáceres Cádiz Cantabria
-## 1530 1530 1530
-## Castellón/Castelló Ciudad Real Córdoba
-## 1530 1530 1530
-## Coruña, A Cuenca Gipuzkoa
-## 1530 1530 1530
-## Girona Granada Guadalajara
-## 1530 1530 1530
-## Huelva Huesca Jaén
-## 1530 1530 1530
-## León Lleida Lugo
-## 1530 1530 1530
-## Madrid Málaga Murcia
-## 1530 1530 1530
-## Navarra Ourense Palencia
-## 1530 1530 1530
-## Palmas, Las Pontevedra Rioja, La
-## 1530 1530 1530
-## Salamanca Santa Cruz de Tenerife Segovia
-## 1530 1530 1530
-## Sevilla Soria Tarragona
-## 1530 1530 1530
-## Teruel Toledo Valencia/València
-## 1530 1530 1530
-## Valladolid Zamora Zaragoza
-## 1530 1530 1530
-## Ceuta Melilla 0 años
-## 1530 1530 15
-## 1 año 2 años 3 años
-## 15 15 15
-## 4 años 5 años 6 años
-## 15 15 15
-## 7 años 8 años 9 años
-## 15 15 15
-## 10 años 11 años 12 años
-## 15 15 15
-## 13 años 14 años 15 años
-## 15 15 15
-## 16 años 17 años 18 años
-## 15 15 15
-## 19 años 20 años 21 años
-## 15 15 15
+## 0 años 1 año 10 años
+## 18 18 18
+## 11 años 12 años 13 años
+## 18 18 18
+## 14 años 15 años 16 años
+## 18 18 18
+## 17 años 18 años 19 años
+## 18 18 18
+## 2 años 20 años 21 años
+## 18 18 18
## 22 años 23 años 24 años
-## 15 15 15
+## 18 18 18
## 25 años 26 años 27 años
-## 15 15 15
-## 28 años 29 años 30 años
-## 15 15 15
-## 31 años 32 años 33 años
-## 15 15 15
-## 34 años 35 años 36 años
-## 15 15 15
-## 37 años 38 años 39 años
-## 15 15 15
-## 40 años 41 años 42 años
-## 15 15 15
-## 43 años 44 años 45 años
-## 15 15 15
-## 46 años 47 años 48 años
-## 15 15 15
-## 49 años 50 años 51 años
-## 15 15 15
+## 18 18 18
+## 28 años 29 años 3 años
+## 18 18 18
+## 30 años 31 años 32 años
+## 18 18 18
+## 33 años 34 años 35 años
+## 18 18 18
+## 36 años 37 años 38 años
+## 18 18 18
+## 39 años 4 años 40 años
+## 18 18 18
+## 41 años 42 años 43 años
+## 18 18 18
+## 44 años 45 años 46 años
+## 18 18 18
+## 47 años 48 años 49 años
+## 18 18 18
+## 5 años 50 años 51 años
+## 18 18 18
## 52 años 53 años 54 años
-## 15 15 15
+## 18 18 18
## 55 años 56 años 57 años
-## 15 15 15
-## 58 años 59 años 60 años
-## 15 15 15
-## 61 años 62 años 63 años
-## 15 15 15
-## 64 años 65 años 66 años
-## 15 15 15
-## 67 años 68 años 69 años
-## 15 15 15
-## 70 años 71 años 72 años
-## 15 15 15
-## 73 años 74 años 75 años
-## 15 15 15
-## 76 años 77 años 78 años
-## 15 15 15
-## 79 años 80 años 81 años
-## 15 15 15
+## 18 18 18
+## 58 años 59 años 6 años
+## 18 18 18
+## 60 años 61 años 62 años
+## 18 18 18
+## 63 años 64 años 65 años
+## 18 18 18
+## 66 años 67 años 68 años
+## 18 18 18
+## 69 años 7 años 70 años
+## 18 18 18
+## 71 años 72 años 73 años
+## 18 18 18
+## 74 años 75 años 76 años
+## 18 18 18
+## 77 años 78 años 79 años
+## 18 18 18
+## 8 años 80 años 81 años
+## 18 18 18
## 82 años 83 años 84 años
-## 15 15 15
+## 18 18 18
## 85 años 86 años 87 años
-## 15 15 15
-## 88 años 89 años 90 años
-## 15 15 15
-## 91 años 92 años 93 años
-## 15 15 15
-## 94 años 95 años 96 años
-## 15 15 15
-## 97 años 98 años 99 años
-## 15 15 15
-## Total Nacional
-## 15
-
+## 18 18 18
+## 88 años 89 años 9 años
+## 18 18 18
+## 90 años 91 años 92 años
+## 18 18 18
+## 93 años 94 años 95 años
+## 18 18 18
+## 96 años 97 años 98 años
+## 18 18 18
+## 99 años Albacete Alicante/Alacant
+## 18 1836 1836
+## Almería Araba/Álava Asturias
+## 1836 1836 1836
+## Ávila Badajoz Balears, Illes
+## 1836 1836 1836
+## Barcelona Bizkaia Burgos
+## 1836 1836 1836
+## Cáceres Cádiz Cantabria
+## 1836 1836 1836
+## Castellón/Castelló Ceuta Ciudad Real
+## 1836 1836 1836
+## Córdoba Coruña, A Cuenca
+## 1836 1836 1836
+## Gipuzkoa Girona Granada
+## 1836 1836 1836
+## Guadalajara Huelva Huesca
+## 1836 1836 1836
+## Jaén León Lleida
+## 1836 1836 1836
+## Lugo Madrid Málaga
+## 1836 1836 1836
+## Melilla Murcia Navarra
+## 1836 1836 1836
+## Ourense Palencia Palmas, Las
+## 1836 1836 1836
+## Pontevedra Rioja, La Salamanca
+## 1836 1836 1836
+## Santa Cruz de Tenerife Segovia Sevilla
+## 1836 1836 1836
+## Soria Tarragona Teruel
+## 1836 1836 1836
+## Todas las edades Toledo Total Nacional
+## 18 1836 18
+## Valencia/València Valladolid Zamora
+## 1836 1836 1836
+## Zaragoza
+## 1836
+table(poblacion$Anyo, poblacion$T3_Periodo)
##
-## 1 de enero de 1 de julio de
-## 2017 16218 16218
-## 2018 16218 16218
-## 2019 16218 0
+## 1 de enero de 1 de julio de
+## 2018 16218 16218
+## 2019 16218 16218
+## 2020 16218 16218
Hemos observado que hay un error en los datos que hace que, a veces, cuando prov es “Total Nacional”, aparece la edad en el campo prov y la provincia en el campo edad. Lo arreglamos.
-poblacion$prov <- as.character(poblacion$prov)
-poblacion$edad <- as.character(poblacion$edad)
-
-# m = n * número de periodos añadidos, se desdobla la lista
-m <- nrow(poblacion)
-m
## [1] 81090
-for(i in 1:m){
- if(poblacion$edad[[i]] == "Total Nacional"){
- poblacion$edad[[i]] = poblacion$prov[[i]]
- poblacion$prov[[i]] = "Total Nacional"
- }
-}
-
-# Trabajamos con la edad (500 será nuestro código para el total)
-for(i in 1:m){
- poblacion$edad[[i]] <- strsplit(poblacion$edad[[i]], " ")[[1]][1]
- if(poblacion$edad[[i]] == "Todas") poblacion$edad[[i]] <- "500"
-}
-
-poblacion$edad <- as.numeric(poblacion$edad)
$prov <- as.character(poblacion$prov)
+ poblacion$edad <- as.character(poblacion$edad)
+ poblacion
+# m = n * número de periodos añadidos, se desdobla la lista
+<- nrow(poblacion)
+ m
+for(i in 1:m){
+if(poblacion$edad[[i]] == "Total Nacional"){
+ $edad[[i]] = poblacion$prov[[i]]
+ poblacion$prov[[i]] = "Total Nacional"
+ poblacion
+ } }
Preprocesamos también la edad.
+for(i in 1:m){
+# Quitamos la palabra "años"
+ $edad[[i]] <- strsplit(poblacion$edad[[i]], " ")[[1]][1]
+ poblacion# El código 500 será el total de las edades
+ if(poblacion$edad[[i]] == "Todas") poblacion$edad[[i]] <- "500"
+
+ }
+$edad <- as.numeric(poblacion$edad) poblacion
Los datos están listos para usarse.
+# Tabla de frecuencias de los datos
+table(poblacion$edad)
##
-## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
-## 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795
-## 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
-## 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795
-## 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
-## 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795
-## 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
-## 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795
-## 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
-## 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795
-## 90 91 92 93 94 95 96 97 98 99 100 500
-## 795 795 795 795 795 795 795 795 795 795 795 795
-
+## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+## 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954
+## 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
+## 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954
+## 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
+## 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954
+## 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
+## 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954
+## 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
+## 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954 954
+## 100 500
+## 954 954
+table(poblacion$sexo)
##
-## Total Hombres Mujeres
-## 27030 27030 27030
-
+## Hombres Mujeres Total
+## 32436 32436 32436
+table(poblacion$prov)
##
## Albacete Alicante/Alacant Almería
-## 1530 1530 1530
+## 1836 1836 1836
## Araba/Álava Asturias Ávila
-## 1530 1530 1530
+## 1836 1836 1836
## Badajoz Balears, Illes Barcelona
-## 1530 1530 1530
+## 1836 1836 1836
## Bizkaia Burgos Cáceres
-## 1530 1530 1530
+## 1836 1836 1836
## Cádiz Cantabria Castellón/Castelló
-## 1530 1530 1530
+## 1836 1836 1836
## Ceuta Ciudad Real Córdoba
-## 1530 1530 1530
+## 1836 1836 1836
## Coruña, A Cuenca Gipuzkoa
-## 1530 1530 1530
+## 1836 1836 1836
## Girona Granada Guadalajara
-## 1530 1530 1530
+## 1836 1836 1836
## Huelva Huesca Jaén
-## 1530 1530 1530
+## 1836 1836 1836
## León Lleida Lugo
-## 1530 1530 1530
+## 1836 1836 1836
## Madrid Málaga Melilla
-## 1530 1530 1530
+## 1836 1836 1836
## Murcia Navarra Ourense
-## 1530 1530 1530
+## 1836 1836 1836
## Palencia Palmas, Las Pontevedra
-## 1530 1530 1530
+## 1836 1836 1836
## Rioja, La Salamanca Santa Cruz de Tenerife
-## 1530 1530 1530
+## 1836 1836 1836
## Segovia Sevilla Soria
-## 1530 1530 1530
+## 1836 1836 1836
## Tarragona Teruel Toledo
-## 1530 1530 1530
+## 1836 1836 1836
## Total Nacional Valencia/València Valladolid
-## 1530 1530 1530
+## 1836 1836 1836
## Zamora Zaragoza
-## 1530 1530
-
+## 1836 1836
+table(poblacion$Anyo, poblacion$T3_Periodo)
##
-## 1 de enero de 1 de julio de
-## 2017 16218 16218
-## 2018 16218 16218
-## 2019 16218 0
+## 1 de enero de 1 de julio de
+## 2018 16218 16218
+## 2019 16218 16218
+## 2020 16218 16218
datos <- subset(poblacion, poblacion$edad != 500 & poblacion$prov == "Granada" & poblacion$sexo != "Total")
-
-library(ggplot2)
-qplot(edad, Valor, col = sexo, data = datos, main = "Población por edad simple, por sexos. Varios periodos, Granada.",
- facets = Anyo~T3_Periodo, ylim = c(0, max(datos$Valor)))
library(ggplot2)
+
+<- poblacion %>%
+ datos filter(edad != 500 & prov == "Granada" & sexo != "Total")
+
+qplot(edad, Valor, col = sexo, data = datos,
+main = "Población por edad simple, por sexos. Varios periodos, Granada.",
+ facets = Anyo ~ T3_Periodo, ylim = c(0, max(datos$Valor)))