16 minutes
Todos los caminos conducen a Microcentro
Idea
Analizar la concentración de la infraestructura de la administración pública. La hipótesis por detrás de este informe exploratorio asume la presencia de una alta concentración de innmuebles en ciertas zonas, principalmente en aquella denominada “Microcentro”, hecho que genera una gran movilización de personas hacia mismos lugares con una consecuente saturación del sistema de transporte, por un lado y de servicios, por otro.
Por otro lado, este hecho, dado el contexto actual en donde la aglomeración de personas no es aconsejable a la hora de combatir enfermedades producidas por virus como el COVID, potencia las consecuencias negativas de dicha distribución geográfica de los inmuebles estatales y refuerza la necesidad de impulsar una política pública que apunte a la desconcentración.
Finalmente, se deja como posibilidad el avanzar en una estimación sobre la cantidad de personas que se movilizan hacia esos edificios, posiblemente, en función de la superficie de los inmuebles.
Ubicación.
El análisis se centra en la ubicación de los inmuebles del Estado Nacional en la Ciudad de Autónoma de Buenos Aires, dada la relevancia administrativa que presenta la jurisdicción para el país. Esto no impide que el análisis se pueda extender a otras localidades, siempre que la información lo permita.
Fuentes de datos.
-
Edificios Públicos del Gobierno de la Ciudad de Buenos Aires
-
A Futuro:
-
Nómina del personal civil de la Administración Pública Nacional (APN)
-
Buscar: Nómina de la administración Pública del Gobierno de la Ciudad de Buenos Aires
-
-
Urgando en la información disponible
La informaciuón con la que se cuenta es aquella referida a los Inmuebles Propios del Estado Nacional y Alquilados, provista por la Dirección Nacional del Registro de Bienes Inmuebles - Agencia de Administración de Bienes del Estado - Jefatura de Gabinete de Ministros.
Una de las primeras observaciones alude a la presencia de varios campos que indican que la información que contiene la base es para absolutamente todos los edificios en manos del Estado Nacional Argentino (propios o en alquiler), sea que estén ubicados dentro o fuera del país y, en el primer caso, en qué jurisdicción.
Para este análisis, vamos a quedarnos unicamente con aquellos localizados en Argentina y, a su vez, en la Ciudad Autónoma de Buenos Aires (CABA). Notamos cómo en la Ciudad Autónoma de Buenos Aires, centro adminitrativo del país, se concetra practicamente la totalidad de los inmuebles (97,5%)
Tal como se mencionó anteriormente, el análisis se centra en la distribución de inmuebles ubicados en la CABA. Una vez seleccionado nuestro universo de análisis, se procede a localizar geográficamente sobre un mapa la ubicación de cada uno de los edificios:
## Reading layer `CABA_comunas' from data source
## `https://bitsandbricks.github.io/data/CABA_comunas.geojson'
## using driver `GeoJSON'
## Simple feature collection with 15 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33514 ymax: -34.52754
## Geodetic CRS: WGS 84
Podemos notar que ciertos puntos presentan un color intenso. Esto nos permite sospechar que una misma dirección aparece varias veces en la base de datos. Tratemos de quedarnos con una sóla fila por dirección, intentando no perder información en el camino, como la superficie en mts2 del edificio (posible estimador de cantidad de personas por edificio a utilizar en un futuro):
Para ello, se crea una variable que contenga la información de la calle y el número en un mismo campo, y así poder identificar si se encuentra duplicada la fila.
Encontramos, efectivamente, que hay 247 direcciones duplicadas y 207 coordenadas duplicadas. Esto se debe, principalmente, a que en aquellos edificios donde el Estado dispone de más de un piso, se registra cada uno como un caso diferente.
Al mismo tiempo, evidenciamos que el campo de superficie se encuentra de forma agregada por edificio y no por piso:
## # A tibble: 259 × 8
## codigo_del_inmueble calle_n…¹ depar…² super…³ longi…⁴ latitud dupli…⁵ dupli…⁶
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 200000196 Esmerald… Comuna… 1082. -58.4 -34.6 2 1
## 2 200000390 Avenida … Comuna… 1092. -58.4 -34.6 2 1
## 3 200000463 25 de Ma… Comuna… 382. -58.4 -34.6 1 1
## 4 200000471 25 de Ma… Comuna… 382. -58.4 -34.6 1 1
## 5 200000481 25 de Ma… Comuna… 382. -58.4 -34.6 1 1
## 6 200000498 25 de Ma… Comuna… 382. -58.4 -34.6 1 1
## 7 200000617 25 de Ma… Comuna… 299. -58.4 -34.6 1 1
## 8 200000625 25 de Ma… Comuna… 299. -58.4 -34.6 1 1
## 9 200000749 Av. 9 de… Comuna… 1750. -58.4 -34.6 2 1
## 10 200001192 Av. Corr… Comuna… 337. -58.4 -34.6 1 1
## # … with 249 more rows, and abbreviated variable names ¹calle_numero,
## # ²departamento, ³superficie_aproximada_m2, ⁴longitud, ⁵duplicados_dir,
## # ⁶duplicados_coord
Procedemos entonces a eliminar los edificios duplicados para evitar el doble conteo. Su peso por superficie, en caso de considerarlo, seguirá siendo posible de analizar.
A continuación se puede ver cómo se distribuyen los edificios según la comuna en donde estén ubicados y notar que tenemos casos donde no se dispone de información sobre a cuál de ellas pertenecen:
Comuna | Cantidad |
---|---|
Comuna 1 | 178 |
Comuna 14 | 32 |
Comuna 2 | 29 |
Comuna 3 | 17 |
Comuna 4 | 15 |
Comuna 13 | 12 |
Comuna 7 | 9 |
Comuna 15 | 8 |
Comuna 6 | 8 |
Comuna 5 | 7 |
Comuna 12 | 6 |
Comuna 9 | 5 |
Comuna 11 | 4 |
Comuna 10 | 3 |
Comuna 8 | 2 |
Una vez descartados los casos sin información, se nota claramente la concentración de inmuebles del Estado Nacional en la Comuna 1, con más de la mitad de los inmuebles (52.7) y muy lejos de la Comuna 14, en segundo lugar, quien concentra un 9.6 de los mismos.
Intenemos armar un mapa de coropletas:
En el mapa se puede identificar claramente la concentración extrema de oficinas del Estado Nacional en la comuna 1.
Podríamos precisar en una escala menor esta distribución, por ejemplo, por radios censales:
## Reading layer `CABA_rc' from data source
## `https://bitsandbricks.github.io/data/CABA_rc.geojson' using driver `GeoJSON'
## Simple feature collection with 3554 features and 8 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53092 ymin: -34.70574 xmax: -58.33455 ymax: -34.528
## Geodetic CRS: WGS 84
Otra forma de visualizar la información es a través de los gráficos de densidad. En este caso, se puede identificar una clara zona predominante (como vimos, principalmente en la Comuna 1) y pequeñas zonas poco densas en cuanto a la cantidad de edificios del Estado.
## left bottom right top
## -58.53800 -34.68466 -58.33475 -34.52943
(Breve) Conclusión.
Desde el punto de vista de la movilidad de personas al trabajo, comprobamos que (casi) todes vamos para el mismo lado, o dicho de otra forma, que más de la mitad de los inmuebles del Estado se ubican en una sóla Comuna lo que, inevitablemente, genera un flujo de personas hacia la misma dirección. Esto, por un lado, conlleva consecuencias negativas importantes tanto para la calidad como para la capacidad de servicio del transporte público (y que, a su vez, afecta a la calidad de vida de las personas).
Por otro lado, una mejor redistribución de los inmuebles podría generar una mejor distribución de los recursos económicos que se movilizan para ofrecer servicios a las personas que deben movilizarse hacia esos destinos para trabajar. Y no sólo nos referimos a servicios desde una perspectiva comercial. La redistribución podría facilitar el acceso a la seguridad y a la salud de la población del resto de las comunas, por ejemplo.
Se podría decir, en su momento, que una distribución espacial como la actual estaba fundamentada en la ventaja que proporcionaba el hecho de estar cerca, fisicamente, del centro administrativo del país. Hoy ese motivo puede ser relativizado, cuando muchas de las razones para acercarse ya no siguen vigente (tramites online, operatorias administrativas, bancarias, entre otras, en su gran proporción hoy digitales). ¿Cómo sigue?
Queda a futuro poder avanzar sobre una estimación de la cantidad de personas que se movilizan hacia estos inmuebles concentrados geograficamente que posee el Estado Nacional, sumando información sobre la pertinencia de permanecer en dicha zona y la posibilidad de implementar una política pública de relocalización.
También queda para seguir sumando la distribución de los inmuebles propios o alguilados que le corresponden a la Ciudad Autónoma de Buenos Aires.
El Código.
# Librerías
library(tidyverse)
#devtools::install_github("holatam/eph")
library(eph)
library(sf)
library(ggmap)
library(hrbrthemes)
#remotes::install_github("ewenme/ghibli")
library(ghibli)
library(kableExtra)
library(DataExplorer)
library(skimr)
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
## Carga de datos ----
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
b_inmuebles_apn <- read_csv("https://infra.datos.gob.ar/catalog/otros/dataset/6/distribution/6.1/download/inmuebles-estado-nacional.csv")
skim(b_inmuebles_apn)
calculate_tabulates(b_inmuebles_apn, "pais") %>%
arrange(-Freq) %>%
ggplot(aes(x = reorder(pais, Freq), y = Freq)) +
geom_col(fill = "forestgreen", alpha = 0.5, colour = "black") +
geom_hline(yintercept = 0) +
geom_text(aes(label = Freq), hjust = -0.2, size = 3) +
labs(title = "Cantidad de inmuebles del Estado Nacional Argentino por país",
caption= "Fuente: https://datos.gob.ar/",
fill = "", x = "País", y = "Cantidad") +
coord_flip() +
theme_minimal() +
theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"),
plot.caption=element_text(face = "italic", colour = "gray35",size=6),
title=element_text(size=10, face = "bold"))
b_inmuebles_apn %>%
filter(pais == "Argentina") %>%
calculate_tabulates( "provincia", add.percentage = "col") %>%
mutate(Freq = as.numeric(Freq)) %>%
arrange(-Freq) %>%
ggplot(aes(x = reorder(provincia, Freq), y = Freq)) +
geom_col(fill = "forestgreen", alpha = 0.5, colour = "black") +
geom_hline(yintercept = 0) +
geom_text(aes(label = paste0(Freq, "%"), y = Freq + 0.5), hjust = -0.1, size = 3) +
labs(title = "Distribución porcentual de los inmuebles del Estado \n Nacional Argentino por provincia",
caption= "Fuente: https://datos.gob.ar/",
fill = "", x = "Provincia", y = "Porcentaje") +
coord_flip() +
theme_minimal() +
theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"),
plot.caption=element_text(face = "italic", colour = "gray35",size=6),
title=element_text(size=10, face = "bold")) +
#scale_y_continuous(limits = c(0, 110), breaks = c(0, 20, 40, 60, 80 ,100))
scale_y_continuous(limits = c(0, 105), breaks = c(0, 20, 40, 60, 80, 100))
b_inmuebles_apn_caba <- b_inmuebles_apn %>%
filter(provincia == "Ciudad Autonoma de Buenos Aires")
capa_comunas <- st_read('https://bitsandbricks.github.io/data/CABA_comunas.geojson')
# Hacemos al objeto uno de tipo espacial
capa_inmuebles_caba <- b_inmuebles_apn_caba %>%
filter(!is.na(longitud), !is.na(latitud), !is.na(departamento)) %>%
st_as_sf(coords = c("longitud", "latitud"), crs = 4326) %>%
mutate(lat = st_coordinates(.)[,1],
lon = st_coordinates(.)[,2])
ggplot() +
geom_sf(data = capa_comunas) +
geom_sf(data = capa_inmuebles_caba, color = "forestgreen", alpha = 0.4) +
labs(title = "Distribución geográfica de los inmuebles del Estado \n Nacional Argentino.",
subtitle = "Ciudad Autónoma de Buenos Aires",
caption= "Fuente: https://datos.gob.ar/",
fill = "", x = "Provincia", y = "Cantidad") +
theme_void() +
theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"),
plot.caption=element_text(face = "italic", colour = "gray35",size=6),
title=element_text(size=10, face = "bold"))
b_inmuebles_apn_caba <- b_inmuebles_apn_caba %>%
mutate(calle_numero = paste0(calle, "_", numero)) %>%
mutate(duplicados_dir = ifelse(duplicated(calle_numero) == TRUE, 1, 2),
duplicados_coord = ifelse(duplicated(longitud, latitud) == TRUE, 1 ,2))
b_inmuebles_apn_caba %>%
filter(duplicados_dir == 1 | duplicados_coord == 1) %>%
select(codigo_del_inmueble, calle_numero, departamento,
superficie_aproximada_m2, longitud, latitud, duplicados_dir, duplicados_coord) %>%
arrange(codigo_del_inmueble)
# Remuevo casos duplicados, quedandome con los unicos
b_inmuebles_apn_caba <- b_inmuebles_apn_caba %>%
distinct(calle_numero, .keep_all = TRUE)
# Hacemos al objeto uno de tipo espacial y remuevo los duplicados por coordenadas
capa_inmuebles_caba <- b_inmuebles_apn_caba %>%
filter(!is.na(longitud), !is.na(latitud), !is.na(departamento)) %>%
st_as_sf(coords = c("longitud", "latitud"), crs = 4326) %>%
mutate(lat = st_coordinates(.)[,1],
lon = st_coordinates(.)[,2]) %>%
rename(superficie = superficie_aproximada_m2) %>%
distinct(geometry, .keep_all = TRUE)
ggplot() +
geom_sf(data = capa_comunas) +
geom_sf(data = capa_inmuebles_caba, color = "forestgreen", alpha = 0.4,
aes(size = as.numeric(superficie))) +
labs(title = "Distribución geográfica de los inmuebles del Estado \n Nacional Argentino por superficie del inmueble.",
subtitle = "Ciudad Autónoma de Buenos Aires",
caption= "Fuente: https://datos.gob.ar/",
fill = "", x = "Provincia", y = "Cantidad") +
theme_void() +
theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"),
plot.caption=element_text(face = "italic", colour = "gray35",size=6),
title=element_text(size=10, face = "bold"),
legend.position = "none")
# Frecuencia
calculate_tabulates(capa_inmuebles_caba, "departamento") %>%
arrange(-as.numeric(Freq)) %>%
rename(Cantidad = Freq, Comuna = departamento)
#Vemos que hay edificios sin dato en departamento
#unique(capa_inmuebles_caba$departamento)
# Los quitamos de la base
capa_inmuebles_caba <- capa_inmuebles_caba %>%
filter(departamento != "")
# Tabla
porc_comuna <- capa_inmuebles_caba %>%
calculate_tabulates(x = "departamento", add.percentage = "col")
# Gráfico
ggplot(data = porc_comuna) +
geom_col(aes(x = reorder(departamento, as.numeric(Freq)), y = as.numeric(Freq),
fill = ifelse(departamento == "Comuna 1", "A","B"))) +
geom_hline(yintercept = 0) +
scale_fill_manual(values=c(A="#AF9699FF", B="#F3E8CCFF")) +
geom_text(aes(x = reorder(departamento, as.numeric(Freq)), y = as.numeric(Freq),
label = paste0(Freq, "%")),
hjust = "inward") +
labs(title = "Distribución porcentual de los inmuebles del Estado Nacional \n por Comuna",
x = "Comuna", y = "Porcentaje",
caption = "Fuente: Jefatura de Gabinete de Ministros. Agencia de Administración de Bienes del Estado. Dirección Nacional del Registro de Bienes Inmuebles.",
fill = "") +
coord_flip() +
theme_minimal()+
theme(plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"),
plot.caption=element_text(face = "italic", colour = "gray35",size=6),
title=element_text(size=10, face = "bold"),
legend.position = "none")
inmuebles_x_comuna <- capa_inmuebles_caba %>%
mutate(comunas = case_when(departamento == "Comuna 1" ~ 1, departamento == "Comuna 2" ~ 2,
departamento == "Comuna 3" ~ 3, departamento == "Comuna 4" ~ 4,
departamento == "Comuna 5" ~ 5, departamento == "Comuna 6" ~ 6,
departamento == "Comuna 7" ~ 7, departamento == "Comuna 8" ~ 8,
departamento == "Comuna 9" ~ 9, departamento == "Comuna 10" ~ 10,
departamento == "Comuna 11" ~ 11, departamento == "Comuna 12" ~ 12,
departamento == "Comuna 13" ~ 13, departamento == "Comuna 14" ~ 14,
departamento == "Comuna 15" ~ 15)) %>%
filter(!is.na(comunas)) %>%
group_by(comunas) %>%
summarise(cantidad=n()) %>%
st_set_geometry(NULL)
capa_comunas <- capa_comunas %>%
#mutate(comunas = as.numeric(levels(comunas))[comunas]) %>%
mutate(comunas = as.numeric(comunas)) %>%
left_join(inmuebles_x_comuna, by = "comunas")
ggplot() +
geom_sf(data = capa_comunas, aes(fill=cantidad), color = NA) +
geom_sf_text(data = capa_comunas, aes(label = comunas), size=2.5, colour = "black") +
labs(title = "Inmuebles Propios del Estado Nacional y Alquilados",
subtitle = "Densidad de propiedades",
fill = "Cantidad",
caption= "Fuente: https://datos.gob.ar/") +
theme_void() +
scale_fill_distiller(palette = "Spectral")
capa_radios <- st_read("https://bitsandbricks.github.io/data/CABA_rc.geojson")
# Join de capa inmuebles y capa de radios + creo variable de cantidad
inmuebles_x_radio <- st_join(capa_inmuebles_caba, capa_radios) %>%
group_by(RADIO_ID) %>%
summarise(cantidad=n()) %>%
st_set_geometry(NULL)
# Llevo variable de cantidad a la capa de radios
capa_radios <- capa_radios %>%
left_join(inmuebles_x_radio, by = "RADIO_ID")
# Visualizo distribución de inmuebles por radio censal
ggplot() +
geom_sf(data = capa_radios, aes(fill=cantidad), color = NA) +
labs(title = "Inmuebles Propios del Estado Nacional y Alquilados",
subtitle = "Propiedades publicadas",
fill = "Cantidad",
caption= "Fuente: xxx") +
theme_void() +
scale_fill_distiller(palette = "Spectral")
ggplot() +
geom_sf(data = capa_radios, aes(fill=cantidad)) +
labs(title = "Inmuebles Propios del Estado Nacional y Alquilados",
subtitle = "Propiedades publicadas",
fill = "Cantidad",
caption= "Fuente: xxx") +
theme_void() +
coord_sf(xlim = c(-58.39, -58.35), ylim = c(-34.63, -34.56), expand = FALSE)+
scale_fill_distiller(palette = "Spectral")
bbox <- make_bbox(lon = b_inmuebles_apn_caba$longitud, lat = b_inmuebles_apn_caba$latitud)
bbox
CABA <- get_stamenmap(bbox, zoom = 11, maptype = "terrain")
# ggmap(CABA)
### Para replicar
theme_caba_map <- theme (plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"), #ajustar los margenes del gráfico
title=element_text(size=10, face = "bold"), #tamaño de titulo del mapa
legend.key.size = unit(0.3, "cm"), #alto de cuadrados de referencia
legend.key.width = unit(0.4,"cm"), #ancho de cuadrados de referencia
legend.position="right", #ubicacion de leyenda
legend.direction = "vertical", #dirección de la leyenda
legend.title=element_text(size=8, face = "bold"), #tamaño de titulo de leyenda
legend.text=element_text(size=7), #tamaño de texto de leyenda
plot.caption=element_text(face = "italic", colour = "gray35",size=6), #tamaño de nota al pie
axis.text = element_blank(), #texto eje X e Y
axis.ticks = element_blank())
ggmap(CABA) +
geom_point(data = b_inmuebles_apn_caba, aes(x = longitud, y = latitud),
color = "forestgreen", alpha = .5) +
stat_density_2d(data = b_inmuebles_apn_caba, aes(x = longitud, y = latitud,
fill = stat(level)),alpha = .4,
bins = 25,
geom = "polygon") +
labs(title="Distribución de los inmuebles del Estado Nacional",
subtitle="Ciudad Autónoma de Buenos Aires",
x="",
y="",
caption= "Fuente: https://datos.gob.ar/",
fill="Nivel")+
scale_fill_distiller(palette = "Spectral") +
#scale_fill_gradientn(colors = RColorBrewer::brewer.pal(7, "YlOrRd"))
#theme_caba_c
theme_minimal() +
theme(axis.text.x = element_blank(),
axis.ticks.x.bottom = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y.left = element_blank(),
plot.margin = margin(0.25, 1, 0.25, 0.1, "cm"),
plot.caption=element_text(face = "italic", colour = "gray35",size=6),
legend.position = "none",
title=element_text(size=10, face = "bold"))