Installer les packages

Afin de faciliter la poursuite du TD lancer le code ci-dessous afin de charger ou installer les packages.

# ----- Load/Install Packages
packages<-c("leaflet","rgdal","dygraphs","xts","highcharter","googleVis","tidyr","dplyr")
new.packages <- packages[!(packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
lapply(packages, require, character.only = TRUE)

Créer un projet R

Les projets RStudio facilitent la division de votre travail en plusieurs sessions, chacunes avec son propre répertoire et espace de travail, son historique et ses documents sources.

Pour créer un nouveau projet, utiliser la commande Créer un projet (disponible dans le menu Projets et dans la barre d’outils globale)

Dans le dossier TP_Rshiny

  • créer un dossier data
    • puis un dossier raw
    • et un dossier processed

Récuperer les données

Les données sont disponibles ici Télécharger et placer l’ensemble des données dans le dossier data/raw

  • BM_IRIS shapefile iris Métropole Bordelaise
  • Base_client_BDX.csv extrait base clientèle eau télérelevé
  • TLRV.RData consommation journalière d’un panel de client du 01/01/2014 au 01/01/2017
  • INSEE.csv données INSEE (2014) fournissant des informations sur les habitants à l’echelle de l’iris
  • jours_feries.csv table avec date des jours fériés en France
  • vacances_scolaires_FR.csv table avec période de vacances scolaires françaises pour la période concidérée

Shapefile

Le shapefile, ou “fichier de formes” est un format de fichier pour les systèmes d’informations géographiques (SIG). Il contient toute l’information liée à la géométrie des objets décrits, qui peuvent être :

  • des points
  • des lignes
  • des polygones

Son extension est classiquement SHP, et il est toujours accompagné de deux autres fichiers de même nom, et d’extensions :

  • un fichier DBF, qui contient les données attributaires relatives aux objets contenus dans le shapefile
  • un fichier SHX, qui stocke l’index de la géométrie

Placer le dossier BM_IRIS dans le dossier data/raw présent à la racine du Rprojet TD_shiny. Ce dossier est un shapefile, il dessine des contours de zone du territoire bordelais à l’echelle de l’iris.

Afin d’utiliser ce fichier sur des fonds de cartes nous allons le charger et le transformer en objet SpatialPolygonsDataFrame utilisable par R.

# ----- Convert shape coordinate to Web Mercator
# ----- charge les fichiers shape en un objet SpatialPolygonsDataFrame
dat_IRIS<-readOGR(dsn="data/rawData/BM_IRIS", layer="BM_IRIS",verbose = FALSE)
# ----- Définit la méthode de conversion des coordonnées GPS : Lambert93 => Web Mercator (WGS84)
projIris <- sp::CRS('+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0')
# ----- Transforme les coordonnées de tous les objets présents dans le fichier shape
contourIris <- sp::spTransform(dat_IRIS,projIris)
rm(list = c("dat_IRIS","projIris"))
# ----- Sauvegarde le fichier shape traité
save(contourIris,file = "data/processedData/contourIris.Rdata")

L’objet contourIris est une liste composée de :

  • @data : un data frame avec des informations sur chacun des polygones (voir tableau ci-après)
  • @polygons : une liste de polygones représentant les formes des iris et leurs coordonnées

La première ligne de contourIris@data correspond au premier element de la liste contourIris@polygons.

Séries chronologiques - Dygraphs

Le package Dygraphs fournit une interface avec la bibliothèque de graphique JavaScript Dygraphs. Elle fournit de riches outils pour la représentation des données de séries chronologiques en R, notamment:

  • Trace automatiquement les objets de série temporelle xts (ou tout objet convertible en xts),
  • Fonctionnalités interactives, y compris le zoom / panoramique et la mise en surbrillance de séries / points,
  • Superpositions de graphiques, y compris les régions ombrées, les lignes d’événements et les annotations ponctuelles,
  • Utilisable via la console R comme les graphiques R conventionnels,
  • Intégration immédiate dans les documents R Markdown et les applications Web Shiny.

Tracer des séries temporelles

Avec plot()

library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)
plot(lungDeaths)

Avec dygraph()

library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)
dygraph(lungDeaths)

Données temporelles format xts

xts ou Extencible Time Series est un package R qui fournit une classe de séries chronologiques extensibles, permettant une gestion uniforme de nombreuses classes de séries temporelles.

Créer un objet xts

library(xts)
xts1 <- xts(x=1:10, order.by=Sys.Date()-1:10)
data <- rnorm(5)
dates <- seq(as.Date("2017-05-01"), length=5, by="days")
xts2 <- xts(x=data, order.by=dates)
xts3 <- xts(x=rnorm(10), order.by=as.POSIXct(Sys.Date()+1:10), born=as.POSIXct("1899-05-08"))
xts4 <- xts(x=1:10, order.by=Sys.Date()+1:10)

# ----- Série temporelle multivariée
xts5 <- cbind(xts1,xts4)

# ----- à partir d'un objet ts
data(AirPassengers)
xts6 <- as.xts(AirPassengers)

Les objets xts ont deux composants principaux :

  • coredata : une matrice pour les objets xts
  • index: vecteur de n’importe quelle Date, classes POSIXct, DateTime
head(coredata(xts6))
##      [,1]
## [1,]  112
## [2,]  118
## [3,]  132
## [4,]  129
## [5,]  121
## [6,]  135
head(index(xts6))
## [1] "janv. 1949" "févr. 1949" "mars 1949"  "avr. 1949"  "mai 1949"  
## [6] "juin 1949"
dygraph(xts6)

Cas d’application : Consommation moyenne journalière métropole Bordelaise

# ----- calcul CMJ par iris et ajout au fichier shape
TLRV_bdx$DCOMIRIS <- Base_client$DCOMIRIS[match(TLRV_bdx$ID, Base_client$ID)]
CMJ_iris <- TLRV_bdx %>% group_by(DCOMIRIS) %>% dplyr::summarise(CMJ=mean(vol, na.rm = T))
contourIris@data$CMJ <- CMJ_iris$CMJ[match(contourIris@data$DCOMIRIS, CMJ_iris$DCOMIRIS)]

# ----- Ajout variables INSEE dans le fichier shape 
INSEE <- read.csv2("data/raw/INSEE.csv", stringsAsFactors = F)
contourIris@data$nb_menage <- INSEE$Ménages.en.2014..compl.[match(contourIris@data$DCOMIRIS, INSEE$IRIS)]
contourIris@data$nb_personne_menage <- INSEE$Pop.Ménages.en.2014..compl.[match(contourIris@data$DCOMIRIS, INSEE$IRIS)]

Cartographie - Leaflet

Leaflet est l’une des bibliothèques JavaScript open-source les plus populaires pour les cartes interactives. Elle est utilisée par des sites Web allant du New York Times ou du Washington Post jusqu’à GitHub, ainsi que par des spécialistes des Systèmes d’Iformation Géographique comme OpenStreetMap, Mapbox et CartoDB.

Afficher une carte

library(leaflet)
m <- leaflet(width = "100%") %>%
  addTiles() %>%  # ajoute un fond de carte par défaut (OpenStreetMap)
  addMarkers(lng=174.768, lat=-36.852, popup="The birthplace of R") # ajoute un marqueur
m  # Affiche la map

Cas d’application : Consommation moyenne journalère à l’échelle de l’iris

library(leaflet)
load("~/TD/TP_Rshiny/data/processed/contourIris.RData")

labels <- sprintf(
  "<strong>%s</strong><br/>%g m<sup>3</sup>/j",
  contourIris$NOM_IRIS, round(contourIris$CMJ,2)
) %>% lapply(htmltools::HTML)

labelsInsee <- sprintf(
  "<strong>%s</strong><br/>%g m&eacute;nages",
  contourIris$NOM_IRIS,contourIris$nb_menage
) %>% lapply(htmltools::HTML)

bins <- c(0, 1, 2, 3, 4, 5, 50, Inf)
pal <- colorBin("Blues", domain = contourIris$CMJ, bins = bins)

binsInsee <- c(0,500,1000,1500,2000,2500,Inf)
pal2 <- colorBin("YlOrRd", domain = contourIris$nb_menage, bins = binsInsee)

leaflet(contourIris,width = "100%") %>%
  addTiles() %>%
  addPolygons(
    group = "conso",
    weight = 2,
    opacity = 1,
    color = "white",
    fillColor = ~pal(CMJ),
    dashArray = "3",
    fillOpacity = 0.7,
    highlight = highlightOptions(
      weight = 5,
      color = "#666",
      dashArray = "",
      fillOpacity = 0.7,
      bringToFront = TRUE),
    label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "3px 8px"),
      textsize = "15px",
      direction = "auto")
  )%>%
    addPolygons(
    group = "nb_menage",
    weight = 2,
    opacity = 1,
    color = "white",
    fillColor = ~pal2(nb_menage),
    dashArray = "3",
    fillOpacity = 0.7,
    highlight = highlightOptions(
      weight = 5,
      color = "#666",
      dashArray = "",
      fillOpacity = 0.7,
      bringToFront = TRUE),
    label = labelsInsee,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "3px 8px"),
      textsize = "15px",
      direction = "auto")
  )%>%
  addLegend(pal = pal, values = ~CMJ, opacity = 0.7, title = "CMJ",group = "conso",
                  position = "bottomright")%>%
  addLegend(pal = pal2, values = ~nb_menage, opacity = 0.7, title = "Nb ménages",group = "nb_menage",
                  position = "bottomright")%>%
  addLayersControl(position="topright",overlayGroups  = c("nb_menage","conso"))%>%
  hideGroup(c("nb_menage"))

Autres visualisations

Highchart

GoogleVis