-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtarea2.qmd
More file actions
309 lines (198 loc) · 11.7 KB
/
Copy pathtarea2.qmd
File metadata and controls
309 lines (198 loc) · 11.7 KB
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
---
title: "¿Qué pasa con la renta municipal en España?"
author:
- name: Nombre y apellidos
email: mail
- name: Nombre y apellidos
email: mail
- si hay más autores...
format:
html:
theme: superhero ## cambia el tema a tu gusto
highlight-style: ayu-mirage
self-contained: true
lang: es
logo: img/logos_finan.png
date: 04/25/2025
date-format: long
embed-resources: true
toc-title: Summary
toc: true
number-sections: true
preview-links: auto
code-link: true
code-fold: false
number-sections: true
execute:
echo: false
eval: true
output: true
include: true
freeze: auto
fig-height: 5
warning: false
comment: "#>"
code-line-numbers: true
code-copy: true
code-overflow: scroll
code-fold: true
---
# Planteamiento
Trabajas en una compañía privada que planea lanzar un producto de alta gama. Tu jefe te ha solicitado un informe sobre la renta municipal en España de los últimos años, ya que el CEO quiere expandir el mercado a ciertos segmentos de renta alta y necesita identificar áreas con potencial de negocio.
Tu objetivo es encontrar segmentos de mercado con capacidad adquisitiva para un producto de alta gama, por lo que es crucial analizar la variable renta e identificar dónde reside la población con mayores ingresos.
## Los datos
Trabajaremos con la **renta neta per cápita (en euros) por municipios**. Esta información proviene del *Atlas de distribución de renta de los hogares* del Instituto Nacional de Estadística y ha sido procesada para facilitar su análisis. Los datos se cargarán desde el archivo Excel `tarea2_renta.xlsx`.
Se ha realizado un análisis exploratorio inicial para limpiar los datos y analizar las variables de interés.
La descripción de las variables de renta es la siguiente: contamos con 6.424 registros de renta municipal de toda España, abarcando un período de 5 años, desde 2015 hasta 2019, con cada año representado en una columna. Al analizar la media y las cinco medidas de posición de las variables cuantitativas, detectamos una asimetría positiva, lo cual es común en distribuciones de rentas o salariales.
Además, se trabajará con un **objeto espacial**, `municipios`, que contiene la geometría de los municipios españoles. Este objeto está disponible en la librería `CDR`.
## Objetivo
Tu tarea consiste en **contar una historia** con la información que obtengas de estos datos, mejorar los gráficos incluidos en este archivo de Quarto y crear otros nuevos para presentar la información al jefe **de la manera más visual posible**. El resultado final debe ser claro y conciso. Elimina todo aquello que no sea necesario para el informe final (enunciados de ejercicios, comentarios, etc).
# 🆘 ¡No te preocupes! Te iremos guiando a lo largo del proceso 🆘
```{r bibliotecas}
#| code-summary: Carga de bibliotecas
#| echo: false
library(CDR) # datos auxiliares para cartografía (municipios)
library(readxl) # carga de datos desde Excel
library(tidyverse) # manipulación de datos
library(sf) # manejo de datos espaciales
library(patchwork) # combinación de gráficos
library(corrplot) # matriz de correlaciones
```
```{r datos}
#| code-summary: Carga de los datos
#| echo: false
renta <- as.data.frame(read_xlsx("./data/tarea2_renta.xlsx")) # Deberás especificar la ruta donde hayas guardado el archivo.
```
```{r resumen}
#| code-summary: Visualización previa y resumen de los datos (media y 5 números para variables cuantitativas)
#| eval: false
#| echo: false # En un informe no deberían aparecer, pero internamente siempre debemos "verle las tripas" a nuestros datos
head(renta)
str(renta)
summary(renta)
```
::: {#exr-1}
## 👨💻 ¿Puedes mejorar este histograma?
Modifica el siguiente chunk de código, reemplazando las partes señaladas por `_____` o `xxxxx` para obtener el resultado propuesto.
:::
```{r histograma-2019}
#| code-summary: Creación del histograma
ggplot(data = renta, aes(x = anyo2019)) +
geom_histogram() #30 bins por defecto
```
```{r histograma-tarea}
#| code-summary: Creación del histograma, tu turno.
#| eval: false # Una vez que hayas corregido el código, traslada esta línea al chunk llamado "histograma-2019" para que se muestre tu histograma mejorado en el informe en lugar del histograma del chunk "histograma-2019". Si lo consideras interesante, puedes realizar los cambios que desees y ajustarlo a tu gusto.
p_renta_2019 <- ggplot(renta, aes(anyo2019)) +
geom_xxxxxx(col = color_relleno,
fill = color_relleno,
bins = nclass.Sturges(renta$anyo2019)) +
geom_xxxxxx(aes(xintercept = mean(anyo2019)),
color = color_lineas,
linetype = "dashed",
linewidth = 1) +
geom_xxxxxx(aes(x = mean(anyo2019),
y = 100,
label = round(mean(anyo2019), 2)),
color = color_lineas) +
labs(title = "Distribución de la renta por municipios",
x = "Renta per cápita",
y = "Frecuencia") +
theme_xxxxxx()
p_renta_2019
```
::: {#exr-2}
## 👨💻 Función de densidad de la renta del año 2019
Como visualización alternativa se presenta igualmente la función de densidad de la renta. Tendrás que usar la función `geom_density()` dentro de un gráfico de ggplot, habiendo elegido previamente las variables adecuadas en el argumento `mapping = aes()` de la función `ggplot()`.
:::
```{r ejercicio2-tu-turno}
#| code-summary: Pon aquí tu código para el ejercicio 2
```
::: {#exr-3}
## 👨💻 Diagrama de cajas y de violín de la renta del año 2019
Deberás utilizar las funciones `geom_boxplot()` y `geom_violin()` dentro de un gráfico de `ggplot()`, eligiendo previamente las variables adecuadas en el argumento `mapping = aes()`.
Asigna el gráfico a un objeto (por ejemplo, llámalo `graf`). Luego, crea dos objetos usando un código similar a este: `caja <- graf + geom_boxplot()` y `violin <- graf + geom_violin()`.
Finalmente, presenta ambos gráficos juntos usando `caja + violin` en una sola línea, para que el paquete `patchwork` haga su magia.
La estructura del código sería la siguiente:
+ `graf <- ggplot()`
+ `caja <- graf + ggplot()`
+ `violin <- graf + ggplot()`
+ `caja + violin`
:::
```{r ejercicio3-tu-turno}
#| code-summary: pon aquí tu código para el ejercicio 3
```
::: {#exr-4}
## 👨💻 Evolución temporal de la renta neta municipal
Deberás utilizar la función `geom_line()` dentro de un gráfico de ggplot, eligiendo previamente las variables adecuadas en el argumento `mapping = aes()` de la función `ggplot()`. Para facilitarte las cosas, ya hemos calculado la mediana de cada año y hemos creado un `data frame` llamado `medianas`, con el cual podrás construir fácilmente el gráfico requerido. Aunque este gráfico es sencillo, no te conformes con un gráfico sin sustancia. Usa el color con elegancia, añade etiquetas en los ejes, un título impactante... todo lo que ya sabes hacer para mejorar la presentación.
:::
```{r ejercicio4-tu-turno}
#| code-summary: Pon a continuación de este código lo que necesites para completar el ejercicio 4
valor_medianas <- apply(renta[,2:6], 2, median)
medianas <- data.frame(anyo = 2015:2019, mediana = valor_medianas[5:1]) # le damos la vuelta a los valores de las medianas porque las columnas del objeto "renta" están en orden decreciente
```
::: {.callout-note}
## IMPORTANTE
Es evidente que existe una fuerte relación entre la renta de todos los años. Sin embargo, queríamos incluir este tipo de gráfico y la matriz de correlación en el ejercicio, ya que son muy comunes en nuestro ámbito de trabajo (docente, científico y divulgativo).
:::
::: {#exr-5}
## 👨💻 Gráficos de correlación
Deberás utilizar la función `geom_point()` y, si lo consideras interesante, puedes completar el gráfico con `geom_smooth()`, que añadirá una línea de tendencia con el intervalo de confianza integrado en la curva.
:::
```{r ejercicio5-tu-turno}
#| code-summary: pon aquí tu código para el ejercicio 5
```
::: {#exr-6}
## 👨💻 Matriz de correlación
Una matriz de correlación es extremadamente útil, especialmente cuando se trabaja con muchas variables, ya que permite identificar relaciones entre las variables explicativas. Esto puede ayudar a descartar algunas variables, reducir la dimensionalidad del problema y mejorar el rendimiento del modelo.
Te recomendamos utilizar la función `corrplot()` del paquete del mismo nombre, `corrplot`. Selecciona una configuración que se ajuste a tu estilo, ya que el paquete ofrece una amplia variedad de visualizaciones. Para obtener más información sobre las opciones disponibles, consulta la ayuda de la función ejecutando: `?corrplot`.
:::
::: {.callout-note}
## CUIDADO
Aunque es evidente, recuerda utilizar solo variables cuantitativas
:::
```{r ejercicio6-tu-turno}
#| code-summary: pon aquí tu código para el ejercicio 6
```
```{r dataset}
#| code-summary: Unión de los datos de renta (`renta`) con la capa geográfica municipal (municipios), obtenida del paquete `CDR`.
renta_municipal <- municipios |>
left_join(renta) |> # une datasets
dplyr::select(name, codigo_ine, anyo2015, anyo2016, anyo2017, anyo2018,
anyo2019) # selecciona las variables que nos interesan
```
::: {#exr-7}
## 👨💻 ¿Cómo modificarías este código para mejorar la visualización del mapa básico que hemos incluido?
El gráfico incluido tiende a uniformizar los municipios debido a la escala de colores utilizada.
Algunas ideas para mejorar la visualización:
+ Elige una escala adecuada: Considera usar escalas como `viridis` o `inferno`, e investiga si la dirección de la escala es adecuada. Prueba los tonos en orden inverso para ver cuál funciona mejor.
+ Añade un título adecuado: Incluye un título descriptivo y, si lo consideras útil, un subtítulo que aporte contexto adicional.
+ Estratifica la graduación de renta: Esta es una tarea más compleja. Diseña una escala discreta para la graduación de renta utilizando la función `classIntervals()` del paquete `classInt`, aplicando el método `Fisher-Jenks`.
:::
```{r ejercicio7-tu-turno}
#| code-summary: mejora la visualización de este mapa, cambia en esta chunk el código
ggplot(renta_municipal) +
geom_sf(aes(fill = anyo2019), color = NA) +
theme_minimal()
```
::: {#exr-8}
## 👨💻 ¿Quienes son los 20 municipios con mayor renta neta en España en 2019? Graficos de tipo `lollipop`
Construye un gráfico lollipop con la renta por municipios, usando todo lo aprendido en el curso (título, subtítulo, aspectos estéticos, simplicidad, elegancia, baja carga cognitiva, eficiencia, etc.)
Los gráficos de tipo `lollipop` pueden ser complejos, pero en ocasiones son muy efectivos, especialmente cuando se integran con otras representaciones.
Para hacerlo correctamente, ten en cuenta lo siguiente:
+ Orden descendente: El municipio con mayor renta debe aparecer en la parte superior, y el resto en orden descendente.
+ Dibujar líneas: Utiliza `geom_segment()`, especificando los valores inicial y final de cada segmento, tanto en `x` como en `y`, para dibujar las líneas.
+ Puntos finales: Usa `geom_point()` para los puntos finales.
+ Ordenar municipios: Para ordenar los municipios por la variable `anyo2019`, utiliza `reorder()` en el mapeo. Esta función requiere dos argumentos: el primero es la variable a ordenar (el nombre del municipio) y el segundo es la variable que ordena (la renta de 2019).
:::
```{r mayor-renta}
#| code-summary: Te facilitamos el dataframe de los municipios de mayor renta
municipios_mayor_renta <- renta_municipal |>
arrange(desc(anyo2019)) |>
slice(1:20) |>
dplyr::select(name, anyo2019) |>
st_drop_geometry()
```
```{r ejercicio8-tu-turno}
#| code-summary: pon aquí tu código para el ejercicio 8
```