---
title: "Mi Dashboard"
output: flexdashboard::flex_dashboard
runtime: shiny
---
```{r global, include=FALSE}
# load data in 'global' chunk so it can be shared
# by all users of the dashboard
library(highcharter)
library(fpp3)
library(RColorBrewer)
library(openxlsx)
library(leaflet)
library(sf)
library(plotly)
library(ggplot2)
library(tidyverse)
# asociamos funciones a determinadas librerías para evitar posibles errores
filter <- dplyr::filter # Filtra filas según condiciones
select <- dplyr::select # Selecciona columnas
mutate <- dplyr::mutate # Crea o modifica columnas
arrange <- dplyr::arrange # Ordena filas
group_by <- dplyr::group_by # Agrupa datos
summarise <- dplyr::summarise # Resume variables (por ejemplo, con medias, conteos)
summarize <- dplyr::summarize # Lo mismo que summarise
rename <- dplyr::rename # Cambia nombres de columnas
distinct <- dplyr::distinct # Elimina filas duplicadas
slice<- dplyr::slice # Selecciona filas por posición
relocate<- dplyr::relocate # Reordena columnas
selectInput <- shiny::selectInput
```
```{r,message=FALSE,echo=FALSE}
# leemos los datos
owid.country <- read.xlsx('https://ctim.es/AEDV/data/owid_country.xlsx',sheet=1) |>
as_tibble()
# leemos la geometría de los países: se descarga primero a un fichero temporal
# porque, en algunos sistemas, st_read no puede acceder directamente a URLs https
tmp <- tempfile(fileext = ".geojson")
curl::curl_download('https://ctim.es/AEDV/data/geo_countries.geojson', tmp)
geoj <- st_read(tmp, quiet = TRUE)
geoj.tb <- geoj |> as_tibble()
```
```{r}
source("https://ctim.es/AEDV/utilidades.R") # Funciones auxiliares del curso (aedv_mapa_coropletico)
```
# Mapa Coroplético
Column {.sidebar data-width=250}
--------------------------------------------------
```{r}
# selector para seleccionar los países
selectInput(
"indicator",
label = "Indicator:",
choices = owid.country |>
select(population:human_development_index) |>
colnames(),
selected = "population"
)
# botón que lanza el cálculo: hasta pulsarlo no se calcula nada, ni al
# arrancar ni al cambiar el indicador
actionButton("calcular", "Calcular")
```
```{r}
# función que realiza el procesado de los datos y que se actualiza al pulsar
# el botón "Calcular" (eventReactive). Al arrancar no se calcula nada, para
# que el cuadro de mandos cargue antes: la tabla y el mapa quedan vacíos
# hasta el primer clic
inputs.processing.Dashboard2 <- eventReactive(input$calcular, {
tb <- owid.country |>
select(
iso_code,
country=location,
value = input$indicator
) |>
na.omit() |>
arrange(desc(value))
return(tb)
})
```
###
```{r}
# imprimimos la tabla con el atributo seleccionado
renderTable({
# capturamos el resultado del procesado de los inputs
tb <- inputs.processing.Dashboard2()
tb |>
mutate(value=prettyNum(round(value,
digits=max(5-nchar(as.character(round(max(na.omit(tb$value))))),0)),
big.mark = ",")
) |>
select(-iso_code)
})
```
Column
--------------------------------------------------
###
```{r}
# dibujamos el mapa coroplético
leaflet::renderLeaflet({
# capturamos el resultado del procesado de los inputs
tb <- inputs.processing.Dashboard2()
# combinamos la tabla de gráficos y los datos
join <- geoj.tb |>
left_join(tb,join_by("ISO_A3" == "iso_code"))
# construcción etiquetas
etiquetas <-paste(
" ",geoj.tb$ADMIN ,
"
",input$indicator,
": ",prettyNum(round(join$value,digits=2), big.mark = ",", scientific = FALSE)
) |>
lapply(htmltools::HTML)
# dibujamos el mapa
aedv_mapa_coropletico(geoj,join$value,etiquetas,input$indicator)
})
```