Introducción:
Este documento se enmarca dentro del Trabajo Práctico Intetgrador de la materia Aplicaciones de software estadístico I de la Maestría en Generación y Análisis de Información Estadística de la Universidad Nacional de Tres de Febrero. El objetivo del mismo es realizar un análisis exploratorio sobre la composición de los barrios populares en Argentina. Se define como barrio popular aquel donde viven al menos 8 familias agrupadas o contiguas, donde más de la mitad de la población no cuente con título de propiedad del suelo ni acceso regular a dos o más de los servicios básicos –agua corriente, electricidad con medidor domiciliario y/o red cloacal. El decreto 358/17 crea el RENABAP, primer registro nacional de barrios populares y el CERTIFICADO DE VIVIENDA FAMILIAR, principal instrumento para la regularización de la cuestión dominial en los barrios populares. Este registro puede encontrarse en el portal de datos abiertos del gobierno nacional.
Cargo librerías
library(tidyverse)
library(tidytext)
library(lubridate)
library(skimr)
library(sf)
library(leaflet)
Levanto data y exploro
barrios_populares<-read.csv("./data/2022-07-13_info_publica.csv", encoding = "UTF-8")
#veamos la composición del dataframe
glimpse(barrios_populares)
## Rows: 5,687
## Columns: 77
## $ id_renabap <int> 1, 2, ~
## $ geometry <chr> "MULTI~
## $ renabap_id <int> 1, 2, ~
## $ nombre_barrio <chr> "Monte~
## $ provincia <chr> "Bueno~
## $ departamento <chr> "Pilar~
## $ localidad <chr> "Presi~
## $ cantidad_viviendas_aproximadas <dbl> 40, 29~
## $ cantidad_familias_aproximada <dbl> 44, 31~
## $ decada_de_creacion <chr> "Décad~
## $ anio_de_creacion <dbl> NA, NA~
## $ energia_electrica <chr> "Conex~
## $ efluentes_cloacales <chr> "Desag~
## $ agua_corriente <chr> "Bomba~
## $ cocina <chr> "Gas e~
## $ calefaccion <chr> "Otro ~
## $ situacion_dominial <chr> "Otro ~
## $ clasificacion_barrio <chr> "Asent~
## $ superficie_m2 <int> 11674,~
## $ personas_genero_masc <int> 71, 42~
## $ personas_genero_fem <int> 78, 45~
## $ personas_genero_otrx <int> 0, 0, ~
## $ responsable_genero_masc <int> 16, 79~
## $ responsable_genero_fem <int> 24, 19~
## $ familia_monoparental_responsable_masculino <int> 0, 2, ~
## $ familia_monoparental_responsable_femenino <int> 0, 27,~
## $ cantidad_certificados_entregados <int> 13, 18~
## $ recibe_asignacion_universal_por_hijo <int> 40, 27~
## $ no_recibe_asignacion_universal_por_hijo <int> 26, 12~
## $ no_sabe_si_recibe_asignacion_universal_por_hijo <int> 0, 2, ~
## $ tipo_propiedad_de_quienes_vieven_en_ella <int> 37, 28~
## $ tipo_propiedad_alquilada <int> 1, 5, ~
## $ tipo_propiedad_prestada <int> 3, 18,~
## $ rango_edad_0_a_4_anios <int> 0, 14,~
## $ rango_edad_5_a_9_anios <int> 18, 11~
## $ rango_edad_10_a_14_anios <int> 19, 12~
## $ rango_edad_15_a_19_anios <int> 14, 11~
## $ rango_edad_20_a_24_anios <int> 22, 81~
## $ rango_edad_25_a_29_anios <int> 13, 73~
## $ rango_edad_30_a_34_anios <int> 6, 75,~
## $ rango_edad_35_a_39_anios <int> 7, 70,~
## $ rango_edad_40_a_44_anios <int> 12, 91~
## $ rango_edad_45_a_49_anios <int> 12, 38~
## $ rango_edad_50_a_54_anios <int> 6, 22,~
## $ rango_edad_55_a_59_anios <int> 5, 23,~
## $ rango_edad_60_a_64_anios <int> 4, 10,~
## $ rango_edad_65_a_69_anios <int> 5, 9, ~
## $ rango_edad_70_a_74_anios <int> 3, 8, ~
## $ rango_edad_75_a_79_anios <int> 3, 5, ~
## $ rango_edad_80_o_mas_anios <int> 0, 4, ~
## $ situacion_laboral_ns_nc <int> 12, 57~
## $ situacion_laboral_empleado_en_negro <int> 9, 112~
## $ situacion_laboral_trabajo_independiente_cooperativa_familiar_pr <int> 14, 10~
## $ situacion_laboral_realiza_trabajos_del_hogar_sin_sueldo <int> 8, 103~
## $ situacion_laboral_empleado_en_blanco <int> 14, 65~
## $ situacion_laboral_no_trabaja <int> 37, 82~
## $ situacion_laboral_jubilado_pensionado <int> 8, 13,~
## $ situacion_laboral_no_aplica <int> 47, 33~
## $ motivo_no_trabaja_ns_nc <int> 0, 0, ~
## $ motivo_no_trabaja_no_estudia_ni_busca_trabajo <int> 8, 11,~
## $ motivo_no_trabaja_busca_trabajo <int> 13, 42~
## $ motivo_no_trabaja_solo_estudia <int> 16, 27~
## $ motivo_no_trabaja_discapacidad <int> 0, 2, ~
## $ oficio_actividad_programas_sociales <int> 1, 42,~
## $ oficio_actividad_comercio_barrial <int> 1, 16,~
## $ oficio_actividad_indumentaria_textil_afines <int> 2, 0, ~
## $ oficio_actividad_relacionada_con_la_pesca <int> 0, 0, ~
## $ oficio_actividad_construccion_afines <int> 6, 103~
## $ oficio_actividad_elaboracion_de_comidas <int> 1, 9, ~
## $ oficio_actividad_cartonero_carrero_afines <int> 4, 0, ~
## $ oficio_actividad_trabajos_domesticos_y_cuidado <int> 0, 5, ~
## $ oficio_actividad_comunitarias <int> 0, 0, ~
## $ oficio_actividad_produccion_agropecuaria <int> 0, 0, ~
## $ oficio_actividad_via_publica_venta_de_productos_y_servicios <int> 6, 15,~
## $ oficio_actividad_otros <int> 1, 18,~
## $ oficio_actividad_ns_nc <int> 1, 9, ~
## $ oficio_actividad_transportista <int> 0, 1, ~
#podemos usar la funcion skim() del paquete skimr para "resumir" la info de las variables en un nuevo dataframe
explore<-skim(barrios_populares)
#podemos ver los valores únicos de una variable con la función unique()
unique(barrios_populares$agua_corriente)
## [1] "Bomba de agua de pozo domiciliaria"
## [2] "Conexión irregular a la red de agua"
## [3] "Conexión formal a la red de agua con factura"
## [4] "Bomba de agua de pozo comunitaria"
## [5] "Camión cisterna"
## [6] "Conexión regular a la red de agua pero sin factura"
## [7] "Acarreo de baldes/recipientes desde fuera del barrio"
## [8] "Canilla comunitaria dentro del barrio"
## [9] "Vertiente, arroyo, río o canal"
## [10] "Cosecha/recolección de agua de lluvia"
barrios_populares<-barrios_populares%>%
filter(!is.na(cantidad_familias_aproximada))
Desarrollo
Porcentajes
Podemos calcular las frecuencias absolutas de una variable con la
función table():
table(barrios_populares$agua_corriente)
##
## Acarreo de baldes/recipientes desde fuera del barrio
## 48
## Bomba de agua de pozo comunitaria
## 333
## Bomba de agua de pozo domiciliaria
## 930
## Camión cisterna
## 284
## Canilla comunitaria dentro del barrio
## 40
## Conexión formal a la red de agua con factura
## 524
## Conexión irregular a la red de agua
## 3228
## Conexión regular a la red de agua pero sin factura
## 257
## Cosecha/recolección de agua de lluvia
## 2
## Vertiente, arroyo, río o canal
## 40
Podemos calcular las frecuencias relativas de una variable agregando
la función prop.table():
frecuencia_agua<-as.data.frame(round(prop.table(table(barrios_populares$agua_corriente))*100,digits = 2))%>%
arrange(desc(Freq))
frecuencia_agua
## Var1 Freq
## 1 Conexión irregular a la red de agua 56.77
## 2 Bomba de agua de pozo domiciliaria 16.36
## 3 Conexión formal a la red de agua con factura 9.22
## 4 Bomba de agua de pozo comunitaria 5.86
## 5 Camión cisterna 4.99
## 6 Conexión regular a la red de agua pero sin factura 4.52
## 7 Acarreo de baldes/recipientes desde fuera del barrio 0.84
## 8 Canilla comunitaria dentro del barrio 0.70
## 9 Vertiente, arroyo, río o canal 0.70
## 10 Cosecha/recolección de agua de lluvia 0.04
Medidas de tendencia central
Veamos el promedio de familias por barrio popular:
mean(barrios_populares$cantidad_familias_aproximada)
## [1] 205.5454
Calculemos la mediana de la variable familias de los barrios populares:
median(barrios_populares$cantidad_familias_aproximada)
## [1] 88
Veamos la cantidad de familias que más se repite en los barrios populares, es decir, la moda de la variable cantidad de familias:
moda_familias<-barrios_populares%>%
count(cantidad_familias_aproximada)%>%
slice_max(order_by = n)
moda_familias
## cantidad_familias_aproximada n
## 1 55 262
Finalmente calculemos el total de familias que viven en barrios populares:
sum(barrios_populares$cantidad_familias_aproximada)
## [1] 1168731
Medidas de posición
Con la función summary() podemos ver los quartiles de
una variable numérica:
summary(barrios_populares$cantidad_familias_aproximada)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.0 37.0 88.0 205.5 207.0 15400.0
Con la función quantile() podemos ver quartiles,
quintiles o percenetiles ajustando el argumento
probs =:
quantile(barrios_populares$cantidad_familias_aproximada, probs = c(0.25, 0.75))
## 25% 75%
## 37 207
quantile(barrios_populares$cantidad_familias_aproximada, probs = c(0.1, 0.9))
## 10% 90%
## 19 440
Medidas de dispersion
La función range() nos indica el rango de una variable
numérica, es decir, los valores mínimos y máximos que una variable
tiene:
range(barrios_populares$cantidad_familias_aproximada)
## [1] 2 15400
La función var() nos indica la varianza de una
variable:
var(barrios_populares$cantidad_familias_aproximada)
## [1] 271482.5
La función sd() nos muestra el desvío estándar de una
variable:
sd(barrios_populares$cantidad_familias_aproximada)
## [1] 521.0399
Al barro
Veamos la evolución de barrios populares a través de las décadas, es decir la frecuencia acumulada
evolucion_barrios_populares<-barrios_populares%>%
mutate(decada_de_creacion = str_replace_all(decada_de_creacion, "Década", ""),
decada_de_creacion = ymd(decada_de_creacion, truncated = 2L))%>%
group_by(decada_de_creacion)%>%
summarise(cantidad = n())%>%
mutate(acumulada=cumsum(cantidad))
plot_1_evolucion<-ggplot(evolucion_barrios_populares,
aes(decada_de_creacion, acumulada))+
geom_line(size = 1, color = "salmon")+
scale_x_date(date_breaks = "10 years", date_labels = "%Y")+
theme_minimal()+
theme(axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "none")+
labs(title = "Crecimiento de barrios populares",
caption = "Fuente: portal de datos abiertos del gobierno nacional",
y = "",
x = "Año de creación")
plot_1_evolucion
Veamos la distribucion del empleo para los habitantes de barrios populares de una selección de provincias.
#creamos un objeto para trabajar la ocupacion
ocupacion_barrios_populares<-barrios_populares%>%
pivot_longer(cols = 51:58,names_to = "situacion_laboral", values_to = "cantidad")%>%
select(id_renabap, nombre_barrio, provincia, departamento, localidad, situacion_laboral, cantidad)
#chequeamos las categorías de la variable
unique(ocupacion_barrios_populares$situacion_laboral)
## [1] "situacion_laboral_ns_nc"
## [2] "situacion_laboral_empleado_en_negro"
## [3] "situacion_laboral_trabajo_independiente_cooperativa_familiar_pr"
## [4] "situacion_laboral_realiza_trabajos_del_hogar_sin_sueldo"
## [5] "situacion_laboral_empleado_en_blanco"
## [6] "situacion_laboral_no_trabaja"
## [7] "situacion_laboral_jubilado_pensionado"
## [8] "situacion_laboral_no_aplica"
#limpiamos un poco
ocupacion_barrios_populares<-ocupacion_barrios_populares%>%
mutate(situacion_laboral = str_replace_all(situacion_laboral, "situacion_laboral_", ""),
situacion_laboral = str_replace_all(situacion_laboral, "_", " "),
situacion_laboral = str_to_title(situacion_laboral))
#rechequeamos
unique(ocupacion_barrios_populares$situacion_laboral)
## [1] "Ns Nc"
## [2] "Empleado En Negro"
## [3] "Trabajo Independiente Cooperativa Familiar Pr"
## [4] "Realiza Trabajos Del Hogar Sin Sueldo"
## [5] "Empleado En Blanco"
## [6] "No Trabaja"
## [7] "Jubilado Pensionado"
## [8] "No Aplica"
#calculamos porcentajes
ocupacion_barrios_populares_2<-ocupacion_barrios_populares%>%
group_by(provincia, situacion_laboral)%>%
summarise(cantidad = sum(cantidad))%>%
mutate(porcentaje = round(cantidad/sum(cantidad), digits = 2))
#ploteamos
plot_2_ocupacion<-ggplot(ocupacion_barrios_populares_2%>%
filter(provincia %in% c("Buenos Aires", "Córdoba", "Jujuy", "Mendoza")),
aes(provincia, cantidad, fill = situacion_laboral))+
geom_bar(stat="identity", position = "fill")+
theme_minimal()+
scale_fill_brewer(palette = "Dark2")+
labs(title = "Distribución de situación laboral",
caption = "Fuente: portal de datos abiertos del gobierno nacional",
x="",
y="",
fill="Situación Laboral")
plot_2_ocupacion
Si bien el gráfico nos muestra los porcentajes de cada categoría dentro de la variable situacion_laboral, se hace difícil comparar la misma entre difrentes provincias. Probemos filtrando estas categorías y visualizando de otra forma:
plot_2_ocupacion<-ggplot(ocupacion_barrios_populares_2%>%
filter(provincia %in% c("Buenos Aires", "Córdoba", "Jujuy", "Mendoza")),
aes(reorder_within(provincia, porcentaje, situacion_laboral),
porcentaje,
fill = situacion_laboral))+
geom_bar(stat="identity", position = "dodge")+
scale_fill_brewer(palette = "Dark2")+
facet_wrap(~provincia, scales = "free_x")+
scale_x_reordered()+
scale_y_continuous(labels = scales::percent)+
theme_minimal()+
theme(axis.text.x = element_blank())+
labs(title = "Distribución de situación laboral",
caption = "Fuente: portal de datos abiertos del gobierno nacional",
x="",
y="",
fill="Situación Laboral")
plot_2_ocupacion
Mucho mejor!
Habiendo visto las principales distribuciones de frecuencias de la variable cantidad de familias (aunque podríamos haber reemplazado por otras), ahora tratemos de jugar un poco relacionando variables. Veamos la densidad poblacional de familias en los barrios populares por provincia, es decir la media de familias por km2
densidad_poblacional <- barrios_populares%>%
group_by(provincia)%>%
summarise(densidad = sum(cantidad_familias_aproximada)/sum(superficie_m2 / 10000))
plot_2_densidad<-ggplot(densidad_poblacional,
aes(reorder(provincia, densidad), densidad, fill = densidad))+
geom_bar(stat = "identity")+
theme_minimal()+
theme(legend.position = "none")+
scale_y_log10()+
scale_fill_distiller(palette = "Reds", direction = 1)+
coord_flip()+
labs(title = "Densidad poblacional en barrios populares",
caption = "Fuente: portal de datos abiertos del gobierno nacional",
x= "",
y= "Cantidad de personas por hm2")
plot_2_densidad
Podemos observar que la Ciudad de Buenos Aires es el distrito con mayor densidad poblacional en barrios populares. Veamos dónde se ubican estos barrios y cómo se distribuye la densidad poblacional por cuadra (hm2)
#cargamos data de barrios y comunas de CABA
df_barrios <- st_read("https://cdn.buenosaires.gob.ar/datosabiertos/datasets/ministerio-de-educacion/barrios/barrios.geojson")%>%st_transform(crs = 4326)
## Reading layer `barrios' from data source
## `https://cdn.buenosaires.gob.ar/datosabiertos/datasets/ministerio-de-educacion/barrios/barrios.geojson'
## using driver `GeoJSON'
## Simple feature collection with 48 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
#creamos un objeto de tipo sf y joineamos ambos objetos
barrios_populares_caba_sf<-st_as_sf(barrios_populares, wkt = "geometry", crs = 4326)%>%
filter(provincia == "Ciudad Autónoma de Buenos Aires")%>%
group_by(nombre_barrio)%>%
summarise(densidad_hm2 = sum(cantidad_familias_aproximada)/sum(superficie_m2 / 10000))%>%
st_join(df_barrios)
#calculamos la cantidad de intervalos óptima para agrupar los valores de la densidad
cantidad_intervalos<-(max(barrios_populares_caba_sf$densidad_hm2)-min(barrios_populares_caba_sf$densidad_hm2))/16/5
#creamos una paleta con la cantidad de intervalos que calculamos
pal <- colorBin("YlOrRd", domain = barrios_populares_caba_sf$densidad_hm2, bins = 8)
#creamos una leyenda para el mapa
etiqueta <- paste(
"Barrio: ", barrios_populares_caba_sf$nombre_barrio,"<br/>",
"Densidad por h2: ", round(barrios_populares_caba_sf$densidad_hm2, digits = 0), "<br/>",
"Comuna: ", barrios_populares_caba_sf$COMUNA,
sep="") %>%
lapply(htmltools::HTML)
#creamos el mapa
mapa_bp_caba<-leaflet(data = barrios_populares_caba_sf)%>%
addProviderTiles("CartoDB.Positron")%>%
addPolygons(fillColor = ~pal(densidad_hm2),
fillOpacity = 0.8,
color= "white",
label = etiqueta)%>%
# addMarkers()%>%
addLegend(pal = pal, values = ~densidad_hm2, opacity = 0.7, title = NULL,
position = "bottomright")%>%
setView(lng= -58.44572071865652, lat=-34.60758005005588, zoom = 12)
mapa_bp_caba
Conclusiones
En el presente documento fue posible recorrer las funciones básicas para realizar un análisis exploratorio en el lenguaje R. Como resultados principales del análisis, se puede decir que la mayoría de los barrios populares tienen una Conexión irregular a la red de agua, ya que más de la mitad de los mismos poseen este tipo de conexión mientras que la otra mitad se distribuye entre 9 tipos de conexiones diferentes. Además, el promedio de familias que viven en los barrios populares es de 205 familias por barrio y el total de familias viviendo en estos barrios es de casi 1.2M. Por otro lado, se observa que a partir de la década de 1970 hay un salto exponencial en el surgimiento de barrios, duplicándose la cantidad existente, década tras década. En cuanto a la situación laboral, en las provincia de Buenos Aires y Jujuy prima la categoría “No trabaja”, en la provincia de Córdoba la categoría “Empleado en Negro” y en Mendoza prima “Realiza Trabajos del Hogar Sin Sueldo”. Finalmente, el distrito donde mayor densidad poblacional existe dentro de los barrios populares es en la Ciudad de Buenos Aires, que contabiliza en promedio 254 familias por manzana (cuadra). El barrio con mayor densidad en la Ciudad de Buenos Aires es Los Pinos, ubicado en la Comuna 8, en el barrio de Villa Soldati, que cuenta con 682 familias por cuadra.