---
title: "Visualisation de données avec R"
author: François Pelletier
date: 15 octobre 2016
runtime: shiny
output: 
  html_document: 
    fig_caption: no
    highlight: tango
    keep_md: yes
    number_sections: yes
    theme: cerulean
    toc: yes
---

# Leaflet
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## Introduction
Leaflet est une librairie en JavaScript permet de créer des cartes géographiques interactives avec différents langages de programmation dont R.

Pour installer cette librairie dans R, utiliser la commande suivante:
```{r, echo=TRUE, eval=FALSE}
install.packages("leaflet")
```

Pour la charger, utilisez
```{r, echo=TRUE}
library("leaflet")
```

## Autres librairies

Ces autres librairies nous seront utiles
```{r, echo=TRUE}
library("rgdal")
library("dplyr")
library("webshot")
library("shiny")
library("htmltools")
```

## La composition d'une carte
Une carte peut être composée de plusieurs éléments:

- Le fond de la carte est composé de tuiles
- Les différentes régions géographiques peuvent être représentées par des polygones et des lignes
- Les éléments de données peuvent être représentés par des marqueurs
- On peut y ajouter divers autres éléments informatifs ou décoratifs

## Acquisition des données
Les données géographiques vectorielles (polygones, lignes, points) sont souvent représntées sous forme de fichiers KML, geoJSON ou ESRI Shapefiles. Les tuiles de données ou raster sont souvent au format geoTIFF.

L'objet data de la vignette peut accueillir différentes structures de données, mais il faut au préalablement les créer à partir des données sources

Nous utiliserons la librairie `rgdal` our lire les données et créer ces structures

## Données utilisées dans cet atelier
Dans cet atelier, nous cherchons à représenter la couverture WiFi du réseau [ZAP Québec](http://www.zapquebec.org/) à l'aide de la localisation des différents points d'accès contenus dans le fichier "WIFI.KML" téléchargé sur[le portail Données Québec](https://www.donneesquebec.ca/recherche/fr/dataset/vque_29). Ce fichier est partagé sous la licence [Creative Commons - Attribution 4.0](https://www.donneesquebec.ca/fr/licence/#cc-by).

## KML
Le format de fichiers KML est un standard ouvert [développé par Google](https://developers.google.com/kml/documentation/) pour l'application Google Earth. C'est un fichier XML avec des caractéristiques particulières. 

## Acquisition des données (1/2)
Pour le lire, on utilise la fonction `readOGR`: 
```{r, echo=TRUE}
WIFI_DATA <- readOGR("./DATA/WIFI.KML", "WIFI")
```

## Acquisition des données (2/2)
On obtient un objet de la classe `SpatialPointsDataFrame`.
```{r, echo=TRUE}
class(WIFI_DATA)
```

## Attributs
Chaque point présente 6 attributs:

- ARROND : Nom de l'arrondissement où se situe le réseau WiFi.
- NO_CIV : Numéro civique du réseau WiFi.
- NOM_BATI : Nom de l'édifice où se situe le réseau WiFi.
- RUE : Nom de la rue où se situe le réseau WiFi.
- LONGITUDE : Longitude du réseau WiFi.
- LATITUDE : Latitude du réseau WiFi.

## La vignette interactive Leaflet
La création d'une carte débute avec la vignette interactive (widget) `leaflet()`:
```{r, echo=TRUE,eval=FALSE}
leaflet()
```

Cette vignette peut être modifiées à l'aide de différentes propriétés et différents opérateurs que nous explorerons dans cet atelier. 

## Ajout des données à la carte

On associe à la propriété data les données que nous avons importé. On utilise la fonction `addTiles` pour ajouter des tuiles de fond et `addMarker` pour ajouter des marqueurs basés sur les coordonnées géographiques. Enfin, on utilise l'argument popup pour inclure une description qui sera affichée en cliquant sur un marqueur. Les données que bous tilisons incluent déjà une description en HTML.
```{r, echo=TRUE}
l1 <- leaflet(data=WIFI_DATA) %>% 
  addTiles() %>% 
  addMarkers(popup = ~ description)
```
```{r, echo=TRUE}
renderLeaflet(l1)
```

## Ajout d'une couleur de marqueur pour chaque arrondissement

```{r, echo=TRUE}
palette_arrond <- colorFactor(rainbow(levels(WIFI_DATA$ARROND) %>% length()), 
                       WIFI_DATA$ARROND)

l2 <- leaflet(data=WIFI_DATA) %>%
  addTiles() %>% 
  addCircleMarkers(popup = ~ description, color = ~palette_arrond(ARROND))
```

```{r, echo=TRUE}
renderLeaflet(l2)
```

## Ajout des polygones des arrondissements

On importe les données des limites des arrondissements à partir du fichier "ARROND.KML" téléchargé sur[le portail Données Québec](https://www.donneesquebec.ca/recherche/fr/dataset/vque_2). Ce fichier est partagé sous la licence [Creative Commons - Attribution 4.0](https://www.donneesquebec.ca/fr/licence/#cc-by).

```{r, echo=TRUE}
ARROND <- readOGR("DATA/ARROND.KML","ARRONDISSEMENT")

palette_arrondissement <- colorFactor(rainbow(levels(ARROND$NOM) %>% length()), 
                       ARROND$NOM)

l1 %>% addPolygons(data=ARROND, color = ~palette_arrondissement(NOM))
```

# Plotly

## Introduction

Plotly est une bliblothèque de graphiques interactifs en JavaScript. Tout comme Leaflet, on peut l'utiliser via des interfaces dans plusieurs langages de programmation, dont R.

```{r, echo=TRUE}
library(plotly)
```


## Données sélectionnées
Nous utiliserons les données suivantes:

[Enquête sur les dépenses des ménages (EDM), dépenses des ménages, selon le mode d'occupation du logement](http://ouvert.canada.ca/data/fr/dataset/ffd02f84-1b13-479f-83a9-35f6d17296c7)

```{r, echo=TRUE}
emd_2016 <- read.table("DATA/02030024-fra.csv",sep=";", header=TRUE, dec = ",", na.strings = c("..","F"), stringsAsFactors = FALSE)
```

## Sélection

On identifie les 20 catégories avec le plus de dépenses, peu importe le mode d'occupation du logement, en excluant les sommaires.
```{r, echo=TRUE}
Top20Summary <- emd_2016 %>% group_by(SUMMARY) %>% 
  summarise(Valeur_totale = sum(Valeur)) %>% 
  arrange(Valeur_totale %>% desc) %>%
  filter(!(SUMMARY %in% list("Dépenses totales","Consommation courante totale"))) %>% 
  head(20) %>%
  select(SUMMARY)
```

## Aggrégation

On sélectionne les valeurs correspondant aux catégories identifiées précédemment, on supprime les sommaires
```{r, echo=TRUE}
agg_emd_2016 <- emd_2016 %>% 
  merge(Top20Summary, all=FALSE) %>% 
  select(Date_Ref, TENURE, SUMMARY, Valeur) %>%
  filter(!(TENURE %in% list("Toutes les classes","Propriétaire"))) %>%
  group_by(TENURE,SUMMARY) %>%
  summarise(m_valeur = mean(Valeur))
```

## Préparation des données
```{r, echo=TRUE}
library(reshape2)
cast_agg_emd_2016 <- agg_emd_2016 %>% dcast(SUMMARY ~ TENURE, value.var = "m_valeur")
names_col <- names(cast_agg_emd_2016)
names(cast_agg_emd_2016) <- c("SUMMARY","loc","pah","psh")
top_labels <- names_col[-1]
```

### Graphique à barres groupées
On crée un [graphique à barres groupées](https://plot.ly/r/bar-charts/#grouped-bar-chart), qui permetta de comparer la dépense pour le même sommaire par mode d'occupation du logement.

```{r, echo=TRUE}
plot_ly(data = cast_agg_emd_2016, 
        y = ~loc, 
        x = ~SUMMARY, 
        type = 'bar', 
        orientation = 'v', 
        marker = list(color = 'rgba(38, 24, 74, 0.8)',
                      line = list(color = 'rgb(248, 248, 249)',
                                  width = 1.5)),
        name=top_labels[1]) %>%
  add_trace(y = ~pah,
            marker = list(color = 'rgba(71, 58, 131, 0.8)'),
            name=top_labels[2]) %>%
  add_trace(y = ~psh,
            marker = list(color = 'rgba(71, 58, 131, 0.8)'),
            name=top_labels[3]) %>%
  layout(barmode = 'grouped',
         xaxis = list(title = "",
                      tickangle = -45),
         yaxis = list(title = "Montant en $"),
         margin = list(l = 100, b = 100))
```

### Graphiques en pointes de tarte

On fait un graphique en pointes de tarte par mode d'occupation du logement.

**`r top_labels[1]`**
```{r, echo=TRUE}
plot_ly(data = cast_agg_emd_2016, 
        labels = ~SUMMARY, 
        values = ~loc, 
        type = 'pie', 
        marker = list(color = 'rgba(38, 24, 74, 0.8)',
                      line = list(color = 'rgb(248, 248, 249)')),
        name=top_labels[1]) %>% layout(showlegend = FALSE)
```

**`r top_labels[2]`**
```{r, echo=TRUE}
plot_ly(data = cast_agg_emd_2016, 
        labels = ~SUMMARY, 
        values = ~pah, 
        type = 'pie', 
        marker = list(color = 'rgba(38, 24, 74, 0.8)',
                      line = list(color = 'rgb(248, 248, 249)')),
        name=top_labels[1]) %>% layout(showlegend = FALSE)
```

**`r top_labels[3]`**
```{r, echo=TRUE}
plot_ly(data = cast_agg_emd_2016, 
        labels = ~SUMMARY, 
        values = ~psh, 
        type = 'pie', 
        marker = list(color = 'rgba(38, 24, 74, 0.8)',
                      line = list(color = 'rgb(248, 248, 249)')),
        name=top_labels[1]) %>% layout(showlegend = FALSE)
```

# ggplot2

# ggplot2 et gganimate

L'utilisation combinée des librairies ggplot2 et gganimate nous permettra de créer une animation.
Nous reproduisons ici la [pyramide des âges animée](https://www.donneesquebec.ca/recherche/fr/dataset/pyramide-des-ages-animee) de l'Institut de la statistique du Québec. Les données téléchargées se trouvent dans le fichier [`tbl_bord_0001_35.xml`](http://www.bdso.gouv.qc.ca/docs-ken/flex/xml/tbl_bord_0001_35.xml).

```{r}

```



