R/ghred_tisefka_UI.R

Defines functions ghred_tisefka_mod ghred_tisefka_UI

Documented in ghred_tisefka_mod ghred_tisefka_UI

#' Saldae Dashboard Module UI
#' @description Saldae Dashboard module UI : data upload
#' @author Farid Azouaou
#' @param id  server module ID
#' @export
ghred_tisefka_UI <- function(id){
  ns <- NS(id)

fluidPage(
  # tags$head(tags$style(".progress-bar{background-color:#A6761D;}")),
  uiOutput(ns("data_reader")),

  #-----------date related settings
  fluidRow(column(width = 2,
                  uiOutput(ns("date_variable"))),
           column(width = 4,
                  uiOutput(ns("time_period"))),
           column(width = 3,
                  uiOutput(ns("tisefka_target_variables"))),
           column(width = 3,
                  uiOutput(ns("tisefka_categorical_variables")))
           ),
  # Data Overview 1 (key figures)
  uiOutput(ns("SA_tisefka_overview")),
  # Data overview 2
  uiOutput(ns("SA_tisefka_overview2"))

)

}

#' 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

ghred_tisefka_mod <-function(input, output, session, i18n ){

  ns <- session$ns
  output$data_source <- renderUI({
    shinyWidgets::radioGroupButtons(
      inputId = ns("data_source"),
      label = i18n$t("Data Source"),
      choices = c(
        `<i class="fas fa-file-csv"></i>` = "file", `<i class="fas fa-database"></i>` = "database",
        `<i class="fas fa-globe"></i>` = "web_api",`<i class="fas fa-cloud-upload-alt"></i>` = "cloud",
        `<i class="fab fa-dropbox"></i>` = "dropbox"),
      status = "info",
      justified = TRUE,
      selected = "file"
    )
  })

  output$tisefka_file <- renderUI({
    fileInput(inputId = ns("tisefka_file"), label = i18n$t("Choose file(csv text xls)"),
              multiple = FALSE,
              accept = c("csv")
    )
  })
  file_tasetta <- reactive({
    req(input$tisefka_file)
    tools::file_ext(input$tisefka_file$name)
  })

  excel_tiwriqin <- reactive({
   req(input$tisefka_file)
   req(file_tasetta())
   if(file_tasetta()=="csv")return(".csv")
   if(file_tasetta()=="xlsx"){
     readxl::excel_sheets(input$tisefka_file$datapath)
   }
  })

  output$excel_tawriqt <- renderUI({
    req(req(input$tisefka_file))
    req(file_tasetta())
    req(excel_tiwriqin())
    excel_sheets <- excel_tiwriqin()
    xl_label <- i18n$t("Target Sheet")
    if(excel_tiwriqin() == ".csv"){
      excel_sheets <- gsub(".csv","",input$tisefka_file$name)
    }
    shinyWidgets::pickerInput(
      inputId = ns("excel_tawriqt"),
      label = i18n$t(xl_label),
      choices = excel_sheets
    )
  })


  output$data_reader <- renderUI({
    fluidRow(
      column(width=  3, uiOutput(ns("data_source"))),
      column(width = 3, uiOutput(ns("tisefka_file"))),
      column(width = 3, uiOutput(ns("excel_tawriqt")))
    )
  })


  tisefka <- reactive({
    if(input$data_source == "file"){
      req(input$tisefka_file)
      req(file_tasetta())
      req(input$excel_tawriqt)
      tisefka <- SaldaeDataExplorer::ghred_tisefka_aqerru(input_file = input$tisefka_file , tala = file_tasetta(), tawriqt = input$excel_tawriqt)
    }else if(input$data_source == "cloud"){
      tisefka <- load_object_from_cloud(s3_bucket = "belgatrans", s3_prefix = "dashboard/",
                                        s3_action = "read",
                                        data_name = "dashboard_data")

      to_discard <- c("jour_semaine", "semaine","annee")
      tisefka <- tisefka$exploitation_data%>%
        janitor::clean_names()%>%
        dplyr::mutate(couts = as.numeric(couts), frais_route= as.numeric(frais_route))%>%
        dplyr::mutate(frais_route = dplyr::case_when(is.na(frais_route)~0,.default = frais_route))%>%
        janitor::remove_empty(which = "cols")%>%
        dplyr::select(-!!to_discard)
    }else if(input$data_source == "web_api"){
      "error"
    }else{
      "error"
    }
    tisefka <- tisefka%>%janitor::clean_names()%>%
      janitor::remove_constant()%>%
      janitor::remove_empty(which = "cols")
    shinyalert::shinyalert(i18n$t("Data Upload"), text = i18n$t("Data Successfully uploaded"), type = "success",
                           closeOnClickOutside  = TRUE,showConfirmButton = TRUE)

    return(tisefka)
  })

  #------- select date variable
dates_yellan <- reactive({
    req(tisefka())
    dates_yellan <- SaldaeDataExplorer::detect_possible_date_var(tisefka())
    if(length(dates_yellan)==0){
      shinyalert::shinyalert(i18n$t("Data Upload"), text = i18n$t("Time variable not available"), type = "error",
                             closeOnClickOutside  = TRUE,showConfirmButton = TRUE)
    }
    return(dates_yellan)
})


output$date_variable <- renderUI({
  req(tisefka())
  req(dates_yellan())
  date_choices <- dates_yellan()
  shinyWidgets::pickerInput(
      inputId = ns("date_variable"),
      label = i18n$t("Time variable"),
      choices = date_choices
  )
})


tisefka_tizegzawin <-  eventReactive(input$date_variable,{
  req(tisefka())
  tisefka_tizegzawin <- SaldaeDataExplorer::sbed_tisefka(tisefka = tisefka(), date_variable = input$date_variable)%>%
    dplyr::mutate(date = as.Date(date))
  return(tisefka_tizegzawin)
})

output$time_period <- renderUI({
  req(tisefka_tizegzawin())
  date_vect <- tisefka_tizegzawin()%>%dplyr::pull(date)%>%unique()
  # shiny::sliderInput(inputId = ns("time_period"), label = i18n$t("Time Period"), min = min(date_vect), max = max(date_vect), timeFormat = "%Y-%m-%d",
  #                    value = c(min(date_vect), max(date_vect)))
  shiny::dateRangeInput(inputId = ns("time_period"), label = i18n$t("Time Period"), min = min(date_vect), max = max(date_vect),
                   start = min(date_vect), end =  max(date_vect))
})

output$tisefka_target_variables <- renderUI({
    req(tisefka_tizegzawin())
    var_class <- dlookr::get_class(tisefka_tizegzawin())%>%dplyr::filter(class%in%c("numeric","integer"))%>%dplyr::pull(variable)%>%paste()
    shinyWidgets::pickerInput(
      inputId = ns("tisefka_target_variables"),
      label = i18n$t("Target variables"),
      choices = var_class,
      selected = var_class,
      options = list(`actions-box` = TRUE),
      multiple = TRUE
    )
  })

output$tisefka_categorical_variables <- renderUI({
  req(tisefka_tizegzawin())
  req(non_numeric_variables())
  var_class <- non_numeric_variables()
  shinyWidgets::pickerInput(
    inputId = ns("tisefka_categorical_variables"),
    label = i18n$t("Categorical variables"),
    choices = var_class,
    selected = var_class,
    options = list(`actions-box` = TRUE),
    multiple = TRUE
  )
})

# Tisefka dataset
#--------- display raw data
output$tisefka_tizegzawin_dt <- DT::renderDataTable({
  req(tisefka_tizegzawin())
  tisefka_tizegzawin()
})

# get data summary
data_summary <- reactive({
  req(tisefka_tizegzawin())
  diag_output <- SaldaeDataExplorer::data_diagnosis_f(tisefka = tisefka_tizegzawin(), categoricals_ukud = NULL)
  return(diag_output)
})

#------- display data Overview
output$SA_tisefka_overview <- renderUI({
  req(tisefka_tizegzawin())
  fluidRow(
    bs4Dash::valueBoxOutput(ns("SA_overview1")),
    bs4Dash::infoBoxOutput(ns("SA_overview2")),
    bs4Dash::infoBoxOutput(ns("SA_overview3"))
  )
})
output$SA_overview1 <- bs4Dash::renderInfoBox({
  req(ts_time_units())
  req(input$date_variable)
  time_freq <- ts_time_units()[1]
  time_freq <- i18n$t(time_freq)
  bs4Dash::infoBox(title = i18n$t("Time frequency"),
                          value = time_freq,subtitle = paste(i18n$t("Time variable"),": ",input$date_variable),color = "info",fill = TRUE,
                          shiny::icon("hourglass")
  )
})


output$SA_overview2 <- bs4Dash::renderInfoBox({
  req(tisefka_tizegzawin())
  info_val <- paste(ncol(tisefka_tizegzawin()),"x",nrow(tisefka_tizegzawin()))
  bs4Dash::infoBox(title = i18n$t("Data Info"),
                          value = info_val,subtitle = "Variables x Elements",color = "navy",fill = TRUE,
                          shiny::icon("fas fa-chart-bar")
  )
})

output$SA_overview3 <- bs4Dash::renderInfoBox({
  req(data_summary())
  val_quality <- mean(data_summary()$diagnosis$missing_percent)
  val_quality <- round((100 - ifelse(is.na(val_quality),0,val_quality)),2)

  qual_col <- "success"
  if(val_quality < 95 )qual_col <- "lime"
  if(val_quality < 75 )qual_col <- "warning"
  if(val_quality < 60 )qual_col <- "danger"

  # primary, secondary, info, success, warning, danger, gray-dark, gray, white, indigo, lightblue, navy, purple, fuchsia, pink, maroon, orange, lime, teal, olive.
  bs4Dash::infoBox(title = i18n$t("Data Quality"),
                          value = val_quality,subtitle = i18n$t("% not missing values"),color = qual_col,fill = TRUE,
                          shiny::icon("tasks")
  )
})


ts_time_units <- reactive({
  req(tisefka_tizegzawin())
  req(dates_yellan())
  req(input$date_variable)
  return(SaldaeDataExplorer::possible_units_for_summary(time_vect = tisefka_tizegzawin()$date))
})



tisefka_overview <- reactive({
  req(data_summary())
  req(tisefka_tizegzawin())
  SaldaeDataExplorer::Handson_exploration(tisefka = tisefka_tizegzawin(), tisefka_report = data_summary())
})

#-------------------------



# output$tisefka_outliers <- rhandsontable::renderRHandsontable({
#   req(data_summary())
#   return(rhandsontable::rhandsontable(data_summary()$outliers, rowHeaders = NULL, width = 1000, height = 300))
# })
# output$tisefka_view <- rhandsontable::renderRHandsontable({
#   req(tisefka_overview())
#   return(tisefka_overview())
# })


output$SA_tisefka_overview2 <- renderUI({
  bs4Dash::tabsetPanel(
    tabPanel(title = i18n$t("Dataset"),icon = icon("eye"),
             DT::dataTableOutput(ns("tisefka_tizegzawin_dt"))
    ) #,
    # tabPanel(title = i18n$t("Overview"),icon = icon("eye"),
    #          h2("tbd")
    #          # rhandsontable::rHandsontableOutput(ns("tisefka_view"))
    # ),
    # tabPanel(title = i18n$t("Outliers"),icon = icon("fas fa-stethoscope"),
    #          h2("t.b.d")
    #          # rhandsontable::rHandsontableOutput(ns("tisefka_outliers"))
    # )
  )
})

non_numeric_variables <- reactive({
  req(data_summary())
  req(input$tisefka_target_variables)
  non_numeric_variables <- data_summary()$categoricals
  if(length(non_numeric_variables)==0)return(NULL)
  temp_vect<-  sapply(non_numeric_variables,function(x)x%in%input$tisefka_target_variables)
  non_numeric_variables <- non_numeric_variables[!temp_vect]
  non_numeric_variables <- non_numeric_variables[non_numeric_variables!="date"]
  return(non_numeric_variables)
})

explore_output <- reactive({
  req(input$tisefka_target_variables)
  req(input$tisefka_categorical_variables)
  req(tisefka_tizegzawin())
  # req(tisefka_overview())
  req(input$time_period)
  output <- list()
  selected_vars <- c("date",input$tisefka_target_variables,input$tisefka_categorical_variables)

  output$tisefka_tizegzawin <- tisefka_tizegzawin()%>%
    dplyr::select(!!selected_vars)%>%
    dplyr::filter(date >= !!input$time_period[1] & date <= input$time_period[2])
  # output$tisefka_overview <- tisefka_overview()
  output$ts_time_units <- ts_time_units()
  output$numeric_variables     <- input$tisefka_target_variables
  output$non_numeric_variables <- input$tisefka_categorical_variables
  output$categoricals_unique_values <- data_summary()$categoricals_unique_values
  return(output)
})

}
Aqvayli06/SaldaeModulesUI documentation built on Feb. 4, 2024, 6:25 a.m.