Tablero de datos del Coronavirus: el caso de Colombia
Este tablero del Coronavirus: el caso de Colombia provee una visión general de la nueva epidemia coronavirus COVID-19 (2019-nCoV) para colombia y algunos países de Sudamérica.
El tablero fue construído con R, usando el entorno de trabajo R Markdown y es una adaptación de éste elaborado por Rami Krispin.
Código
El código para elaborar su propia adaptación puede encontrarlo en GitHub.
Datos
Los datos que alimentan este tablero es el conjunto de datos disponibles en el paquete de datos de R {coronavirus}
. Asegúrese de descargar la versión de desarrollador del paquete para poder obtener una versión actualizada de los datos:
install.packages("devtools")
devtools::install_github("RamiKrispin/coronavirus")
Los datos y el tablero los estaremos actualizando diariamente.
Los datos en bruto son obtenidos desde el repositorio del Centro de Sistemas, Ciencia e Ingeniería Coronavirus de la Universidad Johns Hopkins (JHU CCSE) .
Contacto
Para obtener más información, contáctenos. Más información sobre el tablero puede encontrarse en este artículo.
Actualización
Los datos son del Monday March 23, 2020 y el tablero fue actualizado el Tuesday March 24, 2020.
Go back to www.statsandr.com (blog) or www.antoinesoetewey.com (personal website).
---
title: "Coronavirus en Colombia"
author: "www.cdedatos.com"
output:
flexdashboard::flex_dashboard:
orientation: rows
# social: ["facebook", "twitter", "linkedin"]
source_code: embed
vertical_layout: fill
---
```{r setup, include=FALSE}
#------------------ Packages ------------------
library(flexdashboard)
# install.packages("devtools")
# devtools::install_github("RamiKrispin/coronavirus")
library(coronavirus)
data(coronavirus) # load data
# update_datasets() # update data if possible
# View(coronavirus) # see data
# max(coronavirus$date) # show maximum data
`%>%` <- magrittr::`%>%`
#------------------ Parameters ------------------
# Set colors
# https://www.w3.org/TR/css-color-3/#svg-color
confirmed_color <- "#ffa726"
active_color <- "#009CBF"
recovered_color <- "forestgreen"
death_color <- "red"
#------------------ Data ------------------
# Here on df you create the dataframe of your desired country
df <- coronavirus %>%
# dplyr::filter(date == max(date)) %>%
dplyr::filter(Country.Region == "Colombia") %>%
dplyr::group_by(Country.Region, type) %>%
dplyr::summarise(total = sum(cases)) %>%
tidyr::pivot_wider(
names_from = type,
values_from = total
) %>%
# dplyr::mutate(unrecovered = confirmed - ifelse(is.na(recovered), 0, recovered) - ifelse(is.na(death), 0, death)) %>%
dplyr::mutate(unrecovered = confirmed - ifelse(is.na(death), 0, death)) %>%
dplyr::arrange(-confirmed) %>%
dplyr::ungroup() %>%
dplyr::mutate(country = dplyr::if_else(Country.Region == "United Arab Emirates", "UAE", Country.Region)) %>%
dplyr::mutate(country = dplyr::if_else(country == "Mainland China", "China", country)) %>%
dplyr::mutate(country = dplyr::if_else(country == "North Macedonia", "N.Macedonia", country)) %>%
dplyr::mutate(country = trimws(country)) %>%
dplyr::mutate(country = factor(country, levels = country))
# Here you create a dataframe with daily data for your country
df_daily <- coronavirus %>%
dplyr::filter(Country.Region == "Colombia") %>%
dplyr::group_by(date, type) %>%
dplyr::summarise(total = sum(cases, na.rm = TRUE)) %>%
tidyr::pivot_wider(
names_from = type,
values_from = total
) %>%
dplyr::arrange(date) %>%
dplyr::ungroup() %>%
#dplyr::mutate(active = confirmed - death - recovered) %>%
dplyr::mutate(active = confirmed - death) %>%
dplyr::mutate(
confirmed_cum = cumsum(confirmed),
death_cum = cumsum(death),
# recovered_cum = cumsum(recovered),
active_cum = cumsum(active)
)
# the data for the lattest date
df1 <- coronavirus %>% dplyr::filter(date == max(date))
```
Línea de tiempo Colombia
=======================================================================
Row {data-width=400}
-----------------------------------------------------------------------
### confirmed {.value-box}
```{r}
valueBox(
value = paste(format(sum(df$confirmed), big.mark = ","), "", sep = " "),
caption = "Total de casos confirmados",
icon = "fas fa-user-md",
color = confirmed_color
)
```
### death {.value-box}
```{r}
valueBox(
value = paste(format(sum(df$death, na.rm = TRUE), big.mark = ","), " (",
round(100 * sum(df$death, na.rm = TRUE) / sum(df$confirmed), 1),
"%)",
sep = ""
),
caption = "Casos de muerte (índice de mortalidad)",
icon = "fas fa-heart-broken",
color = death_color
)
```
Row
-----------------------------------------------------------------------
### **Casos diarios acumulados por tipo** (Solamente Colombia)
```{r}
plotly::plot_ly(data = df_daily) %>%
plotly::add_trace(
x = ~date,
# y = ~active_cum,
y = ~confirmed_cum,
type = "scatter",
mode = "lines+markers",
# name = "Active",
name = "Confirmados",
line = list(color = active_color),
marker = list(color = active_color)
) %>%
plotly::add_trace(
x = ~date,
y = ~death_cum,
type = "scatter",
mode = "lines+markers",
name = "Muertes",
line = list(color = death_color),
marker = list(color = death_color)
) %>%
plotly::add_annotations(
x = as.Date("2020-03-06"),
y = 1,
text = paste("Primer caso"),
xref = "x",
yref = "y",
arrowhead = 5,
arrowhead = 3,
arrowsize = 1,
showarrow = TRUE,
ax = -10,
ay = -90
) %>%
plotly::add_annotations(
x = as.Date("2020-03-22"),
y = 3,
text = paste("Primera muerte"),
xref = "x",
yref = "y",
arrowhead = 5,
arrowhead = 3,
arrowsize = 1,
showarrow = TRUE,
ax = -5,
ay = -50
) %>%
plotly::add_annotations(
x = as.Date("2020-03-17"),
y = 80,
text = paste(
"Cierre de fronteras",
" \n",
"(terrestres, marítimas y fluviales)"
),
xref = "x",
yref = "y",
arrowhead = 5,
arrowhead = 3,
arrowsize = 1,
showarrow = TRUE,
ax = -90,
ay = -120
) %>%
plotly::layout(
title = "",
yaxis = list(title = "Número de casos acumulados"),
xaxis = list(title = ""),
legend = list(x = 0.1, y = 0.9),
hovermode = "compare"
)
```
Comparación
=======================================================================
Column {data-width=400}
-------------------------------------
### **Casos nuevos confirmados por día**
```{r}
daily_confirmed <- coronavirus %>%
dplyr::filter(type == "confirmed") %>%
dplyr::filter(date >= "2020-02-29") %>%
dplyr::mutate(country = Country.Region) %>%
dplyr::group_by(date, country) %>%
dplyr::summarise(total = sum(cases)) %>%
dplyr::ungroup() %>%
tidyr::pivot_wider(names_from = country, values_from = total)
#----------------------------------------
# Plotting the data
daily_confirmed %>%
plotly::plot_ly() %>%
plotly::add_trace(
x = ~date,
y = ~Argentina, # país 1
type = "scatter",
mode = "lines+markers",
name = "Argentina"
) %>%
plotly::add_trace(
x = ~date,
y = ~Brazil, # país 5
type = "scatter",
mode = "lines+markers",
name = "Brasil"
) %>%
plotly::add_trace(
x = ~date,
y = ~Chile, # país 5
type = "scatter",
mode = "lines+markers",
name = "Chile"
) %>%
plotly::add_trace(
x = ~date,
y = ~Colombia, # país 3
type = "scatter",
mode = "lines+markers",
name = "Colombia"
) %>%
plotly::add_trace(
x = ~date,
y = ~Uruguay, # país 5
type = "scatter",
mode = "lines+markers",
name = "Uruguay"
) %>%
plotly::layout(
title = "",
legend = list(x = 0.1, y = 0.9),
yaxis = list(title = "Número de casos nuevos"),
xaxis = list(title = "Fecha"),
# paper_bgcolor = "black",
# plot_bgcolor = "black",
# font = list(color = 'white'),
hovermode = "compare",
margin = list(
# l = 60,
# r = 40,
b = 10,
t = 10,
pad = 2
)
)
```
### **Distribución de muertes y casos confirmados **
```{r daily_summary}
df_EU <- coronavirus %>%
# dplyr::filter(date == max(date)) %>%
dplyr::filter(Country.Region == "Colombia" |
Country.Region == "Argentina" |
Country.Region == "Brazil" |
Country.Region == "Chile" |
Country.Region == "Colombia" |
Country.Region == "Uruguay") %>%
dplyr::group_by(Country.Region, type) %>%
dplyr::summarise(total = sum(cases)) %>%
tidyr::pivot_wider(
names_from = type,
values_from = total
) %>%
# dplyr::mutate(unrecovered = confirmed - ifelse(is.na(recovered), 0, recovered) - ifelse(is.na(death), 0, death)) %>%
dplyr::mutate(unrecovered = confirmed - ifelse(is.na(death), 0, death)) %>%
dplyr::arrange(confirmed) %>%
dplyr::ungroup() %>%
dplyr::mutate(country = dplyr::if_else(Country.Region == "United Arab Emirates", "UAE", Country.Region)) %>%
dplyr::mutate(country = dplyr::if_else(country == "Mainland China", "China", country)) %>%
dplyr::mutate(country = dplyr::if_else(country == "North Macedonia", "N.Macedonia", country)) %>%
dplyr::mutate(country = trimws(country)) %>%
dplyr::mutate(country = factor(country, levels = country))
plotly::plot_ly(
data = df_EU,
x = ~country,
# y = ~unrecovered,
y = ~ confirmed,
# text = ~ confirmed,
# textposition = 'auto',
type = "bar",
name = "Confirmados",
marker = list(color = active_color)
) %>%
plotly::add_trace(
y = ~death,
# text = ~ death,
# textposition = 'auto',
name = "Muertes",
marker = list(color = death_color)
) %>%
plotly::layout(
barmode = "stack",
yaxis = list(title = "Casos totales"),
xaxis = list(title = ""),
hovermode = "compare",
margin = list(
# l = 60,
# r = 40,
b = 10,
t = 10,
pad = 2
)
)
```
Mapa
=======================================================================
### **Mapa mundial de casos** (*use los íconos de + y - para hacer acercar y alejar*)
```{r}
# map tab added by Art Steinmetz
library(leaflet)
library(leafpop)
library(purrr)
cv_data_for_plot <- coronavirus %>%
# dplyr::filter(Country.Region == "Belgium") %>%
dplyr::filter(cases > 0) %>%
dplyr::group_by(Country.Region, Province.State, Lat, Long, type) %>%
dplyr::summarise(cases = sum(cases)) %>%
dplyr::mutate(log_cases = 2 * log(cases)) %>%
dplyr::ungroup()
cv_data_for_plot.split <- cv_data_for_plot %>% split(cv_data_for_plot$type)
pal <- colorFactor(c("orange", "red", "green"), domain = c("confirmed", "death", "recovered"))
map_object <- leaflet() %>% addProviderTiles(providers$Stamen.Toner)
names(cv_data_for_plot.split) %>%
purrr::walk(function(df) {
map_object <<- map_object %>%
addCircleMarkers(
data = cv_data_for_plot.split[[df]],
lng = ~Long, lat = ~Lat,
# label=~as.character(cases),
color = ~ pal(type),
stroke = FALSE,
fillOpacity = 0.8,
radius = ~log_cases,
popup = leafpop::popupTable(cv_data_for_plot.split[[df]],
feature.id = FALSE,
row.numbers = FALSE,
zcol = c("type", "cases", "Country.Region", "Province.State")
),
group = df,
# clusterOptions = markerClusterOptions(removeOutsideVisibleBounds = F),
labelOptions = labelOptions(
noHide = F,
direction = "auto"
)
)
})
map_object %>%
addLayersControl(
overlayGroups = names(cv_data_for_plot.split),
options = layersControlOptions(collapsed = FALSE)
)
```
Acerca de
=======================================================================
**Tablero de datos del Coronavirus: el caso de Colombia**
Este tablero del Coronavirus: el caso de Colombia provee una visión general de la nueva epidemia coronavirus COVID-19 (2019-nCoV) para colombia y algunos países de Sudamérica.
El tablero fue construído con R, usando el entorno de trabajo R Markdown y es una adaptación de [éste](https://ramikrispin.github.io/coronavirus_dashboard/){target="_blank"} elaborado por Rami Krispin.
**Código**
El código para elaborar su propia adaptación puede encontrarlo en [GitHub](https://github.com/AntoineSoetewey/coronavirus_dashboard){target="_blank"}.
**Datos**
Los datos que alimentan este tablero es el conjunto de datos disponibles en el paquete de datos de R [`{coronavirus}`](https://github.com/RamiKrispin/coronavirus){target="_blank"}.
Asegúrese de descargar la versión de desarrollador del paquete para poder obtener una versión actualizada de los datos:
```
install.packages("devtools")
devtools::install_github("RamiKrispin/coronavirus")
```
Los datos y el tablero los estaremos actualizando diariamente.
Los datos en bruto son obtenidos desde el [repositorio](https://github.com/RamiKrispin/coronavirus-csv){target="_blank"} del Centro de Sistemas, Ciencia e Ingeniería Coronavirus de la Universidad Johns Hopkins (JHU CCSE) .
**Contacto**
Para obtener más información, [contáctenos](https://cdedatos.com/contact-conoce-mas-sobre-las-iniciativas-de-ciencia-de-datos/).
Más información sobre el tablero puede encontrarse en este [artículo](https://www.statsandr.com/blog/how-to-create-a-simple-coronavirus-dashboard-specific-to-your-country-in-r/).
**Actualización**
Los datos son del `r format(max(coronavirus$date), "%A %B %d, %Y")` y el tablero fue actualizado el `r format(Sys.time(), "%A %B %d, %Y")`.
*Go back to [www.statsandr.com](https://www.statsandr.com/) (blog) or [www.antoinesoetewey.com](https://www.antoinesoetewey.com/) (personal website)*.