#Espacios verdes en Rosario, Santa Fe ##Análisis de datos espaciales

En el siguiente trabajo vamos a analizar la disponibilidad y la accesibilidad de espacios verdes públicos (parques, plazas y plazoletas) en la Ciudad de Rosario. ONU-Hábitat tomó como parámetro una recomendación de la Organización Mundial de la Salud (OMS) para establecer en su informe “El estado de las ciudades de América Latina y el Caribe 2012” que las urbes deberían disponer de un mínimo de entre nueve y once metros cuadrados de espacios verdes por habitante. La falta de estos lugares tiene consecuencias ecológicas pero también afecta a la salud física, mental y a la capacidad de socialización de los ciudadanos.

Primeras aproximaciones

Haremos un mapeo de la ciudad de Rosario obteniendo distintos mapas que nos llevaran a conclusiones entre a relaciones entre los espacios verdes y los distintos datos analizados

library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0     v purrr   0.3.4
## v tibble  3.0.1     v dplyr   0.8.5
## v tidyr   1.0.2     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggthemes)
library(ggplot2)
library(knitr)
library(sf)
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
library(ggplot2)
library(osmdata)
## Data (c) OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright
library(hereR)
library(ggmap)
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
## 
## Attaching package: 'ggmap'
## The following objects are masked from 'package:hereR':
## 
##     geocode, route
library(leaflet)
library(readxl)
library(rmarkdown)
library(knitr)
library(hms)
library(ggsflabel)
## 
## Attaching package: 'ggsflabel'
## The following objects are masked from 'package:ggplot2':
## 
##     geom_sf_label, geom_sf_text, StatSfCoordinates
library(viridis)
## Loading required package: viridisLite
library(RColorBrewer)
library(leaflet)
library(sp)
library(rgeos)
## rgeos version: 0.5-5, (SVN revision 640)
##  GEOS runtime version: 3.8.0-CAPI-1.13.1 
##  Linking to sp version: 1.4-2 
##  Polygon checking: TRUE
library(stringr)
library(htmltools)
library(maps)
## 
## Attaching package: 'maps'
## The following object is masked from 'package:purrr':
## 
##     map
library(spdep)
## Loading required package: spData
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
require(spatialreg) 
## Loading required package: spatialreg
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## Registered S3 methods overwritten by 'spatialreg':
##   method                   from 
##   residuals.stsls          spdep
##   deviance.stsls           spdep
##   coef.stsls               spdep
##   print.stsls              spdep
##   summary.stsls            spdep
##   print.summary.stsls      spdep
##   residuals.gmsar          spdep
##   deviance.gmsar           spdep
##   coef.gmsar               spdep
##   fitted.gmsar             spdep
##   print.gmsar              spdep
##   summary.gmsar            spdep
##   print.summary.gmsar      spdep
##   print.lagmess            spdep
##   summary.lagmess          spdep
##   print.summary.lagmess    spdep
##   residuals.lagmess        spdep
##   deviance.lagmess         spdep
##   coef.lagmess             spdep
##   fitted.lagmess           spdep
##   logLik.lagmess           spdep
##   fitted.SFResult          spdep
##   print.SFResult           spdep
##   fitted.ME_res            spdep
##   print.ME_res             spdep
##   print.lagImpact          spdep
##   plot.lagImpact           spdep
##   summary.lagImpact        spdep
##   HPDinterval.lagImpact    spdep
##   print.summary.lagImpact  spdep
##   print.sarlm              spdep
##   summary.sarlm            spdep
##   residuals.sarlm          spdep
##   deviance.sarlm           spdep
##   coef.sarlm               spdep
##   vcov.sarlm               spdep
##   fitted.sarlm             spdep
##   logLik.sarlm             spdep
##   anova.sarlm              spdep
##   predict.sarlm            spdep
##   print.summary.sarlm      spdep
##   print.sarlm.pred         spdep
##   as.data.frame.sarlm.pred spdep
##   residuals.spautolm       spdep
##   deviance.spautolm        spdep
##   coef.spautolm            spdep
##   fitted.spautolm          spdep
##   print.spautolm           spdep
##   summary.spautolm         spdep
##   logLik.spautolm          spdep
##   print.summary.spautolm   spdep
##   print.WXImpact           spdep
##   summary.WXImpact         spdep
##   print.summary.WXImpact   spdep
##   predict.SLX              spdep
## 
## Attaching package: 'spatialreg'
## The following objects are masked from 'package:spdep':
## 
##     anova.sarlm, as.spam.listw, as_dgRMatrix_listw, as_dsCMatrix_I,
##     as_dsCMatrix_IrW, as_dsTMatrix_listw, bptest.sarlm, can.be.simmed,
##     cheb_setup, coef.gmsar, coef.sarlm, coef.spautolm, coef.stsls,
##     create_WX, deviance.gmsar, deviance.sarlm, deviance.spautolm,
##     deviance.stsls, do_ldet, eigen_pre_setup, eigen_setup, eigenw,
##     errorsarlm, fitted.gmsar, fitted.ME_res, fitted.sarlm,
##     fitted.SFResult, fitted.spautolm, get.ClusterOption,
##     get.coresOption, get.mcOption, get.VerboseOption,
##     get.ZeroPolicyOption, GMargminImage, GMerrorsar, griffith_sone,
##     gstsls, Hausman.test, HPDinterval.lagImpact, impacts, intImpacts,
##     Jacobian_W, jacobianSetup, l_max, lagmess, lagsarlm, lextrB,
##     lextrS, lextrW, lmSLX, logLik.sarlm, logLik.spautolm, LR.sarlm,
##     LR1.sarlm, LR1.spautolm, LU_prepermutate_setup, LU_setup,
##     Matrix_J_setup, Matrix_setup, mcdet_setup, MCMCsamp, ME, mom_calc,
##     mom_calc_int2, moments_setup, powerWeights, predict.sarlm,
##     predict.SLX, print.gmsar, print.ME_res, print.sarlm,
##     print.sarlm.pred, print.SFResult, print.spautolm, print.stsls,
##     print.summary.gmsar, print.summary.sarlm, print.summary.spautolm,
##     print.summary.stsls, residuals.gmsar, residuals.sarlm,
##     residuals.spautolm, residuals.stsls, sacsarlm, SE_classic_setup,
##     SE_interp_setup, SE_whichMin_setup, set.ClusterOption,
##     set.coresOption, set.mcOption, set.VerboseOption,
##     set.ZeroPolicyOption, similar.listw, spam_setup, spam_update_setup,
##     SpatialFiltering, spautolm, spBreg_err, spBreg_lag, spBreg_sac,
##     stsls, subgraph_eigenw, summary.gmsar, summary.sarlm,
##     summary.spautolm, summary.stsls, trW, vcov.sarlm, Wald1.sarlm
require(splitstackshape)
## Loading required package: splitstackshape
library(tinytex)

Distritos #### Analizaremos la cantidad de espacios público verde por distrito

distritos <- st_read ('https://datos.rosario.gob.ar/sites/default/files/distritos_descentralizados.gml')
## Reading layer `distritos_descentralizados' from data source `https://datos.rosario.gob.ar/sites/default/files/distritos_descentralizados.gml' using driver `GML'
## Simple feature collection with 6 features and 3 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -60.7971 ymin: -33.03897 xmax: -60.61183 ymax: -32.86925
## geographic CRS: WGS 84
espacioverde <- st_read ('https://datos.rosario.gob.ar/sites/default/files/espacios_verdes_parques.gml')
## Reading layer `espacios_verdes_parques' from data source `https://datos.rosario.gob.ar/sites/default/files/espacios_verdes_parques.gml' using driver `GML'
## Simple feature collection with 88 features and 5 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -60.75129 ymin: -33.01096 xmax: -60.61996 ymax: -32.89483
## geographic CRS: WGS 84
espacioverde2 <- st_read('https://datos.rosario.gob.ar/sites/default/files/espacios_verdes_plazas.gml')
## Reading layer `espacios_verdes_plazas' from data source `https://datos.rosario.gob.ar/sites/default/files/espacios_verdes_plazas.gml' using driver `GML'
## Simple feature collection with 480 features and 5 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -60.7789 ymin: -33.02477 xmax: -60.62133 ymax: -32.87118
## geographic CRS: WGS 84

Juntamos ambos datasets ya que uno incluye parques y otro incluye las plazas

datosparques <-rbind(espacioverde,espacioverde2)

Mapeamos los espacios verdes por Distristo en la ciudad de Rosario

ggplot() +
    geom_sf(data = distritos) +
    geom_sf(data = datosparques , fill = 'darkgreen')+
    labs(title = "Espacio verde en Rosario, Santa Fe",
         caption= "Fuente: https://datos.rosario.gob.ar/")+
    theme_minimal()

Relacionamos los espacios verdes y su distribución por distrito
espacioverde_distrito<- st_join(datosparques, distritos)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
ggplot() +
    geom_sf(data = distritos) +
      geom_sf(data = espacioverde_distrito, aes(color = DISTRITO), size=1)  +
  guides(fill = FALSE) +
    labs(title = "Espacios Verdes por Distritos, Rosario",
         caption= "Fuente: https://datos.rosario.gob.ar/",
        fill= "DISTRITO",
         y="",
         x="") +
    theme_minimal()

 espacioverde_distrito_cant <-  espacioverde_distrito %>%
  group_by(DISTRITO) %>%
  summarise(cantidad=n())
 espacioverde_distrito_cant <-  espacioverde_distrito_cant %>%
  st_set_geometry(NULL)
head(espacioverde_distrito_cant)
## # A tibble: 6 x 2
##   DISTRITO cantidad
##   <fct>       <int>
## 1 CENTRO        144
## 2 NOROESTE      133
## 3 NORTE         117
## 4 OESTE          71
## 5 SUDOESTE       41
## 6 SUR            69
distritos_cant <- distritos %>%
  left_join(espacioverde_distrito_cant, by="DISTRITO")
head(distritos_cant)
## Simple feature collection with 6 features and 4 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -60.7971 ymin: -33.03897 xmax: -60.61183 ymax: -32.86925
## geographic CRS: WGS 84
##                         gml_id DISTRITO                OBSERVACIO cantidad
## 1 distritos_descentralizados.1    NORTE           Villa Hortencia      117
## 2 distritos_descentralizados.2 NOROESTE Olga y Leticia Cossettini      133
## 3 distritos_descentralizados.3   CENTRO             Antonio Berni      144
## 4 distritos_descentralizados.4 SUDOESTE                      <NA>       41
## 5 distritos_descentralizados.5    OESTE               Felipe More       71
## 6 distritos_descentralizados.6      SUR           Rosa Ziperovich       69
##                         geometry
## 1 POLYGON ((-60.78204 -32.874...
## 2 POLYGON ((-60.77064 -32.896...
## 3 POLYGON ((-60.69245 -32.948...
## 4 POLYGON ((-60.69016 -33.034...
## 5 POLYGON ((-60.7605 -32.9509...
## 6 POLYGON ((-60.65979 -32.969...
ggplot(distritos_cant) +
    geom_bar(aes(weight = cantidad, x = DISTRITO), fill=brewer.pal(n = 6, name = "Spectral"))  +
        
   labs(title = "Espacios verdes por Distrito",
         fill = "Cantidad",
         caption= "Fuente: https://datos.rosario.gob.ar/",
         y="Cantidad",
         x="distrito") +
        coord_flip()

####Se puede ver la marcada tendencia de contración de espacios verdes en distrito centro

Barrios Rosario

####Para poder enteder con mayor presiciÓn tendencias territoriales, sumamos la variable de Barrios

barrios <- st_read ('https://datos.rosario.gob.ar/sites/default/files/barrios.gml')
## Reading layer `barrios' from data source `https://datos.rosario.gob.ar/sites/default/files/barrios.gml' using driver `GML'
## Simple feature collection with 50 features and 3 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -60.79693 ymin: -33.03934 xmax: -60.61278 ymax: -32.86941
## geographic CRS: WGS 84
barrio_distrito<- st_join(barrios, distritos)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar

Mapeamos los espacios verdes en la ciudad de Rosario

ggplot() +
    geom_sf(data = barrios) +
    geom_sf(data = datosparques , fill = 'darkgreen')+
    labs(title = "Espacios verdes por Barrio en Rosario, Santa Fe",
         caption= "Fuente: https://datos.rosario.gob.ar/")+
    theme_minimal()

Espacios Verdes en relacion a los barrios de Rosario

Queremos ver la proporción de espacio verde en cada barrio de la ciudad

espacioverde_barrios<- st_join(datosparques, barrios)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar

Mapeamos los espacios verdes que hay por barrio

ggplot() +
    geom_sf(data = barrios) +
    geom_sf(data = espacioverde_barrios, aes(color = BARRIO), size=1)  +
  guides(fill = FALSE) +
   labs(title = "Espacios verdes por Barrio en Rosario, Santa Fe",
         caption= "Fuente: https://datos.rosario.gob.ar/")+

  theme(legend.position = "bottom") 

Calculamos la cantidad de espacio público verde para cada barrio de la ciudad

espacioverde_barrios_cant <- espacioverde_barrios %>%
  group_by(BARRIO) %>%
  summarise(cantidad=n())
## Warning: Factor `BARRIO` contains implicit NA, consider using
## `forcats::fct_explicit_na`
espacioverde_barrios_cant<- espacioverde_barrios_cant %>%
  st_set_geometry(NULL)
head(espacioverde_barrios_cant)
## # A tibble: 6 x 2
##   BARRIO              cantidad
##   <fct>                  <int>
## 1 17 de agosto               3
## 2 Alberdi                   24
## 3 Alberto Olmedo             5
## 4 Alvear                    18
## 5 Antártida Argentina       50
## 6 Azcuenaga                  3
barrios_cant <- barrios %>%
  left_join(espacioverde_barrios_cant, by="BARRIO")
head(barrios_cant)
## Simple feature collection with 6 features and 4 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -60.72556 ymin: -32.99758 xmax: -60.6559 ymax: -32.89296
## geographic CRS: WGS 84
##      gml_id MSLINK                        BARRIO cantidad
## 1 barrios.1     28                Victoria Walsh       NA
## 2 barrios.2     38                 14 de Octubre       NA
## 3 barrios.3     50 Docente "Hermanas Cossettini"       NA
## 4 barrios.4     22                 Latinoamerica       15
## 5 barrios.5     47                   Bella Vista        9
## 6 barrios.6     45                 Parque Casado        1
##                         geometry
## 1 POLYGON ((-60.68993 -32.964...
## 2 POLYGON ((-60.66428 -32.996...
## 3 POLYGON ((-60.72556 -32.893...
## 4 POLYGON ((-60.66768 -32.968...
## 5 POLYGON ((-60.69234 -32.959...
## 6 POLYGON ((-60.66151 -32.976...

Realizamos un gráfico de barras que muestra la cantidad de espacio público verde por barrio

ggplot(barrios_cant) +
    geom_bar(fill=rgb(0.1,1,0.5,0.7),aes(x = BARRIO, weight = cantidad))+
    labs(title = "Espacios verdes por Barrio",
         fill = "Cantidad",
         caption= "Fuente: https://datos.rosario.gob.ar/",
         y="Cantidad de Espacios Verdes",
         x="Barrios") +
        coord_flip()

Se puede ver que la disponibilidad de espacios verdes no es igual en todos los barrios de la ciudad

Ahora mapeamos los datos de manera geoespacial para poder enterder las relaciones obtenidas

ggplot() +
  geom_sf(data = barrios_cant, aes(fill=cantidad)) +
    labs(title = "Espacio verde por Barrio",
         fill = "Cantidad",
         caption= "Fuente: https://datos.rosario.gob.ar/",
         y="",
         x="") +
  scale_fill_gradient(low="khaki2", high="deeppink4")  +
  geom_sf_label_repel(data = barrios_cant, 
                  aes(label = BARRIO), size = 2)
## Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
## give correct results for longitude/latitude data

Se puede ver una fuerte concentracion de espacio verde en el barrio Centro de la ciudad de Rosario.

Disponibilidad de espacios verdes por habitante

###Vamos la proporción del suelo de la ciudad de Rosario destinada a Espacios Verdes y el metro cuadrado de esapcio verde por habitante. Para lo cual, vamos a relacionar la infoamción reunida anteriormente con el total de la pobleción de la ciudad

espacios_verdes_rosario<- espacioverde_barrios%>%
  mutate(ciudad = 'Rosario')%>%
  mutate(area = st_area(espacioverde_barrios))%>%
  mutate(area = as.numeric(area))%>%
  mutate(poblacion = 1350475)%>%
   st_set_geometry(NULL)%>%
  select(ciudad, NOMBRE_EV_, BARRIO, area, poblacion)
head(espacios_verdes_rosario)
##    ciudad                                      NOMBRE_EV_   BARRIO      area
## 1 Rosario B. Mitre                                        Belgrano  3695.690
## 2 Rosario B. Mitre                                        Belgrano  3698.960
## 3 Rosario B. Mitre                                        Belgrano  3702.121
## 4 Rosario B. Mitre                                        Belgrano  2551.058
## 5 Rosario De La Independencia                               Centro 30560.202
## 6 Rosario De La Independencia                               Centro 32088.405
##   poblacion
## 1   1350475
## 2   1350475
## 3   1350475
## 4   1350475
## 5   1350475
## 6   1350475
espacios_verdes_rosario_total <- espacios_verdes_rosario%>%
  group_by(ciudad, poblacion)%>%
  summarise(area_verde = sum(area))
head(espacios_verdes_rosario_total)
## # A tibble: 1 x 3
## # Groups:   ciudad [1]
##   ciudad  poblacion area_verde
##   <chr>       <dbl>      <dbl>
## 1 Rosario   1350475   7542366.
barrios_rosario <- barrios%>%
  mutate(ciudad = 'ROSARIO')%>%
  mutate(barrio = BARRIO)%>%
  select(-gml_id, -MSLINK, -BARRIO)%>%
  mutate(area = st_area(barrios))%>%
  mutate(area = as.numeric(area))%>%
st_set_geometry(NULL)

head(barrios_rosario)
##    ciudad                        barrio       area
## 1 ROSARIO                Victoria Walsh   8823.922
## 2 ROSARIO                 14 de Octubre  22365.857
## 3 ROSARIO Docente "Hermanas Cossettini"  54551.070
## 4 ROSARIO                 Latinoamerica  74111.759
## 5 ROSARIO                   Bella Vista 260123.034
## 6 ROSARIO                 Parque Casado 338832.749
agrupado_barrios <- barrios_rosario%>%
  group_by(ciudad)%>%
  summarise(area_total = sum(area))
head(agrupado_barrios)
## # A tibble: 1 x 2
##   ciudad  area_total
##   <chr>        <dbl>
## 1 ROSARIO 179850244.
agrupado_barrios$ciudad <- str_to_lower(agrupado_barrios$ciudad)
espacios_verdes_rosario_total$ciudad <- str_to_lower(espacios_verdes_rosario_total$ciudad)
agrupado <- espacios_verdes_rosario_total%>%
  left_join(agrupado_barrios)
## Joining, by = "ciudad"
head (agrupado)
## # A tibble: 1 x 4
## # Groups:   ciudad [1]
##   ciudad  poblacion area_verde area_total
##   <chr>       <dbl>      <dbl>      <dbl>
## 1 rosario   1350475   7542366. 179850244.

(Aclaración: Rosario, Argentina (unidad administrativa: Santa Fe) - última población conocida es ≈ 1 305 100 (Año 2015). Este fue 3.006% del total población Argentina. Si la tasa de crecimiento de la población sería igual que en el periodo 2011-2015 (+0.69%/Año), Rosario la población en 2020 sería: 1 350 475*.)

agrupado <- agrupado%>%
  mutate(proporcion = (area_verde*100)/area_total)%>%
  mutate(m2_hab = area_verde/poblacion)%>%
  mutate_if(is.numeric, round, digits = 2)
## `mutate_if()` ignored the following grouping variables:
## Column `ciudad`
  kable(agrupado)
ciudad poblacion area_verde area_total proporcion m2_hab
rosario 1350475 7542366 179850244 4.19 5.58

Vemos que la proporción destinada a espacio verdes en la ciudad de Rosario es baja (4.19) , asi como tambien la proporción de espacio verde por habitante (5.59m2). Ya que como se nombró anteriormente la ONU recomienda disponer de un mínimo de entre nueve y once metros cuadrados

Accesibiladad

Otra característica de los espacios públicos ademas de la cantidad es la accesibilidad. Por eso cruzaremos información entre espacios verdes y sus distancias

Tomamos los centroides de los barrios como punto de referencia para medir las distancias

centroides_barrios_rosario <- barrio_distrito %>%
  st_centroid()
## Warning in st_centroid.sf(.): st_centroid assumes attributes are constant over
## geometries of x
## Warning in st_centroid.sfc(st_geometry(x), of_largest_polygon =
## of_largest_polygon): st_centroid does not give correct centroids for longitude/
## latitude data
ggplot()+
  geom_sf(data=barrio_distrito, fill="lightyellow")+
  geom_sf(data=centroides_barrios_rosario, color="red", shape=4, stroke=2, size=0.5)+
  labs(title = "Barrios de la Ciudad de Rosario",
         subtitle = "Ubicación de los centroides",
         caption= "Fuente:https://datos.rosario.gob.ar/")+
  theme_void()

distancia_barrios_rosario <- centroides_barrios_rosario%>%
                     mutate(distancia_verde = apply(st_distance(centroides_barrios_rosario, espacioverde_barrios), 1, function(x) min(x)))
seleccion_rosario <- distancia_barrios_rosario%>%
  st_set_geometry(NULL)
seleccion_rosario <- left_join(barrio_distrito, seleccion_rosario)
## Joining, by = c("gml_id.x", "MSLINK", "BARRIO", "gml_id.y", "DISTRITO", "OBSERVACIO")
seleccion_rosario <- seleccion_rosario%>%
  mutate(distancia_verde = round(distancia_verde, 2))
ggplot(data = seleccion_rosario) +
     geom_jitter(aes(x = DISTRITO, y = distancia_verde, color= DISTRITO)) +
     labs(title = "Distancia en metros a espacios verdes por Barrio", x = 'barrio', y = "Distancia al espacio verde más cercano", color = 'Ciudad', caption = 'Fuente:datos Rosario')+
  theme_minimal()

###Vemos que tanto en el distrito Sudoeste como Sur se ve una mayor disperción, es decir, tienen menor accesibilidad

Accesibiladad y Bicicletas Públicas

Entendemos que es fundamental el acceso a los espacios verdes , es por eso que vamos a utlizar los puntos de ecobicis

ecobicis <- st_read ('https://datos.rosario.gob.ar/sites/default/files/estaciones_de_bicicletas_publica.gml')
## Reading layer `estaciones_de_bicicletas_publica' from data source `https://datos.rosario.gob.ar/sites/default/files/estaciones_de_bicicletas_publica.gml' using driver `GML'
## Simple feature collection with 52 features and 11 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -60.68365 ymin: -32.97866 xmax: -60.62385 ymax: -32.91593
## geographic CRS: WGS 84
ggplot() +
    geom_sf(data = barrios) +
    geom_sf(data = ecobicis , colour = 'red')+
   geom_sf(data = datosparques , fill = 'darkgreen')+
    labs(title = "Ecobicis por Barrio en Rosario, Santa Fe",
         caption= "Fuente: https://datos.rosario.gob.ar/")+
    theme_minimal()

Tomamos los centroides de los barrios como punto de referencia para medir las distancias

centroides_espaciosverdes <- datosparques %>%
  st_centroid()
## Warning in st_centroid.sf(.): st_centroid assumes attributes are constant over
## geometries of x
## Warning in st_centroid.sfc(st_geometry(x), of_largest_polygon =
## of_largest_polygon): st_centroid does not give correct centroids for longitude/
## latitude data
datosparques_2 <- datosparques%>%
  st_join (centroides_espaciosverdes)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
datosparques_3 <- datosparques_2 %>%
  mutate(dist_ecobici = apply(st_distance(datosparques_2, ecobicis), 1, function(x) min(x)))
summary(datosparques_3$dist_ecobici)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0     319    1787    2337    4018    9549

La gran parte de las estaciones Ecobicis estan en los parques Visualicemos esto en un histograma para comprender mejor la distribución de los datos:

ggplot(datosparques_3) + 
    geom_histogram(aes(x = dist_ecobici))+
    labs(title = "Distancias entre espacios verdes y Ecobicis en Rosario, Santa Fe",  
         caption= "Fuente: https://datos.rosario.gob.ar/")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

datosparques_3 %>%
ggplot() +
  geom_sf(data=barrio_distrito)+
  geom_sf(aes(color=dist_ecobici)) +
  geom_sf(data=ecobicis) +
  scale_color_viridis_c(option = "plasma", direction = -1)+
   labs(title = "Distancias entre espacios verdes y Ecobicis en Rosario, Santa Fe",  
         caption= "Fuente: https://datos.rosario.gob.ar/")

En el mapa se ve como la distribución de la oferta de ecobicis no es aleatoria. Los patrones de los 2 dataset son muy similares: gran concentración de puntos en Centro.

Bicisendas

Asi tambien mapeas los recorridos de las bisendas para poder visualizar su alcance

bicisenda <- st_read ('https://datos.rosario.gob.ar/sites/default/files/ciclovias_y_bicisendas.gml')
## Reading layer `ciclovias_y_bicisendas' from data source `https://datos.rosario.gob.ar/sites/default/files/ciclovias_y_bicisendas.gml' using driver `GML'
## Simple feature collection with 1046 features and 18 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: -60.72032 ymin: -33.02907 xmax: -60.62063 ymax: -32.88436
## geographic CRS: WGS 84
ggplot() +
    geom_sf(data = barrios) +
    geom_sf(data = ecobicis , colour = 'red')+
   geom_sf(data = datosparques , fill = 'darkgreen')+
   geom_sf(data = bicisenda, color = "salmon", alpha = 10)+
    labs(title = "Ecobicis y Bicisendas en Rosario, Santa Fe",
         caption= "Fuente: https://datos.rosario.gob.ar/")+
    theme_minimal()

ecobici_barrio<- st_join(ecobicis,distritos)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
ggplot() +
    geom_sf(data = distritos) +
    geom_sf(data = ecobici_barrio, aes(color = DISTRITO))+
labs(title = "Estaciones de Bicicletas por Distrito",
         subtitle = "Ciudad de Rosario",
         fill = "Cantidad",
         caption= "Fuente: https://datos.rosario.gob.ar")

distritos_estaciones <- ecobici_barrio %>%
  filter(!is.na(DISTRITO)) %>%
  group_by(DISTRITO) %>%
  summarise(cantidad=n())
head(distritos_estaciones)
## Simple feature collection with 5 features and 2 fields
## geometry type:  MULTIPOINT
## dimension:      XY
## bbox:           xmin: -60.68365 ymin: -32.97866 xmax: -60.62385 ymax: -32.91593
## geographic CRS: WGS 84
## # A tibble: 5 x 3
##   DISTRITO cantidad                                                     geometry
##   <fct>       <int>                                             <MULTIPOINT [°]>
## 1 CENTRO         35 ((-60.68015 -32.94435), (-60.67203 -32.94586), (-60.67053 -~
## 2 NORTE           5 ((-60.67455 -32.92173), (-60.6731 -32.91593), (-60.66907 -3~
## 3 OESTE           5 ((-60.68365 -32.95779), (-60.68155 -32.95022), (-60.67633 -~
## 4 SUDOESTE        2                ((-60.66916 -32.97468), (-60.6606 -32.97153))
## 5 SUR             5 ((-60.66118 -32.97619), (-60.64944 -32.97858), (-60.64373 -~
distritos_estaciones_2<- distritos%>%
  st_join(distritos_estaciones, by="DISTRITO")
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
head(distritos_estaciones_2)
## Simple feature collection with 6 features and 5 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -60.7971 ymin: -33.03897 xmax: -60.61183 ymax: -32.86925
## geographic CRS: WGS 84
##                         gml_id DISTRITO.x                OBSERVACIO DISTRITO.y
## 1 distritos_descentralizados.1      NORTE           Villa Hortencia      NORTE
## 2 distritos_descentralizados.2   NOROESTE Olga y Leticia Cossettini       <NA>
## 3 distritos_descentralizados.3     CENTRO             Antonio Berni     CENTRO
## 4 distritos_descentralizados.4   SUDOESTE                      <NA>   SUDOESTE
## 5 distritos_descentralizados.5      OESTE               Felipe More      OESTE
## 6 distritos_descentralizados.6        SUR           Rosa Ziperovich        SUR
##   cantidad                       geometry
## 1        5 POLYGON ((-60.78204 -32.874...
## 2       NA POLYGON ((-60.77064 -32.896...
## 3       35 POLYGON ((-60.69245 -32.948...
## 4        2 POLYGON ((-60.69016 -33.034...
## 5        5 POLYGON ((-60.7605 -32.9509...
## 6        5 POLYGON ((-60.65979 -32.969...
ggplot() +
  geom_sf(data = distritos_estaciones_2, aes(fill=cantidad)) +
  geom_sf_text(data=distritos_estaciones_2, aes(label = DISTRITO.y), size=1.5, colour = "black") +
    labs(title = "Estaciones de Bicicletas por Distrito",
         subtitle = "Ciudad de Rosario",
         fill = "Cantidad",
         caption= "Fuente: https://datos.rosario.gob.ar",
         y="latitud",
         x="longitud") +
        scale_fill_gradient(low="yellow", high="dark green")
## Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning: Removed 1 rows containing missing values (geom_text).

ggplot(distritos_estaciones) +
geom_bar(aes(x = DISTRITO, weight = cantidad, fill=DISTRITO)) +
coord_flip() + 
 labs(title = "Estaciones de Ecobici por DISTRITO",
subtitle = "Ciudad de Rosario",
caption = "Fuente: portal de datos abiertos de la Ciudad de Rosario, https://datos.rosario.gob.ar",
x = "DISTRITO",
y = "CANTIDAD")

distritos_estaciones_2 <- distritos_estaciones_2 %>%
  
  mutate(superficie = st_area(distritos_estaciones_2))
distritos_estaciones_2<- distritos_estaciones_2 %>%
  mutate(superficie_ha=round(as.numeric(superficie)/10000, 2))
ggplot() +
  geom_sf(data = distritos_estaciones_2, aes(fill=cantidad/superficie_ha)) +
  geom_sf_text(data=distritos, aes(label = DISTRITO), size=2.5, colour = "black") +
    labs(title = "Estaciones de Bici por superficie",
         subtitle = "Ciudad de Rosario",
         fill = "Cantidad por ha",
         caption= "Fuente: https://datos.rosario.gob.ar",
         y="latitud",
         x="longitud") +
        scale_fill_gradient(low="khaki2", high="deeppink4")
## Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
## give correct results for longitude/latitude data

La tendencia en el Distrito Centro es por demás marcada. Tanto los puntos de Ecobici como las bicisendas se encuentran en su mayoría allí.

Accesibiladad Peatonal

Vamos a realizar un mapa que nos indique desde que puntos de la ciudad estamos a 10 minutos caminando

leaflet(datosparques) %>% 
  addProviderTiles(providers$CartoDB.Positron) %>%
  addPolygons()
datosparques <- st_transform(datosparques,
                               crs = "+proj=tmerc +lat_0=-34.6297166 +lon_0=-58.4627 +k=1 +x_0=100000 +y_0=100000 +ellps=intl +units=m +no_defs")
datosparques <- datosparques %>% 
                  mutate(area=st_area(.)) %>% 
                  mutate(area=as.numeric(area)) %>%
                  filter(area>10000) 
leaflet(datosparques %>% st_transform(4326)) %>% 
  addProviderTiles(providers$CartoDB.Positron) %>%
  addPolygons()
set_key("m_gy2KqFB7XZKbjIh1ZIPgeLhuj-GWrZ7xw48GEtd6A")
# Para cada uno de los espacios verdes agarramos 4 puntos al azar
puntosEspaciosVerdes <- purrr::map(1:nrow(datosparques),function(x){
  st_sample(datosparques[x,],size= 4)
})
# Juntamos todos los puntos en un objeto
puntosEspaciosVerdes <- do.call("c",puntosEspaciosVerdes)
# Lo convertimos a un objeto SF
puntosEspaciosVerdesSF <- st_as_sf(puntosEspaciosVerdes)
# Hacemos una transformación para que esté en el WSG84, que es lo que puede procesar isoline()
puntosEspaciosVerdesSF <- st_transform(puntosEspaciosVerdesSF,crs=4326)
# Efectivamente calculamos las isocronas para cada uno de los puntos
isocronosEspaciosVerdes <- purrr::map(1:nrow(puntosEspaciosVerdesSF),function(x) {
  # Esta línea es solo para que nos vaya avisando qué está haciendo
  cat("Procesando: ",x,"\r")
  isoline(puntosEspaciosVerdesSF[x,], mode = "pedestrian",range_type = "time",range = 60*10)
})
## Procesando:  1 
Procesando:  2 
Procesando:  3 
Procesando:  4 
Procesando:  5 
Procesando:  6 
Procesando:  7 
Procesando:  8 
Procesando:  9 
Procesando:  10 
Procesando:  11 
Procesando:  12 
Procesando:  13 
Procesando:  14 
Procesando:  15 
Procesando:  16 
Procesando:  17 
Procesando:  18 
Procesando:  19 
Procesando:  20 
Procesando:  21 
Procesando:  22 
Procesando:  23 
Procesando:  24 
Procesando:  25 
Procesando:  26 
Procesando:  27 
Procesando:  28 
Procesando:  29 
Procesando:  30 
Procesando:  31 
Procesando:  32 
Procesando:  33 
Procesando:  34 
Procesando:  35 
Procesando:  36 
Procesando:  37 
Procesando:  38 
Procesando:  39 
Procesando:  40 
Procesando:  41 
Procesando:  42 
Procesando:  43 
Procesando:  44 
Procesando:  45 
Procesando:  46 
Procesando:  47 
Procesando:  48 
Procesando:  49 
Procesando:  50 
Procesando:  51 
Procesando:  52 
Procesando:  53 
Procesando:  54 
Procesando:  55 
Procesando:  56 
Procesando:  57 
Procesando:  58 
Procesando:  59 
Procesando:  60 
Procesando:  61 
Procesando:  62 
Procesando:  63 
Procesando:  64 
Procesando:  65 
Procesando:  66 
Procesando:  67 
Procesando:  68 
Procesando:  69 
Procesando:  70 
Procesando:  71 
Procesando:  72 
Procesando:  73 
Procesando:  74 
Procesando:  75 
Procesando:  76 
Procesando:  77 
Procesando:  78 
Procesando:  79 
Procesando:  80 
Procesando:  81 
Procesando:  82 
Procesando:  83 
Procesando:  84 
Procesando:  85 
Procesando:  86 
Procesando:  87 
Procesando:  88 
Procesando:  89 
Procesando:  90 
Procesando:  91 
Procesando:  92 
Procesando:  93 
Procesando:  94 
Procesando:  95 
Procesando:  96 
Procesando:  97 
Procesando:  98 
Procesando:  99 
Procesando:  100 
Procesando:  101 
Procesando:  102 
Procesando:  103 
Procesando:  104 
Procesando:  105 
Procesando:  106 
Procesando:  107 
Procesando:  108 
Procesando:  109 
Procesando:  110 
Procesando:  111 
Procesando:  112 
Procesando:  113 
Procesando:  114 
Procesando:  115 
Procesando:  116 
Procesando:  117 
Procesando:  118 
Procesando:  119 
Procesando:  120 
Procesando:  121 
Procesando:  122 
Procesando:  123 
Procesando:  124 
Procesando:  125 
Procesando:  126 
Procesando:  127 
Procesando:  128 
Procesando:  129 
Procesando:  130 
Procesando:  131 
Procesando:  132 
Procesando:  133 
Procesando:  134 
Procesando:  135 
Procesando:  136 
Procesando:  137 
Procesando:  138 
Procesando:  139 
Procesando:  140 
Procesando:  141 
Procesando:  142 
Procesando:  143 
Procesando:  144 
Procesando:  145 
Procesando:  146 
Procesando:  147 
Procesando:  148 
Procesando:  149 
Procesando:  150 
Procesando:  151 
Procesando:  152 
Procesando:  153 
Procesando:  154 
Procesando:  155 
Procesando:  156 
Procesando:  157 
Procesando:  158 
Procesando:  159 
Procesando:  160 
Procesando:  161 
Procesando:  162 
Procesando:  163 
Procesando:  164 
Procesando:  165 
Procesando:  166 
Procesando:  167 
Procesando:  168 
Procesando:  169 
Procesando:  170 
Procesando:  171 
Procesando:  172 
Procesando:  173 
Procesando:  174 
Procesando:  175 
Procesando:  176 
Procesando:  177 
Procesando:  178 
Procesando:  179 
Procesando:  180 
Procesando:  181 
Procesando:  182 
Procesando:  183 
Procesando:  184 
Procesando:  185 
Procesando:  186 
Procesando:  187 
Procesando:  188 
Procesando:  189 
Procesando:  190 
Procesando:  191 
Procesando:  192 
Procesando:  193 
Procesando:  194 
Procesando:  195 
Procesando:  196 
Procesando:  197 
Procesando:  198 
Procesando:  199 
Procesando:  200 
Procesando:  201 
Procesando:  202 
Procesando:  203 
Procesando:  204 
Procesando:  205 
Procesando:  206 
Procesando:  207 
Procesando:  208 
Procesando:  209 
Procesando:  210 
Procesando:  211 
Procesando:  212 
Procesando:  213 
Procesando:  214 
Procesando:  215 
Procesando:  216 
Procesando:  217 
Procesando:  218 
Procesando:  219 
Procesando:  220 
Procesando:  221 
Procesando:  222 
Procesando:  223 
Procesando:  224 
Procesando:  225 
Procesando:  226 
Procesando:  227 
Procesando:  228 
Procesando:  229 
Procesando:  230 
Procesando:  231 
Procesando:  232 
Procesando:  233 
Procesando:  234 
Procesando:  235 
Procesando:  236 
Procesando:  237 
Procesando:  238 
Procesando:  239 
Procesando:  240 
Procesando:  241 
Procesando:  242 
Procesando:  243 
Procesando:  244 
Procesando:  245 
Procesando:  246 
Procesando:  247 
Procesando:  248 
Procesando:  249 
Procesando:  250 
Procesando:  251 
Procesando:  252 
Procesando:  253 
Procesando:  254 
Procesando:  255 
Procesando:  256 
Procesando:  257 
Procesando:  258 
Procesando:  259 
Procesando:  260 
Procesando:  261 
Procesando:  262 
Procesando:  263 
Procesando:  264 
Procesando:  265 
Procesando:  266 
Procesando:  267 
Procesando:  268 
Procesando:  269 
Procesando:  270 
Procesando:  271 
Procesando:  272 
Procesando:  273 
Procesando:  274 
Procesando:  275 
Procesando:  276 
Procesando:  277 
Procesando:  278 
Procesando:  279 
Procesando:  280 
Procesando:  281 
Procesando:  282 
Procesando:  283 
Procesando:  284 
Procesando:  285 
Procesando:  286 
Procesando:  287 
Procesando:  288 
Procesando:  289 
Procesando:  290 
Procesando:  291 
Procesando:  292 
Procesando:  293 
Procesando:  294 
Procesando:  295 
Procesando:  296 
Procesando:  297 
Procesando:  298 
Procesando:  299 
Procesando:  300 
Procesando:  301 
Procesando:  302 
Procesando:  303 
Procesando:  304 
Procesando:  305 
Procesando:  306 
Procesando:  307 
Procesando:  308 
Procesando:  309 
Procesando:  310 
Procesando:  311 
Procesando:  312 
Procesando:  313 
Procesando:  314 
Procesando:  315 
Procesando:  316 
Procesando:  317 
Procesando:  318 
Procesando:  319 
Procesando:  320 
Procesando:  321 
Procesando:  322 
Procesando:  323 
Procesando:  324 
Procesando:  325 
Procesando:  326 
Procesando:  327 
Procesando:  328 
Procesando:  329 
Procesando:  330 
Procesando:  331 
Procesando:  332 
Procesando:  333 
Procesando:  334 
Procesando:  335 
Procesando:  336 
Procesando:  337 
Procesando:  338 
Procesando:  339 
Procesando:  340 
Procesando:  341 
Procesando:  342 
Procesando:  343 
Procesando:  344 
Procesando:  345 
Procesando:  346 
Procesando:  347 
Procesando:  348 
Procesando:  349 
Procesando:  350 
Procesando:  351 
Procesando:  352 
Procesando:  353 
Procesando:  354 
Procesando:  355 
Procesando:  356 
Procesando:  357 
Procesando:  358 
Procesando:  359 
Procesando:  360 
Procesando:  361 
Procesando:  362 
Procesando:  363 
Procesando:  364 
Procesando:  365 
Procesando:  366 
Procesando:  367 
Procesando:  368 
Procesando:  369 
Procesando:  370 
Procesando:  371 
Procesando:  372 
Procesando:  373 
Procesando:  374 
Procesando:  375 
Procesando:  376 
Procesando:  377 
Procesando:  378 
Procesando:  379 
Procesando:  380 
Procesando:  381 
Procesando:  382 
Procesando:  383 
Procesando:  384 
Procesando:  385 
Procesando:  386 
Procesando:  387 
Procesando:  388 
Procesando:  389 
Procesando:  390 
Procesando:  391 
Procesando:  392 
Procesando:  393 
Procesando:  394 
Procesando:  395 
Procesando:  396 
Procesando:  397 
Procesando:  398 
Procesando:  399 
Procesando:  400 
Procesando:  401 
Procesando:  402 
Procesando:  403 
Procesando:  404 
Procesando:  405 
Procesando:  406 
Procesando:  407 
Procesando:  408 
Procesando:  409 
Procesando:  410 
Procesando:  411 
Procesando:  412 
Procesando:  413 
Procesando:  414 
Procesando:  415 
Procesando:  416 
Procesando:  417 
Procesando:  418 
Procesando:  419 
Procesando:  420 
Procesando:  421 
Procesando:  422 
Procesando:  423 
Procesando:  424 
Procesando:  425 
Procesando:  426 
Procesando:  427 
Procesando:  428 
Procesando:  429 
Procesando:  430 
Procesando:  431 
Procesando:  432 
Procesando:  433 
Procesando:  434 
Procesando:  435 
Procesando:  436 
Procesando:  437 
Procesando:  438 
Procesando:  439 
Procesando:  440 
Procesando:  441 
Procesando:  442 
Procesando:  443 
Procesando:  444 
Procesando:  445 
Procesando:  446 
Procesando:  447 
Procesando:  448 
Procesando:  449 
Procesando:  450 
Procesando:  451 
Procesando:  452 
Procesando:  453 
Procesando:  454 
Procesando:  455 
Procesando:  456 
Procesando:  457 
Procesando:  458 
Procesando:  459 
Procesando:  460 
Procesando:  461 
Procesando:  462 
Procesando:  463 
Procesando:  464 
# Los juntamos en el mismo data frame
isocronosEspaciosVerdesJuntas <- do.call(rbind,isocronosEspaciosVerdes)
# Hacemos un gran poligono
isocronosEspaciosVerdesJuntasUnion <-  st_union(isocronosEspaciosVerdesJuntas)
leaflet(isocronosEspaciosVerdesJuntasUnion %>% st_transform(4326)) %>% 
  addTiles() %>% 
  addPolygons()
manzanas <- st_read ('https://datos.rosario.gob.ar/sites/default/files/manzanas.gml')
## Reading layer `manzanas' from data source `https://datos.rosario.gob.ar/sites/default/files/manzanas.gml' using driver `GML'
## Simple feature collection with 8509 features and 4 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -60.78127 ymin: -33.03465 xmax: -60.614 ymax: -32.87056
## geographic CRS: WGS 84
# Transformamos la proyección de las manzanas
manzanas <- manzanas %>%
            st_transform("+proj=tmerc +lat_0=-34.6297166 +lon_0=-58.4627 +k=1 +x_0=100000 +y_0=100000 +ellps=intl +units=m +no_defs")
# Transformamos la proyección de la cobertura de espacios verdes
isocronosEspaciosVerdesJuntasUnion <- isocronosEspaciosVerdesJuntasUnion %>%
  st_transform("+proj=tmerc +lat_0=-34.6297166 +lon_0=-58.4627 +k=1 +x_0=100000 +y_0=100000 +ellps=intl +units=m +no_defs")
# Lo convertimos en un objeto sf y creamos una columna, cobertura, que tendrá valor TRUE siempre
isocronosEspaciosVerdesJuntasUnion <- st_as_sf(isocronosEspaciosVerdesJuntasUnion) %>% 
mutate(cobertura=TRUE)
# Spatial join
manzanas <- st_join(manzanas,st_as_sf(isocronosEspaciosVerdesJuntasUnion))
# Completamos los datos para los casos en los cuales no hubo ningún resultadoe en el match
manzanas <- manzanas %>% mutate(cobertura=ifelse(is.na(cobertura),FALSE,TRUE))
bbRosario <-getbb("Rosario, Argentina")
RosarioBaseMap <- get_stamenmap(bbRosario,maptype = "toner-lite",zoom=12)
## Source : http://tile.stamen.com/toner-lite/12/1356/2444.png
## Source : http://tile.stamen.com/toner-lite/12/1357/2444.png
## Source : http://tile.stamen.com/toner-lite/12/1358/2444.png
## Source : http://tile.stamen.com/toner-lite/12/1356/2445.png
## Source : http://tile.stamen.com/toner-lite/12/1357/2445.png
## Source : http://tile.stamen.com/toner-lite/12/1358/2445.png
## Source : http://tile.stamen.com/toner-lite/12/1356/2446.png
## Source : http://tile.stamen.com/toner-lite/12/1357/2446.png
## Source : http://tile.stamen.com/toner-lite/12/1358/2446.png
ggmap(RosarioBaseMap,extent = "device") +
  geom_sf(data=manzanas %>% st_transform(4326),aes(fill=cobertura), color=NA, inherit.aes=FALSE, alpha=0.7) +
    theme_minimal() +
  coord_sf(datum=NA) +
  labs(x="",y="") +
  scale_fill_manual(values = c("#37b84f","#e41a1c"),
                    breaks = c(TRUE,FALSE),
                    labels=c("Menos de 10 minutos","Más de 10 minutos"),
                    name="")+
  theme(legend.position = "bottom")
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.

Relaciones

Vamos a ver si existe relación entre el precio del m2 y la distancia a un espacio verde

ar_properties <- read.csv("C:/Users/garbarino39/Desktop/ar_properties.csv", stringsAsFactors = FALSE,
                   encoding = "UTF-8")
names(ar_properties)
##  [1] "id"              "ad_type"         "start_date"      "end_date"       
##  [5] "created_on"      "lat"             "lon"             "l1"             
##  [9] "l2"              "l3"              "l4"              "l5"             
## [13] "l6"              "rooms"           "bedrooms"        "bathrooms"      
## [17] "surface_total"   "surface_covered" "price"           "currency"       
## [21] "price_period"    "title"           "description"     "property_type"  
## [25] "operation_type"
rosarioproperati <- filter(ar_properties, l3 == "Rosario", operation_type== "Alquiler", property_type == "Departamento")
rosarioproperatii2_b <- rosarioproperati %>% 
    filter(!is.na(lat), !is.na(lon)) %>% 
    st_as_sf(coords = c("lon", "lat"), crs = 4326)
st_crs(rosarioproperatii2_b)
## Coordinate Reference System:
##   User input: EPSG:4326 
##   wkt:
## GEOGCRS["WGS 84",
##     DATUM["World Geodetic System 1984",
##         ELLIPSOID["WGS 84",6378137,298.257223563,
##             LENGTHUNIT["metre",1]]],
##     PRIMEM["Greenwich",0,
##         ANGLEUNIT["degree",0.0174532925199433]],
##     CS[ellipsoidal,2],
##         AXIS["geodetic latitude (Lat)",north,
##             ORDER[1],
##             ANGLEUNIT["degree",0.0174532925199433]],
##         AXIS["geodetic longitude (Lon)",east,
##             ORDER[2],
##             ANGLEUNIT["degree",0.0174532925199433]],
##     USAGE[
##         SCOPE["unknown"],
##         AREA["World"],
##         BBOX[-90,-180,90,180]],
##     ID["EPSG",4326]]
rosarioproperatii2_b1 <- filter (rosarioproperatii2_b, price <50000, currency == "ARS", surface_total<600)
summary(rosarioproperatii2_b$price)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0    8000    9800   11727   13000  900000     288
ggplot(rosarioproperatii2_b1) + 
    geom_histogram(aes(x = price))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

###Veamos si hay alguna relación entre el valor del alquiler de un departamento y la distancia a espacios verdes. #Vamos a calcular la distancia en m2 desde cada departamento en alquiler a un espacio verde. Creamos un centroide en cada espacio verde y calculamos la distancia creando una nueva variable llamada dist_verde

datosparquesreg <- datosparques %>% 
                   st_transform("+proj=tmerc +lat_0=-34.6297166 +lon_0=-58.4627 +k=1 +x_0=100000 +y_0=100000 +ellps=intl +units=m +no_defs")
centroideparques <- datosparquesreg %>%
  st_centroid()
## Warning in st_centroid.sf(.): st_centroid assumes attributes are constant over
## geometries of x
centroideparques <- centroideparques %>% 

   st_transform("+proj=tmerc +lat_0=-34.6297166 +lon_0=-58.4627 +k=1 +x_0=100000 +y_0=100000 +ellps=intl +units=m +no_defs")
rosarioproperatii2_b <- rosarioproperatii2_b %>% 

    st_transform("+proj=tmerc +lat_0=-34.6297166 +lon_0=-58.4627 +k=1 +x_0=100000 +y_0=100000 +ellps=intl +units=m +no_defs")
properati_espacioverde <- rosarioproperatii2_b %>%
  mutate(dist_verde = apply(st_distance(rosarioproperatii2_b, centroideparques), 1, function(x) min(x)))

Limpiamos los datos ya que observamos algunos valores atípicos (outliers)

properati_espacioverde <- filter (properati_espacioverde, price <50000, currency == "ARS", dist_verde<5000, surface_total<600)

Gráficamos los departamentos en alquiler según precio y distancia espacio verde

ggplot() +
    geom_sf(data = barrios) +
  geom_sf(data = properati_espacioverde, (aes(color=price))) +
  scale_color_viridis_c(option = "plasma", direction = -1)+
    theme_map()+
  labs(title = "Price de departamentos en Rosario", caption = 'Fuente: Rosario Datos | Properati')

ggplot() +
    geom_sf(data = barrios) +
  geom_sf(data = properati_espacioverde, (aes(color=dist_verde))) +
  scale_color_viridis_c(option = "plasma", direction = 1)+
  theme_map()+
  labs(title = "Distancia de departamento a espacio verde público en Rosario", caption = 'Fuente: Rosario Datos | properati')

En principio, no parece darse una relación muy clara entre cercanía a espacios verdes y valor del metro cuadrado. Veamos si hay alguna correlación estadística:

properati_espacioverde <- properati_espacioverde%>%
  filter(!is.na(price))

modelo_exp <- lm(price ~ dist_verde, data = properati_espacioverde)
modelo_exp
## 
## Call:
## lm(formula = price ~ dist_verde, data = properati_espacioverde)
## 
## Coefficients:
## (Intercept)   dist_verde  
##   12132.646       -1.415
summary(modelo_exp)
## 
## Call:
## lm(formula = price ~ dist_verde, data = properati_espacioverde)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -8066  -3554  -1572   1721  36755 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 12132.6462   182.0180  66.656  < 2e-16 ***
## dist_verde     -1.4149     0.3291  -4.299 1.76e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5605 on 4239 degrees of freedom
## Multiple R-squared:  0.00434,    Adjusted R-squared:  0.004105 
## F-statistic: 18.48 on 1 and 4239 DF,  p-value: 1.757e-05
ggplot(data = properati_espacioverde, mapping = aes(x=dist_verde, y = price))+
  geom_point()+
  geom_abline(aes(intercept =  12526.19        
, slope =  -3.08 ), color = 'blue')+
  labs(title = 'Correlación entre distancia a espacios verdes y valor del alquiler', x = 'Distancia en metros a espacios verdes', y = 'Valor inmobiliario del Alquiler', caption = 'Fuente: Rosario datos| Properati')

cor(properati_espacioverde$price, properati_espacioverde$dist_verde)
## [1] -0.06588126

A partir del coeficiente obtenido vemos que la correlación es prácticamente nula. Vamos a calcular de nuevo el modelo incorporando la variable superficie total por departamento para ver si encontramos una correlación estadísticamente significativa

plot(residuals(modelo_exp))

Regresión multiple

modelo_exp_multiple <- lm(price ~ dist_verde + surface_total, data = properati_espacioverde)
modelo_exp_multiple
## 
## Call:
## lm(formula = price ~ dist_verde + surface_total, data = properati_espacioverde)
## 
## Coefficients:
##   (Intercept)     dist_verde  surface_total  
##     3972.9789        -0.8362       153.8532
summary(modelo_exp_multiple)
## 
## Call:
## lm(formula = price ~ dist_verde + surface_total, data = properati_espacioverde)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -23475  -1940   -576   1237  36278 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   3972.9789   172.5858  23.020  < 2e-16 ***
## dist_verde      -0.8362     0.2266  -3.691 0.000226 ***
## surface_total  153.8532     2.2395  68.699  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3856 on 4238 degrees of freedom
## Multiple R-squared:  0.5289, Adjusted R-squared:  0.5287 
## F-statistic:  2379 on 2 and 4238 DF,  p-value: < 2.2e-16

A partir de la tabla de correlación obtenida podemos observar que la superficie total del departamento si es una variable estadísticamente significativa pero no existe correlación entre el valor de alquiler de un departamento y la distancia al espacio público verde.

Nos fijamos el intervalo de confianza para cada una de las variables.

confint(modelo_exp_multiple)
##                     2.5 %       97.5 %
## (Intercept)   3634.620318 4311.3374456
## dist_verde      -1.280432   -0.3920197
## surface_total  149.462540  158.2438502

A partir de la tabla de correlación obtenida podemos observar que la superficie total del departamento si es una variable estadísticamente significativa pero no existe correlación entre el valor de alquiler de un departamento y la distancia al espacio público verde.

vecinosRosario <- knn2nb(knearneigh(as_Spatial(properati_espacioverde), k = 3))
## Warning in knearneigh(as_Spatial(properati_espacioverde), k = 3): knearneigh:
## identical points found
vecinosRosario <- nb2listw(vecinosRosario, style="W")
class(vecinosRosario)
## [1] "listw" "nb"
properati_espacioverde$precioVecinosk3 <- lag.listw(x = vecinosRosario,
var = properati_espacioverde$price)

Vamos a hacer un gráfico para ver de las observaciones para ver la relación con el precio de las observaciones y sus vecinos

ggplot(properati_espacioverde) +
geom_point(aes(x=precioVecinosk3,y=price))

Vamos a realizar el Test I de Morán para ver si existe despendecia espacial en nuestros datos

regMoran <- lm(formula = precioVecinosk3 ~ price ,
data = properati_espacioverde)
summary(regMoran)
## 
## Call:
## lm(formula = precioVecinosk3 ~ price, data = properati_espacioverde)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -13458.3  -2161.0   -717.8   1335.7  27973.4 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 7.072e+03  1.261e+02   56.10   <2e-16 ***
## price       3.678e-01  9.890e-03   37.19   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3617 on 4239 degrees of freedom
## Multiple R-squared:  0.246,  Adjusted R-squared:  0.2459 
## F-statistic:  1383 on 1 and 4239 DF,  p-value: < 2.2e-16
coef(regMoran)[2]
##     price 
## 0.3678405

Enconstramos que en nuestra de inmuebles no exite una relación alta ni significativa entre el precio de la observacion y el de sus vecinos

Vamos a reestimar el modelo para ello vamos hacer una simulación de 1000 veces para poder corroborar por el error muestral si efectivamente no existe relacion entre el precio de la observacion y sus vecinos

set.seed(1)
samples <- c(1:1000)
MCoef <- c()
for(sample in samples) {
precio <- sample(properati_espacioverde$price, replace=FALSE)
precio.lag <- lag.listw(vecinosRosario, precio)
MCoef<- c(MCoef,
coef(lm(precio.lag ~ precio))[2])
}
ggplot() +
geom_histogram(aes(x = MCoef))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

sum(coef(regMoran)[2]>MCoef)
## [1] 1000
ggplot() +
geom_histogram(aes(x = MCoef)) +
geom_vline(xintercept = coef(regMoran)[2])
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Al ver el p-valor = 0.000999 podemos obserbar que tan probable es haber obtenido de el “I” de moran de 0.36

moran.mc(x = properati_espacioverde$price,listw = vecinosRosario, nsim=1000)
## 
##  Monte-Carlo simulation of Moran I
## 
## data:  properati_espacioverde$price 
## weights: vecinosRosario  
## number of simulations + 1: 1001 
## 
## statistic = 0.36784, observed rank = 1001, p-value = 0.000999
## alternative hypothesis: greater

A modo de reflexión podemos ver que los espacios verdes en la ciudad de Rosario no son suficiente, ni están bien distribuidos a lo largo del territorio. Lo cierto es que creemos que este es un tema de suma relevancia que a veces por las reglas del mercado se deja de lado y no se priorizan. En el marco de la cuarentena en que nos encontramos, se puede ver la importancia de los mismos.