fxjollois
3/17/2016 - 11:08 AM

Shiny - TP1 : Proposition de solution

Shiny - TP1 : Proposition de solution

library(shiny)

shinyUI(fluidPage(
  h1("Première application"),
  tabsetPanel(
    tabPanel("Contenu du TP",
             h2("Contenu du TP"),
             sidebarLayout(
               sidebarPanel(
                 selectInput("choixNuage", "Abscisse", c("wt", "hp", "disp")),
                 textOutput("resumeMpg"),
                 textOutput("resumeVar")
               ),
               mainPanel(
                 plotOutput("nuage")
               )
             )
    ),
    tabPanel("Qualitative seule",
             h2("Description d'une variable qualitative"),
             sidebarLayout(
               sidebarPanel(
                 selectInput("choixQualiSeule", "Var. qualitative", c("cyl", "vs", "am", "gear", "carb"))
               ),
               mainPanel(
                 plotOutput("barplotQualiSeule"),
                 plotOutput("pieQualiSeule"),
                 dataTableOutput("resumeVarQualiSeule")
               )
             )
    ),
    tabPanel("Deux qualitatives",
             h2("Croisement de deux variables qualitatives"),
             sidebarLayout(
               sidebarPanel(
                 selectInput("choixQualiQuali1", "Var. qualitative", c("cyl", "vs", "am", "gear", "carb")),
                 selectInput("choixQualiQuali2", "Var. qualitative", c("cyl", "vs", "am", "gear", "carb"))
               ),
               mainPanel(
                 plotOutput("barplotQualiQuali"),
                 tableOutput("resumeVarQualiQuali")
               )
             )
    )
  )
))
library(shiny)

shinyServer(function(input, output) {
  
  # Exercices du TP
  output$nuage <- renderPlot({
    plot(mtcars$mpg ~ mtcars[,input$choixNuage], main = "Consommation")
  })
  output$resumeMpg <- renderText({
    paste("Moyenne mpg :", mean(mtcars$mpg, na.rm = T))
  })
  output$resumeVar <- renderText({
    paste("Moyenne", input$choixNuage, ":", mean(mtcars[,input$choixNuage], na.rm = T))
  })
  
  # Qualitative seule
  tabQualiSeule <- reactive({
    table(mtcars[,input$choixQualiSeule])
  })
  output$barplotQualiSeule <- renderPlot({
    barplot(tabQualiSeule())
  })
  output$pieQualiSeule <- renderPlot({
    pie(tabQualiSeule())
  })
  output$resumeVarQualiSeule <- renderDataTable({
    eff = tabQualiSeule()
    prop = prop.table(eff) * 100
    cbind(Modalité = names(eff), Effectif = eff, Fréquence = prop, "Fréquence cumulée" = cumsum(prop))
  }, options = list(searching = FALSE, paging = FALSE, ordering = FALSE))
  
  # Deux Qualitatives
  tabQualiQuali <- reactive({
    table(mtcars[,input$choixQualiQuali1], mtcars[,input$choixQualiQuali2])
  })
  output$barplotQualiQuali <- renderPlot({
    barplot(prop.table(tabQualiQuali(), margin = 2))
  })
  output$resumeVarQualiQuali <- renderTable({
    t = tabQualiQuali()
    tRow = apply(t, 1, sum)
    tCol = apply(t, 2, sum)
    tAll = sum(t)
    tt = rbind(
      cbind(t, tRow),
      c(tCol, tAll)
    )
    colnames(tt) = c(colnames(t), "Somme en lignes")
    rownames(tt) = c(rownames(t), "Somme en colonnes")
    tt
  })
  
})