Guide d’utilisation

Guide d’utilisation de l’application Shiny

L’application Shiny que nous avons développée permet entre autres de faire une analyse descriptive d’une base de données, telles les analyse univariée et bivariée. Elle permet aussi de faire des représentations graphiques des variables d’une base données. L’application comporte aussi une partie spécifique qui permet de faire les calculs des revenus non agricoles pour les bases EHCVM et de générer la base de données. L’application comporte principalement les parties suivantes :

Préparation des données

Cette partie permet d’importer de visualiser une base de données sous format csv et d’avoir les caractéristiques de toutes les variables.

Base de données

Sélectionnez l’onglet “Préparation des données” dans la barre de navigation latérale.

Dans la sous-section “Base de données”, cliquez sur le bouton “Choisir un fichier CSV” pour télécharger votre fichier de données au format CSV.

Une fois le fichier téléchargé, sélectionnez une variable à partir de la liste déroulante “Sélectionner une variable”.

Choisissez le type de visualisation dans la liste déroulante “Type de visualisation”.

La table de données sera affichée dans l’onglet.

Caractéristiques des données

Sélectionnez l’onglet “Caractéristiques des données” dans la barre de navigation latérale.

Choisissez une variable à partir de la liste déroulante “Sélectionner votre variable”.

Les caractéristiques de la variable sélectionnée seront affichées (Type de variable…)

Un boxplot de la variable sera affiché pour les variables numériques.

Graphiques

Cette partie permet de faire des représentations graphiques des variables.

Sélectionnez l’onglet “Graphiques” dans la barre de navigation latérale.

Utilisez le curseur “Number of bins” pour ajuster le nombre de bins dans l’histogramme.

Entrez un titre pour le graphique dans la zone de texte “Title”.

Sélectionnez une couleur dans la liste déroulante “Couleur”.

Choisissez une variable à partir de la liste déroulante “Sélectionner votre variable”.

Si vous le souhaitez, sélectionnez une deuxième variable dans la liste déroulante “Sélectionner la deuxième variable”.

Le graphique sera affiché juste en bas.

Analyse descriptive

Cette partie permet principalement de sortir les statistiques descriptives des variables ainsi que les tests de corrélation entre elles.

Statistique univariée

Choisissez une variable à partir de la liste déroulante “Choisir une variable”.

Cliquez sur le bouton “Analyser” pour afficher les statistiques descriptives de la variable sélectionnée dans l’affichage “Statistiques descriptives”.

Différents graphiques seront affichés dans les onglets “Graphique 1”, ” Graphique 2” et ” Graphique 3”.

statistique bivariée

Sélectionnez l’onglet “Statistique bivariée” dans la barre de navigation latérale.

Choisissez une variable dans la liste déroulante “Sélectionner votre variable”.

Choisissez une deuxième variable dans la liste déroulante “Sélectionner votre variable”.

Cliquez sur le bouton “Analyser” pour afficher les résultats de la statistique bivariée.

EHCVM

Cette est spécialement dédiée au calcul des revenus non agricoles pour une base « EHCVM » pour chaque ménage. Elle permet de générer la base de données apurées regroupant les variables des sections 10a et 10b utilisée pour les besoins du calcul des revenus non agricoles.

Sélectionnez l’onglet “EHCVM” dans la barre de navigation latérale.

Charger les deux bases de données des sections 10a et 10b.

Dans l’onglet apurement et variables d’intérêt, cliquer sur générer le tableau. Vous pouvez exporter la base de données en renseignant le chemin d’accès puis en cliquant sur exporter.

Faire de même dans l’onglet Revenu non agricole, pour la base ménage pour les revenus non agricoles.

library(shiny)
## Warning: le package 'shiny' a été compilé avec la version R 4.1.3
library(shinydashboard)
## Warning: le package 'shinydashboard' a été compilé avec la version R 4.1.3
## 
## Attachement du package : 'shinydashboard'
## L'objet suivant est masqué depuis 'package:graphics':
## 
##     box
library(psych)
## Warning: le package 'psych' a été compilé avec la version R 4.1.3
library(ggplot2)
## Warning: le package 'ggplot2' a été compilé avec la version R 4.1.3
## 
## Attachement du package : 'ggplot2'
## Les objets suivants sont masqués depuis 'package:psych':
## 
##     %+%, alpha
library(haven)
## Warning: le package 'haven' a été compilé avec la version R 4.1.3
library(dplyr)
## Warning: le package 'dplyr' a été compilé avec la version R 4.1.3
## 
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
## 
##     filter, lag
## Les objets suivants sont masqués depuis 'package:base':
## 
##     intersect, setdiff, setequal, union
library(foreign)
## Warning: le package 'foreign' a été compilé avec la version R 4.1.3
shinyApp(
  ui = dashboardPage(
    #l'en tête
    dashboardHeader(
      title="Statistique"
    ),
    #la partie gauche 
    dashboardSidebar(
      sidebarMenu(
        #Définir ce qui sera dans la partie gauche
        menuItem("préparation des données", tabName = "prepa", icon = icon("database"),
                 menuSubItem("base de données", tabName = "option1"),
                 menuSubItem("caractéristique des données", tabName = "option2")),
        menuItem("Analyse descriptive", tabName = "ad", icon = icon("pen"),
                 menuSubItem("Statistique univariée", tabName = "Des1"),
                 menuSubItem("Statistique bivariée", tabName = "Des2"),
                 menuSubItem("EHCVM", tabName = "ehcvm")),
        menuItem("Graphique", tabName = "graph", icon = icon("book-open"))
      )
    ),
    #la partie droite principale
    dashboardBody(
      tabItems(
        tabItem(
          "option1",
          div(class = "row",
              div(class = "col-sm-6",
                  fileInput("file1", "Choisir un fichier CSV",
                            accept = c("text/csv", "text/comma-separated-values,text/plain", ".csv"))
              ),
              div(class = "col-sm-6",
                  selectInput("variable", "Sélectionner une variable", choices = NULL)
              )
          ),
          selectInput("distribution", "type de visualisation", 
                      choices = c( "toutes les observations", "tableau de distribution"), selected = "toutes les observations"),
          dataTableOutput("table"),
        ),
        tabItem(
          "option2",
          selectInput("select", "Sélectionner votre variable", 
                      choices = NULL, selected = NULL),
          verbatimTextOutput("summary"),
          plotOutput("boxplot"),
          textOutput("text")
        ),
        tabItem(
          "graph",
          div(class = "row",
              div(class = "col-sm-6",
                  sliderInput("bins",
                              "Number of bins:",
                              min = 1,
                              max = 50,
                              value = 30)),
              div(class="col-sm-6",
                  textInput(inputId = "titre", label = "Title:", value = "Histogram"))),
          div(class = "row",
              div(class = "col-sm-6",
                  selectInput(inputId = "color", label = "Couleur :",
                              choices = c("Red" = "red", "Green" = "green", "Blue" = "blue"))),
              div(class = "col-sm-6",
                  selectInput("var1", "Sélectionner votre variable", 
                              choices = NULL, selected = NULL)),
              div(class = "col-sm-6",
                  selectInput("var2", "Sélectionner la deuxième variable",
                              choices = c("rien", colnames(data())), selected = NULL))
              
          ),
          uiOutput("ui_graph"),
          plotOutput("distPlot"),
          div(textOutput("n_bins"), align = "center"),
          tags$hr(),
        ),
        tabItem(
          "Des1",
          selectInput("var_ad", "Choisir une variable :", choices = NULL, selected = NULL),
          actionButton("submit", "Analyser"),
          fluidRow(
            box(
              title = "statistiques descriptives ",
              tableOutput("output_ad"),
              width = 20
            ),
          ),
          tabsetPanel(
            tabPanel("Graphique 1", plotOutput("plot1")),
            tabPanel("Graphique 2", plotOutput("plot2")),
            tabPanel("Graphique 3", plotOutput("plot3"))
          )
        ),
        tabItem(
          "Des2",
          div(class="row",
              div(class="col-sm-6",
                  selectInput("var1_des2", "Sélectionner votre variable", 
                              choices = NULL, selected = NULL)),
              div(class="col-sm-6",
                  selectInput("var2_des2", "Sélectionner votre variable", 
                              choices = NULL, selected = NULL))
              
          ),
          actionButton("submit_1", "Analyser"),
          uiOutput("tabs")
        ),
        tabItem(
          "ehcvm",
          box(
            title = "Revenu non agricole",
            width = 20,
            height = 40
          ),
          div(class = "row",
              div(class = "col-sm-6",
                  fileInput("file2", "Sélectionner la base Stata de la section a", accept = ".dta")
              ),
              div(class = "col-sm-6",
                  fileInput("file3", "Sélectionner la base Stata de la section b", accept = ".dta")
              )
          ),
          tabsetPanel(
            tabPanel("Apurement et variables d'intêret", 
                     actionButton("submit_ehcvm", "générer le tableau"),
                     div(class = "row",
                         div(class = "col-sm-6",
                             textInput("chemin", label = "chemin d'accés", value="C:/Users/user/Desktop")
                         ),
                         div(class = "col-sm-6",
                             actionButton("export_csv", "Exporter")
                         )
                     ),
                     dataTableOutput("table_ehcvm")
            ),
            tabPanel("Revenu non agricole",
                     actionButton("submit_ehcvm1", "générer le tableau"),
                     div(class = "row",
                         div(class = "col-sm-6",
                             textInput("chemin1", label = "chemin d'accés", value="C:/Users/user/Desktop")
                         ),
                         div(class = "col-sm-6",
                             actionButton("export_csv1", "Exporter")
                         )
                     ),
                     dataTableOutput("table_ehcvm1")),
          )
        )
      )
    ),
    title = "EHCVM",
    skin = "blue" #Couleur
  ),
  
  server = function(input, output, session) {
    options(shiny.maxRequestSize = 100*1024^2)  
    
    data <- reactive({
      infile <- input$file1
      if (is.null(infile)) {
        return(NULL)
      }
      read.csv2(infile$datapath)
    })
    
    data1 <- reactive({
      infile <- input$file2
      if (is.null(infile)) {
        return(NULL)
      }
      df <- tryCatch(read_dta(infile$datapath), error = function(e) NULL)
      if (is.null(df)) {
        showNotification("Erreur : Impossible de charger la base de données 1", type = "error")
        return(NULL)
      }
      expected_vars <- c('interview__key', 's10q01', 's10q02', 's10q03', 's10q04', 's10q05',
                         's10q06', 's10q07', 's10q08', 's10q09', 's10q10')
      missing_vars <- setdiff(expected_vars, names(df))
      if (length(missing_vars) > 0) {
        showNotification(paste("Erreur : Certaines variables sont manquantes dans la base de données 1 :", 
                               paste(missing_vars, collapse = ", ")), type = "error")
        return(NULL)
      }
      return(df)
    })
    
    data_10a_subset <- reactive({
      data_subset <- data1()
      if (!is.null(data_subset)) {
        vars_of_interest <- c('interview__key', 's10q01', 's10q02', 's10q03', 's10q04', 's10q05',
                              's10q06', 's10q07', 's10q08', 's10q09', 's10q10') 
        return(data_subset[, vars_of_interest, drop = FALSE])
      } else {
        return(NULL)
      }
    })
    
    data2 <- reactive({
      infile <- input$file3
      if (is.null(infile)) {
        return(NULL)
      }
      df <- tryCatch(read_dta(infile$datapath), error = function(e) NULL)
      if (is.null(df)) {
        showNotification("Erreur : Impossible de charger la base de données 2", type = "error")
        return(NULL)
      }
      expected_vars <- c('interview__key', 's10q12a', 's10q16', 's10q17a',
                         's10q17b', 's10q17c','s10q23', 's10q28', 's10q29', 's10q30', 's10q31', 's10q32',
                         's10q33', 's10q34', 's10q46', 's10q47', 's10q48', 's10q49', 's10q50', 's10q51',
                         's10q52', 's10q53', 's10q54', 's10q55', 's10q56', 's10q57')
      missing_vars <- setdiff(expected_vars, names(df))
      if (length(missing_vars) > 0) {
        showNotification(paste("Erreur : Certaines variables sont manquantes dans la base de données 2 :", 
                               paste(missing_vars, collapse = ", ")), type = "error")
        return(NULL)
      }
      return(df)
    })
    
    data_10b_subset <- reactive({
      data_subset <- data2()
      if (!is.null(data_subset)) {
        vars_of_interest <- c('interview__key', 's10q12a', 's10q16', 's10q17a',
                              's10q17b', 's10q17c','s10q23', 's10q28', 's10q29', 's10q30', 's10q31', 's10q32',
                              's10q33', 's10q34', 's10q46', 's10q47', 's10q48', 's10q49', 's10q50', 's10q51',
                              's10q52', 's10q53', 's10q54', 's10q55', 's10q56', 's10q57') 
        return(data_subset[, vars_of_interest, drop = FALSE])
      } else {
        return(NULL)
      }
    })
    
    
    data_10b_subset <- reactive({
      data_subset <- data2()
      if (!is.null(data_subset)) {
        vars_of_interest <- c('interview__key', 's10q12a', 's10q16', 's10q17a',
                              's10q17b', 's10q17c','s10q23', 's10q28', 's10q29', 's10q30', 's10q31', 's10q32',
                              's10q33', 's10q34', 's10q46', 's10q47', 's10q48', 's10q49', 's10q50', 's10q51',
                              's10q52', 's10q53', 's10q54', 's10q55', 's10q56', 's10q57') 
        return(data_subset[, vars_of_interest, drop = FALSE])
      } else {
        return(NULL)
      }
    })
    
    observeEvent(input$submit_ehcvm, {
      
      if ((!is.null(data1())) && (!is.null(data2()))){
        
        data_subset_10b <- data_10b_subset()
        
        if (!is.null(data_subset_10b)) {
          ## Renaming the variables
          new_names_10b <- c('interview_key', 'Activity', 'Product', 'Section_Code', 'Branch_Code', 'Activity_Code', 'Activity_local',
                             'Phone_number', 'Accounting', 'Taxation_phone', 'RC_Registered', 'Person_registered', 'Legal_form',
                             'Finance_source', 'Sold_product', 'Buy_product', 'Profit_product', 'Raw_materials_buy', 'Profit_services',
                             'Other_CI', 'Home_spending', 'Services_fees', 'Other_spending', 'Patente', 'Taxes', 'Admin_fees')
          
          colnames(data_subset_10b) <- new_names_10b
          
          variables_avant_sold_product <- c('interview_key', 'Activity', 'Product', 'Section_Code', 'Branch_Code', 'Activity_Code',
                                            'Activity_local', 'Phone_number', 'Accounting', 'Taxation_phone', 'RC_Registered',
                                            'Person_registered', 'Legal_form', 'Finance_source')
          
          variables_apres_sold_product <- c('Sold_product', 'Buy_product', 'Profit_product', 'Raw_materials_buy', 'Profit_services',
                                            'Other_CI', 'Home_spending', 'Services_fees', 'Other_spending', 'Patente', 'Taxes', 'Admin_fees')
          
          # Remplacer les valeurs manquantes par des chaînes vides pour les variables avant 'Sold_product'
          data_subset_10b <- data_subset_10b %>%
            mutate(across(all_of(variables_avant_sold_product), ~ ifelse(is.na(.), "", as.character(.))))
          
          # Remplacer les valeurs manquantes par des zéros pour les variables après 'Sold_product'
          data_subset_10b <- data_subset_10b %>%
            mutate(across(all_of(variables_apres_sold_product), ~ ifelse(is.na(.), 0, as.numeric(.))))
        }
        
        ## Now for the 10a base
        ## Renaming the variables
        new_names_10a <- c('interview_key', 's10q01', 's10q02', 's10q03', 's10q04', 's10q05',
                           's10q06', 's10q07', 's10q08', 's10q09', 's10q10')
        
        # Replace the column names of data_10a_subset() with new_names_10a
        data_subset_10a=data_10a_subset()
        colnames(data_subset_10a) <- new_names_10a
        
        ## Merging the two datasets
        data_10 <- merge(data_subset_10b, data_subset_10a, by = 'interview_key', all.x = TRUE)
        data_10 <- data_10[complete.cases(data_10), ]
        
        output$table_ehcvm <- renderDataTable({
          data_10
        })
        
        observeEvent(input$export_csv, {
          if (!is.null(data_10)) {
            if (input$chemin != "") {
              if (!dir.exists(input$chemin)) {
                showNotification("Erreur : Le chemin d'accès spécifié n'existe pas.", type = "error")
                return(NULL)
              }
              write.csv(data_10, file.path(input$chemin, "EHCVM.csv"), row.names = FALSE)
              showNotification("La base de données a été exportée au format CSV.")
            } else {
              showNotification("Erreur : Veuillez spécifier un chemin d'accès valide.", type = "error")
            }
          }
        })
        
        
      } else {
        showNotification("veuillez charger les deux bases de données")
      }
    })
    
    observeEvent(input$submit_ehcvm1,{
      
      if ((!is.null(data1())) && (!is.null(data2()))){
        data_subset_10b <- data_10b_subset()
        
        if (!is.null(data_subset_10b)) {
          ## Renaming the variables
          new_names_10b <- c('interview_key', 'Activity', 'Product', 'Section_Code', 'Branch_Code', 'Activity_Code', 'Activity_local',
                             'Phone_number', 'Accounting', 'Taxation_phone', 'RC_Registered', 'Person_registered', 'Legal_form',
                             'Finance_source', 'Sold_product', 'Buy_product', 'Profit_product', 'Raw_materials_buy', 'Profit_services',
                             'Other_CI', 'Home_spending', 'Services_fees', 'Other_spending', 'Patente', 'Taxes', 'Admin_fees')
          
          colnames(data_subset_10b) <- new_names_10b
          
          variables_avant_sold_product <- c('interview_key', 'Activity', 'Product', 'Section_Code', 'Branch_Code', 'Activity_Code',
                                            'Activity_local', 'Phone_number', 'Accounting', 'Taxation_phone', 'RC_Registered',
                                            'Person_registered', 'Legal_form', 'Finance_source')
          
          variables_apres_sold_product <- c('Sold_product', 'Buy_product', 'Profit_product', 'Raw_materials_buy', 'Profit_services',
                                            'Other_CI', 'Home_spending', 'Services_fees', 'Other_spending', 'Patente', 'Taxes', 'Admin_fees')
          
          # Remplacer les valeurs manquantes par des chaînes vides pour les variables avant 'Sold_product'
          data_subset_10b <- data_subset_10b %>%
            mutate(across(all_of(variables_avant_sold_product), ~ ifelse(is.na(.), "", as.character(.))))
          
          # Remplacer les valeurs manquantes par des zéros pour les variables après 'Sold_product'
          data_subset_10b <- data_subset_10b %>%
            mutate(across(all_of(variables_apres_sold_product), ~ ifelse(is.na(.), 0, as.numeric(.))))
        }
        
        ## Now for the 10a base
        ## Renaming the variables
        new_names_10a <- c('interview_key', 's10q01', 's10q02', 's10q03', 's10q04', 's10q05',
                           's10q06', 's10q07', 's10q08', 's10q09', 's10q10')
        
        # Replace the column names of data_10a_subset() with new_names_10a
        data_subset_10a=data_10a_subset()
        colnames(data_subset_10a) <- new_names_10a
        
        ## Merging the two datasets
        data_10 <- merge(data_subset_10b, data_subset_10a, by = 'interview_key', all.x = TRUE)
        data_10 <- data_10[complete.cases(data_10), ]
        c('Sold_product', 'Buy_product', 'Profit_product', 'Raw_materials_buy', 'Profit_services', 'Other_CI', 'Home_spending', 'Services_fees', 'Other_spending', 'Patente', 'Taxes', 'Admin_fees')
        
        data_10$Revenu_Non_agricole = data_10$Sold_product - data_10$Buy_product + data_10$Profit_product - data_10$Raw_materials_buy +
          data_10$Profit_services - data_10$Other_CI - data_10$Home_spending - data_10$Services_fees -data_10$Other_spending - 
          data_10$Patente - data_10$Taxes - data_10$Admin_fees
        Revenu_menage <- aggregate(data_10$Revenu_Non_agricole, by = list(interview_key = data_10$interview_key), FUN = sum)
        colnames(Revenu_menage)=c("Id_ménage", "Revenu non agricole")
        output$table_ehcvm1 <- renderDataTable({
          Revenu_menage
        })
        
        observeEvent(input$export_csv1, {
          if (!is.null(Revenu_menage)) {
            if (input$chemin1 != "") {
              if (!dir.exists(input$chemin1)) {
                showNotification("Erreur : Le chemin d'accès spécifié n'existe pas.", type = "error")
                return(NULL)
              }
              write.csv(Revenu_menage, file.path(input$chemin1, "/Revenu_non_agricole.csv"), row.names = FALSE)
              showNotification("La base de données a été exportée au format CSV.")
            } else {
              showNotification("Erreur : Veuillez spécifier un chemin d'accès valide.", type = "error")
            }
          }
        })
        
      } else {
        showNotification("veuillez charger les deux bases de données")
      }
    })
    
    observeEvent(input$file1, {
      updateSelectInput(session, "variable", choices = colnames(data()))
    })
    
    # Filtrage des données en fonction de la variable sélectionnée
    filtered_data <- reactive({
      distribution_selected <- input$distribution
      
      if (distribution_selected == "toutes les observations") {
        variable_selected <- input$variable
        if (!is.null(variable_selected) && variable_selected %in% colnames(data())) {
          data()[, c(1, match(variable_selected, colnames(data()))), drop = FALSE]
        } else {
          NULL
        }
      } else if (distribution_selected == "tableau de distribution") {
        variable_selected <- input$variable
        if (!is.null(variable_selected) && variable_selected %in% colnames(data())) {
          table_data <- table(data()[, variable_selected, drop = FALSE])
          data.frame(Modalités = names(table_data), Fréquence = as.vector(table_data))
        } else {
          NULL
        }
      } else {
        NULL
      }
    })
    
    # Affichage de la table filtrée des données
    output$table <- renderDataTable({
      filtered_data()
    })
    
    observeEvent(input$file1, {
      updateSelectInput(session, "select", choices = colnames(data()), selected = colnames(data())[1])
    })
    output$summary <- renderPrint({
      selected_variable <- input$select
      summary(data()[[selected_variable]])
    })
    
    observeEvent(input$select, {
      selected_variable <- input$select
      if (!is.null(selected_variable) && is.numeric(data()[[selected_variable]])) {
        output$boxplot <- renderPlot({
          boxplot(data()[[selected_variable]], main = "Boxplot", ylab = selected_variable)
        })
      } else {
        output$boxplot <- renderPlot({})
      }
    })
    
    observeEvent(input$file1, {
      updateSelectInput(session, "var1", choices = colnames(data()))
    })
    
    observeEvent(input$file1, {
      updateSelectInput(session, "var2", choices = c("rien", colnames(data())))
    })
    
    observeEvent(c(input$var1, input$var2), {
      if (!is.null(data())) {
        selected_variable1 <- input$var1
        selected_variable2 <- input$var2
        
        if (selected_variable2 == "rien") {
          if (!is.null(selected_variable1) && is.numeric(data()[[selected_variable1]])) {
            output$distPlot <- renderPlot({
              plot(data()[[selected_variable1]], main = input$titre, xlab = selected_variable1, ylab = "Valeur",
                   col = input$color)
            })
            output$ui_graph <- renderUI({NULL})
          } else if (!is.null(selected_variable1) && !is.numeric(data()[[selected_variable1]])) {
            output$ui_graph <- renderUI({selectInput(inputId = "typeGraph", label = "Type de graphique",
                                                     choices = c("Diagramme en barre" = "bar", "Diagramme circulaire" = "cir"))
            })
            observeEvent(input$typeGraph, {
              if (input$typeGraph=="bar") {
                selected_variable <- input$var1
                freq_table <- table(data()[[selected_variable]])
                output$distPlot <- renderPlot({
                  barplot(freq_table, main = input$titre, xlab = selected_variable, ylab = "Fréquence", col = input$color)
                })
                
              } else if (input$typeGraph=="cir") {
                selected_variable <- input$var1
                variable_summary <- table(data()[[selected_variable]])
                output$distPlot <- renderPlot({
                  proportions <- prop.table(variable_summary)
                  pie_chart <- pie(proportions, main = paste("Répartition de", selected_variable))
                  print(pie_chart)
                })
              }
            })
          }
          
        } else {
          if (!is.null(selected_variable1) && !is.null(selected_variable2)) {
            if (is.numeric(data()[[selected_variable1]]) && is.numeric(data()[[selected_variable2]])) {
              output$distPlot <- renderPlot({
                plot(data()[[selected_variable1]], data()[[selected_variable2]], main = input$titre,
                     xlab = selected_variable1, ylab = selected_variable2, col = input$color)
                regression <- lm(data()[[selected_variable2]] ~ data()[[selected_variable1]])
                abline(regression, col = "red")
                correlation <- cor(data()[[selected_variable2]], data()[[selected_variable1]])
                legend("topright", legend = paste("Corrélation =", round(correlation, 2)), bg = "white")
              })
              output$ui_graph <- renderUI({NULL})
            } else if (!is.numeric(data()[[selected_variable1]]) && is.numeric(data()[[selected_variable2]])) {
              data <- data.frame(var1 = data()[[selected_variable1]], var2 = data()[[selected_variable2]])
              histogram <- ggplot(data = data, aes(x = var2, fill = var1)) +
                geom_histogram(position = "identity", bins = 30, alpha = 0.5) +
                labs(x = selected_variable2, y = "Count")
              output$distPlot <- renderPlot({ histogram })
              output$ui_graph <- renderUI({NULL})
            } else if (is.numeric(data()[[selected_variable1]]) && !is.numeric(data()[[selected_variable2]])) {
              data <- data.frame(var1 = data()[[selected_variable2]], var2 = data()[[selected_variable1]])
              histogram <- ggplot(data = data, aes(x = var2, fill = var1)) +
                geom_histogram(position = "identity", bins = 30, alpha = 0.5) +
                labs(x = selected_variable1, y = "Count")
              output$distPlot <- renderPlot({ histogram })
              output$ui_graph <- renderUI({NULL})
            } else if (!is.numeric(data()[[selected_variable1]]) && !is.numeric(data()[[selected_variable2]])) {
              output$distPlot <- renderPlot({ NULL })
              output$ui_graph <- renderUI({NULL})
            }
          } else {
            output$distPlot <- renderPlot({ NULL })
          }
        }
      } else {
        showNotification("Veuillez charger une base de données dans Préparation des données (base de données).")
      }
    })
    
    
    
    observeEvent(input$file1, {
      updateSelectInput(session, "var_ad", choices = c(colnames(data())))
    })
    
    # Fonction pour générer le résumé de la variable
    
    generateSummary <- function(data, x) {
      variable_summary <- NULL
      
      if (is.numeric(data[[x]])) {
        variable_summary <- as.data.frame(psych::describe(data[[x]]))
      } else {
        variable_summary <- table(data[[x]])
      }
      
      return(variable_summary)
    }
    
    observeEvent(input$submit, {
      variable_selected <- input$var_ad
      if(!is.null(data())) {
        if (!is.null(variable_selected)) {
          variable_summary <- generateSummary(data(), variable_selected)
          
          output$output_ad <- renderTable({
            variable_summary
          })
          if (is.numeric(data()[[variable_selected]])) {
            output$plot1 <- renderPlot({
              hist(data()[[variable_selected]], main = paste("Histogramme de", variable_selected), xlab = variable_selected, col = "lightblue")
            })
            
            output$plot2 <- renderPlot({
              plot(data()[[variable_selected]], main = paste("Nuage de points de", variable_selected), xlab = variable_selected, ylab = "Valeurs")
            })
            
            output$plot3 <- renderPlot({
              boxplot(data()[[variable_selected]], main = "Boxplot", ylab = variable_selected)
            })
            
          } else {
            freq_table <- table(data()[[variable_selected]])
            output$plot1 <- renderPlot({
              barplot(freq_table,
                      xlab = variable_selected,
                      ylab = "Fréquence",
                      col = "red")})
            
            output$plot3<- NULL
            variable_summary <- table(data()[[variable_selected]])
            output$plot2 <- renderPlot({
              proportions <- prop.table(variable_summary)
              pie_chart <- pie(proportions, main = "Répartition de la variable")
              print(pie_chart)
            })
          }
        } 
      } else {
        showNotification("veuillez charger une base de données dans préparation des données (base de données)")
      }
    })
    
    
    observeEvent(input$file1, {
      updateSelectInput(session, "var1_des2", choices = c(colnames(data())))
    })
    observeEvent(input$file1, {
      updateSelectInput(session, "var2_des2", choices = c(colnames(data())))
    })
    
    observeEvent(c(input$var1_des2, input$var2_des2), {
      
      var1 <- data()[[input$var1_des2]]
      var2 <- data()[[input$var2_des2]]
      # Afficher ou cacher les onglets en fonction des conditions
      output$tabs <- renderUI({
        if (is.numeric(var1)==FALSE && is.numeric(var2)==FALSE) {
          # Afficher les onglets pour les variables qualitatives
          tabsetPanel(
            tabPanel("Contingency Table", uiOutput("contingencyTable")),
            tabPanel("Statistical Results", uiOutput("statResults"))
          )
        } else if (is.numeric(var1)==TRUE && is.numeric(var2)==TRUE) {
          # Afficher les onglets pour les variables quantitatives
          tabsetPanel(
            tabPanel("Scatter Plot", plotOutput("scatterPlot")),
            tabPanel("Statistical Results", uiOutput("statResults"))
          )
        } else if((is.numeric(var1)==TRUE && is.numeric(var2)==FALSE)||(is.numeric(var1)==FALSE && is.numeric(var2)==TRUE)) {
          tabsetPanel(
            tabPanel("Histogramme", plotOutput("histogram")),
            tabPanel("Statistical Results", uiOutput("statResults"))
          )
        }
      })
    })
    
    observeEvent(input$submit_1, {
      if (!is.null(data())) {
        var1 <- data()[[input$var1_des2]]
        var2 <- data()[[input$var2_des2]]
        
        if (is.numeric(var1)==FALSE && is.numeric(var2)==FALSE) {
          
          contingencyTable <- table(var1, var2)
          correlationTests <- chisq.test(contingencyTable)
          
          correlationTests <- data.frame(
            Khi_deux = correlationTests$statistic,
            Degrés_libérté = correlationTests$parameter,
            pValue = correlationTests$p.value
          )
          
          output$contingencyTable <- renderTable(with(data(), table(get(input$var1_des2),get(input$var2_des2))))
          output$statResults <- renderTable(correlationTests)
          output$scatterPlot <- NULL
          output$histogram <- NULL
        } else if (is.numeric(var1) && is.numeric(var2)) {
          scatterPlot <- ggplot(data = data(), aes(x = var1, y = var2)) +
            geom_point() +
            geom_smooth(method = "lm", se = FALSE) +
            labs(x = input$var1_des2, y = input$var2_des2)
          
          correlation <- cor(var1, var2)
          
          output$scatterPlot <- renderPlot({ scatterPlot })
          output$statResults <- renderTable(correlation)
          output$contingencyTable <- NULL
          output$histogram <- NULL
        } else if (is.numeric(var1)==FALSE && is.numeric(var2)==TRUE) {
          data <- data.frame(var1 = var1, var2 = var2)
          
          histogram <- ggplot(data = data, aes(x = var2, fill = var1)) +
            geom_histogram(position = "identity", bins = 30, alpha = 0.5) +
            labs(x = input$var2_des2, y = "Count")
          
          descriptives <- data %>%
            group_by(var1) %>%
            summarise(mean = mean(var2), median = median(var2), sd = sd(var2))
          
          output$histogram <- renderPlot({ histogram })
          output$statResults <- renderTable(descriptives)
          output$scatterPlot <- NULL
          output$contingencyTable <- NULL
        }  else if (is.numeric(var1)==TRUE && is.numeric(var2)==FALSE) {
          data <- data.frame(var2 = var2, var1 = var1)
          
          histogram <- ggplot(data = data, aes(x = var1, fill = var2)) +
            geom_histogram(position = "identity", bins = 30, alpha = 0.5) +
            labs(x = input$var1_des2, y = "Count")
          
          descriptives <- data %>%
            group_by(var2) %>%
            summarise(mean = mean(var1), median = median(var1), sd = sd(var1))
          
          output$histogram <- renderPlot({ histogram })
          output$statResults <- renderTable(descriptives)
          output$scatterPlot <- NULL
          output$contingencyTable <- NULL
        }
      } else {
        showNotification("veuillez charger une base de données dans préparation des données (base de données)")
      }
    })
    
    
  }
)
Shiny applications not supported in static R Markdown documents