1 Introdución

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:

  1. Construimos un criterio que nos permita seleccionar un subconjunto de los poligonos que represente lo que nosotres entendemos por espacio verde / parque. Este criterio combina tanto criterios conceptuales (indicando lo que estamos buscando capturar) como criterios numéricos o mecÔnicos (indicando en efecto cómo los seleccionamos). Respecto a esto, algunas ideas:
  • 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!

  1. 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

  2. Mapeamos y filtramos las distintas formas de transporte publico: bicisenda, colectivo, subterrano, etc.

  3. 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

2 Paquetes a usar

library(viridis)
library(RColorBrewer)
require(sf)
require(tidyverse)
require(ggplot2)
require(patchwork)
require(ggmap)
require(osmdata)

3 Creamos los mapas desde Open Streat Map

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)

4 Estudio por Ɣrea

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.

4.1 Todos los parques, mostrando ambas Ɣreas

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")) 

4.2 Todos los parques, areas <0.5ha

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')

5 Estudio de servicios por parque

Mapeamos distintos servicios presentes en cada parque.

5.1 Juegos para niƱo/as

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")

5.2 Parques con estaciones de ejercicio o canchas para hacer deportes

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")

6 Estudio de transporte

Mapeamos distintos medios de transporte y calculamos la distancia de cada parada al centro de cada parque.

6.1 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) %>% 
            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')

6.2 Paradas de colectivo

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')

7 Estudio de población usando datos del precenso 2022

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')

8 Github con todos los encuentros y preprocesamientos

https://github.com/ipatop/Taller_de_datos_populares_espaciospublicos