Para asegurar su correcta visualización lo públique en Rpubs Aquí
library(tidyverse)
library(gt)
library(plotly) # para gráficos interactivos
library(scales) # Para etiquetas con formato
library(treemapify) # para treemaps
library(ggrepel) # para que no se solapen las etiquetas
library(wordcloud2) # para visualizar nube de palabras.
Opción 2: Registro Nacional de Barrios Populares (ReNaBaP) en Argentina
renabap <- read.csv("data/renabap-datos-barrios-csv.csv", stringsAsFactors = TRUE)
# Creamos renabap_modif reemplazando el nombre Ciudad Autónoma de Buenos Aires por CABA para que se vea mejor como etiqueta
renabap_modif <- renabap %>%
mutate(
provincia = as.character(provincia), # primero lo paso a texto
provincia = ifelse(provincia == "Ciudad Autónoma de Buenos Aires", "CABA", provincia),
provincia = factor(provincia) # lo devuelvo a factor (si lo necesitas como factor)
)
#dim(renabap)
#colnames(renabap)
#summary(renabap_modif)
head(renabap_modif)
## id_renabap nombre_barrio provincia departamento localidad
## 1 1 Monterrey I Buenos Aires Pilar Presidente Derqui
## 2 2 Malvinas II Buenos Aires La Plata José Melchor Romero
## 3 3 Ferroviario Buenos Aires La Plata Angel Etcheverry
## 4 4 La Favelita Buenos Aires La Plata Tolosa
## 5 5 Casaca Buenos Aires La Plata City Bell
## 6 6 La Güemes Buenos Aires La Plata Manuel B. Gonnet
## cantidad_viviendas_aproximadas cantidad_familias_aproximada
## 1 40 44
## 2 290 319
## 3 133 146
## 4 122 134
## 5 20 22
## 6 12 13
## decada_de_creacion anio_de_creacion
## 1 Década 1990 NA
## 2 Década 1990 NA
## 3 Década 2000 NA
## 4 Década 1970 NA
## 5 Década 2000 NA
## 6 Década 1970 NA
## energia_electrica
## 1 Conexión regular a la red con medidor prepago
## 2 Conexión irregular a la red
## 3 Conexión irregular a la red
## 4 Conexión irregular a la red
## 5 Conexión irregular a la red
## 6 Conexión irregular a la red
## efluentes_cloacales
## 1 Desagüe a cámara séptica y pozo ciego
## 2 Desagüe a cámara séptica y pozo ciego
## 3 Desagüe sólo a pozo negro/ciego u hoyo
## 4 Desagüe sólo a pozo negro/ciego u hoyo
## 5 Desagüe a cámara séptica y pozo ciego
## 6 Desagüe sólo a pozo negro/ciego u hoyo
## agua_corriente cocina calefaccion
## 1 Bomba de agua de pozo domiciliaria Gas en garrafa Sin Datos
## 2 Conexión irregular a la red de agua Gas en garrafa Leña o carbón
## 3 Conexión formal a la red de agua con factura Gas en garrafa Leña o carbón
## 4 Conexión irregular a la red de agua Gas en garrafa Energía eléctrica
## 5 Bomba de agua de pozo domiciliaria Gas en garrafa Sin Datos
## 6 Conexión irregular a la red de agua Gas en garrafa Energía eléctrica
## titulo_propiedad clasificacion_barrio superficie_m2
## 1 NO Asentamiento 11674
## 2 NO Asentamiento 98093
## 3 NO Asentamiento 75887
## 4 NO Asentamiento 36889
## 5 NO Asentamiento 25768
## 6 NO Asentamiento 3424
ggplot() +
geom_histogram(data = renabap_modif, aes(x = cantidad_viviendas_aproximadas),
color = "black",
fill = "#FFD700",
binwidth = 75) +
scale_y_continuous(
limits = c(0, 2400),
breaks = seq(0, 2400, by = 200)) +
labs(title = "Gráfico 1: Distribución de la cantidad de viviendas por barrio",
x = "Cantidad de viviendas aproximadas",
y = "Frecuencia") + # En ese eje vemos cuántos barrios tienen esa cantidad de viviendas
theme_light()
ggplot() +
geom_histogram(
data = renabap_modif %>% filter(cantidad_viviendas_aproximadas <= 1000), # <-- recorte a 1000 viviendas
aes(x = cantidad_viviendas_aproximadas),
color = "black",
fill = "#FFD700",
binwidth = 50
) +
labs(
title = "Gráfico 2: Distribución de la cantidad de viviendas por barrio (< 1,000 viviendas)",
x = "Cantidad de viviendas aproximadas",
y = "Frecuencia",
caption = "Fuente: RENABAP (2024)"
) +
scale_x_continuous(labels = comma, limits = c(0, 1000)) + # eje X con límite y formato legible
scale_y_continuous(breaks = seq(0, 3000, by = 250)) + # eje Y más detallado
theme_light()
Agrupo los datos por provincia y luego la cantidad total de viviendas, como proxy del numero de barrios, y se ordena de mayor a menor.
library(dplyr)
# Agrupamos por provincia y departamento (para no mezclar capitales)
barriosxprovincia <- renabap_modif %>%
group_by(provincia, departamento) %>%
summarise(barrios = sum(cantidad_viviendas_aproximadas, na.rm = TRUE)) %>%
ungroup()
library(scales)
ggplot() +
geom_histogram(
data = renabap_modif %>% filter(superficie_m2 < 500000), #Para que se observe mejor el gráfico recortamos a superifices menores a 500 mil m2.
aes(x = superficie_m2),
color = "black",
fill = "orange",
binwidth = 5000
) +
labs(
title = "Gráfico 3: Distribución de la superficie de los barrios (< 500.000 m²)",
x = "Superficie (m²)",
y = "Frecuencia",
caption = "Fuente: RENABAP (2024)"
) +
scale_x_continuous(labels = comma) + # Eje X en formato legible
theme_minimal() # esto nos da un estilo mas limpio, sin elementos innecesarios que distraigan.
# Agrupamos otra vez solo por provincia (sumando todos sus departamentos)
barriosxprovincia_total <- barriosxprovincia %>%
group_by(provincia) %>%
summarise(total_barrios = sum(barrios, na.rm = TRUE)) %>%
arrange(desc(total_barrios))
# Para que pueda verse las etiquetas de provincia en el eje x se tiene que convertir de factor a carácter nuevamente a provincia
barriosxprovincia_total <- barriosxprovincia_total %>%
mutate(provincia = as.character(provincia))
library(scales)
ggplot() +
geom_bar(
data = barriosxprovincia_total,
aes(x = reorder(provincia, total_barrios), y = total_barrios), # para Ordenar las barras según el total de viviendas, de mayor a menor
stat = "identity", # para asegurarnos que las barras usen los valores reales "total_barrios"
fill = "#8B795E"
) +
coord_flip() + # esto invierte los ejes para que las provincias queden en el eje Y (vertical) y las barras se vean horizontales.
labs(
title = "Gráfico 4: Provincias con mayor número de viviendas (barrios populares)",
x = "Provincia",
y = "Total de viviendas (en miles)",
caption = "Fuente: RENABAP (2024)"
) +
scale_y_continuous(
labels = label_comma(scale = 1/1000),
breaks = seq(0, 500000, by = 100000)
) +
theme_minimal() + # esto nos da un estilo mas limpio, sin elementos innecesarios que distraigan.
theme(
plot.title = element_text(hjust = 0, size = 12, face = "bold"),
axis.text.y = element_text(size = 10),
axis.text.x = element_text(size = 10)
)
head(barriosxprovincia_total)
## # A tibble: 6 × 2
## provincia total_barrios
## <chr> <int>
## 1 Buenos Aires 535133
## 2 Santa Fe 84306
## 3 CABA 73195
## 4 Misiones 52995
## 5 Chaco 50711
## 6 Tucumán 43608
#FAMILIAS
# Agrupo por familias viviendo en barrios
familiaxprovincia <- renabap_modif %>%
group_by(provincia, departamento) %>%
summarise(familias = sum(cantidad_familias_aproximada, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'provincia'. You can override using the
## `.groups` argument.
familiaxprovincia
## # A tibble: 375 × 3
## provincia departamento familias
## <fct> <fct> <int>
## 1 Buenos Aires 25 de mayo 633
## 2 Buenos Aires 9 de julio 402
## 3 Buenos Aires Almirante Brown 21700
## 4 Buenos Aires Arrecifes 353
## 5 Buenos Aires Avellaneda 11881
## 6 Buenos Aires Azul 544
## 7 Buenos Aires Bahía Blanca 6574
## 8 Buenos Aires Balcarce 117
## 9 Buenos Aires Baradero 835
## 10 Buenos Aires Berazategui 1723
## # ℹ 365 more rows
familiaxprovincia_total <- familiaxprovincia %>%
group_by(provincia) %>%
summarise(total_familias = sum(familias, na.rm = TRUE)) %>%
arrange(desc(total_familias))
familiaxprovincia_total
## # A tibble: 24 × 2
## provincia total_familias
## <fct> <int>
## 1 Buenos Aires 588779
## 2 Santa Fe 92776
## 3 CABA 80517
## 4 Misiones 58322
## 5 Chaco 55821
## 6 Tucumán 48003
## 7 Salta 39319
## 8 Córdoba 37039
## 9 Río Negro 36239
## 10 Corrientes 29136
## # ℹ 14 more rows
*Calcumos la participacion de las familas por provincia respecto al total
familiaxprovincia_total <- familiaxprovincia_total %>%
mutate(
porcentaje = total_familias / sum(total_familias) * 100,
etiqueta = paste0(provincia, ", ", round(porcentaje, 1), "%")
)
library(treemapify)
# Ahora calculo la proporción de familias viviendo en barrios populares por provincia
# Con treemap cada rectángulo representa una provincia, así el tamaño de cada rectángulo es proporcional a la cantidad total de familias que viven en barrios populares en esa provincia.
ggplot() +
geom_treemap(
data = familiaxprovincia_total,
aes(area = total_familias, fill = total_familias)
) +
geom_treemap_text(
data = familiaxprovincia_total,
aes(area = total_familias, label = etiqueta),
colour = "white",
place = "centre",
size = 10,
reflow = TRUE
) +
scale_fill_gradient2(low = "#BFEFFF", mid = "#9AC0CD", high = "#68838B",midpoint = median(familiaxprovincia_total$total_familias), labels = comma
)+
labs(
title = "Gráfico 5: Proporción de familias viviendo en barrios populares por provincia",
subtitle = "En porcentajes (%)",
caption = "Fuente: RENABAP (2024)",
fill = "Familias"
) +
theme_minimal() # esto nos da un estilo mas limpio, sin elementos innecesarios que distraigan.
# Otras notas:
#geom_treemap_text, nos permite agregar la etiqueta de la provincia más su porcentaje
# scale_fill_gradiente nos pernmite identificar las provincias con más familias con el color mas oscuro hasta el color más tenue con provincias con menos familias
# Unir las dos tablas por provincia
barrios_familias_total <- barriosxprovincia_total %>%
inner_join(familiaxprovincia_total, by = "provincia") %>%
select(provincia, total_barrios, total_familias) # <-- Solo dejamos estas columnas
# Formateamos la tabla con gt()
barrios_familias_total %>%
gt() %>%
tab_header(
title = "Tabla 1: Barrios y Familias por Provincia",
subtitle = "Número total de viviendas (barrios) y familias por provincia"
) %>%
fmt_number(
columns = c(total_barrios, total_familias),
decimals = 0,
use_seps = TRUE # Agrega separadores de miles
) %>%
cols_label(
provincia = "Provincia",
total_barrios = "Total de viviendas",
total_familias = "Total de familias"
) %>%
tab_source_note(
source_note = "Fuente: RENABAP (2024)"
)
| Tabla 1: Barrios y Familias por Provincia | ||
| Número total de viviendas (barrios) y familias por provincia | ||
| Provincia | Total de viviendas | Total de familias |
|---|---|---|
| Buenos Aires | 535,133 | 588,779 |
| Santa Fe | 84,306 | 92,776 |
| CABA | 73,195 | 80,517 |
| Misiones | 52,995 | 58,322 |
| Chaco | 50,711 | 55,821 |
| Tucumán | 43,608 | 48,003 |
| Salta | 35,714 | 39,319 |
| Córdoba | 33,644 | 37,039 |
| Río Negro | 32,922 | 36,239 |
| Corrientes | 26,465 | 29,136 |
| Formosa | 25,393 | 27,942 |
| Mendoza | 23,996 | 26,432 |
| Entre Ríos | 23,869 | 26,276 |
| Santiago del Estero | 19,033 | 20,947 |
| Jujuy | 17,208 | 18,938 |
| Neuquén | 13,458 | 14,813 |
| Chubut | 9,686 | 10,660 |
| Tierra del Fuego | 5,585 | 6,147 |
| San Juan | 5,047 | 5,563 |
| San Luis | 4,038 | 4,442 |
| Catamarca | 3,571 | 3,936 |
| Santa Cruz | 2,601 | 2,863 |
| La Rioja | 2,247 | 2,476 |
| La Pampa | 372 | 409 |
| Fuente: RENABAP (2024) | ||
barriosxdepartamento <- renabap_modif %>%
group_by(departamento) %>%
summarise(barrios_depart=sum(cantidad_viviendas_aproximadas)) %>%
arrange(desc(barrios_depart)) %>%
head(10)
familiasxdepartamento <- renabap_modif %>%
group_by(departamento) %>%
summarise(familias_depart=sum(cantidad_familias_aproximada)) %>%
arrange(desc(familias_depart)) %>%
head(10)
Otra forma de cálculo
departamento_top10 <- renabap_modif %>%
group_by(departamento) %>%
summarise(
barrios_depart = sum(cantidad_viviendas_aproximadas),
familias_depart = sum(cantidad_familias_aproximada)) %>%
arrange(desc(familias_depart)) %>%
head(10)
promedios_provincia <- renabap_modif %>%
group_by(provincia) %>%
summarise(promedio_superficie=round(mean(superficie_m2),1),
promedio_vivienda=round(mean(cantidad_viviendas_aproximadas),0)) %>%
arrange(desc(promedio_vivienda))
Resultado:
# Mostrar la tabla con formato
promedios_provincia %>%
gt() %>%
tab_header(
title = "Tabla 2: Promedios de Superficie y Viviendas por Provincia",
subtitle = "Promedio de superficie (m²) y cantidad de viviendas en barrios populares"
) %>%
fmt_number(
columns = c(promedio_superficie, promedio_vivienda),
decimals = 0, # Redondear valores
use_seps = TRUE # Separadores de miles
) %>%
cols_label(
provincia = "Provincia",
promedio_superficie = "Promedio de superficie (m²)",
promedio_vivienda = "Promedio de viviendas"
) %>%
tab_source_note(
source_note = "Fuente: RENABAP (2024)"
)
| Tabla 2: Promedios de Superficie y Viviendas por Provincia | ||
| Promedio de superficie (m²) y cantidad de viviendas en barrios populares | ||
| Provincia | Promedio de superficie (m²) | Promedio de viviendas |
|---|---|---|
| CABA | 65,171 | 1,494 |
| Buenos Aires | 124,810 | 259 |
| Formosa | 203,589 | 202 |
| Santa Fe | 80,756 | 180 |
| Santiago del Estero | 184,922 | 149 |
| Río Negro | 114,946 | 137 |
| Misiones | 133,625 | 128 |
| San Luis | 126,557 | 126 |
| Santa Cruz | 254,329 | 124 |
| Tucumán | 65,872 | 118 |
| Chubut | 152,029 | 117 |
| Neuquén | 170,980 | 116 |
| Chaco | 104,724 | 115 |
| Tierra del Fuego | 154,226 | 114 |
| Jujuy | 43,291 | 108 |
| Córdoba | 66,742 | 106 |
| Corrientes | 79,481 | 103 |
| Entre Ríos | 59,415 | 103 |
| Salta | 90,240 | 101 |
| Mendoza | 66,826 | 67 |
| La Rioja | 114,122 | 66 |
| San Juan | 80,530 | 62 |
| Catamarca | 58,581 | 59 |
| La Pampa | 111,861 | 41 |
| Fuente: RENABAP (2024) | ||
barrios_por_decada <- renabap_modif %>%
group_by(decada_de_creacion) %>%
summarise(cantidad_barrios = n()) %>%
arrange(desc(cantidad_barrios))
barrios_por_decada
## # A tibble: 13 × 2
## decada_de_creacion cantidad_barrios
## <fct> <int>
## 1 Década 2000 1735
## 2 Década 2010 1604
## 3 Década 1990 995
## 4 Década 1980 790
## 5 Década 1970 472
## 6 Década 1960 361
## 7 Década 1950 191
## 8 Década 1940 95
## 9 Década 2020 84
## 10 Década 1930 54
## 11 Década 1910 39
## 12 Década 1920 34
## 13 Década 1900 13
Realizo un nueva clasificación para el tipo de conexion de la energía eléctrica en: regular, irregular y sin conexión, todo lo cual se ve reflejado en la base renabap_modif2.
renabap_modif2 <- renabap_modif %>%
mutate(conexion_clasificada=case_when(energia_electrica %in%
c("Conexión regular a la red con medidor domiciliario con consumo limitado", "Conexión regular a la red con medidor domiciliario pero sin factura", "Conexión regular a la red con medidor prepago", "Conexión formal a la red con medidor domiciliario con factura") ~ "Regular", energia_electrica %in%
c("Conexión irregular a la red",
"Energía solar", "Generador eléctrico a combustión", "Conexión a la red con medidor compartido", "Conexión a la red con medidor comunitario") ~ "Irregular", energia_electrica %in%
c("No tiene conexión eléctrica") ~ "Sin conexión"))
renabap_modif2 <- mutate(renabap_modif2,
conexion_clasificada=as.factor(conexion_clasificada))
tipo_conexion_electrica <- renabap_modif2 %>%
group_by(conexion_clasificada) %>%
summarise(cantidad_barrios=n())
total_barrios <- summarise(tipo_conexion_electrica, total_tipos=sum(cantidad_barrios))
tipo_conexion_electrica <- renabap_modif2 %>%
group_by(conexion_clasificada) %>%
summarise(cantidad_barrios = n()) %>%
mutate(
porcentaje = round(cantidad_barrios / sum(cantidad_barrios) * 100, 1)
)
tipo_conexion_electrica
## # A tibble: 3 × 3
## conexion_clasificada cantidad_barrios porcentaje
## <fct> <int> <dbl>
## 1 Irregular 3962 61.3
## 2 Regular 2401 37.1
## 3 Sin conexión 104 1.6
tenencia_propiedad <- renabap_modif2 %>%
group_by(titulo_propiedad) %>%
summarise(cantidad_barrios=n()) %>%
mutate(pct_titulo=cantidad_barrios/sum(cantidad_barrios)*100)
tenencia_familias <- renabap_modif2 %>%
group_by(titulo_propiedad) %>%
summarise(cantidad_familias=sum(cantidad_familias_aproximada)) %>%
mutate(pct_tenencia_familias=round(cantidad_familias/sum(cantidad_familias)*100,2))
Otra forma de calculo En base a lo anterior, agrupo los datos según si el barrio tiene o no
tiene título de propiedad (valores “SI” o “NO”). Después calculo la
Cantidad de barrios con y sin título y el total de familias que viven en
esos barrios (cantidad_familias). Ya con la función mutate agrego dos
columnas con los porcentajes: % de barrios con o sin título y % de
familias afectadas por la (no) tenencia del título. Como son decimales
opto por redondearlas.
tenencia_resumen <- renabap_modif2 %>%
group_by(titulo_propiedad) %>%
summarise(cantidad_barrios=n(),
cantidad_familias=sum(cantidad_familias_aproximada)) %>%
mutate(pct_titulo_propiedad=round(cantidad_barrios/sum(cantidad_barrios)*100,1),
pct_tenencia_familias=round(cantidad_familias/sum(cantidad_familias)*100,2))
tenencia_resumen
## # A tibble: 2 × 5
## titulo_propiedad cantidad_barrios cantidad_familias pct_titulo_propiedad
## <fct> <int> <int> <dbl>
## 1 NO 6462 1230348 99.9
## 2 SI 5 7447 0.1
## # ℹ 1 more variable: pct_tenencia_familias <dbl>
Considerando que densidad = cantidad_familias_aproximada /
superficie_m2
renabap_modif2 <- renabap_modif2 %>%
mutate(densidad_familias_m2=round(cantidad_familias_aproximada/superficie_m2,4))
promedio_densidad <- round(mean(renabap_modif2$densidad_familias_m2),4)
promedio_densidad
## [1] 0.003
Calculo el umbral_critico en base al percentil 90, es decir el 10% de barrios que viven en las zonas más pobladas.
umbral_critico <- quantile(renabap_modif2$densidad_familias_m2, 0.90)
Ahora identificamos los barrios críticos, para ello filtro en base al
>= del umbral crítico previamente definido, para ver los resultados
selecciono las columnas que deseo mostrar, enfocándome en un top
20.
barrios_criticos <- renabap_modif2 %>%
filter(densidad_familias_m2>=umbral_critico) %>%
select(nombre_barrio,provincia,departamento,localidad,cantidad_familias_aproximada, superficie_m2,densidad_familias_m2) %>%
arrange(desc(densidad_familias_m2)) %>%
head(20)
renabap_criticos_top <- renabap_modif2 %>%
filter(densidad_familias_m2 >= umbral_critico) %>%
arrange(desc(densidad_familias_m2)) %>%
slice(1:20)
# Para añadir puntos (scatter plot) usamos geom_point
ggplot() +
geom_point(data = renabap_criticos_top, aes(x = superficie_m2, y = cantidad_familias_aproximada),
color = "red",
size = 3
) +
geom_text_repel(
data = renabap_criticos_top,
aes(x = superficie_m2, y = cantidad_familias_aproximada, label = nombre_barrio),
size = 3,
max.overlaps = 1000
) +
scale_x_continuous(labels = comma) +
scale_y_continuous(labels = comma) +
labs(
title = "Gráfico 6: Top 20 barrios críticos con mayor densidad habitacional",
subtitle = "Densidad medida en familias por m² (percentil 90)",
x = "Superficie del barrio (m²)",
y = "Cantidad de familias",
caption = "Fuente: RENABAP (2024)"
) +
theme_minimal()
#Notas a algunos comandos:
#geom_text_repel: añade etiquetas a los puntos sin que se solapen
# max.overlaps: 1000 Permite mayor cantidad de etiquetas antes de eliminarlas por solapamiento
Esta pregunta permite evaluar los efectos de las politicas públicas
en este sector. Ya que la evolución en el tiempo permite identificar
patrones importantes: si los barrios más antiguos fueron integrándose
progresivamente al tejido urbano formal o si la exclusión permanece sin
importar la antigüedad. También permite ver si los barrios más recientes
nacen con mejores condiciones de acceso a servicios e infraestructura o
si la precariedad se mantiene como constante.
Procedemos al calculo Agrupamos y contamos por década y acceso a agua y efluentes cloacales.
agua_por_decada <- renabap_modif2 %>%
group_by(decada_de_creacion,agua_corriente) %>%
summarise(cantidad=n()) %>%
arrange(decada_de_creacion)
## `summarise()` has grouped output by 'decada_de_creacion'. You can override
## using the `.groups` argument.
cloacas_por_decada <- renabap_modif2 %>%
group_by (decada_de_creacion, efluentes_cloacales) %>%
summarise(cantidad=n()) %>%
arrange(decada_de_creacion)
## `summarise()` has grouped output by 'decada_de_creacion'. You can override
## using the `.groups` argument.
Aqui se calcula los porcentajes por década para comparar mejor
agua_por_decada <- agua_por_decada %>%
group_by(decada_de_creacion) %>%
mutate(pct_agua=round(cantidad/sum(cantidad)*100,1))
cloacas_por_decada <- cloacas_por_decada %>%
group_by (decada_de_creacion) %>%
mutate(pct_cloaca=round(cantidad/sum(cantidad)*100,1))
agua_formal <- agua_por_decada %>%
filter(agua_corriente=="Conexión formal a la red de agua con factura") %>%
select(decada_de_creacion, pct_agua)
cloaca_formal <- cloacas_por_decada %>%
filter(efluentes_cloacales=="Conexión formal a la red cloacal") %>%
select(decada_de_creacion,pct_cloaca)
Se une las dos últimas tablas para ver la relación
servicios_formales_por_decada <- left_join(agua_formal, cloaca_formal, by="decada_de_creacion")
servicios_formales_por_decada
## # A tibble: 12 × 3
## # Groups: decada_de_creacion [12]
## decada_de_creacion pct_agua pct_cloaca
## <fct> <dbl> <dbl>
## 1 Década 1910 5.1 NA
## 2 Década 1920 5.9 2.9
## 3 Década 1930 5.6 NA
## 4 Década 1940 7.4 2.1
## 5 Década 1950 9.4 5.2
## 6 Década 1960 10.8 4.2
## 7 Década 1970 12.7 5.7
## 8 Década 1980 11.5 3.9
## 9 Década 1990 11.3 2.8
## 10 Década 2000 8.5 2.2
## 11 Década 2010 3.8 0.8
## 12 Década 2020 3.6 NA
# Agrupar por década y calcular superficie promedio
superficie_por_decada <- renabap_modif %>%
filter(!is.na(decada_de_creacion) & decada_de_creacion != "") %>%
group_by(decada_de_creacion) %>%
summarise(superficie_promedio = mean(superficie_m2, na.rm = TRUE), .groups = "drop") %>%
arrange(decada_de_creacion) %>%
mutate(decada_de_creacion = factor(decada_de_creacion, levels = decada_de_creacion))
ggplot() +
geom_line(
data = superficie_por_decada,
aes(x = decada_de_creacion, y = superficie_promedio, group = 1),
color = "#87CEFA",
linewidth = 1.2
) +
geom_point(
data = superficie_por_decada,
aes(x = decada_de_creacion, y = superficie_promedio),
color = "#CD5555",
size = 3
) +
geom_text(
data = superficie_por_decada,
aes(x = decada_de_creacion, y = superficie_promedio, label = comma(round(superficie_promedio,0))),
vjust = -1,
size = 3
) +
labs(
title = "Gráfico 7: Superficie promedio de los barrios por década de creación",
x = "Década de creación",
y = "Superficie promedio (m²)",
caption = "Fuente: RENABAP (2024)"
) +
scale_y_continuous(limits = c(80000, 160000)) + # Eje Y entre 80000 y 160000 en función del dato mínimo y máximo
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # para poner las etiquetas en forma diagonal
#Notas:
# geom_line: conecta los puntos para mostrar la tendencia de la superficie promedio por década
# geom_point: añade los puntos sobre la línea
# geom_text: agrega los valores exactos como etiquetas sobre cada punto (en miles).
# Contar frecuencia de barrios y quedarnos con los 100 más frecuentes (excluyendo "Sin Nombre")
barrios_frecuentes <- renabap_modif %>%
filter(
!is.na(nombre_barrio) &
nombre_barrio != "" &
nombre_barrio != "Sin Nombre" # <-- Excluye explícitamente "Sin Nombre"
) %>%
group_by(nombre_barrio) %>%
summarise(frecuencia = n()) %>%
arrange(desc(frecuencia)) %>%
slice_max(order_by = frecuencia, n = 100) # <-- Top 100
#wordcloud2(data = barrios_frecuentes, size = 0.5, color = "random-dark")
library(htmltools)
# Creamos la nube
nube <- wordcloud2(data = barrios_frecuentes, size = 0.25, color = "random-dark")
# Le agregamos título y fuente
tagList(
tags$h3("Gráfico 8: Barrios más frecuentes en el RENABAP",
style = "text-align:center; font-size:17px;font-weight:bold; color:black;"), # acá se ajusta el tamaño del título
nube,
tags$p("Fuente: RENABAP (2024)",
style = "text-align:center; font-size:12px; color:black;")
)
Fuente: RENABAP (2024)
# Filtramos para evitar valores vacíos o NA
renabap_modif2 <- renabap_modif %>%
filter(!is.na(titulo_propiedad) & titulo_propiedad != "")
# Gráfico
ggplot()+
geom_point(data=renabap_modif2, aes(x = superficie_m2, y = cantidad_familias_aproximada),
alpha = 0.6, color = "darkblue") + # para transparentar los puntos y no saturen el gráfico
facet_wrap(~titulo_propiedad) +
# Etiquetas en los puntos (para ambas facetas)
geom_text_repel(
data = renabap_modif2 %>%
filter(cantidad_familias_aproximada > 1000), # <-- Ajusta el umbral según quieras
aes(
x = superficie_m2,
y = cantidad_familias_aproximada,
label = nombre_barrio
),
size = 3,
color = "black",
max.overlaps = 50
) +
facet_wrap(~titulo_propiedad) + # Se mantiene el facetado por título
scale_x_log10(labels = scales::comma) +
scale_y_continuous(labels = scales::comma) +
labs(
title = "Gráfico 9: Superficie vs Cantidad de Familias según Título de Propiedad",
subtitle = "Comparación de barrios con y sin título formal",
x = "Superficie del barrio (m², escala logarítmica)",
y = "Cantidad de familias",
caption = "Fuente: RENABAP (2024)"
) +
theme(
plot.subtitle = element_text(hjust = 0.5) # <-- Centra el subtítulo
)
## Warning: ggrepel: 149 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
#Notas:
# facet_wrap(~titulo_propiedad) divide el gráfico en dos paneles: barrios con y sin título de propiedad.
# geom_text_repel añade etiquetas a puntos destacados (barrios con más de 1,000 familias), evitando que se superpongan.
# scale_x_log10() convertimos a logaritmo el eje X, lo que es muy útil cuando hay valores muy diferentes entre sí.
Sugerencia de Datos adicionales para enriquecer el estudio:
- Datos socioeconómicos de las familias
- Información sobre composición demográfica