Mapeando Covid 19 en Santiago de Chile
Después de la llegada del Covid 19 a Chile el 03 de marzo 2020 el virus se ha propagado a todos lados del país. Esta publicación se enfoca en mapear los casos confirmados en la Región Metropolitana.
2) Paquetes
Se utilizan los siguientes paquetes en esta publicación.
library(chilemapas)
library(ggplot2)
library(stringr)
library(tidyverse)
library(ggspatial)
3) Creando un mapa base
Se usa el paquete de chilemapas para crear un mapa base de la Región Metropolitana. También se agregan tildes a los nombres de algunas comunas.
comunas <- chilemapas::mapa_comunas
codigos <- chilemapas::codigos_territoriales
comunas_info <- left_join(codigos, comunas)
comunas_info_RM <- comunas_info %>% filter(nombre_region == 'Metropolitana de Santiago')
comunas_info_RM[4, 2] = "Conchalí"
comunas_info_RM[6, 2] = "Estación Central"
comunas_info_RM[19, 2] = "Maipú"
comunas_info_RM[20, 2] = "Ñuñoa"
comunas_info_RM[22, 2] = "Peñalolén"
comunas_info_RM[29, 2] = "San Joaquín"
comunas_info_RM[31, 2] = "San Ramón"
ggplot() + geom_sf(data = comunas_info_RM$geometry) + ggtitle("Mapa Base de la Región Metropolitana") + ylab("Latitud") + xlab("Longitud")
4) Datos de casos
Se usan datos de casos confirmados accumulados de Covid 19 en Chile. Los datos se pueden descargar en el github del Ministerio de Salud. Con los datos ya descargados se usa la siguiente sintaxis para cargarlos.
casosconfirmados <- read_csv("~/Documents/Machine Learning/15. Hugo/academic-kickstart-master/content/es/post/Mapeando-Datos-de-Covid/Covid-19_T.csv")
5) Ingeniería de características
El objetivo de esta sección es organizar los datos para poder combinarlos con la base de comunas_info_RM.
Primero se filtran los datos para solo incluir comunas de la Región Metropolitana. También se usan los nombres de comuna en fila dos para los nombres de las variables. Luego se remueven las filas 1 a 4 que tienen información de población, codigo de comuna etcetc.
RM <- casosconfirmados %>% select(starts_with("Region") | starts_with('Metropolitana'))
colnames(RM) <- unlist(RM[row.names(RM) == 2,])
RM <- RM[-c(1:4),]
Se convierten las variables a tipo numérico.
RM %>% mutate_all(type.convert) %>%
mutate_if(is.character, as.numeric) %>%
mutate_if(is.factor, as.Date)
## # A tibble: 37 x 54
## Comuna Alhue Buin `Calera de Tang… Cerrillos `Cerro Navia` Colina
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2020-03-30 0 7 6 0 19 32
## 2 2020-04-01 0 8 7 4 21 39
## 3 2020-04-03 0 14 7 4 26 47
## 4 2020-04-06 0 20 7 5 31 50
## 5 2020-04-08 0 20 8 11 36 62
## 6 2020-04-10 0 29 8 21 42 66
## 7 2020-04-13 0 36 10 29 57 74
## 8 2020-04-15 0 40 10 39 65 77
## 9 2020-04-17 0 43 11 48 79 81
## 10 2020-04-20 0 47 14 53 99 90
## # … with 27 more rows, and 47 more variables: Conchali <dbl>, Curacavi <dbl>,
## # `El Bosque` <dbl>, `El Monte` <dbl>, `Estacion Central` <dbl>,
## # Huechuraba <dbl>, Independencia <dbl>, `Isla de Maipo` <dbl>, `La
## # Cisterna` <dbl>, `La Florida` <dbl>, `La Granja` <dbl>, `La Pintana` <dbl>,
## # `La Reina` <dbl>, Lampa <dbl>, `Las Condes` <dbl>, `Lo Barnechea` <dbl>,
## # `Lo Espejo` <dbl>, `Lo Prado` <dbl>, Macul <dbl>, Maipu <dbl>, `Maria
## # Pinto` <dbl>, Melipilla <dbl>, Nunoa <dbl>, `Padre Hurtado` <dbl>,
## # Paine <dbl>, `Pedro Aguirre Cerda` <dbl>, Penaflor <dbl>, Penalolen <dbl>,
## # Pirque <dbl>, Providencia <dbl>, Pudahuel <dbl>, `Puente Alto` <dbl>,
## # Quilicura <dbl>, `Quinta Normal` <dbl>, Recoleta <dbl>, Renca <dbl>, `San
## # Bernardo` <dbl>, `San Joaquin` <dbl>, `San Jose de Maipo` <dbl>, `San
## # Miguel` <dbl>, `San Pedro` <dbl>, `San Ramon` <dbl>, Santiago <dbl>,
## # Talagante <dbl>, Tiltil <dbl>, Vitacura <dbl>, `Desconocido
## # Metropolitana` <dbl>
Se filtran los datos para incluir solo dos fechas por cada mes. También se convirte la base de datos a una forma larga. Luego se divide la base por la fecha para tener variables individuales para cada fecha. Esta función deja los datos en un matriz así que se transorman a un dataframe, se remueven las variables de fecha que se han repetido dejando sola una variable para nombre de cada comuna y las variables para casos acumulados de Covid 19 en cada fecha. Luego se renombran las variables y se convirten a numerica las que son de tipo factor. Finalmente, se remueve observación 9 que se refiere a Casos Desconocidos, es decir los casos que no tienen comuna.
RM_fechas <- RM %>% filter(Comuna %in% c('2020-03-30', '2020-04-15', '2020-05-01', '2020-05-15', '2020-06-01', '2020-06-15', '2020-07-01',
'2020-07-13', '2020-07-24'))
RM_long <- RM_fechas %>%
gather(key = "fecha",
value = "Casos_Confirmados",
c(-Comuna))
RM_long %>% arrange(Comuna)
## # A tibble: 477 x 3
## Comuna fecha Casos_Confirmados
## <chr> <chr> <chr>
## 1 2020-03-30 Alhue 0.0
## 2 2020-03-30 Buin 7.0
## 3 2020-03-30 Calera de Tango 6.0
## 4 2020-03-30 Cerrillos 0.0
## 5 2020-03-30 Cerro Navia 19.0
## 6 2020-03-30 Colina 32.0
## 7 2020-03-30 Conchali 14.0
## 8 2020-03-30 Curacavi 5.0
## 9 2020-03-30 El Bosque 18.0
## 10 2020-03-30 El Monte 0.0
## # … with 467 more rows
RM_long <- split(RM_long, RM_long$fecha)
class(RM_long)
## [1] "list"
RM_long <- data.frame(matrix(unlist(RM_long), nrow=length(RM_long), byrow=T))
RM_long <- RM_long[,18:27]
colnames(RM_long)[1:10] <- c("Comuna", '2020-03-30', '2020-04-15', '2020-05-01', '2020-05-15', '2020-06-01', '2020-06-15', '2020-07-01', '2020-07-13', '2020-07-24')
RM_long <- cbind(RM_long[,1], RM_long[,-1] %>% mutate_all(type.convert) %>%
mutate_if(is.factor, as.numeric))
colnames(RM_long)[1] <- "Comuna"
RM_long <- RM_long[-9,]
Ahora se guradan los datos de casos con los datos geoespaciales.
casos_en_comunas <- cbind(comunas_info_RM %>% arrange(nombre_comuna), RM_long)
6) Mapas
A la continuación hay varios mapas mostrando como la propagación de Covid 19 ha evolucionado en la Región Metropolitana. Gracias por leer esta publicación y ojalá que los mapas sean interesantes y útiles.
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-03-30`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 30 Marzo 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-04-15`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 15 Abril 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-05-01`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 01 Mayo 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-05-15`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 15 Mayo 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-06-01`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 01 Junio 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-06-15`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 15 Junio 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-07-01`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 01 Julio 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-07-13`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 13 Julio 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")
ggplot() + geom_sf(data = casos_en_comunas$geometry, aes(fill = casos_en_comunas$`2020-07-24`)) +
scale_fill_viridis_c(option = "inferno",trans = 'sqrt') +
annotation_north_arrow(aes(which_north = "true", location = "br"), pad_y = unit(0.8, "cm")) +
annotation_scale(aes(location = "br", style = "bar")) +
theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed")) +
theme (panel.background = element_rect(fill = "light grey")) +
ggtitle("Casos Confirmados Acumulados de Coronavirus - 24 Julio 2020 ") + xlab("Longitud") + ylab("Latitud") +
labs(fill = "Numero de casos")