TAREA 1: Mapear información geográfica

library (tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.3     ✓ purrr   0.3.4
## ✓ tibble  3.1.1     ✓ dplyr   1.0.5
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library (sf)
## Linking to GEOS 3.8.1, GDAL 3.1.4, PROJ 6.3.1

Mapa coroplético que muestre la distribución geográfica de una variable numérica

En esta tarea nos proponemos mostrar la distribución de los puntos de wifi públicos de la Ciudad de Buenos Aires. Para esto, primero cargamos un geojson con los datos georreferenciados de AMBA, del cual obtendremos luego los datos de las comunas de CABA.

partidos_amba <- st_read("partidos_amba.geojson", stringsAsFactors= TRUE)
## Reading layer `partidos_amba' from data source `/Users/mariacandelariadavid/Desktop/TP 1 CIUDADES/partidos_amba.geojson' using driver `GeoJSON'
## Simple feature collection with 48 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -59.3392 ymin: -35.23893 xmax: -57.70946 ymax: -34.23007
## Geodetic CRS:  WGS 84

Vemos qué datos contiene la base de datos:

head (partidos_amba)
## Simple feature collection with 6 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -59.05579 ymin: -34.91331 xmax: -58.27953 ymax: -34.26732
## Geodetic CRS:  WGS 84
##       nombre provincia area_km2                       geometry
## 1 Avellaneda       GBA    57.25 MULTIPOLYGON (((-58.33444 -...
## 2      Tigre       GBA   381.99 MULTIPOLYGON (((-58.5167 -3...
## 3      Pilar       GBA   382.95 MULTIPOLYGON (((-58.90312 -...
## 4     Moreno       GBA   186.36 MULTIPOLYGON (((-58.82401 -...
## 5      Merlo       GBA   173.97 MULTIPOLYGON (((-58.72917 -...
## 6 La Matanza       GBA   328.26 MULTIPOLYGON (((-58.52885 -...

Realizamos un mapa coroplético de AMBA y rellenamos cada partido o comuna según su área en kimlómetros cuadrados.

ggplot (partidos_amba) +geom_sf (aes(fill=area_km2)) + labs(title = "AMBA")  

Filtramos por CABA para hacer un mapa coroplético de las comunas. En este caso, no concatenamos funciones dado que preferimos crear una nueva base de datos con los datos de CABA para luego utilizarla para reflejar los puntos de wifi público de la ciudad.

comunas_caba <- filter (partidos_amba, provincia== "CABA")
head (comunas_caba)
## Simple feature collection with 6 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.50426 ymin: -34.70628 xmax: -58.37004 ymax: -34.53143
## Geodetic CRS:  WGS 84
##      nombre provincia area_km2                       geometry
## 1  Comuna 2      CABA     6.30 MULTIPOLYGON (((-58.40084 -...
## 2  Comuna 3      CABA     6.39 MULTIPOLYGON (((-58.39365 -...
## 3  Comuna 6      CABA     6.85 MULTIPOLYGON (((-58.45919 -...
## 4 Comuna 13      CABA    14.73 MULTIPOLYGON (((-58.45579 -...
## 5  Comuna 8      CABA    21.61 MULTIPOLYGON (((-58.44404 -...
## 6 Comuna 15      CABA    14.32 MULTIPOLYGON (((-58.46808 -...
ggplot(comunas_caba)+
  geom_sf(aes(fill=area_km2), color="white")+
  geom_sf_text(aes(label = nombre), size=2) +
    labs(title = "Comunas CABA",
         caption= "Fuente: BADATA") +
  scale_fill_viridis_c() +
  theme_light()
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

Ahora cargamos la base de datos de los puntos de wifi públicos de la ciudad en formato CSV.

puntos_wifi <- read.csv ("sitios-de-wifi.csv", stringsAsFactors= TRUE)
head (puntos_wifi)
##        long       lat   id
## 1 -58.40083 -34.57224 1392
## 2 -58.38669 -34.59989 1391
## 3 -58.51393 -34.59486 1390
## 4 -58.37428 -34.64689 1389
## 5 -58.45494 -34.68444 1388
## 6 -58.44687 -34.64503 1387
##                                                           nombre     tipo etapa
## 1                         Polideportivo Manuel Belgrano (Ex-Kdt)  Deporte      
## 2 Registro civil sede central 3er piso y PB - Sala de Matrimonio Gobierno      
## 3                                            Polideportivo Onega  Deporte      
## 4                                         Polideportivo Don Pepe  Deporte      
## 5                                         Dirección de Licencias Gobierno      
## 6                                          Planta Asfalto (EMUI) Gobierno      
##     etapa_obse     estado          subcategor       calle_nombre calle_altura
## 1 BA WIFI 2018 Dsiponible      Polideportivos SALGUERO, JERONIMO         3450
## 2 BA WIFI 2018 Dsiponible Edificios del GCABA            Uruguay          753
## 3 BA WIFI 2018 Dsiponible      Polideportivos   Gabriela Mistral         3850
## 4 BA WIFI 2018 Dsiponible      Polideportivos       Gral. Hornos         1800
## 5 BA WIFI 2018 Dsiponible Edificios del GCABA    ROCA, CNEL. AV.         5200
## 6 BA WIFI 2018 Dsiponible Edificios del GCABA     CASTAÑARES AV.         2350
##   calle_cruce          barrio    comuna codigo_postal codigo_postal_argentino
## 1                    Recoleta  Comuna 2          1425                C1425DFS
## 2                 San Nicolas  Comuna 1          1015                C1015ABO
## 3                Villa Devoto Comuna 11          1419                C1419GGJ
## 4                    Barracas  Comuna 4          1272                C1272ADJ
## 5             Villa Riachuelo  Comuna 8          1439                C1439DVO
## 6                      Flores  Comuna 7          1406                C1406IGW
##       objeto
## 1 SITIO WIFI
## 2 SITIO WIFI
## 3 SITIO WIFI
## 4 SITIO WIFI
## 5 SITIO WIFI
## 6 SITIO WIFI

Hacemos un gráfico de puntos para ver la distribución de los puntos de wifi público:

ggplot(puntos_wifi) +
  geom_point(aes(x=long, y=lat, color=barrio)) + labs(title = "Puntos de wifi CABA",
         caption= "Fuente: BADATA")  

Vemos que los puntos se distribuyen de una forma que parece ser el mapa de la ciudad de Buenos Aires. Para ver en qué comuna se encuentra cada punto de wiif público, al mapa de la ciudad, le sumamos el gráfico de puntos anterior:

ggplot()+
  geom_sf(data=comunas_caba)+
  geom_point(data=puntos_wifi, aes(x=long, y=lat, color=barrio)) +
    labs(title = "Puntos de wifi CABA",
         caption= "Fuente: BADATA")  

Vemos que en todas las comunas hay al menos mas de un punto de wifi público. Pero ahora queremos ver exactamente la cantidad de puntos de wifi público que hay por comuna. Dado que los puntos de wifi público se pueden encontrar en distintos establecimientos (ver columna “tipo”) decidimos filtrar por un tipo de establecimiento que es “Espacio Público”. Entonces vamos a ver la cantidad de puntos de wifi que hay en los espacios públicos por cada comuna. Para eso usamos la función filter, group_by y summarise:

wifi <-puntos_wifi %>%
  filter(tipo=="Espacio Público") %>%
  group_by(comuna) %>%
  summarise(cant_wifi =n())
head (wifi)
## # A tibble: 6 x 2
##   comuna      cant_wifi
##   <fct>           <int>
## 1 ""                 27
## 2 "Comuna 1"         56
## 3 "Comuna 10"         2
## 4 "Comuna 11"         1
## 5 "Comuna 12"         3
## 6 "Comuna 13"         4

Ahora, al dataset geoespacial de comunas le vamos a pegar el dataset que filtramos anteriormente. Para poder pegar ambos datasets por la misma columna, tenemos que renombrar la columna “Nombre” del dataset de comunas_caba:

comunas_caba <- rename(comunas_caba, comuna=nombre)
head (comunas_caba)
## Simple feature collection with 6 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.50426 ymin: -34.70628 xmax: -58.37004 ymax: -34.53143
## Geodetic CRS:  WGS 84
##      comuna provincia area_km2                       geometry
## 1  Comuna 2      CABA     6.30 MULTIPOLYGON (((-58.40084 -...
## 2  Comuna 3      CABA     6.39 MULTIPOLYGON (((-58.39365 -...
## 3  Comuna 6      CABA     6.85 MULTIPOLYGON (((-58.45919 -...
## 4 Comuna 13      CABA    14.73 MULTIPOLYGON (((-58.45579 -...
## 5  Comuna 8      CABA    21.61 MULTIPOLYGON (((-58.44404 -...
## 6 Comuna 15      CABA    14.32 MULTIPOLYGON (((-58.46808 -...

Ahora pegamos ambos datasets:

comunas_wifi<- left_join(comunas_caba, wifi, by="comuna")

Vemos que efectivamente se pegaron:

head (comunas_wifi)
## Simple feature collection with 6 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -58.50426 ymin: -34.70628 xmax: -58.37004 ymax: -34.53143
## Geodetic CRS:  WGS 84
##      comuna provincia area_km2 cant_wifi                       geometry
## 1  Comuna 2      CABA     6.30         3 MULTIPOLYGON (((-58.40084 -...
## 2  Comuna 3      CABA     6.39         9 MULTIPOLYGON (((-58.39365 -...
## 3  Comuna 6      CABA     6.85         2 MULTIPOLYGON (((-58.45919 -...
## 4 Comuna 13      CABA    14.73         4 MULTIPOLYGON (((-58.45579 -...
## 5  Comuna 8      CABA    21.61        22 MULTIPOLYGON (((-58.44404 -...
## 6 Comuna 15      CABA    14.32         9 MULTIPOLYGON (((-58.46808 -...
options(scipen=999) 

Ahora hacemos un mapa coroplético que refleje la cantidad de puntos de wifi en espacios públicos por comuna de CABA:

ggplot(comunas_wifi)+
  geom_sf(aes(fill=cant_wifi), color="white") + geom_sf_text(aes(label = comuna), size=2) +
    labs(title = "Cantidad de puntos de wifi en espacios públicos en CABA",
         caption= "Fuente: BADATA")  +
  scale_fill_viridis_c() +
  theme_light()
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

Vemos que las comunas que más puntos de wifi en espacios públicos tienen son las comunas 1 y 2. Por otro lado, vemos que las comunas 10,11,12,13 son de las que menos puntos de wifi en espacios públicos tienen.

Mapa coroplético que muestre la distribución geográfica de una variable categórica

Creamos una variable categórica en base a la cantidad de puntos de wifi que tiene cada comuna. Si la comuna tiene mas de 10 puntos de wifi en espacios públicos, entonces la categoría es “MAYOR A 10”. Por lo contrario, si la comuna tiene menos de 10 puntos de wifi en espacios públicos, la categoría es "MENOR A 10).

comunas_wifi2<- comunas_wifi %>%
  mutate(CATEGORIA=as.factor(if_else(cant_wifi>=10, "MAYOR DE 10", "MENOR DE 10")))

Vemos que realmente se haya creado la nueva variable categórica:

summary (comunas_wifi2)
##        comuna  provincia    area_km2        cant_wifi              geometry 
##  Comuna 1 :1   CABA:15   Min.   : 6.300   Min.   : 1.00   MULTIPOLYGON :15  
##  Comuna 10:1   GBA : 0   1st Qu.: 9.625   1st Qu.: 3.00   epsg:4326    : 0  
##  Comuna 11:1             Median :14.320   Median : 8.00   +proj=long...: 0  
##  Comuna 12:1             Mean   :13.574   Mean   :12.07                     
##  Comuna 13:1             3rd Qu.:16.020   3rd Qu.:12.50                     
##  Comuna 14:1             Max.   :22.140   Max.   :56.00                     
##  (Other)  :9                                                                
##        CATEGORIA 
##  MAYOR DE 10: 4  
##  MENOR DE 10:11  
##                  
##                  
##                  
##                  
## 

Realizamos un mapa coroplético para ver la distribución de la variable categórica en las comunas:

ggplot(comunas_wifi2)+
  geom_sf(aes(fill=CATEGORIA), color="black") + geom_sf_text(aes(label = comuna), size=2) + labs(title = "Cantidad de puntos de wifi en espacios públcios en CABA",
         caption= "Fuente: BADATA")  +
  scale_fill_viridis_d() +
  theme_light()
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data