En el marco del Taller de Datos Populares nos planteamos realizar un AnÔlisis de la Distribución de los espacios verdes de la Ciudad de Buenos Aires y su accesibilidad via transporte público. Asà mismo nos interesa ver como los precios de las propiedades en la ciudad correlaciona o no con la presencia de parques y su accesisibilidad.
Para esto a lo largo de los encuentros realizamos lo siguiente:
Corte de Ɣrea
Corte de diĆ”metro (al menos que el polĆgono tenga \(a \times b\) metros cuadrados, indicando valores mĆnimos para \(a\) y \(b\)).
Que se encuentre en ambos datasets.
Que sea completamente pĆŗblico.
Se aceptan otros!
Definimos algun criterio o score de calidad de cada espacio verde de a cuerdo a los servicios que ofrece. Ejemplo: tiene juegos para niƱeces, tiene canchas de furbol, espacio cultoral, etc
Mapeamos y filtramos las distintas formas de transporte publico: bicisenda, colectivo, subterrano, etc.
Usamos los datos del precenso 2022 para localizar la distribución de los radios censales y la cantidad de viviendas por radio
Para ver el preprocesamiento y pasos intermedios este es nuestro girhub
library(viridis)
library(RColorBrewer)
require(sf)
require(tidyverse)
require(ggplot2)
require(patchwork)
require(ggmap)
require(osmdata)
Evaluamos primero el mapeo del espacio
bbox_ba <- getbb("Buenos Aires, Argentina")
mapa_ba <- get_stamenmap(bbox_ba, zoom = 12)
polygon_ba <- getbb("Buenos Aires, Argentina",
format_out = "sf_polygon")
ggmap(mapa_ba)+
geom_sf(data=polygon_ba$multipolygon, fill=NA, size=0.5, color="black", inherit.aes = FALSE)+ggtitle("Ciudad Autónoma de Buenos Aires")
Luego mapeamos cada espacio verde. Para esto vamos a usar un archivo que generamos en encuentros anteriores en el cual mapeamos transporte y servicios de cada parque.
#descarga mapa de base
bb = getbb('Ciudad Autonoma de Buenos Aires, Argentina',format_out = 'polygon')
bbox_ba = getbb("Ciudad Autonoma de Buenos Aires, Argentina")
#recrotar la ciudad
ciudad = st_polygon(list(bb[[2]][[1]]))
ciudad = st_sfc(ciudad)
st_crs(ciudad) = 4326
#descargar parques ya filtrados
parques_full = st_read("Encuentro6/parquesCorteArea2_5perc_fullfeatures.geojson")
## Reading layer `parquesCorteArea2_5perc_fullfeatures' from data source
## `/Users/inespatop/Documents/resume/Taller_de_datos_populares_espaciospublicos/Encuentro6/parquesCorteArea2_5perc_fullfeatures.geojson'
## using driver `GeoJSON'
## Simple feature collection with 1065 features and 45 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 5634919 ymin: 6160053 xmax: 5651113 ymax: 6179027
## Projected CRS: Campo Inchauspe / Argentina 5
parques_full = parques_full %>% st_transform(crs=4326)
SegĆŗn algunas aproximaciones teóricas al urbanismo, los parques deberĆan tener al menos media hectarea para ser utilizables de forma óptima. Decidimos entonces hacer un estudio de la distribución del Ć”rea de los espacios verdes de la ciudad.
Vemos que la distribución de las Ć”reas no es homogĆ©nea con la mayorĆa de los parques con Ć”rea pequeƱa y un par con gran Ć”rea.
ggplot(parques_full,aes(area))+geom_histogram(bins = 100)+labs(title = "Distribución de Ôrea de los parques en la ciuidad")
#agrego cuartiles
parques_full<-parques_full %>% mutate(cuartil = ntile(area, 4))
#para mejorar la visualización agregamos un corte en el Ôrea
ggplot(parques_full)+geom_density(aes(area,fill=as.factor(cuartil)))+labs(title = "Distribución de Ôrea de los parques en la ciuidad")+scale_fill_brewer(palette = "Dark2")+xlim(0,50000)
## Warning: Removed 43 rows containing non-finite values (stat_density).
ggplot() + theme_minimal()+ theme(legend.position = c(.8,.1))+
geom_sf(data=ciudad,fill='white') +
geom_sf(data=parques_full,mapping=aes(fill=area)) +
scale_fill_viridis_c(option = "plasma") +
ggtitle('Parques coloreados por Ɣrea')
ggplot() + theme_minimal()+ theme(legend.position = c(.8,.1))+
geom_sf(data=ciudad,fill='white') +
geom_sf(data=parques_full,mapping=aes(fill=area>=5e3)) +
scale_fill_discrete(name = "Area mayor a 1/2 ha",labels=c('No','SĆ')) +
ggtitle('Parques coloreados por si su Ɣrea es mayor a media hectƔrea')+
scale_fill_manual(values = c("darkgrey","darkorange"))
ggplot() + theme_minimal()+ theme(legend.position = c(.8,.1))+
geom_sf(data=ciudad,fill='white') +
geom_sf(data=parques_full %>% filter(area<5e3)) +
ggtitle('Parques con area < 1/2ha')
Mapeamos distintos servicios presentes en cada parque.
ggplot() + theme_minimal()+ theme(legend.position = c(.8,.15))+
geom_sf(data=ciudad,fill='white') +
geom_sf(data=parques_full %>% filter(area>=5e3),mapping=aes(fill=JPN)) +
ggtitle('Parques coloreados por cuƔntos Juegos para NiƱes tienen')+
scale_fill_viridis_c(option = "plasma")
ggplot() + theme_minimal()+ theme(legend.position = c(.8,.15))+
geom_sf(data=ciudad,fill='white') +
geom_sf(data=parques_full %>% filter(area>=5e3),mapping=aes(fill=fitness_station+canchas)) +
scale_fill_continuous(name='Cantidad de espacios')+
ggtitle('Parques coloreados por cuĆ”ntos espacios de ejercicio fĆsico tienen')+
scale_fill_viridis_c(option = "plasma")
Mapeamos distintos medios de transporte y calculamos la distancia de cada parada al centro de cada parque.
ggplot() + theme_minimal() + theme(legend.position = c(.8,.15)) +
geom_sf(data=ciudad,fill='white') +
geom_sf(data=parques_full %>% filter(area>=5e3) %>%
mutate('DBB'=case_when(distanciaBicisenda<=1e2 ~ '<1 cuadra',
distanciaBicisenda<=1e3 ~ '<1 km',
distanciaBicisenda>1e3 ~ '>1 km')),mapping=aes(fill=DBB)) +
scale_fill_brewer(name='Distancia a CiclovĆa',palette = "YlOrRd") +
ggtitle('Parques coloreados por Distancia a CiclovĆa')
ggplot() + theme_minimal() + theme(legend.position = c(.8,.15)) +
geom_sf(data=ciudad,fill='white') +
geom_sf(data=parques_full %>% filter(area>=5e3),
mapping=aes(fill=paradasA200m)) +
scale_fill_continuous(name='Paradas de colectivo') +
ggtitle('Parques coloreados por cuƔntas paradas de colectivo tienen a menos de 200 metros')
Para sumar a este anÔlisis un estudio de la población que accesde a cada parque descargamos los datos del precenso usando la pÔgina de Poblaciones
precenso = new.env()
load('./Precenso_2021/precenso2021_06.RData',envir = precenso)
precenso = as.list(precenso)
precenso = precenso$dataset
precenso = st_as_sf(precenso,coords=c('longitud_centroide','latitud_centroide'))
st_crs(precenso) = 4326
parques = parques_full %>% filter(area>=5e3)
D = st_distance(parques,precenso)
Para realizar un modelo bĆ”sico de influencia de cada parque a cada radio censal usamos un modelo de energĆa potencial
parques$potencial_viviendas = sapply(1:nrow(parques),function(i){
di = D[i,]
di = as.numeric(di)
di = ifelse(di<10,10,di)
-sum(precenso$ind01/di)
})
i = 1
precenso$potencial_parques = sapply(1:nrow(precenso),function(i){
di = D[,i]
di = as.numeric(di)
di[di<10] = 10
sum(parques$area/1e4/di)
})
Visualizando esos datos vemos que la distribución de los parques en relación con la cantidad de viviendas no es homogénea
# Todos los parques, potencial
ggplot() + theme_minimal()+ theme(legend.position = c(.8,.1))+
geom_sf(data=ciudad,fill='white') +
geom_sf(data=parques,mapping=aes(fill=potencial_viviendas)) +
scale_fill_gradient(low='red',high='yellow')+
ggtitle('Parques coloreados por cuƔntas viviendas influyen')
# Parques y radios censales, potencial
ggplot() + theme_minimal()+ theme(legend.position = c(.1,.86))+
geom_sf(data=ciudad,fill='white') +
geom_sf(data=precenso,mapping=aes(color=log(potencial_parques)),size=1.3) +
scale_color_gradient(high='darkviolet',low='grey',name='lPoteParques')+
geom_sf(data=parques,mapping=aes(fill=log(-potencial_viviendas))) +
scale_fill_gradient(high='red',low='yellow',name='lPoteViviendas')+
ggtitle('Parques coloreados por cuƔntas viviendas influyen \n Radios censales coloreados por cuƔntos parques tienen influencia sobre ellos')
https://github.com/ipatop/Taller_de_datos_populares_espaciospublicos