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
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.
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