Módulo 1: Geoprocesamiento

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.0     ✓ purrr   0.3.3
## ✓ tibble  2.1.3     ✓ dplyr   0.8.5
## ✓ tidyr   1.0.2     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(sf)
## Linking to GEOS 3.7.2, GDAL 2.4.2, PROJ 5.2.0

I. Del portal de datos abiertos de Barcelona, utilizaremos un dataset espacial con los límites de barrios y distritos:

barris_districtes <- st_read("bcn_UNITATS_ADM_POLIGONS.json") 
## Reading layer `bcn_UNITATS_ADM_POLIGONS' from data source `/Users/lousil/Google Drive/Formación Académica/ECONOMIA URBANA/14. CIENCIA DE DATOS PARA CIUDADES/Ciencia de Datos para Ciudades I/Clase 1/Ciencia de Datos para ciudades 2/bcn_UNITATS_ADM_POLIGONS.json' using driver `GeoJSON'
## Simple feature collection with 1501 features and 35 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: 420812.5 ymin: 4574282 xmax: 435480.4 ymax: 4591066
## epsg (SRID):    25831
## proj4string:    +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

Vemos que el sistema de coordenadas de referencia (CRS) es 25831, por lo tanto no es Merkator. Para cambiarlo podemos usar esta función:

barris_districtes <- st_transform(barris_districtes, crs = 4326) 
names(barris_districtes)
##  [1] "FID"        "ID_ANNEX"   "ANNEXDESCR" "ID_TEMA"    "TEMA_DESCR"
##  [6] "ID_CONJUNT" "CONJ_DESCR" "ID_SUBCONJ" "SCONJ_DESC" "ID_ELEMENT"
## [11] "ELEM_DESCR" "NIVELL"     "NDESCR_CA"  "NDESCR_ES"  "NDESCR_EN" 
## [16] "TERME"      "DISTRICTE"  "BARRI"      "AEB"        "SEC_CENS"  
## [21] "GRANBARRI"  "ZUA"        "AREA_I"     "LITERAL"    "PERIMETRE" 
## [26] "AREA"       "CODI_UA"    "TIPUS_UA"   "NOM"        "WEB1"      
## [31] "WEB2"       "WEB3"       "FHEX_COLOR" "Shape_Leng" "Shape_Area"
## [36] "geometry"

Como el dataset posee 36 variables, de las cual necesitamos solo unas pocas, seleccionaremos y filtraremos solo lo que necesitamos para disminuir el gran tamaño del archivo:

barris_districtes <- barris_districtes %>% 
  select(DISTRICTE, BARRI, AREA, NOM, geometry) %>% 
  filter (!(DISTRICTE == "-") & !(BARRI== "-")) %>% 
  group_by(DISTRICTE,BARRI) %>% 
  summarise()
  1. Del mismo portal de datos elegimos un dataset con registros geo-referenciados con sus coordenadas; en este caso, el que contiene museos y bibliotecas de Barcelona.
biblioteques <- read.csv("bcn_Biblioteques_i_museus.csv")

Por alguna razón que desconocemos, aparecen varias observaciones del mismo equipamiento. Por tal motivo, agruparemos segun equipamiento para que nos quede una observación para cada uno y luego las cuente correctamente.

biblioteques <- biblioteques %>% 
  group_by(EQUIPAMENT,LONGITUD, LATITUD) %>% 
  summarise()

Visualicemos ambos datasets superpuestos:

ggplot()+
  geom_sf(data = barris_districtes, aes(fill=DISTRICTE), color = NA) + 
  geom_point(data = biblioteques, aes(x=LONGITUD, y=LATITUD), alpha=.8) +
         labs(title = "Bibliotecas y Museos",
         subtitle = "Por distrito",
         fill = "Distritos",
         caption= "Fuente: Ajuntament de Barcelona | 2020",
         y="",
         x="")

  1. Realizando un join espacial, asignar a cada registro geo-referenciado el barrio que le corresponde:

Convertimos el dataset de bibliotecas a espacial:

biblioteques_espacial <- biblioteques %>%
    st_as_sf(coords = c("LONGITUD", "LATITUD"), crs = 4326)

…Y unimos:

biblioteques_districtes <- st_join(barris_districtes, biblioteques_espacial)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
  1. Utilizando ggplot():
biblioteques_perdistrictes <- biblioteques_districtes %>% 
      group_by(DISTRICTE) %>%
      summarise(Frecuencia = n())
ggplot(biblioteques_perdistrictes) +
  geom_bar(aes( x = DISTRICTE, weight = Frecuencia), fill="#69b3a2") +
  labs(title = "Cantidad de Bibliotecas y Museos por distrito",
         subtitle = "Por distrito",
         caption= "Fuente: Ajuntament de Barcelona | 2020",
         y="Cantidad",
         x="Distritos")

Ahora ponderaremos según cantidad de Museos y Bicliotecas con scale_viridis:

ggplot(biblioteques_perdistrictes) +
  geom_bar(aes( x = DISTRICTE, weight = Frecuencia, fill=Frecuencia)) +
  scale_fill_viridis_c() +
  labs(title = "Cantidad de Bibliotecas y Museos por distrito",
       subtitle = "Por distrito",
       fill = "Escala",
       caption= "Fuente: Ajuntament de Barcelona | 2020",
       y="Cantidad",
       x="Distritos")

ggplot() + 
  geom_sf(data = biblioteques_perdistrictes, aes(fill=Frecuencia), color = NA) + 
  scale_fill_viridis_c() +
  labs(title = "Cantidad de Bibliotecas y Museos",
         subtitle = "Por distrito",
         fill = "Escala",
         caption= "Fuente: Ajuntament de Barcelona | 2020",
         y="",
         x="")