Créa-blog

Ressources pour développeur web

Tutoriel R et Shiny : Le package Shiny

Accueil R et Rstudio Tutoriel R et Shiny : Le package Shiny

Shiny est un package R qui permet de créer des applications web interactives en utilisant du code R. Cela vous permet de créer des tableaux de bord, des visualisations et des analyses interactives que d’autres utilisateurs peuvent manipuler directement via un navigateur web. Ce chapitre va vous guider pas à pas pour comprendre les bases de Shiny, créer une application web interactive, et apprendre à la déployer.

Introduction à Shiny

Shiny est un outil très puissant pour les utilisateurs de R qui souhaitent créer des interfaces interactives sans avoir besoin d’apprendre des langages web comme HTML, CSS ou JavaScript. Grâce à Shiny, vous pouvez intégrer vos analyses de données R dans des applications web que d’autres peuvent utiliser pour explorer vos résultats.

Structure d’une application Shiny

Une application Shiny a deux parties principales :

  • UI (User Interface) : la partie de l’application que l’utilisateur voit et avec laquelle il interagit.
  • Server : la partie où se déroule le traitement des données et les calculs en arrière-plan.

Voici la structure générale d’une application Shiny :


library(shiny)

# UI : Interface utilisateur
ui <- fluidPage(
  titlePanel("Mon Application Shiny"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("nombre", "Choisir un nombre :", min = 1, max = 100, value = 50)
    ),
    mainPanel(
      textOutput("resultat")
    )
  )
)

# Server : Traitement en arrière-plan
server <- function(input, output) {
  output$resultat <- renderText({
    paste("Vous avez choisi le nombre :", input$nombre)
  })
}

# Lancer l'application Shiny
shinyApp(ui = ui, server = server)

Explication de l'exemple :

UI (Interface utilisateur) :

  • fluidPage() crée une mise en page flexible.
  • titlePanel() affiche un titre.
  • sidebarLayout() divise l'interface en une barre latérale (sidebarPanel()) et un panneau principal (mainPanel()).
  • sliderInput() ajoute un curseur que l'utilisateur peut déplacer pour sélectionner un nombre.

Server (Traitement) :

  • La fonction server définit ce qui se passe lorsque l'utilisateur interagit avec l'interface. Ici, le nombre sélectionné est récupéré avec input$nombre et affiché dans output$resultat à l'aide de renderText().

Lancement de l'application :

  • shinyApp(ui, server) lance l'application.

Création d'applications web interactives

L'un des principaux avantages de Shiny est sa capacité à rendre vos analyses de données interactives. Les utilisateurs peuvent manipuler des graphiques, des filtres, des tableaux et voir les résultats de manière dynamique.

Exemple : Création d'une application de visualisation

Imaginons que vous souhaitiez créer une application interactive où l'utilisateur peut choisir un nombre de points à afficher sur un graphique.


library(shiny)

# Interface utilisateur
ui <- fluidPage(
  titlePanel("Visualisation de points aléatoires"),
  
  sidebarLayout(
    sidebarPanel(
      sliderInput("n", "Nombre de points :", min = 10, max = 1000, value = 100)
    ),
    
    mainPanel(
      plotOutput("plot")
    )
  )
)

# Traitement côté serveur
server <- function(input, output) {
  output$plot <- renderPlot({
    # Générer des points aléatoires en fonction de l'entrée utilisateur
    points <- data.frame(x = rnorm(input$n), y = rnorm(input$n))
    
    # Créer le graphique
    plot(points$x, points$y, main = "Points aléatoires", xlab = "X", ylab = "Y", pch = 19)
  })
}

# Lancer l'application
shinyApp(ui = ui, server = server)

Explication :

  • UI : L'utilisateur peut choisir le nombre de points à afficher avec un curseur (sliderInput). Le graphique est affiché dans mainPanel() via plotOutput().
  • Server : La fonction renderPlot() crée un graphique à chaque fois que l'utilisateur change le nombre de points.

Déploiement d'applications Shiny

Après avoir créé une application Shiny, il est temps de la déployer pour que d'autres utilisateurs puissent y accéder via Internet. Voici les principales méthodes pour déployer votre application :

1. Shiny Server

Shiny Server est un logiciel open-source qui permet d'héberger des applications Shiny sur un serveur web. Si vous avez un serveur, vous pouvez installer Shiny Server et héberger autant d'applications Shiny que vous le souhaitez.

2. shinyapps.io

Si vous n'avez pas de serveur, shinyapps.io est une solution d'hébergement en ligne gratuite et facile à utiliser pour déployer vos applications Shiny. Vous pouvez créer un compte, publier votre application et obtenir un lien à partager avec d'autres personnes.

Étapes pour déployer une application sur shinyapps.io :

  • Inscription : Rendez-vous sur shinyapps.io et créez un compte.
  • Installer le package rsconnect :

install.packages("rsconnect")

Connexion à shinyapps.io :

  • Connectez-vous à votre compte shinyapps.io en utilisant les informations fournies lors de votre inscription :

rsconnect::setAccountInfo(name='votre_nom',
                          token='votre_token',
                          secret='votre_secret')

Déployer l'application :

  • Utilisez cette commande pour déployer votre application sur shinyapps.io :

rsconnect::deployApp('chemin_vers_votre_application')

3. Docker

Si vous avez besoin de déployer votre application Shiny dans un environnement de conteneur (comme Docker), vous pouvez créer une image Docker de votre application, ce qui facilite son déploiement sur n'importe quel serveur qui prend en charge Docker.

Shiny est un outil extraordinaire pour rendre vos analyses interactives et accessibles à un public plus large. Que ce soit pour explorer des données, visualiser des résultats ou même fournir des outils interactifs à d'autres utilisateurs, Shiny offre une solution simple pour transformer des analyses statiques en applications web dynamiques. Grâce à des plateformes comme shinyapps.io, vous pouvez facilement déployer vos applications et permettre à d'autres d'interagir avec vos analyses, le tout sans avoir besoin de connaissances approfondies en développement web.