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.
Téléchargez la table data_commerces_shiny.csv et placez-la dans votre dossier (dans un sous-dossier “data”, par exemple.
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()…
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…
(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…
(effectif à la centaine près: variable EFETCENT
, type: variable type
)
Utilisez le même input pour ce graphique et le graphique précédent…
Pour cela il faut utiliser les layouts de type fluidRow…:
fluidRow(column(width=...,
...),
column(width=...,
...)
)
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.
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…
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)