CArgo librerias OSMData cARgo Librerias

library(osmdata)
## Warning: package 'osmdata' was built under R version 3.6.1
## Registered S3 method overwritten by 'rvest':
##   method            from
##   read_xml.response xml2
## Data (c) OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.2.1 --
## v ggplot2 3.2.0       v purrr   0.3.2  
## v tibble  2.1.1       v dplyr   0.8.0.1
## v tidyr   0.8.3       v stringr 1.4.0  
## v readr   1.3.1       v forcats 0.4.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(leaflet)
## Warning: package 'leaflet' was built under R version 3.6.1
library(sf)
## Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
bbox <- getbb("CABA, Buenos Aires")

bbox
##         min       max
## x -58.53146 -58.33512
## y -34.70564 -34.52655
bbox_pol_caba <- getbb("CABA, Buenos Aires", format_out = "sf_polygon")

Le agrego el poligono deBuenos AIres

leaflet() %>%
  addTiles() %>%
  addPolygons(data=bbox_pol_caba)

Descargar Red Vial, le digo de que rectangulo voy a bajar informacion.

Baires <- opq(bbox) %>%
  add_osm_feature(key="highway")

Baires
## $bbox
## [1] "-34.705637,-58.5314588,-34.5265535,-58.3351249"
## 
## $prefix
## [1] "[out:xml][timeout:25];\n(\n"
## 
## $suffix
## [1] ");\n(._;>;);\nout body;"
## 
## $features
## [1] " [\"highway\"]"
## 
## attr(,"class")
## [1] "list"           "overpass_query"

Le cargo las calles, y lo guardo en un dataframe que se llama Baires

Baires <- opq(bbox) %>%
  add_osm_feature(key="highway")%>%
  osmdata_sf
Baires
## Object of class 'osmdata' with:
##                  $bbox : -34.705637,-58.5314588,-34.5265535,-58.3351249
##         $overpass_call : The call submitted to the overpass API
##                  $meta : metadata including timestamp and version numbers
##            $osm_points : 'sf' Simple Features Collection with 111101 points
##             $osm_lines : 'sf' Simple Features Collection with 34525 linestrings
##          $osm_polygons : 'sf' Simple Features Collection with 666 polygons
##        $osm_multilines : NULL
##     $osm_multipolygons : 'sf' Simple Features Collection with 25 multipolygons

Me quedo con las calles

calles_baires <- Baires$osm_lines
library(ggplot2)
calles_baires <- st_intersection(calles_baires, bbox_pol_caba)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant
## throughout all geometries
ggplot() +
  geom_sf(data=calles_baires)

Limpiamos el dataframe

calles_baires <- calles_baires %>% 
  mutate(maxspeed = as.numeric(maxspeed),
         lanes = ifelse(is.na(lanes), 1, as.numeric(lanes)))

Ahora puedo ver las velocidades mapeado

ggplot(calles_baires) +
    geom_sf(aes(color = maxspeed), alpha = 0.5) +
    scale_color_viridis_c() +
      theme_void() +
    labs(title = "Buenos Aires",
         subtitle = "Vías de circulación",
         caption = "fuente: OpenStreetMap",
         color = "velocidad máxima")

Ahora puedo ver las calles de doble mano

ggplot(calles_baires) +
    geom_sf(aes(color = lanes), alpha = 0.5) +
    scale_color_viridis_c() +
      theme_void() +
    labs(title = "Buenos Aires",
         subtitle = "Vías de circulación",
         caption = "fuente: OpenStreetMap",
         color = "velocidad máxima")

Voy a elegir bancos y ver como se distribuyen en la ciudad, lo armo en un dataframe nuevo baires_bancos

baires_bancos <- opq(bbox_pol_caba) %>% 
  add_osm_feature(key = "amenity", value = "bank") %>% 
  osmdata_sf() 

Intersecto lineas y puntos para luego hacer en el mapa

baires_bancos <- st_intersection(baires_bancos$osm_points, bbox_pol_caba)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant
## throughout all geometries
ggplot() +
  geom_sf(data = calles_baires, 
            color = "darkslateblue") +
  geom_sf(data = baires_bancos) +
  geom_sf_label(data = baires_bancos, 
                  aes(label = name), size = 2) +
  theme_void() +
  labs(title = "Buenos Aires",
       subtitle = "Bancos",
       caption = "fuente: OpenStreetMap")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
## not give correct results for longitude/latitude data
## Warning: Removed 1309 rows containing missing values (geom_label).

barrios <- st_read("http://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson")
## Reading layer `barrios_badata' from data source `http://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson' using driver `GeoJSON'
## Simple feature collection with 48 features and 4 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
cantidad <- baires_bancos %>% 
  summarise(cantidad = n())%>%
  st_set_geometry(NULL)

Mapeo por barrios

ggplot() +
  geom_sf(data = barrios) +
  geom_sf(data = baires_bancos, color = "red", alpha = .3)

ahora traigo los gimnasios

gimnasios <- read.csv("~/MEU/MU115 - CIencia de Datos II/gimnasios.csv", header=TRUE)

Ahora los dibujo los dos juntos, ya que uno es “Espacial”, y el otro es un dataset comun.Lo hago con ggplot

ggplot() +
    geom_sf(data = barrios) +
    geom_point(data = gimnasios, 
               aes(x = long, y = lat),
               alpha = .3, 
               color = "red")
## Warning: Removed 4 rows containing missing values (geom_point).

Obviamente no hay mucha relacion entre los gimnasios y los bancos en la ciudad, en el mapa anterior se ve que las sucursales bancarias tienen una distribucion geografica mas relacionada a la actividad comercial, y mas precisamente se ubican preferentemente en la linea de las grandes avenidas, y sobre todo en el area del microcentro (en la city porteña). LA distribucion de los gimnasios parece bastante aleatoria, la mayor cantidad se ubican en el corredor norte de la ciudad, principalmente en los barrios de Palermo, Nuñez, Colegiales y Caballito.

gimnasios <- gimnasios %>%
  select(-barrio) %>%
    filter(!is.na(lat), !is.na(long)) %>% 
    st_as_sf(coords = c("long", "lat"), crs = 4326)
gimnasios_en_barrios <- st_join(gimnasios, barrios)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
cantidad <- gimnasios_en_barrios %>% 
  group_by(barrio) %>% 
  summarise(cantidad = n())%>%
  st_set_geometry(NULL)
barrios_gimnasios <- left_join(barrios, cantidad)
## Joining, by = "barrio"
ggplot()+
geom_sf(data=barrios_gimnasios, aes(fill=cantidad))

bancos_en_barrios <- st_join(baires_bancos, barrios)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
cantidad_bancos <- bancos_en_barrios %>% 
  group_by(barrio) %>% 
  summarise(cantidad = n())%>%
  st_set_geometry(NULL)
bancos_en_barrios <- left_join(barrios, cantidad_bancos)
## Joining, by = "barrio"

veo que barrio tiene más bancos:

ggplot()+
geom_sf(data=bancos_en_barrios, aes(fill=cantidad))

Comaprando los dos mapas que contabilizan la cantidad de amenities x barrio, es mas claro que el barrio que mas bancos posee es San Nicolas, asiento de la City Porteña, y el barrio que mas gimnasios tiene es Palermo. el Barrio que menos bancos tiene es Villa Riachuelo, Coghlan, agronomia y Versalles, mientras que los que menos gimnasios tienen son Coghlan, Villa Ortuzar, Monte Castro, Villa Lugano y Villa Soldati. Tal vez una buena medida para determinar la distribucion de los gimnasios o bancos en los barrios seria mapear la densidad de cada barrio, ya que en barrios como Villa Ortuzar o Coghlan, la caracteristica es mas residencial, de viviendas unifamiliares, que resulta poco atractivo ubicar un gimnasio o un banmco. ADemas habria que revisar las regulaciones de uso del suelo, porque tal vez este relacionado con la normativa. En los barrios del sur de la ciudad, como Villa Riachuelo, es probable que la situacion de menos seguridad resulte la explicacion a la inexistencia de sucursal bancaria.