-
Notifications
You must be signed in to change notification settings - Fork 8
/
01_introduccion.Rmd
199 lines (141 loc) · 6.49 KB
/
01_introduccion.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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
---
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: "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: console
---
**Con este documento vamos a aprender a descargar información del Instituto Nacional de Estadística (INE) usando R.**
## 1. Obtención de URL
El primer objetivo será el de obtener, o crear, una URL de la cual descargar los datos deseados.
### 1.1. ¿Qué es el generador de URL JSON del INE?
JSON (JavaScript Object Notation) es un formato de texto, que podremos adaptar
Para descargar datos directamente del INE podemos hacer uso del [generador de URLs JSON](https://www.ine.es/dyngs/DataLab/manual.html?cid=66), que genera una dirección URL desde la que se puede acceder a estadísticas determinadas, en formato `JSON`.
Dos enlaces nos serán muy útiles para comprender este generador, e incluso no tener que depender de él.
* [Definición de URLs](https://www.ine.es/dyngs/DataLab/manual.html?cid=47). Nos permite comprender los distintos parámetros de la URL.
* [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 el número de tabla
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
```{}
http://servicios.ine.es/wstempus/js/ES/DATOS_TABLA/9687?nult=2&tip=AM
```
El parámetro `nult` indica que nos proporcione los n últimos datos, mientras que `tip` indica el tipo de descarga (A = amigable, M = metadatos, AM = amigable + metadatos).
### 1.3. Generar URL sabiendo que es un fichero del tipo PcAxis
Por ejemplo, si queremos descargar información de mortalidad,
```{}
http://ine.es/jaxi/Tabla.htm?path=/t15/p417/a2017/l0/&file=01007.px&L=0
```
es la URL de defunciones fetales tardías por causas (lista perinatal), sexo y semanas de gestación, dentro de defunciones según la Causa de Muerte 2017.
En este caso, podemos ver un `.px` dentro de la URL, lo que indica que en última instancia estamos trabajando con un fichero PcAxis, el formato que usa el INE para editar y publicar sus datos.
El identificador de la tabla se creará usando la parte de la URL `path=/t15/p417/a2017/l0/&file=01007.px` y extrayendo `path=` y `&file=`:
```{}
/t15/p417/a2017/l0/01007.px
```
La URL deseada será entonces:
```{}
http://servicios.ine.es/wstempus/js/ES/DATOS_TABLA/t15/p417/a2017/l0/01007.px?tip=AM
```
## 2. Primera descarga
### 2.1. Primeros pasos
Cargamos los paquetes necesarios:
```{r message=FALSE, warning = FALSE}
library(httr)
library(rlist)
library(dplyr)
library(data.table)
```
```{r}
url <- "http://servicios.ine.es/wstempus/js/ES/DATOS_TABLA/t15/p417/a2017/l0/01007.px?tip=AM"
```
Usamos la función `GET` del paquete `httr`, usando como único parámetro la URL obtenida en el paso anterior.
```{r peticion}
defunciones_json <- GET(url)
```
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.
```{r}
defunciones_json$status_code
```
Podemos usar `http_type` para conocer el tipo de información que hemos obtenido.
```{r}
http_type(defunciones_json)
```
### 2.2. Pre-procesamiento
La información debe ser pre-procesada antes de poder ser usada. Vemos la información cruda:
```{r}
defunciones_json
```
La función `content` extrae el contenido de lo solicitado. Vemos las primeras dos componentes del contenido:
```{r}
defunciones_contenido <- content(defunciones_json)
head(defunciones_contenido, 2)
```
Ya podríamos acceder a algunos datos, como por ejemplo:
```{r}
defunciones_contenido[[1]]$Nombre
defunciones_contenido[[1]]$MetaData[[1]]$Codigo
defunciones_contenido[[1]]$Data[[1]]$Valor
```
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.
```{r}
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)
```
También podríamos haber descargado las etiquetas de las variables, en lugar de los códigos:
```{r}
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)
```
### 2.3. Ejemplo de uso
Podemos hacer un gráfico con los datos descargados:
```{r, warning = FALSE}
library(ggplot2)
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")
```