Primer acercamiento a los datos espaciales: mapa coroplético sobre espacios verdes en CABA | Macarena Quiroga

Primer acercamiento a los datos espaciales: mapa coroplético sobre espacios verdes en CABA

¿A quién no le gustan esos hermosos y coloridos mapas coropléticos que circulan en Twitter?

En general, el 99% de mi uso de R es análisis estadístico: a veces tengo suerte y puedo dedicarle un poco más de tiempo a complementar ese análisis con algunos gráficos. Pero no trabajo con datos espaciales, entonces no tengo casi oportunidad para aprender este tipo de cosas.

Hoy tuve un rato libre y primero pensé en hacer algo de #TidyTuesday. Pero al mirar los datos (baños de aves en Australia), me di cuenta de que estaba orientado o bien a trabajar con variables categóricas o bien a trabajar con datos espaciales. Ya había practicando un poco con datos categoriales con los comandos de voz de Star Trek, así que eso lo descarté, pero hacer algo con datos espaciales me parecía un poco complejo.

Decidí entonces que era una buena oportunidad para empezar de a poco en ese tema y recordé la existencia de PolíticaArgentina, un universo de paquetes sobre Argentina. Por suerte, el readme tenía un ejemplo de cómo hacer un gráfico con etiquetas, así que no fue difícil adaptarlo a algo nuevo.

Me quedé con el mapa de CABA, porque era lo que conocía, y planteé una pregunta que a cualquier porteño le importa: ¿hay suficientes espacios verdes en la Ciudad?

Una vez armado el gráfico, busqué información oficial sobre los espacios verdes en CABA, datos que por suerte encontré en el sitio oficial. Luego, fue cuestión de revisar el argumento de fill y mejorar un poco el aspecto de las etiquetas. La verdad, quedé muy satisfecha: pensé que iba a ser mucho más difícil empezar, y sin embargo aquí estamos.

Aquí el código:

# Mapa coroplético de la cantidad de espacios verdes por metro cuadrado en CABA
# Choropleth map about green spaces in CABA

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5          ✓ purrr   0.3.4     
## ✓ tibble  3.1.4          ✓ dplyr   1.0.7     
## ✓ tidyr   1.1.3          ✓ stringr 1.4.0.9000
## ✓ readr   2.0.1          ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
# devtools::install_github("politicaargentina/geoAr")
library(geoAr)
show_arg_codes()
## # A tibble: 26 × 5
##    id           codprov codprov_censo codprov_iso name_iso                      
##    <chr>        <chr>   <chr>         <chr>       <chr>                         
##  1 ARGENTINA    " "     " "           AR          Argentina                     
##  2 CABA         "01"    "02"          AR-C        Ciudad Autónoma de Buenos Air…
##  3 BUENOS AIRES "02"    "06"          AR-B        Buenos Aires                  
##  4 CATAMARCA    "03"    "10"          AR-K        Catamarca                     
##  5 CORDOBA      "04"    "14"          AR-X        Córdoba                       
##  6 CORRIENTES   "05"    "18"          AR-W        Corrientes                    
##  7 CHACO        "06"    "22"          AR-H        Chaco                         
##  8 CHUBUT       "07"    "26"          AR-U        Chubut                        
##  9 ENTRE RIOS   "08"    "30"          AR-E        Entre Ríos                    
## 10 FORMOSA      "09"    "34"          AR-P        Formosa                       
## # … with 16 more rows
(CABA <- get_geo(geo = "CABA"))
## Simple feature collection with 15 features and 2 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.52998 ymin: -34.70617 xmax: -58.33444 ymax: -34.53144
## Geodetic CRS:  WGS 84
## # A tibble: 15 × 3
##    codprov_censo coddepto_censo                                         geometry
##  * <chr>         <chr>                                        <MULTIPOLYGON [°]>
##  1 02            001            (((-58.34802 -34.601, -58.34713 -34.62111, -58.…
##  2 02            002            (((-58.37501 -34.57959, -58.39365 -34.60154, -5…
##  3 02            003            (((-58.39189 -34.62916, -58.4125 -34.63227, -58…
##  4 02            004            (((-58.33444 -34.63018, -58.34745 -34.63356, -5…
##  5 02            005            (((-58.41263 -34.59991, -58.4125 -34.63227, -58…
##  6 02            006            (((-58.43405 -34.60458, -58.42748 -34.62891, -5…
##  7 02            007            (((-58.45229 -34.63255, -58.42748 -34.62891, -5…
##  8 02            008            (((-58.42483 -34.66387, -58.4471 -34.68962, -58…
##  9 02            009            (((-58.46107 -34.65875, -58.47953 -34.65975, -5…
## 10 02            010            (((-58.47202 -34.63856, -58.50302 -34.64773, -5…
## 11 02            011            (((-58.45919 -34.6064, -58.46017 -34.6158, -58.…
## 12 02            012            (((-58.50419 -34.59586, -58.5158 -34.58304, -58…
## 13 02            013            (((-58.44088 -34.55901, -58.44517 -34.58508, -5…
## 14 02            014            (((-58.39102 -34.57433, -58.41672 -34.59976, -5…
## 15 02            015            (((-58.42408 -34.59965, -58.43405 -34.60458, -5…
(CABA_names <- CABA %>% add_geo_codes())
## Simple feature collection with 15 features and 8 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.52998 ymin: -34.70617 xmax: -58.33444 ymax: -34.53144
## Geodetic CRS:  WGS 84
## # A tibble: 15 × 9
##    codprov_censo coddepto_censo codprov coddepto nomdepto_censo name_prov
##    <chr>         <chr>          <chr>   <chr>    <chr>          <chr>    
##  1 02            001            01      001      COMUNA 01      CABA     
##  2 02            002            01      002      COMUNA 02      CABA     
##  3 02            003            01      003      COMUNA 03      CABA     
##  4 02            004            01      004      COMUNA 04      CABA     
##  5 02            005            01      005      COMUNA 05      CABA     
##  6 02            006            01      006      COMUNA 06      CABA     
##  7 02            007            01      007      COMUNA 07      CABA     
##  8 02            008            01      008      COMUNA 08      CABA     
##  9 02            009            01      009      COMUNA 09      CABA     
## 10 02            010            01      010      COMUNA 10      CABA     
## 11 02            011            01      011      COMUNA 11      CABA     
## 12 02            012            01      012      COMUNA 12      CABA     
## 13 02            013            01      013      COMUNA 13      CABA     
## 14 02            014            01      014      COMUNA 14      CABA     
## 15 02            015            01      015      COMUNA 15      CABA     
## # … with 3 more variables: codprov_iso <chr>, name_iso <chr>,
## #   geometry <MULTIPOLYGON [°]>
CABA_names$nomdepto_censo <- gsub("COMUNA ", "C. ", CABA_names$nomdepto_censo)

CABA_names <- CABA_names %>% 
  mutate(esp_verd = case_when(
    coddepto_censo == "001" ~ 18.2,
    coddepto_censo == "002" ~ 4.1,
    coddepto_censo == "003" ~ 0.4,
    coddepto_censo == "004" ~ 4.3,
    coddepto_censo == "005" ~ 0.2,
    coddepto_censo == "006" ~ 1.8,
    coddepto_censo == "007" ~ 3.2,
    coddepto_censo == "008" ~ 18.8,
    coddepto_censo == "009" ~ 6.8,
    coddepto_censo == "010" ~ 2.0,
    coddepto_censo == "011" ~ 1.5,
    coddepto_censo == "012" ~ 8.1,
    coddepto_censo == "013" ~ 6.1,
    coddepto_censo == "014" ~ 12.0,
    coddepto_censo == "015" ~ 6.2
  ))


ggplot(CABA_names)+
  geom_sf(aes(fill = esp_verd))+
  geom_sf_label(aes(label = nomdepto_censo),
                #label.size = 0.5,
                size = 2)+
  scale_fill_gradient(low = "khaki2", high = "darkgreen")+
  labs(title = "Superficie de espacio verde dependiente del GCBA por habitante \npor comuna (2019)",
       caption = "Fuente: https://www.estadisticaciudad.gob.ar/eyc/?p=27349",
       x = "", 
       y = "",
       fill = expression('Espacio verde en m' ^ 2))+
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.background = element_blank()
        )
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

Macarena Quiroga
Macarena Quiroga
Lingüista/Becaria doctoral

Investigo la adquisición del lenguaje. Estudio estadística y ciencia de datos con R/Rstudio. Si te gusta lo que hago, podés invitarme un cafecito desde Argentina, o un kofi desde otros países. Suscribite a mi blog aquí.

Relacionado