1. Elegir una ciudad de cualquier parte del mundo que les interese (ya que seguirán trabajando con ella a lo largo del curso) y que disponga de un portal de datos abiertos que ofrezca un shapefile (formato geojson o shp) de polígonos con alguna división geográfica: barrios, comunas, etc.
2. Del mismo portal de datos donde descargaron el shapefile, o de otra fuente si la tienen, elegir un dataset con registros geo-referenciados. Por ejemplo, las escuelas de la ciudad (o las comisarías, o las propiedades en alquiler, etc) con sus coordenadas. Puede ser en formato csv o shapefile.
Para este trabajo elegimos la Ciudad de Buenos Aires. Trabajamos con la información del GCBA con respecto a los casos de COVID-19 y con los centros donde se realizan los operativos DetectAR (registros geo-referenciados). Utilizamos dos datasets que poseen la información mencionada. Además, nuestra división geográfica también está dada por el dataset de barrios de CABA.
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3 v purrr 0.3.4
## v tibble 3.1.0 v dplyr 1.0.5
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(sf)
## Warning: package 'sf' was built under R version 4.0.5
## Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
Para comenzar, cargamos el dataset de casos de COVID-19:
casos_covid19 <- read.csv("data/casos_covid19.csv",
encoding = "UTF-8", stringsAsFactors = TRUE)
Filtramos para obtener solamente los registros de CABA:
covid_CABA <- filter(casos_covid19, provincia=="CABA", !is.na(comuna))
summary(covid_CABA)
## X.U.FEFF.numero_de_caso fecha_apertura_snvs
## Min. : 718084 21MAY2021:00:00:00.000000: 16287
## 1st Qu.: 5543018 22MAY2021:00:00:00.000000: 14796
## Median : 7749479 15MAY2021:00:00:00.000000: 13354
## Mean : 7878804 11MAY2021:00:00:00.000000: 13284
## 3rd Qu.:11128334 25MAY2021:00:00:00.000000: 13198
## Max. :14480219 02FEB2021:00:00:00.000000: 11785
## (Other) :1403829
## fecha_toma_muestra fecha_clasificacion
## 20MAY2021:00:00:00.000000: 11908 20MAY2021:00:00:00.000000: 11901
## 19MAY2021:00:00:00.000000: 11596 19MAY2021:00:00:00.000000: 11581
## 17MAY2021:00:00:00.000000: 11547 17MAY2021:00:00:00.000000: 11439
## 31JAN2021:00:00:00.000000: 11374 31JAN2021:00:00:00.000000: 11289
## 01FEB2021:00:00:00.000000: 11093 01FEB2021:00:00:00.000000: 11135
## 18MAY2021:00:00:00.000000: 10939 18MAY2021:00:00:00.000000: 10958
## (Other) :1418076 (Other) :1418230
## provincia barrio comuna genero
## CABA :1486533 PALERMO :128610 Min. : 1.000 femenino :788836
## Buenos Aires: 0 CABALLITO: 89699 1st Qu.: 4.000 masculino:697697
## Catamarca : 0 RECOLETA : 84078 Median : 8.000
## Chaco : 0 FLORES : 77518 Mean : 8.122
## Chubut : 0 BALVANERA: 70570 3rd Qu.:12.000
## Córdoba : 0 BELGRANO : 69421 Max. :15.000
## (Other) : 0 (Other) :966637
## edad clasificacion fecha_fallecimiento
## Min. :-10.0 confirmado: 416909 :1475364
## 1st Qu.: 26.0 descartado:1056049 03MAY2021:00:00:00.000000: 67
## Median : 39.0 sospechoso: 13575 02AUG2020:00:00:00.000000: 66
## Mean : 40.5 27APR2021:00:00:00.000000: 66
## 3rd Qu.: 54.0 20JUL2020:00:00:00.000000: 62
## Max. :221.0 14JUL2020:00:00:00.000000: 59
## NA's :249 (Other) : 10849
## fallecido fecha_alta
## si : 11169 :1420146
## NA's:1475364 06JUL2020:00:00:00.000000: 528
## 31JUL2020:00:00:00.000000: 528
## 03JUL2020:00:00:00.000000: 527
## 07JUL2020:00:00:00.000000: 495
## 13JUL2020:00:00:00.000000: 490
## (Other) : 63819
## tipo_contagio
## Comunitario : 308464
## Contacto : 53352
## En Investigación : 39818
## Importado : 327
## Trabajador de la Salud: 14016
## NA's :1070556
##
A continuación, cargamos los datasets espaciales (operativos detectAR y barrios de CABA):
operativo_detectar <- st_read("data/operativo-detectar/programa_detectar_WGS84.shp", stringsAsFactors = TRUE)
## Reading layer `programa_detectar_WGS84' from data source `C:\Users\Victoria\Desktop\MEU - Ciencia de Datos 2\Data\operativo-detectar\programa_detectar_WGS84.shp' using driver `ESRI Shapefile'
## Simple feature collection with 26 features and 8 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -58.50202 ymin: -34.6847 xmax: -58.36287 ymax: -34.56426
## Geodetic CRS: WGS 84
summary(operativo_detectar)
## id lugar
## Min. : 1.00 Barrio Mitre: Centro de Jubilados y Pensionados Sin Rumbo: 1
## 1st Qu.: 8.25 Biblioteca Baldomero Fernández Moreno : 1
## Median :19.50 Casa de la Cultura : 1
## Mean :22.12 Centro de Día nro 24 - Caminemos Juntos : 1
## 3rd Qu.:36.75 Centro de Formación Profesional 24 : 1
## Max. :43.00 Centro de Formación Profesional 38 : 1
## (Other) :20
## direccion calle
## 24 de Noviembre 1020. : 1 24 de Noviembre : 1
## Av Cruz y Escalada : 1 Av. Gral. Iriarte : 1
## Av. Gral. Iriarte 3500 : 1 Av. Patricias Argentinas: 1
## Av. Patricias Argentinas 277 : 1 Av. San Juan : 1
## Av. San Juan 2128 : 1 Balcarce : 1
## Avenida General Fernández de la Cruz 2145: 1 (Other) :17
## (Other) :20 NA's : 4
## calle2 comuna observacio altura
## NA's:26 Comuna 15:4 Central de Derivación Balvanera: 1 Min. : 0
## Comuna 8 :4 Detectar Barrio Carrillo : 1 1st Qu.:1042
## Comuna 4 :3 Detectar de Constitución : 1 Median :2136
## Comuna 1 :2 Detectar Movil Paternal : 1 Mean :2094
## Comuna 3 :2 Detectar Pompeya : 1 3rd Qu.:3260
## Comuna 7 :2 (Other) : 3 Max. :5144
## (Other) :9 NA's :18
## geometry
## POINT :26
## epsg:4326 : 0
## +proj=long...: 0
##
##
##
##
barrios <- st_read("data/barrios_badata.shp", stringsAsFactors = TRUE)
## Reading layer `barrios_badata' from data source `C:\Users\Victoria\Desktop\MEU - Ciencia de Datos 2\Data\barrios_badata.shp' using driver `ESRI Shapefile'
## Simple feature collection with 48 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 93743.42 ymin: 91566.42 xmax: 111751.4 ymax: 111401.7
## Projected CRS: Argentina_GKBsAs
summary(barrios)
## BARRIO COMUNA PERIMETRO AREA OBJETO
## AGRONOMIA: 1 Min. : 1.000 Min. : 4531 Min. : 1232270 BARRIO:48
## ALMAGRO : 1 1st Qu.: 4.000 1st Qu.: 6554 1st Qu.: 2222027
## BALVANERA: 1 Median : 9.500 Median : 8254 Median : 3679709
## BARRACAS : 1 Mean : 8.458 Mean : 9863 Mean : 4242703
## BELGRANO : 1 3rd Qu.:12.000 3rd Qu.:11127 3rd Qu.: 5142993
## BOCA : 1 Max. :15.000 Max. :22127 Max. :15845871
## (Other) :42
## geometry
## POLYGON :48
## epsg:NA : 0
## +proj=tmer...: 0
##
##
##
##
3. Realizar un “join espacial”, asignando a cada registro geo-referenciado la unidad geográfica (barrio, comuna, etc.) que le corresponda.
Unimos los datasets espaciales barrios y operativo_detectar para vincular los centros del mencionado operativo con su correspondiente barrio. Para esto, primero tenemos que convertirlos a la misma coordenada geográfica:
operativo_detectar2 <- operativo_detectar %>% st_transform(st_crs(barrios))
detectarporbarrio <- st_join(barrios,operativo_detectar2)
names(detectarporbarrio)
## [1] "BARRIO" "COMUNA" "PERIMETRO" "AREA" "OBJETO"
## [6] "id" "lugar" "direccion" "calle" "calle2"
## [11] "comuna" "observacio" "altura" "geometry"
Agregamos una columna con valor numérico para poder calcular la cantidad de centros DetectAR por barrio:
detectarporbarrio2 <- detectarporbarrio %>%
mutate(centro=1)
detectarporbarrio3 <- detectarporbarrio2 %>%
group_by(BARRIO) %>%
summarise(centro=n())
head (detectarporbarrio3)
## Simple feature collection with 6 features and 2 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 96308.15 ymin: 96337.82 xmax: 111751.4 ymax: 110825.4
## Projected CRS: Argentina_GKBsAs
## # A tibble: 6 x 3
## BARRIO centro geometry
## <fct> <int> <POLYGON [m]>
## 1 AGRONOMIA 1 ((98732.58 103788.8, 98662.52 103570, 98619.61 103430.8, 985~
## 2 ALMAGRO 1 ((104625.1 101679.9, 104630 101532.7, 104635.6 101401.1, 104~
## 3 BALVANERA 1 ((104713.3 103467.4, 104862.3 103457.4, 104941.8 103457.8, 1~
## 4 BARRACAS 1 ((108524.3 99590.57, 108529.4 99539.17, 108532.2 99513.34, 1~
## 5 BELGRANO 1 ((101168.8 110389.9, 101160.5 110386.4, 101152 110383.6, 101~
## 6 BOCA 1 ((109996.1 99938.77, 109998.1 99935.16, 110003.3 99925.54, 1~
detectarporbarrio3 <- arrange(detectarporbarrio3, desc(centro))
head (detectarporbarrio3)
## Simple feature collection with 6 features and 2 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 94273.2 ymin: 93825 xmax: 106614.3 ymax: 105654.9
## Projected CRS: Argentina_GKBsAs
## # A tibble: 6 x 3
## BARRIO centro geometry
## <fct> <int> <POLYGON [m]>
## 1 VILLA SOLD~ 3 ((101298.8 97570.93, 101326.7 97569.9, 101433.2 97575.35, ~
## 2 CHACARITA 2 ((100961.3 103692, 100884.7 103629.1, 100874.4 103620.4, 1~
## 3 FLORES 2 ((100264.6 96946.23, 100219.7 96986.16, 100200.5 97003.22,~
## 4 MATADEROS 2 ((96405.6 94981.17, 96405.03 94980.77, 96396.77 94988.34, ~
## 5 SAN CRISTO~ 2 ((106579.6 100853, 106585.5 100722.8, 106588.3 100646, 106~
## 6 AGRONOMIA 1 ((98732.58 103788.8, 98662.52 103570, 98619.61 103430.8, 9~
3.1. Utilizar ggplot() para realizar un gráfico (barras, puntos, o el que prefieran) para mostrar los resultados de cantidad por barrio.
Representamos las cantidades de centros DetectAR por barrio en un gráfico:
ggplot(detectarporbarrio3) +
geom_point(aes(x = centro, y = BARRIO, color=BARRIO), show.legend = FALSE)+
labs(title = "Testeo COVID-19 en CABA", subtitle = "Cantidad operativos DetectAR por barrio", x = "Cantidad de operativos DetectAR", y = "Barrios", caption = "Fuente: Buenos Aires Data") +
theme_minimal()
Vemos que algunos barrios tienen más de un dispositivo DetectAR. Villa Soldati es el barrio que más posee, con 3 en total, seguido por Chacarita, Flores, Mataderos y San Cristobal, con 2 cada uno.
Solo a fines prácticos, aplicamos un facetado por barrio:
ggplot(detectarporbarrio3) +
geom_point(aes(x = centro, y = BARRIO, color=BARRIO), show.legend = FALSE)+
labs(title = "Testeo COVID-19 en CABA", subtitle = "Cantidad operativos DetectAR por barrio", x = "Cantidad de operativos DetectAR", y = "Barrios", caption = "Fuente: Buenos Aires Data") +
theme_minimal()+
facet_wrap(~BARRIO)
3.2. Utilizar ggplot() para realizar un mapa coroplético con los límites de los barrios, cuyo color de relleno indique la cantidad de casos encontrada en cada uno.
A continuación, analizamos gráficamente la relación entre los centros DetectAR y la cantidad de casos por barrio de CABA.
Trabajamos con el dataset de casos COVID en CABA, a modo de obtener la cantidad de casos por barrio:
covid_CABA1 <- covid_CABA %>%
group_by(barrio) %>%
summarise(cantidad=n())
covid_CABA1 <- rename(covid_CABA1, "BARRIO"="barrio")
Unimos el dataset covid_CABA1 con el de barrios para agregarle referencias geográficas y volverlo espacial:
covid_barrios <- barrios %>%
left_join(covid_CABA1, by="BARRIO")
Verificamos que el nuevo dataset sea espacial:
class(covid_barrios)
## [1] "sf" "data.frame"
Pasamos a graficar:
ggplot() +
geom_sf(data = covid_barrios, aes(fill=cantidad))+
labs(title = "Testeo COVID-19 en CABA", subtitle = "Cantidad de casos COVID por Barrio", fill= "Cantidad de casos", caption= "Fuente: Buenos Aires Data")+
scale_fill_gradient(low="khaki2", high="deeppink4")+
theme_void()+
geom_sf_label(data= covid_barrios, aes(label = BARRIO), size=1)
En este mapa se observa que Palermo es el barrio con mayor número de casos, seguido de Caballito.
Para que estos datos sean comparables entre barrios, relacionamos la cantidad de observaciones con la superficie (ha) de cada uno:
ggplot() +
geom_sf(data = covid_barrios, aes(fill=(cantidad/AREA)*10000)) +
labs(title = "Testeo COVID-19 en CABA", subtitle = "Cantidad de casos COVID por Barrio", fill= "Cantidad de casos / Área", caption= "Fuente: Buenos Aires Data") +
scale_fill_gradient(low="khaki2", high="deeppink4")+
theme_void()+
geom_sf_label(data= covid_barrios, aes(label = BARRIO), size=1)
Aquí podemos ver que los resultados cambian con respecto a aquellos del mapa coroplético anterior. El mayor número de casos se concentra en los barrios de Almagro y Balvanera.
A continuación, sumamos al mapa coroplético la ubicación de los operativos DetectAR
detectarporbarrio2 <- st_join(operativo_detectar2,barrios)
class(detectarporbarrio2)
## [1] "sf" "data.frame"
ggplot()+
geom_sf(data = covid_barrios, aes(fill=(cantidad/AREA)*10000)) +
geom_sf(data = detectarporbarrio2, alpha=0.5, show.legend = FALSE) +
labs(title = "Testeo COVID-19 en CABA", subtitle = "Cantidad de casos COVID por Barrio y Operativos DetectAR", fill= "Cantidad de casos / Área", caption= "Fuente: Buenos Aires Data") +
scale_fill_gradient(low="khaki2", high="deeppink4")+
theme_void()
Como vemos, los operativos DetectAR se encuentran bastante dispersos por la Ciudad, con una concentración en su zona sur. A simple vista, no parecen tener relación aparente con el número de casos registrado por barrio. Lo paradójico es la concentración de operativos en Villa Soldati, barrio que manifiesta tener una de las más bajas cantidad de casos sobre superficie.