#' multivariate_insgiht_UI
#' @description multivariate_insgiht_UI
#' @author Farid Azouaou
#' @param id server module ID
#' @export
multivariate_insgiht_UI <- function(id, mod_title = NULL){
ns <- NS(id)
bs4Dash::tabBox(width = 12, title = mod_title,
tabPanel(title = "Impact",icon = icon("fas fa-chart-bar"),
uiOutput(ns("interdependency_board_box")),
plotly::plotlyOutput(ns("multivariate_insight_chart"),height = "700px")
)
)
}
#' Saldae dashboard module: upload data
#' @description upload rwa data and prepare it to be used for exploration and analysis
#' @author Farid Azouaou
#' @param input input shinydashboard elements containing information to use data upload
#' @param output output shinydashboard element
#' @param session shiny session
#' @return output objects to be displayed in corresponding UI module
#' @export
multivariate_insgiht_mod <- function(input, output, session,i18n ,tisefka){
tisefka_choices <- reactive({
req(tisefka())
tisefka()$numeric_variables
})
tisefka_tizegzawin <- reactive({
req(tisefka())
tisefka()$tisefka_tizegzawin
})
non_numeric_variables <- reactive({
req(tisefka())
tisefka()$non_numeric_variables
})
categoricals_unique_values <- reactive({
req(tisefka())
tisefka()$categoricals_unique_values
})
ts_time_units <- reactive({
tisefka()$ts_time_units
})
output$interdependency_board_box <- renderUI({
bs4Dash::box(title = i18n$t("Interdependency Board"),collapsible = TRUE,
status = "success",width = 12,
#-----HEADER CONTENT
fluidRow(
column(width = 3,uiOutput(session$ns("explained_variable"))) ,
column(width = 2,uiOutput(session$ns("var_granularity"))),
column(width = 2,uiOutput(session$ns("aggregation_metric"))),
column(width = 2,uiOutput(session$ns("submit")))
),
uiOutput(session$ns("non_numeric_variables_inputs"))
)
})
output$submit <- renderUI({
shinyWidgets::actionBttn(
inputId = session$ns("submit"),
style = "simple", icon = icon("fa-solid fa-bolt-lightning"),
color = "success",
label = i18n$t("Start"))
})
observeEvent(eventExpr=non_numeric_variables(),handlerExpr= {
non_numeric_variables()%>%purrr::imap( ~{
output_name_app <- paste0("non_numeric_variables_", .x)
output[[output_name_app]] <- renderUI({
ml_choices <- tisefka()$var_factors[[.x]]
shinyWidgets::pickerInput(
inputId = session$ns(output_name_app),
label = gsub("_"," ",.x),
choices = categoricals_unique_values()[[.x]],
options = list(
`actions-box` = TRUE,
size = 10,
`selected-text-format` = "count > 3"
),
multiple = TRUE
)
})
})
})
output$non_numeric_variables_inputs <- renderUI({
req(non_numeric_variables())
fluidRow(
purrr::map(non_numeric_variables(), ~{
column(width = 2, uiOutput(session$ns(paste0("non_numeric_variables_",.x))))
})
)
})
output$explained_variable <- renderUI({
req(tisefka_choices())
shinyWidgets::pickerInput(inputId = session$ns("explained_variable"),
label = i18n$t("Target Variable"),
multiple = FALSE,
choices = tisefka_choices(),
selected = NULL
)
})
output$var_granularity <- renderUI({
req(non_numeric_variables())
shinyWidgets::pickerInput(inputId = session$ns("var_granularity"),
label = i18n$t("Granularity"),
multiple = TRUE,
choices = non_numeric_variables(),
selected = NULL
)
})
# aggregation metric
output$aggregation_metric <- renderUI({
req(non_numeric_variables())
aggregation_choices <- c("Average","Sum","Min","Max","Median")
names(aggregation_choices) <- i18n$t(aggregation_choices)
shinyWidgets::pickerInput(inputId = session$ns("aggregation_metric"),
label = i18n$t("Aggregation"),
multiple = FALSE,
selected = aggregation_choices[1],
choices = aggregation_choices
)
})
tisefka_iheggan <- reactive({
req(tisefka_tizegzawin())
req(input$explained_variable)
group_by_elemnts <- "date"
aggreg_fun <- SA_aggregation_funs(aggregation_metric = input$aggregation_metric )
tisefka_iheggan <- tisefka_tizegzawin()
if(length(non_numeric_variables())>0){
categ_input_filter <-non_numeric_variables()%>%purrr::map(~input[[paste0("non_numeric_variables_",.x)]])%>%
stats::setNames(non_numeric_variables())
categ_input_filter <- categ_input_filter[!unlist(lapply(categ_input_filter, is.null))]
for(cat_input in names(categ_input_filter)){
tisefka_iheggan <- tisefka_iheggan%>%dplyr::filter(!!rlang::sym(cat_input)%in%categ_input_filter[[cat_input]])
}
}
if(is.null(input$var_granularity)){
if(is.null(aggreg_fun)) aggreg_fun <- sum
tisefka_iheggan<- tisefka_iheggan%>%dplyr::select(date,!!tisefka_choices())%>%
dplyr::group_by(date)%>%dplyr::summarise_all(aggreg_fun)
}else{
list_val_fn <- input$explained_variable%>%purrr::map(~aggreg_fun)%>%stats::setNames(input$explained_variable)
group_by_elemnts <- c("date",input$var_granularity)
}
tisefka_iheggan <- tisefka_iheggan%>%dplyr::arrange(date)%>%
dplyr::group_by(dplyr::across(group_by_elemnts) )%>%dplyr::summarise_all(aggreg_fun,na.rm = TRUE,.groups = "drop")
return(tisefka_iheggan)
})
tisefka_interdependency <- eventReactive(input$submit,{
req(tisefka_iheggan())
req(input$explained_variable)
SaldaeForecasting::multi_linear_analyzer(tisefka = tisefka_iheggan(), target_variable = input$explained_variable)
})
#----------------main chart
output$multivariate_insight_chart <- plotly::renderPlotly({
req(tisefka_interdependency())
req(input$explained_variable)
contrib_chart <- tisefka_interdependency()%>%
SaldaeForecasting::multi_linear_displayer(target_variable = input$explained_variable)
contrib_chart <- contrib_chart$contribution_chart
return(contrib_chart)
})
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.