class: bottom, center, inverse background-image: url("img/fifa.jpeg") background-position: top background-size: 100% 54% .bottom[ ## **Crea tu dashboard en `R`: Visualizando datos del mundial FIFA ⚽** ### **Dra Shazia Ruybal Pesántez** Brown Bag Seminar InnovaLab 2022-10-13 [
@shaziaruybal](http://github.com/shaziaruybal) | [
@DrShaziaRuybal](http://twitter.com/DrShaziaRuybal) |[
shaziaruybal.com](https://shaziaruybal.com) ] --- name: about-me class: middle, center, inverse ## ¡Mucho gusto! <img style="border-radius: 50%;" src="img/shazia.png" width="250px"/> ### Shazia Ruybal-Pesántez #### **Postdoc - Epidemiología Genómica** ##### Imperial College London/MRC Centre for Global Infectious Disease Analysis [
@shaziaruybal](http://github.com/shaziaruybal) [
@DrShaziaRuybal](http://twitter.com/DrShaziaRuybal) [
shaziaruybal.com](https://shaziaruybal.com) --- layout: true <!--this adds the repo link footer to all slides, depends on footer-link class in custom.css--> <a class="footer-link" href="https://github.com/shaziaruybal/dashboard-mundialFIFA"><strong><i class="fab fa-github"></i> github.com/shaziaruybal/dashboard-mundialFIFA </strong> • Brown Bag Seminar </a> --- name: welcometoR background-image: url("img/welcome_to_rstats_twitter.png") background-size: contain background-position: middle .footnote[ *Arte por [@alison_horst](https://github.com/allisonhorst/stats-illustrations)* ] --- class: center, middle # Conozcámonos un poco -- ## 👍 si te consideras un principiante en `R` y/o `R Markdown` -- ## ❤️ si te sientes comod@ utilizando `R` y `R Markdown` --- class: inverse, center #
# El taller de hoy te enseñará: -- ### Creación de un dashboard utilizando `rmarkdown` y `flexdashboard` -- ### Visualización del dataset del mundial FIFA en un dashboard -- ### Los materiales de este taller están disponibles libremente y pueden servirte como ejemplo para crear tu propio dashboard! -- .left-column[ .pull-left[ ### [
Materiales](https://github.com/shaziaruybal/dashboard-mundialFIFA) ]] .right-column[ .pull-left[ ### [
Diapos](http://shaziaruybal.github.io/dashboard-mundialFIFA) ] .pull-right[ ### [
Grabación](https://youtu.be/Fc1RwRskk08) ] ] --- background-image: url("img/rmarkdown_wizards.png") background-size: 85% 85% background-position: center .footnote[ *Art by [@alison_horst](https://github.com/allisonhorst/stats-illustrations)* ] --- class: center, middle inverse #
# ¿Por qué un dashboard? --- #
Ventajas de un dashboard -- ### - Permite visualizar datasets complejos -- ### - Enfoque en la información más importante -- ### - Interactividad para el usuario -- ### - Reproducibilidad -- ### - Muchos casos de uso --- class: inverse, center, middle #
¿En sus investigaciones o trabajos, para qué utilizarían un dashboard? --- name: paquete # Paquete `flexdashboard` .left-column[ <img style="circle" src="img/flexdashboard.png" height="250px" width="250px"/> ] -- .right-column[ ### Desarrollado por RStudio [
Repo en Github](https://github.com/rstudio/flexdashboard) [
Documentación](https://pkgs.rstudio.com/flexdashboard/) - Utiliza `rmarkdown` para publicar visualizaciones estilo dashboard - Compatibilidad con varios componentes adicionales incluyendo htmlwidgets; diferentes tipos de gráficos; tablas; botones; y texto. - El diseño consiste de filas y columnas y es flexible y facil de especificar. Los diferentes componentes se adaptan al tamaño de la pantalla. - Compatibilidad con `shiny` para visualizaciones dinámicas y con `bslib` para personalizar los colores, fuentes, etc ] --- # 👀 Ojo, si no estas familiarizad@ con `rmarkdown`: - Para este taller vamos a asumir un conocimiento *básico* de `rmarkdown` y `tidyverse` - [Para más recursos ⬇️](https://rmarkdown.rstudio.com/lesson-1.html) ![https://rmarkdown.rstudio.com/lesson-1.html](img/rstudio-rmd.png) --- class: inverse, center, middle # ¡Empecemos! ![dive-in](https://media.giphy.com/media/UrCpsX5zV2ca1j4iap/giphy.gif?cid=ecf05e47gmxqy07akxcvvf5y3l7cvf9rhw6mhb8jf92su2hh&rid=giphy.gif&ct=g) --- ## Nuestro objetivo hoy ![](img/dashboard_final.png) --- class: inverse, center, middle ## 🇪🇨 pon la bandera o escribe en el chat a quien le vas en el mundial de Qatar ![](https://media.giphy.com/media/0opAg3FW83SNFKyl8i/giphy.gif?cid=ecf05e47mbbj8vvj45m2xgpaalvuugd6z7fcyoxjdf7le3qr&rid=giphy.gif&ct=g) --- class: inverse, center, middle # Ahora construiremos el dashboard 😍 --- # Pasos a seguir ### 1. Crear una nueva plantilla de `flexdashboard` (y 🧶knit!) ### 2. Cargar datos (y limpieza si es necesario) ### 3. Agregar gráficos y tablas ### 4. Modificar el formato y/o la paleta de colores ### 5. 🧶Knit de nuevo! --- # Paso 1: Crea la plantilla de tu dashboard con `flexdashboard` .pull-left[ Instala el paquete `flexdashboard` ```r install.packages("flexdashboard") ``` Carga la libreria ```r library(flexdashboard) ``` En el IDE de RStudio, crea un nuevo documento de R Markdown `File -> New File -> R Markdown -> From Template` **
Tip: ** Usa la plantilla "themed with {bslib}" para más flexibilidad en la presentación ] .pull-right[ ![](img/nuevormd_flex.png) ] --- class: inverse, center, middle # Para ver el dashboard "default", haz click en 🧶Knit --- class: top, center <video width="1530" height="610" controls> <source src="vid/flex_default.mp4" type="video/mp4"> </video> --- #
La anatomía de un `flexdashboard` .Rmd .pull-left[ ![](img/flex_default_rmd.png) ] .pull-right[ **Encabezado** - A traves del YAML podemos modificar el título, los colores, la orientación **Columns** - La orientación de cada dashboard puede manejarse con columnas o filas (formato R Markdown) - Puedes controlar el tamaño con `data-width=` o `data-height=` **
Tip: ** Utiliza `.tabset` para crear pestañas ] --- #
La anatomía de un `flexdashboard` .Rmd .pull-left[ ![](img/flex_themed.png) ] .pull-right[ **Encabezado** - A traves del YAML podemos modificar el título, los colores, la orientación **Charts** - La orientación de cada dashboard puede manejarse con columnas o filas (formato R Markdown) ] --- class: inverse #
Paso 2: Cargar datos ### Utilizaremos los datos de los mundiales de la FIFA del 1930-2014 que se encuentran en Kaggle [kaggle.com/datasets/abecklas/fifa-world-cup](https://www.kaggle.com/datasets/abecklas/fifa-world-cup) -- ### Son 3 documentos .csv: * WorldCupMatches.csv * WorldCupPlayers.csv * WorldCups.csv -- ### Puedes encontrar los datos del taller de hoy aquí: [github.com/shaziaruybal/dashboard-mundialFIFA/data](https://github.com/shaziaruybal/dashboard-mundialFIFA/blob/main/data/) --- #
Paso 2: Cargar datos .pull-left[ Para cargar los datos asignamos objetos a cada dataset ```r partidos <- read.csv("data/WorldCupMatches.csv") jugadores <- read.csv("data/WorldCupPlayers.csv") copas <- read.csv("data/WorldCups.csv") ``` #### Ojo que hoy no nos enfocaremos en limpieza de datos **
Tip: ** Carga tus datos en el chunk de "setup" ] .pull-right[ ![](img/setup_chunk.png) ] --- #
Exploremos que contiene cada dataset ```r head(copas) ``` ``` ## Year Country Winner Runners.Up Third Fourth GoalsScored ## 1 1930 Uruguay Uruguay Argentina USA Yugoslavia 70 ## 2 1934 Italy Italy Czechoslovakia Germany Austria 70 ## 3 1938 France Italy Hungary Brazil Sweden 84 ## 4 1950 Brazil Uruguay Brazil Sweden Spain 88 ## 5 1954 Switzerland Germany FR Hungary Austria Uruguay 140 ## 6 1958 Sweden Brazil Sweden France Germany FR 126 ## QualifiedTeams MatchesPlayed Attendance ## 1 13 18 590.549 ## 2 16 17 363.000 ## 3 15 18 375.700 ## 4 13 22 1.045.246 ## 5 16 26 768.607 ## 6 16 35 819.810 ``` --- #
Exploremos que contiene cada dataset ```r head(jugadores) ``` ``` ## RoundID MatchID Team.Initials Coach.Name Line.up Shirt.Number ## 1 201 1096 FRA CAUDRON Raoul (FRA) S 0 ## 2 201 1096 MEX LUQUE Juan (MEX) S 0 ## 3 201 1096 FRA CAUDRON Raoul (FRA) S 0 ## 4 201 1096 MEX LUQUE Juan (MEX) S 0 ## 5 201 1096 FRA CAUDRON Raoul (FRA) S 0 ## 6 201 1096 MEX LUQUE Juan (MEX) S 0 ## Player.Name Position Event ## 1 Alex THEPOT GK ## 2 Oscar BONFIGLIO GK ## 3 Marcel LANGILLER G40' ## 4 Juan CARRENO G70' ## 5 Ernest LIBERATI ## 6 Rafael GARZA C ``` --- #
Exploremos que contiene cada dataset ```r head(partidos) ``` ``` ## Year Datetime Stage Stadium City Home.Team.Name ## 1 1930 13 Jul 1930 - 15:00 Group 1 Pocitos Montevideo France ## 2 1930 13 Jul 1930 - 15:00 Group 4 Parque Central Montevideo USA ## 3 1930 14 Jul 1930 - 12:45 Group 2 Parque Central Montevideo Yugoslavia ## 4 1930 14 Jul 1930 - 14:50 Group 3 Pocitos Montevideo Romania ## 5 1930 15 Jul 1930 - 16:00 Group 1 Parque Central Montevideo Argentina ## 6 1930 16 Jul 1930 - 14:45 Group 1 Parque Central Montevideo Chile ## Home.Team.Goals Away.Team.Goals Away.Team.Name Win.conditions Attendance ## 1 4 1 Mexico 4444 ## 2 3 0 Belgium 18346 ## 3 2 1 Brazil 24059 ## 4 3 1 Peru 2549 ## 5 1 0 France 23409 ## 6 3 0 Mexico 9249 ## Half.time.Home.Goals Half.time.Away.Goals Referee ## 1 3 0 LOMBARDI Domingo (URU) ## 2 2 0 MACIAS Jose (ARG) ## 3 2 0 TEJADA Anibal (URU) ## 4 1 0 WARNKEN Alberto (CHI) ## 5 0 0 REGO Gilberto (BRA) ## 6 1 0 CRISTOPHE Henry (BEL) ## Assistant.1 Assistant.2 RoundID MatchID ## 1 CRISTOPHE Henry (BEL) REGO Gilberto (BRA) 201 1096 ## 2 MATEUCCI Francisco (URU) WARNKEN Alberto (CHI) 201 1090 ## 3 VALLARINO Ricardo (URU) BALWAY Thomas (FRA) 201 1093 ## 4 LANGENUS Jean (BEL) MATEUCCI Francisco (URU) 201 1098 ## 5 SAUCEDO Ulises (BOL) RADULESCU Constantin (ROU) 201 1085 ## 6 APHESTEGUY Martin (URU) LANGENUS Jean (BEL) 201 1095 ## Home.Team.Initials Away.Team.Initials ## 1 FRA MEX ## 2 USA BEL ## 3 YUG BRA ## 4 ROU PER ## 5 ARG FRA ## 6 CHI MEX ``` --- #
Paso 3: Agregar gráficos y tablas .panelset.sideways[ .panel[.panel-name[Visualiza los ganadores] ```r copas %>% mutate(Winner = case_when(Winner == "Germany FR" ~ "Germany", TRUE ~ Winner)) %>% count(Winner) %>% ggplot(aes(x=reorder(Winner,n), y=n)) + geom_col() + xlab("Campeón") + theme_minimal() ``` ] .panel[.panel-name[Output] <img src="index_files/figure-html/unnamed-chunk-8-1.png" width="100%" /> ] .panel[.panel-name[Visualiza los goles] ```r copas %>% ggplot(aes(x=Year, y=GoalsScored)) + geom_line() + geom_point() + theme_minimal() ``` ] .panel[.panel-name[Output] <img src="index_files/figure-html/unnamed-chunk-10-1.png" width="100%" /> ] .panel[.panel-name[Visualiza los top 4] ```r copas %>% select(Winner:Fourth) %>% pivot_longer(cols=Winner:Fourth, names_to="lugar", values_to="pais") %>% mutate(pais = case_when(pais == "Germany FR" ~ "Germany", TRUE ~ pais)) %>% count(pais) %>% ggplot(aes(x=reorder(pais,n), y=n)) + geom_col() + xlab("País") + theme_minimal() + theme(axis.text.x = element_text(angle = 45)) ``` ] .panel[.panel-name[Output] <img src="index_files/figure-html/unnamed-chunk-12-1.png" width="100%" /> ] .panel[.panel-name[Incluye una tabla] Utiliza el paquete `DT` para mayor interactividad ```r library(DT) datatable(copas, extensions = "Buttons", options = list(dom = "Bfrtip", buttons = (list( "copy", list( extend = "collection", buttons = c("csv", "excel"), text = "Download")))), rownames = F, filter = "top", style = "bootstrap") ``` ] .panel[.panel-name[Output] ![](img/datatable.png) ] .panel[.panel-name[Modifica el YAML] ```r --- title: "Explora la copa mundial FIFA desde el 1930-2014" output: flexdashboard::flex_dashboard: theme: bg: "#101010" fg: "#FDF7F7" primary: "#ED79F9" base_font: google: Prompt code_font: google: JetBrains Mono orientation: columns vertical_layout: fill --- ``` ] ] --- #
Paso 3: Agregar gráficos y tablas .pull-left[ ![](img/chartA.png) ] .pull-right[ ![](img/chartA_edit.png) ] ### ☑️ Hacemos lo mismo para los otros gráficos --- #
Tips -- ### - En el YAML puedes cambiar los colores a tu gusto, pero también existen temas de Bootswatch ya predeterminados que puedes utilizar. Encuéntralos en [bootswatch.com](https://bootswatch.com) -- ### - Puedes agregar interactividad a tus gráficos utilizando el paquete `plotly` -- ### - Puedes aplicar tu tema o paleta de colores a tus gráficos también ```r thematic::thematic_rmd(font = "auto") ``` --- #
Paso 4: Modificar el formato y/o la paleta de colores ### Cambia el tema y la paleta de colores .pull-left[ ![](img/yaml_final.png) ] .pull-right[ ![](img/flex_final.png) 👀 *Quitamos la columna extra para que todos nuestros gráficos estén en una pestaña* ] --- #
Paso 4: Modificar el formato y/o la paleta de colores ### Agrega interactividad con el paquete `plotly` .pull-left[ ```r library(plotly) ggplotly(copas %>% mutate(Winner = case_when(Winner == "Germany FR" ~ "Germany", TRUE ~ Winner)) %>% count(Winner) %>% ggplot(aes(x=reorder(Winner,n), y=n)) + geom_col() + xlab("Campeón") + theme_minimal()) ``` ] .pull-right[ ] --- .left-column[ ###
Paso 5: 🧶Knit de nuevo! ] .right-column[ ![](img/dashboard_final.png) ] --- class: center, middle ![](https://media.giphy.com/media/gLWTWCg96RA0btDUm0/giphy.gif?cid=ecf05e47vqvc3eck4dfhkrxakqq768gjgalhn8u8ehyxgqmg&rid=giphy.gif&ct=g) ### ¡Lo logramos! -- ####
Para ver el archivo .Rmd de nuestro `flexdashboard`, haz click [aquí](https://github.com/shaziaruybal/dashboard-mundialFIFA/blob/main/dashboard.rmd). ####
Descarga nuestro dashboard en .html para abrirlo en tu navegador [aquí](https://github.com/shaziaruybal/dashboard-mundialFIFA/blob/main/dashboard.html) --- #
Más recursos y ejemplos #### [Más información sobre flexdashboard](https://rstudio.github.io/flexdashboard/articles/flexdashboard.html) #### [Más información sobre los temas de flexdashboard](https://rstudio.github.io/flexdashboard/articles/theme.html#bootstrap-and-bslib-1) #### [Aquí puedes encontrar los temas de Bootswatch](https://bootswatch.com) #### [Información acerca de incluir Shiny en tu flexdashboard](https://pkgs.rstudio.com/flexdashboard/articles/shiny.html) #### [Ejemplos de otros flexdashboards](https://pkgs.rstudio.com/flexdashboard/articles/examples.html) --- class: inverse, center, middle #
Casos de uso: Demo y ejemplos de dashboards que yo he creado --- name: contact class: inverse .pull-left[ .center[ ### Dra Shazia Ruybal-Pesántez <img style="border-radius: 50%;" src="img/shazia.png" width="250px"/> #### ¡Estoy a las órdenes! [
sruybal@imperial.ac.uk](mailto:sruybal@imperial.ac.uk) [
@DrShaziaRuybal](https://twitter.com/DrShaziaRuybal) ]] .pull-right[ ### Materiales de este taller: ### [
Repo](https://github.com/shaziaruybal/dashboard-mundialFIFA) ### [
Diapositivas](https://shaziaruybal.github.io/dashboard-mundialFIFA) ### [
Grabación (próximamente)]() .footnote[ _Estas diapositivas fueron creadas utilizando los paquetes de R: [xaringan](https://github.com/yihui/xaringan), [xaringanthemer](https://github.com/gadenbuie/xaringanthemer), [xaringanExtra](https://github.com/gadenbuie/xaringanExtra)_ ] ] --- class: inverse, middle, center # ¡Muchas gracias! -- #
¿Preguntas? --- class: left #
Actividad (opcional) -- ####
Si no lo has hecho todavía, intenta recrear el dashboard que vimos juntos en el taller -- ####
Intenta crear nuevas visualizaciones o modifica el tema de tu dashboard -- ####
Explora otros aspectos de los datos de los mundiales y visualizalos en tu dashboard -- ####
Comparte tu dashboard con el resto -- .footnote[ Si quieres empezar desde el .rmd que creamos juntos, lo puedes encontrar [aquí
](https://shaziaruybal.github.io/dashboard-mundialFIFA/dashboard.rmd) ]