-
Notifications
You must be signed in to change notification settings - Fork 8
/
02_descarga_avanzada.Rmd
125 lines (101 loc) · 3.49 KB
/
02_descarga_avanzada.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
---
title: "INE con R: descargando datos del Instituto Nacional de Estadística desde R"
subtitle: "Segunda parte: Descarga avanzada. Población por provincias, por edad simple"
author: "Daniel Redondo-Sánchez"
date: "13-06-2021"
output:
html_document:
highlight: tango
theme: readable
toc: yes
toc_float:
collapsed: no
smooth_scroll: no
pdf_document:
toc: yes
editor_options:
chunk_output_type: inline
---
# 1. Descarga de información
```{r message=FALSE, warning = FALSE}
# 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. La descarga puede ser lenta.
```{r}
# 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=6&tip=A"
poblacion_json <- GET(url)
```
La descarga ha sido exitosa:
```{r}
poblacion_json$status_code
```
# 2. Procesamiento
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.
```{r ciclo procesamiento}
poblacion_contenido <- content(poblacion_json)
n <- length(poblacion_contenido)
for(i in 1: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(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:
```{r}
table(poblacion$edad)
table(poblacion$sexo)
table(poblacion$prov)
table(poblacion$Anyo, poblacion$T3_Periodo)
```
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.
```{r ciclo arreglo}
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)
for(i in 1:m){
if(poblacion$edad[[i]] == "Total Nacional"){
poblacion$edad[[i]] = poblacion$prov[[i]]
poblacion$prov[[i]] = "Total Nacional"
}
}
```
Preprocesamos también la edad.
```{r}
for(i in 1:m){
# Quitamos la palabra "años"
poblacion$edad[[i]] <- strsplit(poblacion$edad[[i]], " ")[[1]][1]
# El código 500 será el total de las edades
if(poblacion$edad[[i]] == "Todas") poblacion$edad[[i]] <- "500"
}
poblacion$edad <- as.numeric(poblacion$edad)
```
Los datos están listos para usarse.
```{r}
# Tabla de frecuencias de los datos
table(poblacion$edad)
table(poblacion$sexo)
table(poblacion$prov)
table(poblacion$Anyo, poblacion$T3_Periodo)
```
# 3. Ejemplo de uso
```{r grafico final, warning = FALSE}
library(ggplot2)
datos <- poblacion %>%
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)))
```