Abstract
Constitution du jeu de données.
Ce code crée le tibble BDD_Vivants_et_Abattus_renseignes_POSL à partir des données de la Ville de Paris et le sauvegarde dans data/POSL.Rdata.
Les données initiales sont sur le site d’opendata Paris mais les arbres abattus en 2021 ne sont plus dans la version actuelle.
Il faut utiliser la base de 2021 et la base actuelle, toutes deux copiées dans data/.
# Décompactage des fichiers GeoJson (ignorés par
# git parce que trop gros)
unzip("data/les-arbres-2021.zip", exdir = "data")
unzip("data/les-arbres-abattus.zip", exdir = "data")
library("rgdal")
# Lecture des fichiers GeoJSon
les_arbres <- readOGR("data/les-arbres-2021.geojson",
encoding = "UTF-8", use_iconv = TRUE)
## OGR data source with driver: GeoJSON
## Source: "/Users/runner/work/DivDist/DivDist/data/les-arbres-2021.geojson", layer: "les-arbres-2021"
## with 204638 features
## It has 16 fields, of which 1 list fields
les_arbres_abattus <- readOGR("data/les-arbres-abattus.geojson",
encoding = "UTF-8", use_iconv = TRUE)
## OGR data source with driver: GeoJSON
## Source: "/Users/runner/work/DivDist/DivDist/data/les-arbres-abattus.geojson", layer: "les-arbres-abattus"
## with 973 features
## It has 14 fields, of which 1 list fields
Les données sont projetés dans le référentiel Lambert 93.
library("tidyverse")
# Projection des données dans le référentiel
# Lambert93 pour obtenir des coordonnées en
# mètres
les_arbres_Lambert93 <- les_arbres %>%
spTransform(CRS("+init=epsg:2154"))
les_arbres_abattus_Lambert93 <- les_arbres_abattus %>%
spTransform(CRS("+init=epsg:2154"))
Informations sur les objets.
## Informations sur les jeux de données des
## arbres vivants et abattus obtenus
class(les_arbres_abattus_Lambert93)
## [1] "SpatialPointsDataFrame"
## attr(,"package")
## [1] "sp"
class(les_arbres_Lambert93)
## [1] "SpatialPointsDataFrame"
## attr(,"package")
## [1] "sp"
# Noms des slots associés
slotNames(les_arbres_abattus_Lambert93)
## [1] "data" "coords.nrs" "coords"
## [4] "bbox" "proj4string"
slotNames(les_arbres_Lambert93)
## [1] "data" "coords.nrs" "coords"
## [4] "bbox" "proj4string"
# Affichage des coordonnées Lambert93
head(les_arbres_abattus_Lambert93@coords) # des 5 premiers arbres abattus
## coords.x1 coords.x2
## [1,] 648608.0 6859434
## [2,] 652463.5 6857808
## [3,] 650816.2 6859853
## [4,] 646524.9 6859344
## [5,] 646414.1 6859347
## [6,] 655951.3 6863531
head(les_arbres_Lambert93@coords) # des 5 premiers arbres vivants
## coords.x1 coords.x2
## [1,] 653377.1 6866182
## [2,] 655313.7 6863611
## [3,] 646558.7 6863611
## [4,] 653031.3 6858771
## [5,] 648096.6 6859619
## [6,] 645110.6 6860981
# Affichage de l'étendue spatiale
les_arbres_abattus_Lambert93@bbox # des arbres abattus
## min max
## coords.x1 642120 657676.8
## coords.x2 6850780 6868195.7
les_arbres_Lambert93@bbox # des arbres vivants
## min max
## coords.x1 642113.5 661079.2
## coords.x2 6849293.0 6868231.5
# Nombre d'arbres
les_arbres_abattus_Lambert93@coords %>%
nrow()
## [1] 973
les_arbres_Lambert93@coords %>%
nrow()
## [1] 204638
# Arbres vivants parisiens
les_arbres_Lambert93@data %>%
as_tibble() %>%
bind_cols(as.data.frame(les_arbres_Lambert93@coords)) %>%
filter(adresse == "PARC OMNISPORT SUZANNE LENGLEN / 7 BOULEVARD DES FRERES VOISIN") %>%
select(-idemplacement, -typeemplacement,
-adresse, -complementadresse,
-geo_point_2d1, -geo_point_2d2,
-stadedeveloppement, -remarquable) %>%
# ID doit être numérique
mutate(ID=as.integer(idbase)) %>%
mutate(GenrEsp=as.factor(paste(genre, espece))) %>%
mutate(Etat="Vivant") %>% # Ajout de l'état des arbres (vivants)
mutate(libellefrancais=as.factor(libellefrancais)) %>%
mutate(genre=as.factor(genre)) %>%
mutate(espece=as.factor(espece)) %>%
mutate(MotifAbattage="") %>% # Ajout champs vide pour motif abattage (arbres vivants)
rename(EspeceFrancais=libellefrancais,
Genre=genre,
Espece=espece,
Circonference=circonferenceencm,
Hauteur=hauteurenm,
X=coords.x1,
Y=coords.x2) %>%
select(ID, Espece, EspeceFrancais, Genre, Circonference, Hauteur, MotifAbattage, X, Y, GenrEsp, Etat) ->
BDD_Vivants_POSL
# Nombre d'arbres
BDD_Vivants_POSL %>% nrow()
## [1] 1472
Sélection des arbres vivants dont l’espèce et le genre sont connus:
BDD_Vivants_POSL %>%
filter(!is.na(Espece), !is.na(EspeceFrancais),
!is.na(Genre)) %>%
filter(EspeceFrancais != "Non spécifié") %>%
filter(Espece != "n. sp.") -> BDD_Vivants_renseignes_POSL
# Nombre d'arbres
BDD_Vivants_POSL %>%
nrow()
## [1] 1472
les_arbres_abattus_Lambert93@data %>%
as_tibble() %>%
bind_cols(as.data.frame(les_arbres_abattus_Lambert93@coords)) %>%
filter(adresse == "PARC OMNISPORT SUZANNE LENGLEN / 7 BOULEVARD DES FRERES VOISIN") %>%
select(-adresse, -especefutur, -datedernierabattage, -varieteoucultivarfutur,
-genrefutur, -geo_point_2d1, -geo_point_2d2) %>%
# ID doit être numérique
mutate(ID=as.integer(idbase)) %>%
mutate(GenrEsp=as.factor(paste(genrearbreprecedent, especearbreprecedent))) %>%
mutate(Etat="Abattu") %>% # Ajout Etat pour tous les arbres (abattus)
mutate(Circonference=NA) %>% # Ajout champs vide pour la Circonférence (données absentes)
mutate(Hauteur=NA) %>% # Ajout champs vide pour la Hauteur (données absentes)
mutate(libellefrancais=as.factor(libellefrancaisarbreprecedent)) %>%
mutate(genre=as.factor(genrearbreprecedent)) %>%
mutate(espece=as.factor(especearbreprecedent)) %>%
rename(Espece=especearbreprecedent,
EspeceFrancais=libellefrancaisarbreprecedent,
Genre=genrearbreprecedent,
Arrondissement=arrondissement,
Domanialité=domanialite,
MotifAbattage=motifabattagearbreprecedent,
X=coords.x1,
Y=coords.x2) %>%
select(ID, Espece, EspeceFrancais, Genre, Circonference, Hauteur, MotifAbattage, X, Y, GenrEsp, Etat) ->
BDD_Abattus_POSL
# Nombre d'arbres
BDD_Abattus_POSL %>% nrow()
## [1] 49
Sélection des arbres abattus dont l’espèce et le genre sont connus:
BDD_Abattus_POSL %>%
filter(!is.na(Espece), !is.na(EspeceFrancais),
!is.na(Genre)) %>%
filter(EspeceFrancais != "Non spécifié") %>%
filter(Espece != "n. sp.") -> BDD_Abattus_renseignes_POSL
# Nombre d'arbres
BDD_Abattus_renseignes_POSL %>%
nrow()
## [1] 48
# Creation BDD avec arbres vivants et abattus du
# POSL
BDD_Vivants_renseignes_POSL %>%
# Elimination des arbres abattus de la liste
# des vivants
anti_join(BDD_Abattus_renseignes_POSL, by = "ID") %>%
rbind(BDD_Abattus_renseignes_POSL) %>%
print -> BDD_Vivants_et_Abattus_renseignes_POSL
## # A tibble: 1,450 × 11
## ID Espece EspeceFrancais Genre
## <int> <fct> <fct> <fct>
## 1 131432 platanoides Erable Acer
## 2 131209 hippocastanum Marronnier Aesculus
## 3 130974 serrulata Cerisier à fleurs Prunus
## 4 131854 platanoides Erable Acer
## 5 131225 platyphyllos Tilleul Tilia
## 6 132084 platanoides Erable Acer
## 7 131074 x canadensis Peuplier Populus
## 8 130773 platyphyllos Tilleul Tilia
## 9 130968 serrulata Cerisier à fleurs Prunus
## 10 131987 tomentosa Paulownia Paulown…
## # … with 1,440 more rows, and 7 more variables:
## # Circonference <int>, Hauteur <int>,
## # MotifAbattage <chr>, X <dbl>, Y <dbl>,
## # GenrEsp <fct>, Etat <chr>
# Nombre d'arbres
BDD_Vivants_et_Abattus_renseignes_POSL %>%
nrow()
## [1] 1450
Les circonférences sont dans la base des arbres vivants, y compris pour les arbres abattus.
BDD_Vivants_renseignes_POSL %>%
select(ID, Circonference) -> Circonferences
# Insertion des données
library("magrittr")
BDD_Vivants_et_Abattus_renseignes_POSL %<>%
select(-Circonference) %>%
inner_join(Circonferences, by = "ID")
# Nombre d'arbres
BDD_Vivants_et_Abattus_renseignes_POSL %>%
nrow()
## [1] 1450
# Remplacement non tidy des chaines longues pour
# remplacer le code désactivé
BDD_Vivants_et_Abattus_renseignes_POSL$MotifAbattage <- str_replace(BDD_Vivants_et_Abattus_renseignes_POSL$MotifAbattage,
"Arbre.*", "Arbre en déclin physiologique irréversible")
BDD_Vivants_et_Abattus_renseignes_POSL$MotifAbattage <- str_replace(BDD_Vivants_et_Abattus_renseignes_POSL$MotifAbattage,
"Foyer.*", "Foyer d'agent(s) pathogène(s)")
BDD_Vivants_et_Abattus_renseignes_POSL$MotifAbattage <- as.factor(BDD_Vivants_et_Abattus_renseignes_POSL$MotifAbattage)
BDD_Vivants_et_Abattus_renseignes_POSL$Etat <- as.factor(BDD_Vivants_et_Abattus_renseignes_POSL$Etat)
save(BDD_Vivants_et_Abattus_renseignes_POSL, file = "data/POSL.RData")