R Rencontres 2016 - Toulouse

Microeconomix,
l'Open Source
& l'Open Data

Microeconomix

  • Cabinet de conseil en économie fondé en 2002 par François Lévêque et basé à Paris
    • Solide expertise en matière d'analyse microéconomique et économétrique, en techniques quantitatives et en data science
      • Concurrence
      • Contentieux et arbitrage
      • Régulation : énergie et télécoms
      • Data
    • Plus de 17 économistes avec des activités en France, Europe (notamment en Pologne) et en Afrique de l'Ouest
  • L'équipe Data dirigé par Emmanuel Frot est spécialisée dans le domaine de l’exploration, analyse et visualisation de données
    • Conjonction de deux compétences complémentaires :
      • Expertise en économie & excellente compréhension du fonctionnement des marchés
      • Maîtrise des techniques les plus avancées en économétrie, statistiques et data science

Conseil, OS & OD

  • Intégration croissante des solutions OS et OD dans le conseil
    • Il est impératif de connaître les nouveaux ressources OS et OD pour :
      • Identifier et créer des innovations pour les entreprises combinant leurs données internes à l'OS & OD
      • Proposer des améliorations des services existants
  • Les données internes ne représentent que partiellement les marchés où opèrent les entreprises
    • L'OD améliore la compréhension du fonctionnement des marchés
  • Avantage financer indéniable pour les entreprises
    • Même si, culturellement en entreprise, l'OS & l'OD sont souvent considérés comme peu fiables
  • L'OS facilite des tâches souvent très chronophages
    • Prototypage
    • Solutions web

R & Shiny : quand et pourquoi ?

  • Faut-il récupérer et traiter les données, réaliser des analyses statistiques et économétriques, visualiser les résultats et reproduire les analyses ?
    • Alors nous privilégions R
  • Pourquoi Shiny ?
    • Codage simple et transparent
    • Intégration des résultats issus des analyses statistiques et économétriques en langage R
    • Personnalisation
    • Incorporation de HTML, CSS, Java, JavaScript
    • Reproductibilité
    • Déploiement et maintenance
    • Coût

Shiny en bref

  • Le fichier ui.R définie l'interface utilisateur, gère les inputs
library(shiny)
shinyUI(bootstrapPage(
  selectInput(inputId = "n_breaks", label = "Nb de barres :", 
              choices = c(10, 20, 35, 50), selected = 20),
  sliderInput(inputId = "bw_adjust",label = "Ajustement de la courbe :",
              min = 0.2, max = 2, value = 1, step = 0.2),
  plotOutput(outputId = "main_plot", height = "300px") ))
  • Le fichier server.R lit les inputs, exécute le script et crée les outputs qui sont affichés dans l'interface
library(shiny)
shinyServer(function(input, output) {
  output$main_plot <- renderPlot({
    hist(faithful$eruptions, probability = TRUE, 
         breaks = as.numeric(input$n_breaks), xlab = "Durée (minutes)", 
         main = "Durée de l'éruption du geyser")
    dens <- density(faithful$eruptions, adjust = input$bw_adjust)
    lines(dens, col = "blue") }) })

prixdescarburants.info

Données des prix des carburants

  • Le site http:/www.prix-carburants.gouv.fr met à disposition les données de prix des carburants renseignées par les stations-service à J-7
  • La méthodologie suivie est la suivante
    • Téléchargement des données au format XML
    • Mise en forme en R afin de constituer différentes bases permettant ensuite de réaliser leur traitement
    • Transformation des données en séries temporelles, par couple station-carburant
    • Prise en compte des dates de fermeture temporaire
    • Détection et remplacement des valeurs aberrantes
  • Nous avons automatisé ces traitements, le site reste à jour sans intervention extérieure

Objectifs de l'application

  • Accès aux données par commune
    • Recherche par code postal
    • Possibilité de choix multiples de communes.
  • Comparaison des prix des stations-service par le biais d'une carte
  • Carte interactive pour l'affichage des détails : tableaux, graphiques d'historique des prix
  • Analyses
    • Décomposition de prix en taxes, marges et cours du pétrole par station-service et au niveau national
    • Evolution des parts de chaque poste au fil du temps
    • Appréciation des disparités de prix entre départements
    • Relation prix et densité des stations
    • Comparaison par enseigne

http://www.prixdescarburants.info

Comment avons-nous
personnalisé Shiny ?

Recherche et sélection

  • Besoins
    • Accès aux données par commune en laissant l’utilisateur entrer un code postal ou un nom de commune
    • Possibilité de choix multiples de communes
    • Rapidité
  • Librairie JavaScript selectize.js qui fournit 2 choix de recherche :
    • Côté « client », c'est-à-dire par le biais de l'interface utilisateur
      • Mais seulement une fois que tous les choix possibles ont été lus par la page HTML (>36k communes)
    • Côté serveur : R fait le match de la chaîne de caractères et renvoie le résultat
library(shiny)
updateSelectizeInput(..., server = TRUE)

Cartographie

  • Besoins
    • Interactivité
    • Flexibilité pour le choix du fond de carte
    • Facilité pour la définition des groupes de comparaison et de la légende et pour le choix des couleurs
    • Création facile de choropleth maps
  • Librairie JavaScript Leaflet
library(leaflet)

popout <- function(x, d) {
  y <- paste(d$marque, '<br>', paste0(d$prix, ' euros / litre'), '<br>')}
palette<- colorQuantile(palette = colorlist, domain = d$prix, probs= probs)
leaflet(d()) %>% 
  addProviderTiles(...)  %>%
  addCircleMarkers(color = ~palette(prix),popup = popout(d()),
                   layerId = d()$id)%>%
  addLegend(...)

Visualisation

  • Besoins
    • Affichage de tableaux mis à jour automatiquement en fonction de la commune et du carburant retenu
    • Graphiques interactifs pour les analyses
  • Diverses librairies JavaScript :
    • DataTables pour les tableaux
    • dygraphs pour les graphiques, notamment les séries temporelles
    • rCharts notamment pour les bar charts interactifs
    • metricsgraphics

Retour d'expérience

Difficultés

  • Temps de calcul
    • Les visualisations mises en place sont souvent compliquées et peuvent avoir un temps de calcul et d’affichage non négligeable
    • Cela implique une réflexion sur les traitements à faire pour réduire la volumétrie des bases à charger
  • Encodage : éàèïù, utf8, latin-1, …
    • L'encodage des chaînes de caractères est loin d'être évident
      • Pas de compatibilité parfaite entre l'encodage en local et lors du déploiement
      • Tâtonnement entre:
        • Encoder la donnée brute
        • Encoder au moment du chargement des bases
        • Encoder avant le déploiement
        • Encoder après le déploiement

Difficultés

  • Déploiement : quand et comment ?
    • Il faut déployer très souvent dans la phase de construction de l'interface
      • Cela permet de teste l'encodage, la réactivité et le rendu des visualisations
      • Tuning des paramètres de l'application depuis le tableau de bord de Shiny
    • Une réflexion au préalable est nécessaire sur :
      • Les modalités de stockage des données
      • La mise à jour des données

Références

Conclusion