[Etude de marché - Article 1]
Aurélien Daval
Contexte: Le confinement lié à la crise sanitaire du Covid-19 a été l'opportunité pour moi de mettre à contribution le temps disponible pour améliorer ma connaissance du logiciel/language R. Ces articles [Etude de marché] sont le résultat de ces recherches. L'objectif personnel était de mener une étude de marché A à Z avec R. Pour rendre plus efficace la communication de ces résultats de ces recherches, il a été décidé de le faire via un storytelling percutant.
Préambule
Vous venez d'être embauché(e) en tant que Chargé(e) d'étude dans la jeune start-up 'Su-R-Vey' qui veut révolutionner le monde des études de marché. Félicitations. C'est le début d'une aventure qui va vous ammener sur le toit du Palais Brongniart (c'est le lieu du salon annuel des professionnels des études de marché : "Le Printemps des études"").
Cette start-up a pour objectif de maîtriser la totalité de la chaine de valeur : de la conception du questionnaire et sa programmation au livrable finale (Présentation, Dashboard), en passant par l'analyse des données. Une organisation horizontale focalisée sur les besoins clients où chaque collaborateur maîtrise toutes les étapes et est à même de contribuer à l'amélioration des processus internes à l'entreprise.
Une start-up tournée vers l'innovation. Et un choix fort a été fait dès le départ : utiliser le logiciel/language R avec RStudio dans la totalité de la chaine de valeur. En effet, R permet de manipuler les données, de les traiter statistiquement, d'automatiser ce traitement et de présenter visuellement ces résultats. Les possibiltés sont infinies et permettent de modeler les analyses/les visuels à sa convenance pour atteindre le résultat attendu.
C'est maintenant votre premier jour de travail. Et votre premier dossier. Vous voilà en route (avec votre directeur d'étude pour vous épauler) pour votre premier atelier de travail du questionnaire chez le client.
N.B. : Ce tutoriel a pour objectif de montrer ce qu'il est possible de faire avec le logiciel/language R. Il ne s’agit en aucun cas d’un cours de statistiques.
N.B.2 : Pour réaliser la première partie de ce tutoriel (Programmation du questionnaire et sauvegarde des données dans un bucket Amazon S3), ce tutoriel de Dean Attali m'a beaucoup aidé, merci à lui.
Introduction au package Shiny
Le questionnaire va être programmé via le package Shiny. Avant de programmer notre questionnaire, je vous propose de regarder comment ce package fonctionne.
library(shiny)
Une application Shiny se compose de deux éléments :
- L'Interface Utilisateur (UI) : vous allez gérer ici l'apparence de votre application, sa mise en page.
- Le serveur (Server) : c'est les instructions qui régissent les interactions à l'intérieur de votre application. Par exemple, qu'est ce qui se passe quand j'appuie sur ce bouton ? Qu'est ce qui doit s'afficher ?
Pour créer votre première application, il faut (dans R Studio) cliquer sur : Fichier > Nouveau Fichier > Shiny Web App > Un seul fichier > Nom de l'application. Félicitations. Vous auriez pu créer deux fichiers (ui.R et server.R) en cliquant sur l'option "Fichiers Multiples". Pour ma part, je trouve qu'il est plus facile de suivre un tutoriel avec un seul fichier (app.R) pour reproduire facilement ce qui est montré. Cependant, je vous conseille lors de la programmation d'une application (où le nombre de lignes de code augmente au fil du développement) de diviser votre application en plusieurs fichiers pour vous y retrouver plus facilement.
Ci-dessous la structure d'une application Shiny :
# Chargement du package Shiny.
library(shiny)
# L'Interface Utilisateur --> la page web de l'application.
ui <- fluidPage()
# Le Serveur --> les instructions pour les interactions.
server <- function(input, output) {}
# Lancer l'application
shinyApp(ui = ui, server = server)
La fonction fluidPage permet à votre application d'adapter automatiquement l'affichage aux dimensions de la fenêtre du navigateur de votre utilisateur. Votre application est donc responsive.
Pour fonctionner, une application Shiny a besoin de :
- Inputs :
C'est ce qui permet à l'utilisateur d'intéragir avec votre application en modifiant certaines valeurs. Les inputs sont toujours à l'intérieur de la partie UI. Plusieurs type d'inputs (textInput, dateInput, numericInput, ...) sont possibles. Vous avez un aperçu ici.
A l'intérieur de chaque Inputs, il y a plusieurs arguments. Deux sont communs à tous (InputID et Label). L'ID permet de mettre en place les interactions dans le Serveur et de savoir de quels Inputs on parle. L'ID est unique. Le label permet d'ajouter du texte avant l'Input dans votre Interface Utilisateur. Et enfin, d'autres arguments sont nécessaires en fonction de chaque Inputs.
Ci-dessous un Input numérique. L'ID --> num. Le Label --> "Voici un Input numérique" (h6: c'est pour signifier à l'application qu'il s'agit d'un titre de taille 6). Pour finir, on peut ajouter une valeur de départ à cette Input : le chiffre affiché au départ sera le 1.
numericInput(inputId = "num", label = h6("Voici un Input numérique"), value = 1)
- Outputs :
C'est ce qui permet d'afficher des graphiques, des espaces de textes ou des tableaux. Pour créer un Output, il faut :
- Définir où l'Ouput doit se situer dans l'application (UI).
- Définir ce que cet Output doit afficher dans la partie Serveur.
Vous avez un aperçu ici des différents Outputs possibles.
Reprenons l'exemple ci-dessus avec l'Input numérique "num". Et ajoutons lui un output : nous souhaitons que l'application ajoute une zone de texte avec le chiffre affiché dans l'Input "num" auquel nous ajoutons +2. Dans la partie UI, je notifie à l'application là où doit se trouver l'Output (textOutput --> ID: num2). Ensuite, dans la partie serveur, je vais dire à l'application ce qu'il doit afficher. Il doit afficher du texte (renderText). Ce texte, c'est la valeur de l'Input numérique renseignée par l'utilisateur +2.
# Chargement du package Shiny.
library(shiny)
# L'Interface Utilisateur --> la page web de l'application.
ui <- fluidPage(
numericInput("num", label = h6("Voici un Input numérique"), value = 1),
p("Le chiffre ci dessus +2 :"),
textOutput("num2")
)
# Le Serveur --> les instructions pour les interactions.
server <- function(input, output) {
output$num2 <- renderText({input$num + 2})
}
# Lancer l'application
shinyApp(ui = ui, server = server)
Pour clore cette introduction au package Shiny, je vous propose de créer une application "Calculatrice". Je me suis inspiré de cette page pour créer cette application. Les différentes étapes pour créer votre application "Calculatrice" sont :
- La structure de l'application. Il faut définir l'architecture de l'application pour savoir où les éléments vont se situer.
- Une zone au dessus : le titre de l'application via la fonction "titlePanel".
- Une zone à gauche : les inputs de notre calculatrice (les nombres et l'opérateur) via la fonction "sidebarPanel".
- Une zone à droite : le résultat de notre caclul via la fonction "mainPanel".
- Les Inputs (dans la partie "sidebarPanel") :
- Le premier chiffre : numericInput("num1", "1er Nombre", 0).
- Le second chiffre : numericInput("num2", "2nd Nombre", 0),
- Le choix de l'opérateur (+,-,/,x) : selectInput("operator", "L'opérateur", choices = c("+","-","x", "/")). Le troisième argument (choices) est une liste de valeurs qui va pouvoir être sélectionnée par l'utilisateur via un menu déroulant, ici les différents opérateurs.
- L'Ouput : le résultat de ce calcul.
- UI: dans la partie "mainPanel", il faut ajouter la fonction textOutput pour signifier à notre application que c'est ici que le résultat de notre calcul doit apparaître. L'ID : result.
- Server : c'est là qu'on va mettre en place les règles de calcul. Le résultat est un texte : on va donc utiliser la fonction renderText. 4 calculs sont possibles : l'addition, la soustraction, la multiplication ou la division. Pour passer d'un calcul à l'autre, il faut utiliser la fonction switch: le premier argument, c'est le choix qu'à fait notre utilisateur à la fonction selectInput (ID:operator) --> input/operator. Ensuite, chaque opérateur est repris et les règles de calculs sont définis. Pour l'addition, le premier chiffre est ajouté au second : "+" = input/num1 + input/num2. Et ainsi de suite.
- UI: dans la partie "mainPanel", il faut ajouter la fonction textOutput pour signifier à notre application que c'est ici que le résultat de notre calcul doit apparaître. L'ID : result.
# Chargement du package Shiny.
library(shiny)
# L'Interface Utilisateur --> la page web de l'application.
ui <- fluidPage(
titlePanel("Calculatrice"),
sidebarPanel(
numericInput("num1", "1er Nombre", 0),
numericInput("num2", "2nd Nombre", 0),
selectInput("operator", "L'opérateur",
choices = c("+","-","x", "/"))),
mainPanel(
h2("Résultat:"),
textOutput("result")))
# Le Serveur --> les instructions pour les interactions.
server <- function(input, output) {
output$result <- renderText({
switch(input$operator,
"+" = input$num1 + input$num2,
"-" = input$num1 - input$num2,
"x" = input$num1 * input$num2,
"/" = input$num1 / input$num2)})}
# Lancer l'application
shinyApp(ui = ui, server = server)
Pour allez plus loin sur ce package Shiny, vous pouvez aller jeter un coup d'oeil sur ces différents liens :
- Le tutoriel officiel de Shiny.
- Le tutoriel de Dean Attali. Ce dernier est bien construit, c'est celui que j'ai suivi lorsque je me suis intéressé à ce package.