Los datos estudiados provienen de DataIntelligence Chile.
#Filtrar datos
#pd <- import("pandas")
#datos <- pd$read_excel("data_1_mayo.xlsx")
#head(datos, 10)
#Siendo que solo queremos ver cómo se ha extendido el covid19 en TarapacÔ, filtraremos el data frame para mostrar solo los casos ede TarapacÔ. Esto se puede hacer con el paquete dplyr.
library(tibble)
library(readr)
# read_csv2 () lee archivos separados por punto y coma (comĆŗn en paĆses donde, se usa como el decimal)
covid19_data <- read_csv2("data_1_mayo.csv")
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
## Region = col_character(),
## Comuna = col_character(),
## Codigo_comuna = col_double(),
## Fecha = col_character(),
## Clave = col_double(),
## Casos_Diarios = col_double(),
## Casos_Acumulados = col_double(),
## Muertes = col_double(),
## Casos_Activos = col_double(),
## Recuperados = col_double(),
## Recuperados_Diarios = col_double(),
## Dia = col_double(),
## Fallecidos_Diarios = col_double(),
## `on-off` = col_character(),
## Max_Dia = col_double()
## )
#str(covid19_data)
#as_tibble(covid19_data)
#str(covid19_data)
covid19_data
## # A tibble: 67,936 x 15
## Region Comuna Codigo_comuna Fecha Clave Casos_Diarios Casos_Acumulados
## <chr> <chr> <dbl> <chr> <dbl> <dbl> <dbl>
## 1 Antof~ Antof~ 2101 03-0~ 2.10e8 0 0
## 2 Antof~ Antof~ 2101 04-0~ 2.10e8 0 0
## 3 Antof~ Antof~ 2101 05-0~ 2.10e8 0 0
## 4 Antof~ Antof~ 2101 06-0~ 2.10e8 0 0
## 5 Antof~ Antof~ 2101 07-0~ 2.10e8 0 0
## 6 Antof~ Antof~ 2101 08-0~ 2.10e8 0 0
## 7 Antof~ Antof~ 2101 09-0~ 2.10e8 0 0
## 8 Antof~ Antof~ 2101 10-0~ 2.10e8 0 0
## 9 Antof~ Antof~ 2101 11-0~ 2.10e8 0 0
## 10 Antof~ Antof~ 2101 12-0~ 2.10e8 0 0
## # ... with 67,926 more rows, and 8 more variables: Muertes <dbl>,
## # Casos_Activos <dbl>, Recuperados <dbl>, Recuperados_Diarios <dbl>,
## # Dia <dbl>, Fallecidos_Diarios <dbl>, `on-off` <chr>, Max_Dia <dbl>
Vemos que la fecha no tiene el formato correcto. Se lo damos:
covid19_data$Fecha %<>% as.Date(format="%d-%m-%y")
# covid19_data
head(covid19_data, 10)
## # A tibble: 10 x 15
## Region Comuna Codigo_comuna Fecha Clave Casos_Diarios Casos_Acumulados
## <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
## 1 Antof~ Antof~ 2101 2020-03-03 2.10e8 0 0
## 2 Antof~ Antof~ 2101 2020-03-04 2.10e8 0 0
## 3 Antof~ Antof~ 2101 2020-03-05 2.10e8 0 0
## 4 Antof~ Antof~ 2101 2020-03-06 2.10e8 0 0
## 5 Antof~ Antof~ 2101 2020-03-07 2.10e8 0 0
## 6 Antof~ Antof~ 2101 2020-03-08 2.10e8 0 0
## 7 Antof~ Antof~ 2101 2020-03-09 2.10e8 0 0
## 8 Antof~ Antof~ 2101 2020-03-10 2.10e8 0 0
## 9 Antof~ Antof~ 2101 2020-03-11 2.10e8 0 0
## 10 Antof~ Antof~ 2101 2020-03-12 2.10e8 0 0
## # ... with 8 more variables: Muertes <dbl>, Casos_Activos <dbl>,
## # Recuperados <dbl>, Recuperados_Diarios <dbl>, Dia <dbl>,
## # Fallecidos_Diarios <dbl>, `on-off` <chr>, Max_Dia <dbl>
#Todas las columnas parecen tener la estructura correcta.
Filtrando los datos
Siendo que solo queremos ver cómo se extendió covid19 en TarapacĆ”, filtraremos el dataframe para mostrar solo Ć©sos casos. Ćsto lo haremos con el paquete dplyr.
Tarapaca_covid19<-covid19_data%>%
dplyr::filter(Region == "Tarapaca")
Tarapaca_covid19
## # A tibble: 1,351 x 15
## Region Comuna Codigo_comuna Fecha Clave Casos_Diarios Casos_Acumulados
## <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
## 1 Tarap~ Alto ~ 1107 2020-03-03 1.11e8 0 0
## 2 Tarap~ Alto ~ 1107 2020-03-04 1.11e8 0 0
## 3 Tarap~ Alto ~ 1107 2020-03-05 1.11e8 0 0
## 4 Tarap~ Alto ~ 1107 2020-03-06 1.11e8 0 0
## 5 Tarap~ Alto ~ 1107 2020-03-07 1.11e8 0 0
## 6 Tarap~ Alto ~ 1107 2020-03-08 1.11e8 0 0
## 7 Tarap~ Alto ~ 1107 2020-03-09 1.11e8 0 0
## 8 Tarap~ Alto ~ 1107 2020-03-10 1.11e8 0 0
## 9 Tarap~ Alto ~ 1107 2020-03-11 1.11e8 0 0
## 10 Tarap~ Alto ~ 1107 2020-03-12 1.11e8 0 0
## # ... with 1,341 more rows, and 8 more variables: Muertes <dbl>,
## # Casos_Activos <dbl>, Recuperados <dbl>, Recuperados_Diarios <dbl>,
## # Dia <dbl>, Fallecidos_Diarios <dbl>, `on-off` <chr>, Max_Dia <dbl>
La siguiente dirección es un excelente sitio web para descargar datasets espaciales de todos los paĆses del mundo:
# Para leer los datos, usarƩ el paquete sf.
library(sf)
CL_comunas=st_read("C:/Users/usuario/Documents/GitHub/covid19/unidades_vecinales_2019/unidades_vecinales_2019.shp")
## Reading layer `unidades_vecinales_2019' from data source `C:\Users\usuario\Documents\GitHub\covid19\unidades_vecinales_2019\unidades_vecinales_2019.shp' using driver `ESRI Shapefile'
## Simple feature collection with 6871 features and 10 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -109.4549 ymin: -55.98 xmax: -66.41821 ymax: -17.49846
## CRS: 4326
# Como podemos ver, el archivo shape se leyó en R.
#CL_comunas
# plot(st_geometry(CL_comunas))
Tarapaca_municipios = CL_comunas %>% filter(T_REG_NOM == "TARAPACA")
plot(st_geometry(Tarapaca_municipios))
Uniendo el shapefile al dataframe
Esto se puede hacer utilizando la función left_join() del paquete dplyr. La unión se basarĆ” en la columna comĆŗn compartida por ambos conjuntos de datos, que serĆa la columna Región.
Primero, necesito poner en minĆŗscula el encabezado de la columna āRegionā en el dataset Tarapaca_covid19 y reemplazar el nombre T_REG_NOM por āregionā en el dataset de los shp. Esto, para que puedan coincidir las columnas āRegiónā de ambos datasets.
Luego, hay que llevar a minĆŗsculas la columna āRegiónā en ambos datasets.
colnames(Tarapaca_covid19)
## [1] "Region" "Comuna" "Codigo_comuna"
## [4] "Fecha" "Clave" "Casos_Diarios"
## [7] "Casos_Acumulados" "Muertes" "Casos_Activos"
## [10] "Recuperados" "Recuperados_Diarios" "Dia"
## [13] "Fallecidos_Diarios" "on-off" "Max_Dia"
colnames(Tarapaca_municipios)
## [1] "T_REG_CA" "T_REG_NOM" "T_PROV_CA" "T_PROV_NOM" "T_COM"
## [6] "COMUNA" "T_COM_NOM" "T_UV_COD" "ID_UV" "T_UV_NOM"
## [11] "geometry"
names(Tarapaca_covid19)[names(Tarapaca_covid19) == 'Region'] <- 'region'
names(Tarapaca_municipios)[names(Tarapaca_municipios) == 'T_REG_NOM'] <- 'region'
Tarapaca_covid19$region<-tolower(Tarapaca_covid19$region)#Makes all rows in the county column lowercase
Tarapaca_municipios$region<-tolower(Tarapaca_municipios$region)
#Ahora puedo unir los dos datasets basado en la columna 'region' de ambos.
Tarapaca_covid19_shapes<-left_join(Tarapaca_covid19,Tarapaca_municipios,by="region",all.x = TRUE)%>%
dplyr::select(Fecha,Comuna,region,Casos_Acumulados,geometry)#selects only the columns of interest
#head(Tarapaca_covid19_shapes)
head(Tarapaca_covid19_shapes)
## # A tibble: 6 x 5
## Fecha Comuna region Casos_Acumulados geometry
## <date> <chr> <chr> <dbl> <MULTIPOLYGON [°]>
## 1 2020-03-03 Alto Ho~ tarap~ 0 (((-69.25363 -20.12262, -69.25361~
## 2 2020-03-03 Alto Ho~ tarap~ 0 (((-69.2535 -20.12259, -69.2418 -~
## 3 2020-03-03 Alto Ho~ tarap~ 0 (((-69.01007 -20.67646, -69.00497~
## 4 2020-03-03 Alto Ho~ tarap~ 0 (((-68.97833 -19.93333, -68.97658~
## 5 2020-03-03 Alto Ho~ tarap~ 0 (((-69.47563 -20.40196, -69.47574~
## 6 2020-03-03 Alto Ho~ tarap~ 0 (((-69.74089 -20.26079, -69.70897~
#Hacer un mapa con ggplot2 y gganimate
#Toda la parte de manipulación de datos estÔ hecha, ahora puedo comenzar a construir el mapa real. Usaré el paquete ggplot2 junto con el paquete gganimate para crear el mapa final de la serie animada que muestra cómo se extendió el covid19 en la región de TarapacÔ.
# Used to make new data frame an sf object
# Must use st_as_sf in order to use geom_sf() to plot polygons
library(ggplot2) #Used for plotting
library(gganimate) #Used for animations
library(RColorBrewer)
Tarapaca_covid19_shapes<-st_as_sf(Tarapaca_covid19_shapes)
# Makes plot with ggplot2 and gganimate to animate through the days
covid_map<-ggplot()+
geom_sf(data = Tarapaca_municipios,fill = "white")+
geom_sf(data = Tarapaca_covid19_shapes,aes(fill=Casos_Acumulados))+
ggtitle("Expansión del COVID-19 en la región de TarapacÔ")+
xlab("")+
ylab("")+
labs(subtitle = "Date: {current_frame}",
caption = "Fuente de datos: DataIntelligence\nAutor: Christian Castro")+
cowplot::background_grid(major = "none", minor = "none") +
theme(axis.text.x = element_blank(), axis.ticks.x = element_blank(),
axis.text.y = element_blank(), axis.ticks.y = element_blank(),
axis.line = element_blank(),
legend.background = element_blank(),
legend.position=c(-0.3,0.8),
plot.background = element_blank(),
panel.background = element_blank(),
legend.text = element_text(size=12),
legend.title = element_text(colour="black", size=12, face="bold"),
plot.title=element_text(size=20, face="bold",hjust =0.5),
plot.subtitle = element_text(hjust = 0.5,size=12),
plot.caption = element_text(size = 11,
hjust = .5,
color = "black",
face = "bold"))+
scale_fill_distiller("Casos_Acumulados",
palette ="Reds",type = "div",
direction = 1)+transition_manual(Fecha)
animate(covid_map, nframe=27,fps = 2, end_pause = 15,height = 500, width =500)