class: center, middle, inverse, title-slide # Visualisation interactive des données spatiale avec R ## Introduction au package LeafLet ### Ahmadou Dicko ### 2017/03/25 --- --- class: middle # Visualisation interactive des données * Déluge des données (twitter, facebook, etc.) * Beaucoup d'information spatiales (GPS, planifications, etc) * Le challenge en faire de l'information et prendre des décisions * Plusieurs options : du text brut, des tableaux ou des *graphiques* --- # Où trouver des supers données spatiales ? [![Humanitarian Data Exchange][2]][1] [1]: https://data.humdata.org [2]: http://res.cloudinary.com/dickoah/image/upload/v1490646982/hdx_oii4zm.png --- # Données spatiales avec R * R est pour le traitement des données spatiales * Le package `sf` ```r install.packages("sf") ``` --- # Données spatiales avec R ```r pt <- read_sf("data/sn_sante.gpkg") glimpse(pt) ``` ``` ## Observations: 181 ## Variables: 3 ## $ name <chr> "ASBEF: (Association ésénégalaise pour le bien étre famil... ## $ type <chr> "hospital", "hospital", "hospital", "hospital", "clinic",... ## $ geom <simple_feature> POINT(-16.4899475 15.993284), POINT(-16.935575... ``` --- # Données spatiales avec R ```r plot(st_geometry(pt), pch = 19, cex = 0.4) ``` <!-- --> --- # Données spatiales avec R ```r lignes <- read_sf("data/sn_routes.gpkg") glimpse(lignes) ``` ``` ## Observations: 1,070 ## Variables: 13 ## $ FNODE_ <int> 3, 4, 5, 7, 9, 10, 5, 13, 14, 8, 16, 14, 17, 17, ... ## $ TNODE_ <int> 2, 1, 4, 4, 8, 9, 12, 11, 6, 14, 5, 15, 13, 10, 1... ## $ LPOLY_ <int> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7... ## $ RPOLY_ <int> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7... ## $ LENGTH <dbl> 0.05346390, 0.09035610, 0.18438500, 0.08924450, 0... ## $ DCW_RDLINE <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15... ## $ DCW_RDLI_1 <int> 461, 387, 448, 387, 387, 387, 447, 271, 387, 387,... ## $ RDLNTYPE <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2... ## $ RDLNSTAT <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... ## $ CODE <int> 0, 3, 0, 3, 2, 2, 2, 0, 3, 2, 2, 2, 3, 2, 2, 0, 2... ## $ DESCRIPTIO <chr> " ", "Secondary asphalted road", " ", "Secondary ... ## $ Shape_Length <dbl> 0.053463887, 0.090356118, 0.184385199, 0.08924446... ## $ geom <simple_feature> MULTILINESTRING((-14.357067..., MULTIL... ``` --- # Données spatiales sous R ```r plot(st_geometry(lignes), col = "gray") ``` <!-- --> --- # Données spatiales avec R ```r poly <- read_sf("data/sn_region.gpkg") glimpse(poly) ``` ``` ## Observations: 14 ## Variables: 11 ## $ admin1Name <chr> "Dakar", "Diourbel", "Fatick", "Kaffrine", "Kaola... ## $ admin1Pcod <chr> "SN001", "SN002", "SN003", "SN004", "SN005", "SN0... ## $ admin0Name <chr> "Senegal", "Senegal", "Senegal", "Senegal", "Sene... ## $ admin0Pcod <chr> "SN", "SN", "SN", "SN", "SN", "SN", "SN", "SN", "... ## $ date <dttm> 2012-09-05, 2012-09-05, 2012-09-05, 2012-09-05, ... ## $ Update_dat <dttm> 2017-04-02, 2017-04-02, 2017-04-02, 2017-04-02, ... ## $ Rowcacode1 <chr> "SEN001", "SEN002", "SEN003", "SEN004", "SEN005",... ## $ Rowcacode0 <chr> "SEN", "SEN", "SEN", "SEN", "SEN", "SEN", "SEN", ... ## $ Shape_Length <dbl> 1.494337, 3.387243, 5.482586, 4.248018, 3.984049,... ## $ Shape_Area <dbl> 0.04566665, 0.40814567, 0.59011351, 0.92508102, 0... ## $ geom <simple_feature> MULTIPOLYGON(((-17.39917595..., MULTIP... ``` --- # Données spatiales avec R ```r plot(st_geometry(poly)) ``` <!-- --> --- # Données spatiales avec R ```r plot(st_geometry(poly)) plot(st_geometry(lignes), col = "gray", add = TRUE) plot(st_geometry(pt), pch = 19, cex = 0.4, add = TRUE) ``` <!-- --> --- background-image: url(http://leafletjs.com/docs/images/logo.png) class: center, middle <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> Une librairie JavaScript pour faire des cartes interactives --- # Leaflet * Leaflet est une libraire Javascript * C'est la plus populaire et la plus utilisé pour les cartes interactives * L'interface eponynme sous `R` est developpée par Rstudio ```r install.packages("leaflet") ``` --- # Petit concept de base: le pipe `%>%` ```r mean(log(sqrt(pi))) ``` ``` ## [1] 0.5723649 ``` ```r pi %>% sqrt() %>% log() %>% mean() ``` ``` ## [1] 0.5723649 ``` --- # Votre première carte ```r library(leaflet) leaflet() %>% addTiles() %>% setView(lng = -17.45, lat = 14.70, zoom = 13) ```
--- # Votre première carte ```r ansd_pos <- data.frame(lat = 14.70, long = -17.45) leaflet() %>% addTiles() %>% addMarkers(data = ansd_pos, popup = "ANSD") ```
--- # Votre première carte ```r leaflet() %>% addTiles() %>% addMarkers(data = ansd_pos, popup = "ANSD", icon = list(iconUrl = "figs/ansd_sen.jpg", iconSize = c(50, 50))) ```
--- # Cartographier des points ```r pt %>% leaflet() %>% addTiles() %>% addMarkers() ```
--- # Cartographier des points ```r pt %>% leaflet() %>% addTiles() %>% addMarkers(clusterOptions = markerClusterOptions()) ```
--- # Cartographier des lignes ```r lignes %>% leaflet() %>% addTiles() %>% addPolylines() ```
--- # Cartographier des polygones ```r poly %>% leaflet() %>% addTiles() %>% addPolygons() ```
--- # Combiner plusieurs couches ```r pt %>% leaflet() %>% addTiles() %>% addMarkers() %>% addPolylines(data = lignes) %>% addPolygons(data = poly) ```
--- # Une carte choroplèthe ```r library(purrr) poly$n_centre <- map_dbl(st_contains(poly, pt), length) poly$n_centre ``` ``` ## [1] 77 1 3 3 8 17 4 5 2 15 0 5 20 19 ``` ```r pal <- colorQuantile(palette = "YlOrRd", domain = poly$n_centre, n = 4) hs_popup <- paste0("<strong>Nombre de centre de santé: </strong>", poly$n_centre) ``` --- # Une carte choroplèthe ```r poly %>% leaflet() %>% addTiles() %>% addPolygons(fillOpacity = 1, fillColor = ~ pal(n_centre), popup = hs_popup) %>% addLegend("topright", pal = pal, values = ~ n_centre, title = "Nombre de centre de santé", opacity = 1 ) ``` --- # Une carte choroplèthe
--- class: center, middle # Questions? --- class: inverse, center, middle # Merci! <hr/><br/> ### Twitter: [@dickoah](https://twitter.com/dickoah) ### Gitlab: [gitlab/dickoa](https://github.com/dickoa) ### Github: [github/dickoa](https://github.com/dickoa)