Créer une application web interactive sous R grâce à shiny

https://shiny.rstudio.com/

Source image : https://shiny.rstudio.com/

Vous travaillez sous R et vous souhaitez rendre vos analyses disponibles sur une application web interactive tout en restant sous R ? Sans passer par le dur labeur de créer votre site en HTML/CSS/Javascript puis d’y intégrer vos analyses ? Vous êtes au bon endroit ! Ici, je vais vous parler du package Shiny de R, qui permet de construire des applications web interactives directement sous R et ce, de manière ultra simple ! Ainsi, nul besoin de connaitre HTML/CSS/Javascript, Shiny gère tout pour vous ! En bonus, je vous montrerai comment rendre votre application disponible sur le web gratuitement, pour pouvoir la partager. On y va !

Les packages R nécessaires pour créer une application web interactive Shiny

Dans un premier temps, deux packages sont essentiels au bon fonctionnement d’une application Shiny. Tout d’abord, le package Shiny, qui permet de construire de manière très simple des applications web interactives avec R. Puis ggplot2, qui est le package essentiel pour pouvoir représenter ses données sous forme de graphiques. Si vous souhaitez apprendre à utiliser ggplot2, n’hésitez pas à aller lire mon article sur le package ggplot2

Voici les commandes à lancer sous R :

Il n’y a pas besoin de charger les librairies, elles seront chargées automatiquement lorsqu’on lancera notre application Shiny.

Créer son application web interactive avec Shiny

Maintenant, passons aux choses sérieuses et créons notre première application Shiny. Pour faire simple, une application Shiny classique, ce n’est rien de plus qu’un dossier contenant deux fichiers de base, ui.R et server.R.

Par exemple, j’ai créé un dossier qui s’appelle “article_shiny”, car je crée cette application pour le tutoriel du blog. Et dans ce dossier, je crée deux fichiers vides, ui.R et server.R.

Dans le fichier ui.R, on va définir l’interface utilisateur. Et dans le fichier server.R, on va définir les fonctions/commandes qui feront les divers traitements à effectuer sur nos données. Nous allons voir tout ça ensemble pas à pas.

Le fichier ui.R

Premier fichier à créer, ui.R :

Voici un fichier ui.R basique. 

La fonction pageWithSidebar stipule le type de design d’application que je veux. Cette fonction particulière va créer une application web Shiny qui contiendra un header (en-tête) avec le titre de l’application, une barre latérale pour choisir nos options (puisque c’est une page interactive) et une zone principale contenant notre sortie, ici un graphique. Rien n’est plus clair qu’une image, la voici. Il s’agit de l’application Shiny que nous allons créer :

Vous voyez bien le titre, “Iris plot”. Puis la barre latérale avec les options que l’on peut choisir, ici les variables à tracer (X et Y) ainsi que la couleur des points à définir. Ici, il s’agit du jeu de données que j’ai déjà utilisé dans mon article sur le package ggplot2. Il s’agit de données sur la largeur et la longueur des sépales et des pétales de différentes espèces d’Iris. Sur le graphique, la longueur des pétales est tracée en fonction de la largeur des pétales, pour chaque individu du jeu de données.

La fonction pageWithSidebar attend trois arguments : 

  • headerPanel : le titre qu’on souhaite donner à notre application, ici “Iris plot”
  • sidebarPanel : les options qu’on souhaite intégrer dans la barre latérale, ici trois options, la variable X, la variable Y et la variable à utiliser pour définir la couleur. Pour chaque option, nous donnons l’ensemble des noms de colonnes du tableau iris, c’est-à-dire l’ensemble des variables du tableau. Cela permet de créer les trois listes déroulantes qu’on voit sur l’application. Enfin, l’option “selected” permet de définir la valeur par défaut de chaque option.
  • mainPanel : les élements à afficher dans la zone principale, ici notre graphique nommé “plot1”

Une fois qu’on a défini notre fichier ui.R pour l’interface utilisateur, on va définir le fichier server.R.

Le fichier server.R

Voici le fichier server.R de l’application web Shiny que je vous ai montré plus haut :

Le fichier server.R contient les commandes qui vont utiliser les options définies par ui.R pour créer différentes sorties (tableaux, graphiques, etc). 

La fonction shinyServer attend trois arguments :

  • input : ce sont les inputs (les entrées) définis dans ui.R que cette fonction récupère. Ici, l’input (l’entrée) contient trois valeurs, le nom de la variable X à tracer, le nom de la variable Y à tracer et selon quelle variable la couleur des points doit être définie
  • output : les sorties de l’application, qui sont définies dans ui.R et qui seront générées par server.R (ici plot1)
  • session : il s’agit des options pour la session créée lors du lancement de l’application Shiny, mais ça ne nous intéresse pas ici

Dans la fonction server, il y a une première étape où on charge les librairies dont on a besoin, ici datasets pour récupérer le jeu de données Iris et ggplot2 pour créer le graphique. Ensuite, le jeu de données est chargé dans l’environnement avec “data(iris)”. 

Ensuite, vient la partie un peu plus compliquée. Il faut savoir que l’ensemble des outputs créés sont liés entre ui.R et server.R. ui.R attend un graphique en sortie, qui s’appelle plot1 :

Et donc, dans server.R, on défini un objet output$plot1, qui permettra de dire à ui.R de l’utiliser comme sortie sur l’interface. Attention, il est très important que le mot qui suit le “$” de “output$…” corresponde à un nom d’objet défini dans ui.R, ici plot1. C’est ce qui fait le lien entre ce qu’on crée dans server.R (plot1) et ce qu’on récupère dans ui.R pour l’afficher (toujours plot1).  La fonction renderPlot permet de retourner un graphique ggplot, ce qui est attendu par ui.R ici, via la fonction “plotOutput”. Et ensuite, il suffit d’écrire la commande ggplot2 qui permet de créer le graphique d’intérêt.

  • input$xvar : on donne cette option comme x dans l’aes, il s’agit du nom de variable que l’utilisateur aura choisi dans la liste déroulante “X Variable”
  • input$yvar : on donne cette option comme y dans l’aes, il s’agit du nom de variable que l’utilisateur aura choisi dans la liste déroulante “Y Variable”
  • input$colorvar : on donne cette option comme color dans l’aes, il s’agit du nom de variable que l’utilisateur aura choisi dans la liste déroulante “Color Variable”

Si vous ne comprenez pas la commande ggplot(), n’hésitez pas à aller lire l’article sur le package ggplot2.

Lancer son application Shiny en local sur son ordinateur

Une fois que les deux fichiers ui.R et server.R sont correctement remplis, il suffit de lancer la commande shiny::runApp en donnant le chemin complet vers le dossier contenant les deux fichiers. Pour moi, il s’agit de cette commande :

Une fois que vous aurez lancé ça sous R, une page web s’ouvrira avec votre application Shiny prête à être utilisée. Mais cette commande lance l’application en local sur votre ordinateur, vous ne pouvez pas la partager à quelqu’un d’autre. Si vous souhaitez la partager sur le web, shinyapps.io est là pour ça !

Déployer son application Shiny gratuitement sur le web avec shinyapps.io

Créer son compte shinyapps.io

La première chose à faire est de créer un compte sur shinyapps.io. Dans un premier temps, allez sur la page d’accueil de shinyapps.io. Cliquez sur Sign Up.

Puis, créez votre compte :

Après la création de votre compte, vous arriverez sur cette page où vous définissez le nom de votre compte, celui qui apparaîtra dans l’adresse web de l’ensemble de vos applications, pour moi ce sera datasciencer1 :

Et voilà, vous êtes prêt à partager vos superbes applications.

Connecter son application Shiny à shinyapps.io

Première étape, il faut connecter votre application shiny à shinyapps.io. Shinyapps.io vous guide pas à pas pour faire ça. Premièrement, il faut installer le package rsconnect sous R

Deuxième étape, il faut cliquer sur “copy to clipboard” (copier dans le presse papier) et coller la commande dans R. Cela permettra de connecter votre R avec shinyapps.io.

Troisième étape, déployer votre application Shiny sur le web. Pour cela il faut charger la library rsconnect puis utiliser la fonction rsconnect::deployApp et lui donner le chemin complet vers le dossier contenant votre application, dans mon cas : 

Voici ce que vous donne la sortie de la commande :

Enfin, lorsque “Application successfully deployed” apparait, votre application est sur le web à l’adresse que vous indique rsconnect. Pour ma part c’est le lien “https://datasciencer1.shinyapps.io/article_shiny/”.

Partager son application Shiny sur le web

Enfin, vous pouvez distribuer votre lien à qui vous voulez ! Vous pouvez voir l’application que je viens de déployer avec vous ici.

J’espère que cette première approche avec Shiny vous aura convaincu ! N’hésitez pas à aller plus loin, les possibilités avec Shiny sont énormes ! Aussi, allez faire un tour dans la galerie de Shiny R studio, vous verrez encore mieux toutes les possibilités qu’offre le package.

Amandine de DataScienceR

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *