Enrichissement des variétés d’arbres
J’utilise les données provenant du http://www.gbif.org
J’extrais d’abord les noms latins des espèces présentes dans la table avec build_name pour construire les URL de requêtes. Puis, je vais les requêtes en lot avec un mapply sur la fonction get_url_gfib.
get_url_gfib <- function(x)
httr::GET(url=paste0("http://api.gbif.org/v1/species/match/?name=",x))
build_name <- function(x)
gsub(pattern = " ",
replacement = "+",
x %>%
strsplit("'") %>%
unlist %>%
'['(1) %>%
trimws())
## Noms uniques (incluant la variété locale)
nomsUniques <-
dA %>%
select(NOM_LAT) %>%
distinct() %>%
mutate(nom_url = sapply(NOM_LAT,build_name) %>%
tolower())
## Noms uniques pour construire les URL (excluant la variété locale qui ne se trouve pas dans GFIB)
nomsUrlUniques <-
nomsUniques %>%
select(nom_url) %>%
distinct()
#data_json_gfib <- t(sapply(nomsUrlUniques$"nom_url",get_url_gfib))
#save(data_json_gfib,file="data_json_gfib.RData")
Je transforme ensuite les données recueillies dans le format JSON en une table que je pourrai joindre aux données source.
load("data_json_gfib.RData")
json_content <- sapply(data_json_gfib %>%
as.data.frame %>%
'$'(content),rawToChar)
json_content2 <- data.frame(nom_url = names(json_content),
json_content, row.names = NULL, stringsAsFactors = FALSE)
json_content3 <- json_content2$json_content %>%
lapply(fromJSON, flatten=TRUE) %>%
lapply(as.data.frame) %>%
(function(x) do.call(smartbind,x)) %>%
cbind(nom_url=json_content2$nom_url)
json_content4 <- merge(json_content3, nomsUniques, by=c("nom_url"))
Je peux maintenant joindre ces nouvelles informations aux données source
dA2 <- dA %>% partition() %>% merge(json_content4,by=c("NOM_LAT")) %>% collect()
Ajout du quartier et de l’arrondissement
qrtqc <- readOGR("QUARTIERS/", layer="QUARTIER") %>% spTransform(CRS("+proj=longlat +datum=WGS84"))
## OGR data source with driver: ESRI Shapefile
## Source: "QUARTIERS/", layer: "QUARTIER"
## with 35 features
## It has 3 fields
arrqc <- readOGR("ARROND/", layer="ARROND") %>% spTransform(CRS("+proj=longlat +datum=WGS84"))
## OGR data source with driver: ESRI Shapefile
## Source: "ARROND/", layer: "ARROND"
## with 6 features
## It has 5 fields
names(qrtqc@data) <- paste0(names(qrtqc@data),"_QRT")
names(arrqc@data) <- paste0(names(arrqc@data),"_ARR")
coordinates(dA3) = ~ LONGITUDE + LATITUDE
proj4string(dA3) = CRS("+proj=longlat +datum=WGS84")
dA4.1 <- dA3 %>% over(qrtqc) %>% cbind(dA3@data)
dA4 <- dA3 %>% over(arrqc) %>% cbind(dA4.1) %>% cbind(dA3@coords)
save(dA4,file="dA4.RData")
readr::write_csv(dA4,"arbres-augmented.csv")
Arbre le plus courant par quartier (ayant une photo disponible)
count_arbre_arr <- dA4 %>% filter(identifier != "" & !is.na(NOM_QRT)) %>% select(NOM_QRT, scientificName, identifier) %>% group_by(NOM_QRT, scientificName, identifier) %>% summarise(freq=n()) %>% group_by(NOM_QRT) %>% top_n(n=1)
pandoc.table(count_arbre_arr %>% select(NOM_QRT, scientificName, freq))
| Cap-Rouge |
Ulmus americana L. |
978 |
| Chutes-Montmorency |
Acer saccharinum L. |
429 |
| Cité Universitaire |
Ulmus americana L. |
484 |
| Des Châtels |
Acer platanoides L. |
1211 |
| Duberger-Les Saules |
Acer platanoides L. |
3132 |
| Jésuites |
Acer saccharinum L. |
399 |
| Lac-Saint-Charles |
Ulmus americana L. |
317 |
| L’Aéroport |
Ulmus americana L. |
649 |
| Lairet |
Acer platanoides L. |
1075 |
| Loretteville |
Acer platanoides L. |
370 |
| Maizerets |
Fraxinus pennsylvanica Marsh. |
1465 |
| Montcalm |
Ulmus americana L. |
610 |
| Neufchâtel-Est/Lebourgneuf |
Acer platanoides L. |
2431 |
| Notre-Dame-des-Laurentides |
Ulmus americana L. |
364 |
| Plateau |
Acer platanoides L. |
319 |
| Pointe-de-Sainte-Foy |
Acer platanoides L. |
443 |
| Quartier 4-2 |
Ulmus americana L. |
317 |
| Quartier 4-3 |
Acer platanoides L. |
169 |
| Quartier 4-5 |
Acer platanoides L. |
467 |
| Quartier 4-6 |
Acer platanoides L. |
257 |
| Quartier 5-1 |
Acer platanoides L. |
141 |
| Quartier 5-2 |
Acer platanoides L. |
306 |
| Quartier 5-4 |
Ulmus americana L. |
509 |
| Saint-Émile |
Acer platanoides L. |
326 |
| Saint-Jean-Baptiste |
Ulmus americana L. |
292 |
| Saint-Louis |
Acer platanoides L. |
513 |
| Saint-Roch |
Acer platanoides L. |
436 |
| Saint-Sacrement |
Acer platanoides L. |
575 |
| Saint-Sauveur |
Ulmus americana L. |
693 |
| Sillery |
Ulmus americana L. |
1422 |
| Val-Bélair |
Acer platanoides L. |
460 |
| Vanier |
Fraxinus pennsylvanica Marsh. |
418 |
| Vieux-Limoilou |
Acer platanoides L. |
634 |
| Vieux-Moulin |
Acer platanoides L. |
202 |
| Vieux-Québec/Cap-Blanc/Colline parlementaire |
Ulmus americana L. |
718 |
count_arbre_arr %>% mutate(image=paste0("[",scientificName,"](",identifier,")")) %>% select(NOM_QRT, image) %>% t %>% pandoc.table()
Localisation sur une carte
select_for_map <- dA4 %>% select(LONGITUDE,LATITUDE,order)
range_long <- range(select_for_map$LONGITUDE)
range_lat <- range(select_for_map$LATITUDE)
#fond de la carte avec OpenStreetMap
#quebec_map <- get_map(location = c(range_long[1],range_lat[0],range_long[0],range_lat[1]), zoom=10, source = "osm")
#save(quebec_map, file="quebec_map.RData")
load("quebec_map.RData")
#objet ggmap
QuebecMap <- ggmap(quebec_map, base_layer = ggplot(aes(x = LONGITUDE, y = LATITUDE), data = select_for_map))
#Ajout des zones de densité d'arbres
map1 <- QuebecMap + scale_fill_gradient(low = "blue", high = "red")
Carte Simple
map1 +
stat_density2d(aes(x = LONGITUDE, y = LATITUDE, fill = ..level..), geom = "polygon", data = select_for_map)

Carte Composée
table_order <- with(select_for_map, table(order))
select_for_map2 <- table_order %>% as.data.frame() %>% merge(select_for_map,all.y=TRUE) %>% filter(Freq>500)
# Garder seulement les niveaux actifs
select_for_map2$order2 <- factor(select_for_map2$order)
map1 +
stat_density2d(aes(x = LONGITUDE, y = LATITUDE, fill = ..level..), geom = "polygon", data = select_for_map2) +
facet_wrap(facets = "order2")

Arbres recensés par quartier
Source: plotting polygon shapefiles
qrtqc@data$id = rownames(qrtqc@data)
qrtqc.df <- as.data.frame(qrtqc)
qrtqc.fort = fortify(qrtqc, region="id")
qrtqc.line = join(qrtqc.fort, qrtqc.df, by="id")
arrqc@data$id = rownames(arrqc@data)
arrqc.df <- as.data.frame(arrqc)
arrqc.fort = fortify(arrqc, region="id")
arrqc.line = join(arrqc.fort, arrqc.df, by="id")
ggmap_quartiers <- ggplot(qrtqc.line) +
aes(long,lat,group=group,fill=NOM_QRT) +
geom_polygon() +
geom_path(color="white") +
coord_equal()
ggmap_arrond <- ggplot(arrqc.line) +
aes(long,lat,group=group,fill=NOM_ARR) +
geom_polygon() +
geom_path(color="white") +
coord_equal()
plot_data_quartiers <-
ddply(dA4, .(NOM_QRT,order), summarise, freq=length(NOM_QRT)) %>% filter(!is.na(order) && freq>=500)
plot_data_arrond <-
ddply(dA4, .(NOM_ARR,order), summarise, freq=length(NOM_ARR)) %>% filter(!is.na(order) && freq>=500)
gg_freq_ordre_quartier <- ggplot(data=plot_data_quartiers, aes(x = order, y= freq, fill=order)) +
geom_bar(position = "stack", stat = "identity") +
facet_wrap(facets="NOM_QRT", ncol = 4) +
scale_x_discrete(breaks=order, labels=NULL) +
xlab("Ordre") +
ylab("Fréquence") +
ggtitle("Ordre par quartier")
gg_freq_ordre_arrond <- ggplot(data=plot_data_arrond, aes(x = order, y= freq, fill=order)) +
geom_bar(position = "stack", stat = "identity") +
facet_wrap(facets="NOM_ARR") +
scale_x_discrete(breaks=order, labels=NULL) +
xlab("Ordre") +
ylab("Fréquence") +
ggtitle("Ordre par arrondissement")
ggmap_quartiers

gg_freq_ordre_quartier

ggmap_arrond

gg_freq_ordre_arrond
