Préparation

On repart des données SIRENE sur lesquelles vous avez déjà travaillé. Pour simplifier la tâche nous pouvons tous repartir d’une base commune, à savoir la table data_commerces_shiny.csv:

Considérez le tableau “data_commerces_shiny.csv”:

mydata=read_delim("data/data_commerces_shiny.csv", 
                  ";", escape_double = FALSE, trim_ws = TRUE,
                  locale=locale(encoding="ISO-8859-1")
                  )
mydata=mutate(mydata,
              DDEBACT=lubridate::ymd(DDEBACT),
              DCREN=lubridate::ymd(DCREN))
head(mydata)
## # A tibble: 6 x 11
##       SIREN DEPET           L1_DECLAREE
##       <int> <int>                 <chr>
## 1 349335117     1 FRANCESCH ETY MEYNAUD
## 2 349746529     1          TANTE YVONNE
## 3 382177335     1        BOUCHERIES J'M
## 4 382177335     1        BOUCHERIES J'M
## 5 382177335     1        BOUCHERIES J'M
## 6 382177335     1        BOUCHERIES J'M
## # ... with 8 more variables: geo_adresse <chr>, longitude <dbl>,
## #   latitude <dbl>, label <chr>, type <chr>, DDEBACT <date>, DCREN <date>,
## #   EFETCENT <int>

Nous allons travailler sur les données présentées par cette table pour construire votre première Shiny app.

0) création et préparation de votre projet RStudio, de type “Shiny App”

Téléchargez la table data_commerces_shiny.csv et placez-la dans votre dossier (dans un sous-dossier “data”, par exemple.

1) affichage d’une table en fonction du numéro de département

Commencez par construire une Shiny app toute simple qui permet à l’utilisateur de préciser le numéro de département qui l’intéresse (parmi 1, 38, 42, 43 et 69) et qui affiche seulement les lignes du tableau qui concernent ce département.

Pour cela, commencez par rassembler les commandes qui permettent de:

Remarque: vous pouvez en profiter pour tester la différence entre renderTable({})+tableOutput() et renderDataTable({}) et dataTableOutput()…

2) affichage de la table ou d’une sous-partie de la table

Ajouter un input de type checkbox pour que l’utilisateur puisse préciser si oui ou non il souhaite que toutes les lignes de la table soient affichées (si ce n’est pas le cas, seules les 3 premières lignes seront affichées).

Adapter l’output table pour prendre en compte ce choix…

3) création d’un graphique montrant le nombre d’entreprises d’un certain type (choisi par l’utilisateur) en activité au cours du temps

(début d’activité: variable DDEBACT, type: variable type)

Comme précédemment, commencez par rassembler les commandes nécessaires à produire ce graphique avant de les adapter à votre Shiny app…

4) création d’un graphique montrant la distribution de l’effectif d’un certain type (choisi par l’utilisateur)

(effectif à la centaine près: variable EFETCENT, type: variable type)

Utilisez le même input pour ce graphique et le graphique précédent…

5) modifier le layout pour avoir deux “tabPanels” distincts (un pour la table, un pour les graphiques) dans un menu de type “navlistPanel”

Attention, c’est à partir d’ici que les choses peuvent se compliquer en terme de réactivité, si les inputs nécessaires à la production d’un output ne sont pas affichés au même moment que cet output par exemple…

6) modifier le layout du panel “graphiques” pour avoir à gauche l’input “type”, à droite les graphiques correspondants…

Pour cela il faut utiliser les layouts de type fluidRow…:

fluidRow(column(width=...,
                ...),
         column(width=...,
                ...)
        )

7) créer une réactive

Créer une fonction réactive qui dépend du *type d’entreprise en input, et qui en sortie renvoie la sous-partie de la table** correspondant à ce type.

Modifiez vos deux outputs de type “plot” pour qu’ils dépendent de cette réactive.

8) réorganiser le layout

Réorganiser la colonne à droite de l’input “type”, en y créant un tabsetPanel avec:

Nous allons remplir ce dernier avec un output de type leaflet par la suite…

9) créer une carte interactive avec Leaflet

Faire en sorte que l’app charge la librairie leaflet, et utiliser renderLeaflet({}) et leafletOutput() pour créer une carte montrant l’emplacement des commerces du type choisi par l’utilisateur. (=> utilisez la réactive que vous venez de créer pour récupérer directement la partie du jeu de données qui vous intéresse!)

Ici vous trouverez un Tutoriel Leaflet pour R si vous voulez en apprendre plus…

Ce n’est pas notre sujet aujourd’hui (même si Leaflet, c’est super), donc pour aller plus vite, voici un petit modèle pour vous aider à créer votre carte Leaflet:

library(leaflet)
data_subset=filter(mydata,type=="Superette")

leaflet() %>%
   addProviderTiles(providers$OpenStreetMap.Mapnik,
                    options = providerTileOptions(noWrap = TRUE)
   ) %>%
  addCircles(data = data_subset)