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
Utilizamos la misma base de datos geoespacial de la tarea anterior. 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
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") +
scale_fill_viridis_c() +
theme_light()
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 unir las dos bases de datos geoespaciales.
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 culto de la ciudad de Buenos Aires en formato CSV, es decir, una base de datos tradicional.
lugares_culto <- read.csv ("lugares-de-culto.csv", stringsAsFactors = TRUE)
class (lugares_culto)
## [1] "data.frame"
head (lugares_culto)
## grupo culto nombre_institucion
## 1 Cristianos Católico Apostólico Romano Espíritu Santo
## 2 Cristianos Católico Apostólico Romano Asuncion De La Santisima Virgen
## 3 Cristianos Católico Apostólico Romano Corazón De Jesus
## 4 Cristianos Católico Apostólico Romano Buen Pastor
## 5 Cristianos Católico Apostólico Romano Cristo Obrero Y San Blas
## 6 Cristianos Católico Apostólico Romano Inmaculada Concepción (b)
## domicilio barrio cgpc cp lat long
## 1 Pacheco 2059 Villa Urquiza 12.0 C1431FIE -34.57613 -58.48112
## 2 Avda. Gaona 2798 Flores 7.0 C1406FMI -34.61631 -58.46551
## 3 Avda. General Paz 5370 V.Pueyrredon 12.0 C1419FYQ -34.57548 -58.51154
## 4 Aranguren 691 Caballito 6.0 C1405CRM -34.61433 -58.44211
## 5 Lafuente 3242 Villa Soldati 8.0 C1437BVO -34.66310 -58.43826
## 6 Vuelta De Obligado 2042 Belgrano 13.0 C1428ADF -34.56195 -58.45530
Hacemos un gráfico de puntos para ver la distribución de los puntos de culto en la Ciudad de Buenos Aires:
ggplot(lugares_culto) +
geom_point(aes(x=long, y=lat)) +
labs(title = "Puntos de culto en CABA",
caption= "Fuente: BADATA")
## Warning: Removed 69 rows containing missing values (geom_point).
Pareciera tener la forma del mapa de CABA. Para verlo con mas claridad proyectamos el gráfico de puntos sobre el mapa de CABA realizado al comienzo:
ggplot()+
geom_sf(data=comunas_caba, fill="gray75", color="white")+
geom_point(data=lugares_culto, aes(x=long, y=lat)) + labs(title = " Distribución de lugares de culto en CABA",
caption= "Fuente: Badata")
## Warning: Removed 69 rows containing missing values (geom_point).
Dado que nos dimos cuenta que un par de registros no tienen el dato de la longitud y latitud, y que eso sería un problema al momento de convertir nuestro set de datos tradicional en uno espacial, filtramos:
culto_geo <-lugares_culto %>%
filter(!is.na(long))
culto_geo <- culto_geo %>%
filter(!is.na(lat))
culto_geo2 <- st_as_sf(culto_geo, coords = c("long", "lat"), crs = 4326)
Vemos que realmente se haya convertido:
head (culto_geo2)
## Simple feature collection with 6 features and 7 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -58.51154 ymin: -34.6631 xmax: -58.43826 ymax: -34.56195
## Geodetic CRS: WGS 84
## grupo culto nombre_institucion
## 1 Cristianos Católico Apostólico Romano Espíritu Santo
## 2 Cristianos Católico Apostólico Romano Asuncion De La Santisima Virgen
## 3 Cristianos Católico Apostólico Romano Corazón De Jesus
## 4 Cristianos Católico Apostólico Romano Buen Pastor
## 5 Cristianos Católico Apostólico Romano Cristo Obrero Y San Blas
## 6 Cristianos Católico Apostólico Romano Inmaculada Concepción (b)
## domicilio barrio cgpc cp
## 1 Pacheco 2059 Villa Urquiza 12.0 C1431FIE
## 2 Avda. Gaona 2798 Flores 7.0 C1406FMI
## 3 Avda. General Paz 5370 V.Pueyrredon 12.0 C1419FYQ
## 4 Aranguren 691 Caballito 6.0 C1405CRM
## 5 Lafuente 3242 Villa Soldati 8.0 C1437BVO
## 6 Vuelta De Obligado 2042 Belgrano 13.0 C1428ADF
## geometry
## 1 POINT (-58.48112 -34.57613)
## 2 POINT (-58.46551 -34.61631)
## 3 POINT (-58.51154 -34.57548)
## 4 POINT (-58.44211 -34.61433)
## 5 POINT (-58.43826 -34.6631)
## 6 POINT (-58.4553 -34.56195)
class (culto_geo2)
## [1] "sf" "data.frame"
Ahora mapeamos:
ggplot(culto_geo2)+
geom_sf() +
labs(title = "Puntos de culto en CABA",
caption= "Fuente: BADATA")
Ahora nuestro mapa, representado por los puntos, tiene la forma del mapa de la ciudad de Buenos Aires. Para verlo con mayor claridad:
ggplot()+
geom_sf(data=comunas_caba, fill="gray75", color="white")+
geom_sf(data=culto_geo2, aes(color=grupo), alpha=0.5)+
geom_sf(data=culto_geo2, aes(color=grupo), alpha=0.5) + labs(title = " Distribución de lugares de culto en CABA",
caption= "Fuente: Badata")
Ahora unimos ambos datasets espaciales (el dataset de las comunas de caba y el dataset de los puntos de culto de CABA)
culto_caba <- st_join(culto_geo2, comunas_caba)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
Ahora tenemos los datos de ambos dataset en uno:
summary (culto_caba)
## grupo culto
## Cristianos :681 Católico Apostólico Romano :231
## Judíos : 68 Pentecostales :107
## Testigos de Jehová : 24 Judíos : 68
## Escuela Científico Basilio: 20 Bautistas : 59
## Espírita : 15 Iglesias Independientes : 44
## Otros : 14 Unión de las Asambleas de Dios: 32
## (Other) : 33 (Other) :314
## nombre_institucion domicilio
## Cristiana Evangélica : 22 Alsina 380 : 2
## Salón Del Reino : 13 Argerich 392 : 2
## Del Nazareno : 5 Dean Funes 2116 : 2
## : 4 Gallo 782 : 2
## Nuestra Señora De La Misericordia: 4 Juan Agustin Garcia 2044/48 : 2
## Evangélica : 3 Nicolás Repetto 825 : 2
## (Other) :804 (Other) :843
## barrio cgpc cp nombre provincia
## Flores : 56 - :183 :371 Comuna 7 : 93 CABA:855
## Almagro : 42 7.0 : 78 1406 : 15 Comuna 13: 75 GBA : 0
## Palermo : 41 13.0 : 55 1407 : 12 Comuna 12: 70
## Caballito : 39 15.0 : 54 1429 : 8 Comuna 9 : 70
## Belgrano : 37 1.0 : 51 1419 : 7 Comuna 1 : 60
## Parque Chacabuco: 34 12.0 : 51 1437 : 7 Comuna 5 : 60
## (Other) :606 (Other):383 (Other):435 (Other) :427
## area_km2 geometry
## Min. : 6.30 POINT :855
## 1st Qu.:12.40 epsg:4326 : 0
## Median :14.32 +proj=long...: 0
## Mean :13.86
## 3rd Qu.:15.76
## Max. :22.14
##
Mapeamos este nuevo dataset:
ggplot()+
geom_sf(data=comunas_caba, fill="gray75", color="white")+ geom_sf(data=culto_geo2, aes(color=grupo), alpha=0.5) + labs(title = " Distribución de lugares de culto en CABA",
caption= "Fuente: Badata") +
scale_fill_distiller(palette = "YlOrRd", direction = 1) +
theme_light()
Ahora queremos ver la cantidad de puntos de culto que hay por comuna en CABA. Para esto usamos la función group_by () y summarise ().
culto_caba2<- culto_caba %>%
group_by(nombre) %>%
summarise(cantidad=n())
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
head (culto_caba2)
## Simple feature collection with 6 features and 2 fields
## Geometry type: MULTIPOINT
## Dimension: XY
## Bounding box: xmin: -58.53018 ymin: -34.64501 xmax: -58.36652 ymax: -34.53631
## Geodetic CRS: WGS 84
## # A tibble: 6 x 3
## nombre cantidad geometry
## <fct> <int> <MULTIPOINT [°]>
## 1 Comuna 1 60 ((-58.39263 -34.60242), (-58.39122 -34.62024), (-58.39084 -…
## 2 Comuna … 58 ((-58.53018 -34.61587), (-58.52862 -34.61663), (-58.52615 -…
## 3 Comuna … 54 ((-58.52611 -34.60801), (-58.52499 -34.61083), (-58.52401 -…
## 4 Comuna … 70 ((-58.51253 -34.5778), (-58.51154 -34.57548), (-58.51094 -3…
## 5 Comuna … 75 ((-58.47436 -34.54241), (-58.47112 -34.56789), (-58.47096 -…
## 6 Comuna … 45 ((-58.44407 -34.58425), (-58.44304 -34.58505), (-58.44264 -…
Para poder pegar este nuevo dataset al dataset de las comunas le quitamos la geometría:
culto_caba2 <- culto_caba2 %>%
st_set_geometry(NULL)
head(culto_caba2)
## # A tibble: 6 x 2
## nombre cantidad
## <fct> <int>
## 1 Comuna 1 60
## 2 Comuna 10 58
## 3 Comuna 11 54
## 4 Comuna 12 70
## 5 Comuna 13 75
## 6 Comuna 14 45
Con la función left_join () pegamos el dataset (ahora tradicional) “culto_caba3” al dataset geoespacial de comunas_caba:
culto_caba3<- left_join(comunas_caba, culto_caba2, by="nombre")
summary (culto_caba3)
## nombre provincia area_km2 cantidad geometry
## Comuna 1 :1 CABA:15 Min. : 6.300 Min. :27.0 MULTIPOLYGON :15
## Comuna 10:1 GBA : 0 1st Qu.: 9.625 1st Qu.:47.5 epsg:4326 : 0
## Comuna 11:1 Median :14.320 Median :58.0 +proj=long...: 0
## Comuna 12:1 Mean :13.574 Mean :57.0
## Comuna 13:1 3rd Qu.:16.020 3rd Qu.:65.0
## Comuna 14:1 Max. :22.140 Max. :93.0
## (Other) :9
Ahora mapeamos la cantidad de puntos de culto por comuna en CABA:
ggplot()+
geom_sf(data=culto_caba3, aes(fill=cantidad)) + geom_sf_text(data=culto_caba3, aes(label=nombre), size=2) +
labs(title = "Cantidad de lugares de culto por comuna", subtitle= "CABA",
fill = "Cantidad",
caption= "Fuente: Badata") +
scale_fill_distiller(palette = "YlOrRd", direction = 1) +
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
En el mapa anterior se puede ver que la Comuna 1, 7 y 13 son las que más cantidad de puntos de culto tienen. Para verlo con mayor detenimiento filtramos por dichas comunas y mapeamos:
ggplot()+
geom_sf(data=filter(culto_caba3, nombre=="Comuna 7" | nombre=="Comuna 13" | nombre== "Comuna 9" ), aes(fill=cantidad))+
labs(title = "Cantidad de lugares de culto por comuna",
subtitle = "Comuna 1,7 y 13 ",
fill = "Cantidad",
caption= "Fuente: Badata") +
scale_fill_distiller(palette = "YlOrRd", direction = 1) +
theme_light()
`Para que las comunas no queden flotando, le agregamos el mapa de CABA detrás:
ggplot()+ geom_sf(data=comunas_caba) +
geom_sf(data=filter(culto_caba3, nombre=="Comuna 7" | nombre=="Comuna 13" | nombre== "Comuna 9" ), aes(fill=cantidad)) +labs(title = "Cantidad de lugares de culto",
subtitle = "Comuna 1,7 y 13",
fill = "Cantidad",
caption= "Fuente: Badata") +
scale_fill_distiller(palette = "YlOrRd", direction = 1) +
theme_light()
Vemos que de las tres comunas seleccionadas la que mayor cantidad de puntos de culto tiene es la comuna 7, seguida por la comuna 13 y, por último, la comuna 1. Sin embargo, sii bien las tres comunas son las que mas cantidad de puntos de culto parecen tener, vamos a ver qué comuna tiene mas cantidad de puntos de culto por kilómetro cuadrado:
ggplot()+
geom_sf(data=culto_caba3, aes(fill=cantidad/area_km2)) + geom_sf_text(data=culto_caba3, aes(label=nombre), size=2)+
labs(title = "Puntos de culto por km2",
subtitle = "Comunas CABA",
fill = "Cantidad/km2",
caption= "Fuente: BAdata") +
scale_fill_distiller(palette = "YlOrRd", direction = 1) +
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
Cuando vemos la cantidad de puntos de culto por km2, se observa que la comuna 7 sigue siendo la comuna con mayor cantidad de puntos de culto pero la comuna 13 y 1 ya no. En este caso,la comuna 5 y la comuna 3 parecen tener mayor cantidad de puntos de culto por km2 que las comuna 9 y la comuna 13.