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.

1 Données

1.1 Lecture et formatage

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"))

1.2 Contrôle

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

2 Préparation des jeux de données

2.1 Arbres vivants

# 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

2.2 Arbres abattus

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

2.3 Fusion

# 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

2.4 Récupération des circonférences

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

2.5 Etiquettes courtes pour les arbres abattus

# 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)")

2.6 Factorisation

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)

3 Sauvegarde

save(BDD_Vivants_et_Abattus_renseignes_POSL, file = "data/POSL.RData")