R-Conomics

Cargando la información

Primero, cargamos las paqueterías necesarias para poder trabajar:

library(shiny)
library(echarts4r)
library(echarts4r.maps)
library(shinydashboard)
library(argonR)
library(argonDash)
library(dplyr)
library(magrittr)
library(shinyjs)
library(dplyr)
library(readxl)

Este dashboard originalmente consideraba una única base de datos, a la cual se le aplicaban filtros de la siguiente manera:

# Datos a usar
base <- read_excel("/Users/jorge/Desktop/Trabajo/Programacion/Proyectos/owid-covid-data.xlsx")

# Filtro México
casosmex <- base %>% 
  filter(location == "Mexico")

# Mundial
casosmundo <- base %>% 
  filter(date == "2021-05-07", !location %in% c("Asia", "European Union", "South America", "Africa", "World", "Europe", "North America")) %>% 
  arrange(desc(total_cases)) %>% 
  top_n(10, total_cases)

# Mundial por millon
casosmundo_millon <- base %>% 
  filter(date == "2021-05-07", !location %in% c("Asia", "European Union", "South America", "Africa", "World", "Europe", "North America")) %>% 
  arrange(desc(total_cases_per_million)) %>% 
  top_n(10, total_cases_per_million)

# Mundial para mapa
casosmundo_1 <- base %>% 
  filter(date == "2021-05-07", !location %in% c("Asia", "European Union", "South America", "Africa", "World", "Europe", "North America"))

Sin embargo, la base pesaba aproximadamente 20 mb, lo que me generaba problemas para poder publicar el dashboard en la nube, por lo que decidí exportar los filtros a archivos de excel individuales, de la siguiente manera:

# Creamos archivos excel individuales, para disminuir el peso de la información
writexl::write_xlsx(casosmex, path = "/Users/jorge/Desktop/casosmex.xlsx")

Apliqué lo mismo para las demás bases de datos, por lo que no es necesario escribir los comandos para cada una.

El cuerpo del dashboard

Ahora, te dejo a continuación el resto de códigos para crear el dashboard. Lo primero que debemos hacer es cargar los datos necesarios, pero es importante mencionar lo siguiente: Cuando creamos el proyecto debemos guardar las bases de datos dentro de la carpeta de ese proyecto, ya que este dashboard se renderiza en la nube y la dirección de los archivos al publicarlo son diferentes. Por lo tanto, todos los archivos que uses para crearlo deben estar dentro de la carpeta del proyecto.

# Cargamos los datos

semaforo <- read_excel("semaforo.xlsx")
casosmex <- read_excel("casosmex.xlsx")
casosmundo <- read_excel("casosmundo.xlsx")
casosmundo_millon <- read_excel("casosmundo_millon.xlsx")
casosmundo_1 <- read_excel("casosmundo_1.xlsx")
casosmex_1 <- read_excel("casosmex_1.xlsx")
casosfilt <- read_excel("casosfilt.xlsx")

Finalmente, el cuerpo del dashboard es el siguiente:

shinyApp(
    ui = argonDashPage(
        title = "Dashboard interactivo",
        author = "Jorge Hernández",
        description = "Dashboard interactivo sobre COVID",
        
        sidebar = argonDashSidebar(
            vertical = TRUE,
            skin = "dark",
            background = "white",
            size = "md",
            side = "left",
            id = "my_sidebar",
            brand_url = "https://www.who.int",
            brand_logo = "https://elpacientecolombiano.com/wp-content/uploads/2015/09/LOGO-SALUD-MORADO.png",
            
            argonSidebarHeader(title = "Dashboard sobre COVID"),
            argonSidebarMenu(
                argonSidebarItem(
                    icon = argonIcon("laptop", color = "grey"),
                    tabName = "home_tab",
                    style="text-align:center",
                    "Inicio"
                ),
                argonSidebarItem(
                    icon = argonIcon("world", color = "dark"),
                    tabName = "stats_tab",
                    style="text-align:center",
                    "Top países"
                ),
                argonSidebarItem(
                    icon = argonIcon("square-pin", color = "red"),
                    tabName = "prob_tab",
                    style="text-align:center",
                    "México y el COVID"
                ),
                argonSidebarItem(
                    icon = argonIcon("world-2", color = "green"),
                    tabName = "stat_econ_tab",
                    style="text-align:center",
                    "Mapas sobre COVID"
                ),
                argonSidebarItem(
                    icon = argonIcon("cloud-download-95", color = "blue"),
                    tabName = "datos_tab",
                    style="text-align:center",
                    "Datos abiertos"
                ),
                argonSidebarItem(
                    icon = argonIcon("collection", color = "yellow"),
                    tabName = "noticias_tab",
                    style="text-align:center",
                    "Noticias relevantes"
                ),
                argonSidebarItem(
                    icon = argonIcon("circle-08", color = "red"),
                    tabName = "sobre_tab",
                    style="text-align:center",
                    "Sobre el autor"
                )
            ),
            argonSidebarDivider(),
            argonSidebarHeader(title = "Primera versión")
        ),
        
        navbar = argonDashNavbar(
            argonDropNav(
                title = "R-CONOMICS",
                src = "https://cdn.pixabay.com/photo/2020/09/16/18/39/icon-5577198_960_720.png",
                orientation = "right",
                argonDropNavTitle(title = "Mira más proyectos aquí"),
                argonDropNavItem(
                    title = "R-conomics",
                    src = "https://r-conomics.netlify.app",
                    icon = argonIcon("chart-bar-32")
                ),
                argonDropNavItem(
                    title = "Algunas entradas",
                    src = "https://r-conomics.netlify.app/blog/",
                    icon = argonIcon("app")
                ),
                argonDropNavDivider(),
                argonDropNavItem(
                    title = "Código fuente",
                    src = "#",
                    icon = argonIcon("caps-small")
                )
            )
        ),
        
        header = argonDashHeader(
            gradient = TRUE,
            color = "primary",
            separator = TRUE,
            separator_color = "secondary"
        ),
        
        body = argonDashBody(
            argonTabItems(
                argonTabItem(
                    tabName = "home_tab",
                    argonCard(title = "¿Por qué hacer un dashboard sobre COVID-19?",
                              src = "https://r-conomics.netlify.app",
                              hover_lift = TRUE,
                              shadow = TRUE,
                              shadow_size = 10,
                              hover_shadow = TRUE,
                              border_level = 1,
                              icon = argonIcon("book-bookmark"),
                              btn_text = "Visítame en R-conomics",
                              status = "success",
                              background_color = NULL,
                              gradient = TRUE,
                              floating = TRUE,
                              width = 12,
                              p("Este dashboard tiene dos objetivos principales: 1. Mostrar las capacidades de uso de
                                    R y Shiny (utilizando el paquete ArgonDash y ArgonR para la visualización de datos estadísticos,
                                    sean cualesquiera. El segundo objetivo radica en llevar un seguimiento sobre las principales
                                    estadísticas públicas que hay respecto a este tema que ha sido tan importante desde hace ya casi
                                    un año y medio, desde que se registraron los primeros casos de COVID.",
                                "A ti, querido lector, que estás viendo este dashboard, también te compartiré el código fuente para
                                    que lo puedas replicar. Imagina que un día en tu trabajo te solicitan un dashboard sobre algún tema
                                    en particular, tal vez podrías usar éste que te presento ahora mismo como una referencia para crear 
                                    el tuyo propio. Espero que en algún futuro te pueda ser de utilidad, tanto académica como laboralmente.",
                                argonImage(src = "https://cdn.pixabay.com/photo/2020/03/24/15/57/zip-4964510_960_720.jpg", 
                                           url = NULL,
                                           floating = FALSE,
                                           card_mode = TRUE,
                                           hover_lift = TRUE))        
                    )
                ),
                argonTabItem(
                    tabName = "stats_tab",
                    argonTabSet(
                        id = "tabset1",
                        card_wrapper = TRUE,
                        horizontal = TRUE,
                        circle = FALSE,
                        size = "lg",
                        width = 12,
                        iconList = list(
                            argonIcon("world"), 
                            argonIcon("world-2")
                        ),
                        argonTab(
                            tabName = "10 países con más casos",
                            active = FALSE,
                            p( casosmundo %>% 
                                   e_charts(location) %>% 
                                   e_bar(total_cases, name = "Casos totales") %>% 
                                   e_tooltip(trigger = "axis") %>% 
                                   e_toolbox_feature(feature = "dataZoom") %>% 
                                   e_title("Último dato registrado") %>% 
                                   e_theme("chalk") %>% 
                                   e_color(color = "#d94545")%>% 
                                   e_toolbox_feature(feature = "saveAsImage") %>% 
                                   e_toolbox_feature(
                                       feature = "magicType",
                                       type = list("line", "bar")
                                   ) %>% 
                                   e_toolbox_feature(feature = "restore") )
                        ),
                        argonTab(
                            tabName = "10 países con más casos (por millon de habitantes)",
                            active = FALSE,
                            p(casosmundo_millon %>% 
                                  e_charts(location) %>% 
                                  e_bar(total_cases_per_million, name = "Casos totales por millón de habitantes") %>% 
                                  e_tooltip(trigger = "axis") %>% 
                                  e_toolbox_feature(feature = "dataZoom") %>% 
                                  e_title("Último dato registrado") %>% 
                                  e_theme("chalk") %>% 
                                  e_color(color = "#d94545")%>% 
                                  e_toolbox_feature(feature = "saveAsImage") %>% 
                                  e_toolbox_feature(
                                      feature = "magicType",
                                      type = list("line", "bar")
                                  ) %>% 
                                  e_toolbox_feature(feature = "restore")  )
                        )
                    )
                ),
                
                argonTabItem(
                    tabName = "prob_tab",
                    argonTabSet(
                        id = "tabset1",
                        card_wrapper = TRUE,
                        horizontal = TRUE,
                        circle = FALSE,
                        size = "lg",
                        width = 12,
                        iconList = list(
                            argonIcon("atom"), 
                            argonIcon("ambulance"), 
                            argonIcon("atom"), 
                            argonIcon("ambulance")
                        ),
                        argonTab(
                            tabName = "Casos totales",
                            active = FALSE,
                            p( casosmex %>% 
                                   e_charts(date) %>% 
                                   e_bar(total_cases, name = "Casos totales") %>% 
                                   e_tooltip(trigger = "axis") %>% 
                                   e_toolbox_feature(feature = "dataZoom") %>% 
                                   e_datazoom() %>% 
                                   e_theme("chalk") %>% 
                                   e_color(color = "#d94545")%>% 
                                   e_toolbox_feature(feature = "saveAsImage") %>% 
                                   e_toolbox_feature(
                                       feature = "magicType",
                                       type = list("line", "bar")
                                   ) %>% 
                                   e_toolbox_feature(feature = "restore") )
                        ),
                        argonTab(
                            tabName = "Muertes totales",
                            active = FALSE,
                            p( casosmex %>% 
                                   e_charts(date) %>% 
                                   e_bar(total_deaths, name = "Muertes totales") %>% 
                                   e_tooltip(trigger = "axis") %>% 
                                   e_toolbox_feature(feature = "dataZoom") %>% 
                                   e_datazoom() %>% 
                                   e_theme("chalk") %>% 
                                   e_color(color = "#d94545")%>% 
                                   e_toolbox_feature(feature = "saveAsImage") %>% 
                                   e_toolbox_feature(
                                       feature = "magicType",
                                       type = list("line", "bar")
                                   ) %>% 
                                   e_toolbox_feature(feature = "restore") )
                        ),
                        argonTab(
                            tabName = "Casos diarios",
                            active = TRUE,
                            p( casosmex %>% 
                                   e_charts(date) %>% 
                                   e_bar(new_cases, name = "Casos nuevos") %>% 
                                   e_line(new_cases_smoothed, name = "Media movil") %>% 
                                   e_tooltip(trigger = "axis") %>% 
                                   e_toolbox_feature(feature = "dataZoom") %>% 
                                   e_datazoom() %>% 
                                   e_theme("chalk") %>% 
                                   e_color(color = c("#d94545", "#3d74d4"))%>% 
                                   e_toolbox_feature(feature = "saveAsImage") %>% 
                                   e_toolbox_feature(
                                       feature = "magicType",
                                       type = list("line", "bar")
                                   ) %>% 
                                   e_toolbox_feature(feature = "restore") )
                        ),
                        argonTab(
                            tabName = "Muertes diarias",
                            active = FALSE,
                            p( casosmex %>% 
                                   e_charts(date) %>% 
                                   e_bar(new_deaths, name = "Muertes nuevas") %>% 
                                   e_line(new_deaths_smoothed, name = "Media movil") %>% 
                                   e_tooltip(trigger = "axis") %>% 
                                   e_toolbox_feature(feature = "dataZoom") %>% 
                                   e_datazoom() %>% 
                                   e_theme("chalk") %>% 
                                   e_color(color = c("#d94545", "#3d74d4"))%>% 
                                   e_toolbox_feature(feature = "saveAsImage") %>% 
                                   e_toolbox_feature(
                                       feature = "magicType",
                                       type = list("line", "bar")
                                   ) %>% 
                                   e_toolbox_feature(feature = "restore") )
                        )
                    )
                ),
                
                argonTabItem(
                    tabName = "stat_econ_tab",
                    argonTabSet(
                        id = "tab2",
                        card_wrapper = TRUE,
                        horizontal = TRUE,
                        circle = FALSE,
                        size = "lg",
                        width = 12,
                        iconList = list(
                            argonIcon("bulb-61"), 
                            argonIcon("ambulance"), 
                            argonIcon("circle-08"), 
                            argonIcon("fat-remove")
                        ),
                        argonTab(
                            tabName = "Semáforo epidemiológico",
                            active = FALSE,
                            p( semaforo %>%
                                   e_charts(Estado) %>%
                                   em_map("Mexico") %>%
                                   e_map(Semaforo, map = "Mexico") %>% 
                                   e_visual_map(Semaforo, color = c("#a84747", "#bf6c2c", "#e0cc10", "#68ad58")) %>% 
                                   e_color(background = "#5c5c5c") %>% 
                                   e_theme("inspired") %>% 
                                   e_title("Semáforo epidemiológico", "Por estado de la república mexicana") %>% 
                                   e_tooltip(trigger = "item")  )
                        ),
                        argonTab(
                            tabName = "El COVID en el mundo",
                            active = FALSE,
                            p( casosmundo_1 %>% 
                                   e_charts(location) %>% 
                                   e_map(total_cases) %>% 
                                   e_visual_map(total_cases) %>% 
                                   e_theme("inspired") %>% 
                                   e_color(background = "#5c5c5c") %>% 
                                   e_title("Casos totales por país", "Último dato registrado") %>% 
                                   e_tooltip(trigger = "item") )
                        ),
                        argonTab(
                            tabName = "Por millón de habitantes",
                            active = TRUE,
                            p( casosmundo_1 %>% 
                                   e_charts(location) %>% 
                                   e_map(total_cases_per_million) %>% 
                                   e_visual_map(total_cases_per_million) %>% 
                                   e_theme("inspired") %>% 
                                   e_color(background = "#5c5c5c") %>% 
                                   e_title("Una comparación más justa", "Último dato registrado") %>% 
                                   e_tooltip(trigger = "item") )
                        ),
                        argonTab(
                            tabName = "Muertes por país",
                            active = FALSE,
                            p( casosmundo_1 %>% 
                                   e_charts(location) %>% 
                                   e_map(total_deaths) %>% 
                                   e_visual_map(total_deaths) %>% 
                                   e_theme("inspired") %>% 
                                   e_color(background = "#5c5c5c") %>% 
                                   e_title("Muertes totales por país", "Último dato registrado") %>% 
                                   e_tooltip(trigger = "item") )
                        )
                    )
                ),
                
                argonTabItem(
                    tabName = "datos_tab",
                    argonCard(title = "Mira y descarga los datos",
                              src = "https://ourworldindata.org/coronavirus/country/mexico?country=~MEX",
                              hover_lift = TRUE,
                              shadow = TRUE,
                              shadow_size = 10,
                              hover_shadow = TRUE,
                              border_level = 1,
                              icon = argonIcon("cloud-download-95"),
                              btn_text = "Base de datos original",
                              status = "warning",
                              background_color = NULL,
                              gradient = TRUE,
                              floating = TRUE,
                              width = 12,
                              p("Te dejo los datos de COVID en una pequeña tabla, así como el link de descarga original,
                                    por si decides replicar el ejercicio o trabajarlo de una manera diferente.",
                                DT::datatable(casosfilt,  extensions = 'Buttons', options = list(
                                    dom = 'Bfrtip',
                                    buttons = c('copy', 'csv', 'excel', 'pdf')
                                ))   ,
                                ".")        
                    )
                ),
                
                argonTabItem(
                    tabName = "noticias_tab",
                    argonCard(
                        title = "¿Qué ha pasado los últimos días con el COVID-19?",
                        src = NULL,
                        hover_lift = TRUE,
                        shadow = TRUE,
                        shadow_size = 1,
                        hover_shadow = FALSE,
                        border_level = 1,
                        icon = argonIcon("world-2"),
                        btn_text = "More",
                        status = "primary",
                        background_color = NULL,
                        gradient = FALSE,
                        floating = FALSE,
                        width = 12,
                        p(argonMuted(argonLead("Gandhi warns ‘explosive’ COVID wave threatens India and the world")),  argonImage(src = "https://static.dw.com/image/57309508_401.jpg",
                                                                                                                                  url = "https://www.reuters.com/world/asia-pacific/india-records-15-mln-new-covid-19-cases-week-2021-05-07/") ,
                          argonMuted(argonLead("WHO lists additional COVID-19 vaccine for emergency use and issues")),
                          argonPersp(argonImage(src = "https://lh3.googleusercontent.com/proxy/jp4c43qDMi1jwbsOYcb6-MNbr5F9Ov3Z76bqAwtS5WCucei1AWpANKjc7We-uQpmApZWN1yozeYZWWX6U_287qiz7ufZENv2p-kfYYwL6x9IjfWWQRz7PurIrJNanINmz4WtN-2f1Wu_TKRz5Q",
                                                url = "https://www.who.int/news/item/07-05-2021-who-lists-additional-covid-19-vaccine-for-emergency-use-and-issues-interim-policy-recommendations") , side = "left"))
                    )
                    
                ),
                
                argonTabItem(
                    tabName = "sobre_tab",
                    argonProfile(
                        title = "Jorge Hernández",
                        subtitle = "Economista",
                        src = "https://r-conomics.netlify.app/images/avatar.jpg",
                        url = "https://www.linkedin.com/in/jorge-hernandez98/",
                        url_1 = "https://r-conomics.netlify.app",
                        url_2 = "https://r-conomics.netlify.app/blog/",
                        stats = argonProfileStats(
                            argonProfileStat(
                                value = 14,
                                description = "Artículos"
                            ),
                            argonProfileStat(
                                value = 5,
                                description = "Proyectos"
                            ),
                            argonProfileStat(
                                value = 3,
                                description = "Lenguajes de programación"
                            )
                        ),
                        "Mis lineas de trabajo se basan principalmente en el 
                            análisis estadístico aplicado a la economía contemporanea, 
                            el uso de herramientas de programación para busisness inteligence, 
                            big data, machine learning, neural networks, econometría, series 
                            de tiempo y usando las técnicas de modelación mencionadas anteriormente."
                    )
                )
                
            )
        ),
        footer = argonDashFooter(
            copyrights = "@Jorge Hernández, 2021",
            src = "https://www.linkedin.com/in/jorge-hernandez98/",
            argonFooterMenu(
                argonFooterItem("Linkedin", src = "https://www.linkedin.com/in/jorge-hernandez98/"),
                argonFooterItem("Twitter", src = "https://twitter.com/ElJorgeHdz"),
                argonFooterItem("Facebook", src = "https://www.facebook.com/eljorgehc"),
                argonFooterItem("Instagram", src = "https://www.instagram.com/jorge_hca/")
            )
        )
        
    ),
    server = function(input, output) { }
)
R-Conomics
Todos los derechos reservados