R/multivariate_insight.R

Defines functions multivariate_insgiht_mod multivariate_insgiht_UI

Documented in multivariate_insgiht_mod multivariate_insgiht_UI

#' 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)
  })
}
Aqvayli06/SaldaeModulesUI documentation built on Feb. 4, 2024, 6:25 a.m.