# Pass functions to floodam.data to load library only
## branch 50-update-damage-functions of floodam.data
package = file.path("~", "gitlab", "floodam.data")
devtools::load_all(package)
## Read functions that will be in floodam.data in the future
source(system.file("script/download_insee_index.R", package = "floodam.data"))
source(system.file("script/adapt_insee_index.R", package = "floodam.data"))
source(system.file("script/download_damage.R", package = "floodam.data"))
source(system.file("script/plot_serie_agricole.R", package = "floodam.data"))
path_output = tempdir()
path_figure = file.path("image", "agriculture")Actualisation des fonctions de dommages aux parcelles agricoles.
Actualisation des fonctions de dommages aux parcelles agricoles selon différentes méthodes.
Objectifs
Cette méthodologie vise à montrer comment actualiser les fonctions de dommages aux parcelles agricoles produites en 2016 à l’échelle nationale en France selon deux procédés différents :
- niveau 1 : application d’un indice INSEE aux fonctions de dommages produites en 2016 ;
- niveau 2 : reconstruction des fonctions de dommages avec
floodam.agriet des données actualisées.
Schéma d’explication de la méthode
Mettre ici le schéma NHESS actualisé
Logiciels et bibliothèques requis
Le code ci-dessous est destiné à être exécuté dans R. Il est donc nécessaire que R soit installé sur votre système.
Cette méthode utilise les bibliothèques R suivantes (les instructions d’installation sont disponibles sur leurs sites web respectifs) :
- floodam.data qui permet de réaliser des opérations adaptées aux données de l’observatoire.
floodam.agriqui permet d’élaborer des fonctions de dommages aux parcelles agricoles.
TEMPORAIRE : Le code ci dessous est éxécutable pour les membres des dépôts floodam.data et floodam.agri tant que les fonctions développées pour cette méthode ne sont pas incluses dans les librairies de manière permanente
Déroulement de la méthode
Premièrement il faut charger les bibliothèques nécessaires et définir les chemins d’accès à vos fichiers et dossiers.
Veuillez noter que nous avons définit des chemins temporaires tempdir() pour sauvegarder les données téléchargées et actualisées. Si vous souhaitez conserver les données, pensez à définir un autre chemin (variable path_output) dans le code qui suit.
Téléchargement des données INSEE et des fonctions de dommages de 2016
Une fois la configuration terminée, nous devons télécharger la série IPAMPA (010776857) de l’INSEE et les fonctions de dommages à actualiser. Au moment où cette notice méthodologiquea été rédigée, les fonctions de dommages publiées sur le site du gouvernement datent de 2016.
# Téléchargement de l'indice à appliquer : IPAMPA
serie = c(ipampa = "010776857")
download_insee_index(serie, destination = path_output)
# Téléchargement des fonctions de dommages publiées sur le site du gouvernement
damage = "agriculture"
download_damage(damage, path_output) Actualisation des fonctions de dommages avec un indice
Nous utilisons ensuite l’indice INSEE et les fonctions de dommages de 2016 pour les actualiser à l’année 2024 (millésime IPAMPA le plus récent au moment de la rédaction de cette méthode).
# Lecture de l'index et des fonctions de dommages
index = read_insee(file.path(path_output, paste0(serie, ".csv")))
damage_agri = as.data.frame(readxl::read_excel(
file.path(path_output, sprintf("%s.xls", damage)),
skip = 1
))
# Actualisation des fonctions de dommages datant de 2016 vers l'année 2024
date_origin = "2016"
date_update = "2024"
damage_agri_updated = cbind(
damage_agri[, c(1:5)],
damage_agri[, -c(1:5)]*(index[date_update,] / index[date_origin,])
)Export des résultats et de la note méthodologique
Enfin, nous exportons les résultats accompagnés d’une note méthodologique explicative de l’origine des fonctions de dommages actualisées.
# Chargement et actualisation de la note méthodologique
notes = system.file(
"extdata",
"notes-df-agri.csv",
package = "floodam.data"
)
notes = read.csv2(notes, check.names = FALSE, quote = "")
to_update = c(
"Date de mise à jour" = format(Sys.Date(), "%m-%Y"),
"Origine des données pour la mise à jour" = sprintf(
"Les séries sont disponibles à l’adresse suivante %s.",
sprintf(
"https://www.insee.fr/fr/statistiques/serie/%s#Telechargement",
serie
)
),
"Millésime utilisé pour la mise à jour" = date_update,
"Production de la note" = sprintf(
"Cette note a été produite avec la version %s de floodam.data",
utils::installed.packages()["floodam.data", "Version"]
)
)
notes[match(names(to_update), notes[[1]]), 2] = to_update
# Export des résultats
writexl::write_xlsx(
list(
"notes-méthodologiques" = notes,
"surfacique (€2016.ha)" = damage_agri_updated
),
path = file.path(
path_output,
sprintf("agriculture_updated_%s.xlsx", date_update)
)
)Analyse des données
La librairie floodam.agri possède plusieurs fonctions pour visualiser les courbes de dommages.
Comparaison de courbes
La fonction compare_agriculture_damage de la librairie floodam.agri permet de produire un graphique avec plusieurs fonctions de dommages pour les comparer.
# Regroupement des fonctions de dommages pour la comparaison
dmg_list = setNames(
list(damage_agri, damage_agri_updated),
c("Origin_2016", "Niveau-1_2024")
)
# Renommage des paramètres d'inondations pour permettre la visualisation
dmg_list = lapply(dmg_list, function(x) {
names(x)[1:5] = c("height", "height_max", "current", "duration", "week")
return(x)
})
# Déclaration des paramètres d'inondation et de la culture d'intérêt
culture = "Vignes"
duration = c("courte", "moyenne")
week = "été"
current = "faible"
# Création du graphique avec la fonction `plot_compare_agg_damage_week
compare_agriculture_damage(
culture = culture,
damage = dmg_list,
output_title = "level-1",
output_format = "png",
destination = path_figure,
current = current,
week = week,
duration = duration,
hazard = floodam.agri::HAZARD,
language = "FR",
legend = "include",
include_legend = "topleft"
)Schéma d’explication de la méthode
Mettre ici le schéma NHESS actualisé
Logiciels et bibliothèques requis
Le code ci-dessous est destiné à être exécuté dans R. Il est donc nécessaire que R soit installé sur votre système.
Cette méthode utilise les bibliothèques R suivantes (les instructions d’installation sont disponibles sur leurs sites web respectifs) :
- floodam.data qui permet de réaliser des opérations adaptées aux données de l’observatoire.
floodam.agriqui permet d’élaborer des fonctions de dommages aux parcelles agricoles.- so.ii qui permet notamment de réaliser des cartes centrées sur le territoire de l’observatoire.
TEMPORAIRE : Le code ci dessous est éxécutable pour les membres des dépôts floodam.data et floodam.agri tant que les fonctions développées pour cette méthode ne sont pas incluses dans les librairies de manière permanente
Déroulement de la méthode
Premièrement il faut charger les bibliothèques nécessaires et définir les chemins d’accès à vos fichiers et dossiers.
Veuillez noter que nous avons définit des chemins temporaires tempdir() pour sauvegarder les données téléchargées et actualisées. Si vous souhaitez conserver les données, pensez à définir un autre chemin (variable path_output) dans le code qui suit.
# Pass functions to floodam.data to load library only
# branch 50-update-damage-functions of floodam.data
package = file.path("~", "gitlab", "floodam.data")
devtools::load_all(package)
# branch 11-actualisation-fonctions-dommage
package = file.path("~", "gitlab", "floodam.agri")
devtools::load_all(package)
# Read functions that will be in floodam.data in the future
source(system.file("script/download_insee_index.R", package = "floodam.data"))
source(system.file("script/adapt_insee_index.R", package = "floodam.data"))
source(system.file("script/download_saa.R", package = "floodam.data"))
source(system.file("script/adapt_saa.R", package = "floodam.data"))
source(system.file("script/adapt_saa_floodam.R", package = "floodam.data"))
source(system.file(
"script/agricultural-statistical-data_functions.R",
package = "floodam.data"
))
source(system.file("script/update_action_value.R", package = "floodam.data"))
source(system.file("script/update_raw_damage.R", package = "floodam.data"))
source(system.file("script/prepare_input.R", package = "floodam.data"))
# Déclaration des chemins de stockage des données
path_output = tempdir()
path_figure = file.path("image", "agriculture")Déclaration des variables importantes et création de chemins
Ici nous déclarons les variables qui serviront à déterminer l’échelle et le millésime pour lesquels nous produisons des fonctions de dommages. Ensuite nous créons les chemins pour stocker les données nécessaires pour la production de fonctions de dommages de telle façon que l’outil floodam.agri puisse facilement les trouver.
Dans les fonctions utilisées par la suite, nous différentions deux types de zonages :
- scope : nom de la portée des données (national, régional ou départemental)
- extent : nom de l’échelle d’étude nationale (i.e. “FRANCE MÉTROPOLITAINE”, “FRANCE ENTIÈRE”, “DOM”), de la région (i.e. “Occitanie”, “Nouvelle-Aquitaine”, etc.) ou du département (“Hérault”, “Gironde”, etc.).
# Déclaration des échelles et millésime
extent = "FRANCE MÉTROPOLITAINE"
scope = "national"
year_update = "2024"
# Création des chemins "input"
grid = expand.grid(
destination = path_output,
year = year_update,
type = c("typology", "stat"),
KEEP.OUT.ATTRS = FALSE,
stringsAsFactors = FALSE
)
grid = cbind(grid, extent, scope)
grid = grid[c("destination", "scope", "extent", "year", "type")]
floodam_paths = do.call(file.path, grid)
invisible(lapply(floodam_paths, function(x) {
if(dir.exists(x)) {return()} else {dir.create(x, recursive = TRUE)}
}))
# Déclaration des chemins indispensables à l'utilisation de `floodam.agri`
input = prepare_input(
extent,
year = year_update,
destination = path_output,
include_national_2016 = TRUE
)Téléchargement et adaptation des séries INSEE
A la différence avec l’actualisation niveau 1, nous actualisons les coûts de productions et d’endommagement avec l’indice IPAMPA (010776857) et les prix de vente avec l’indice IPPAP pour lequel il existe deux séries qui doivent être mise en cohérence :
- 010538819 en base 2015
- 010538819 en base 2020
# Déclaration des variables importantes
series = setNames(
c("010538819", "010776418", "010776857"),
c("ippap_2015", "ippap_2020", "ipampa")
)
# Téléchargement des indices
lapply(series, download_insee_index, path_output)
# Lecture et adaptation des index
indexes = setNames(lapply(
file.path(path_output, paste0(series, ".csv")),
read_insee
), names(series))
# Mise en cohérence des deux séries IPPAP
indexes[["ippap"]] = adapt_index(
indexes[["ippap_2015"]],
indexes[["ippap_2020"]],
base_new = "2020"
)
# indexes[c("ippap_2015", "ippap_2020")] = NULLTéléchargement et adaptation des données de la Statistiques Agricole Annuelle d’Agreste
Ensuite, nous téléchargeons la base de données publiée par Agreste : Statistique Agricole Annuelle (série longue). Cette base de données contient notamment les données de rendements et de surfaces qui nous intéressent dans cette méthode. Le fichier téléchargé est au format zip et contient des données pour les échelles nationales, régionales et départementales.
Nous utilisons la fonction adapt_saa() pour extraire l’échelle nationale pour toutes les cultures disponibles.
# Téléchargement/lecture des données
download_saa(
destination = path_output,
origin = "agreste",
name = "SAA_2010-2024",
verbose = TRUE
)
# Adaptation des données SAA
adapted_saa = adapt_saa(
origin = file.path(path_output, "SAA_2010-2024.zip"),
destination = path_output,
scope = scope,
group_category = "crop",
retrieve = TRUE
)
# Export des valeurs SAA de l'extent étudié
adapt_saa_floodam(
scope = scope,
extent = extent,
dataset = adapted_saa,
year = year_update,
destination = path_output
)Téléchargement, adaptation des prix et coûts de production et report de la typologie des cultures SAA
Dans cette étape, les prix et coûts de productions par défaut sont récupérés (mis à disposition dans floodam.agri) et mis à jour avec la fonction update_action_value(). Par ailleurs, les tables de correspondances entres la nomenclature des cultures de la Statistique Agricole Annuelle et les nomenclatures floodam et RPG sont copiées.
# Lecture et actualisation des données de prix et de coûts de production
action_value = read.csv2(system.file(
"extdata/default/stat/action.value.table.csv",
package = "floodam.agri"
))
update_action_value(
action_value = action_value,
year_new = year_update,
year_origin = "2013",
index_price = indexes[["ippap"]],
index_prod = indexes[["ipampa"]],
destination_paths = floodam_paths
)
# Copie de la typologie depuis `floodam.agri`
output_typology = grep("typology", floodam_paths, value = TRUE)
files = list.files(
system.file("extdata", "typology-saa", package = "floodam.agri"),
full.names = TRUE
)
sapply(output_typology, file.copy, from = files, overwrite = TRUE)Création des chemins manquants
La fonction init_path() de la librairie floodam.agri permet de créer l’ensemble des chemins où la librairie va lire et stocker les données.
Cette étape ne peut pas avoir lieu tant que les fichiers de typologie (étape précédente) ont été copiés car ils participent à déterminer les chemins à créer.
# Création des chemins "output"
output = file.path(input[[1]], "output")
classification = system.file(
"extdata",
"classification",
package = "floodam.agri"
)
path = floodam.agri::init_path(
input = input,
output = output,
classification = classification,
default = TRUE
)Actualisation des valeurs d’endommagement avec un index
Cette étape permet d’actualiser les valeurs d’endommagement des cultures avec un index. Nous utilisons l’indice INSEE IPAMPA pour cela.
# Préparation des données d'endommagement par défaut
floodam.agri::prepare_culture(path)
# Mise à jour des données d'endommagement avec IPAMPA
update_raw_damage(
path = path,
culture = NULL,
verbose = TRUE,
year_new = year_update,
year_origin = "2013",
index_prod = indexes[["ipampa"]]
)Finalisation de la préparation des données
Cette étape mobilise 3 fonctions pour finaliser la préparation des données :
prepare_calendar(): extrait les calendriers disponibles pour les reporter dans le dossier “output”prepare_typology(): crée les fichiers dits “weights” qui permettent de déterminer les poids de chaque culture à partir de leurs surfaces dans les correspondances entre : SAA et floodam ; SAA et RPGprepare_action_value(): reformate les valeurs des actions et des rendements pour les rendre mobilisable parfloodam.agri
# Extracting and copying calendars to output
floodam.agri::prepare_calendar(path)
# Making weight files
floodam.agri::prepare_typology(path, "RPG")
# Prepare necessary action values and yields
floodam.agri::prepare_action_value(path)Construction des fonctions de dommages
C’est le moment de construire les fonctions de dommages. Pour cela nous utilisons 3 fonctions :
calculate_damaging()crée une courbe de dommage pour une ou plusieurs cultures.combine_damaging()combine les courbes de dommages en un seul fichier.aggregate_damage()aggrège les courbes de dommages avec de nouveaux paramètres d’inondation pour simplifier les fonctions de dommages.
# 2. Updating damaging curve
level = floodam.agri::LEVEL
# level[["duration"]] = as.character(seq(0, 30))
damaging = floodam.agri::calculate_damaging(
path,
culture = NULL,
level = level,
retrieve = TRUE,
update.hazard = TRUE
)
## Getting all "combine" outputs
### Combining only crops with the same extent data
floodam.agri::combine_damaging(
path = path,
damage.culture = damaging,
weight = "RPG",
verbose = TRUE
)
## Getting aggregated functions
agg_damaging = floodam.agri::aggregate_damage(
path,
damage_origin = "RPG_total",
hazard_agg = floodam.agri::HAZARD_AGGREGATE_OFFICIAL,
format = "gt-amc"
)Export des résultats et de la note méthodologique
Enfin, nous exportons les résultats accompagnés d’une note méthodologique explicative de l’origine des fonctions de dommages actualisées.
## Load and update notes
notes = system.file(
"extdata",
"notes-df-agri-level-2.csv",
package = "floodam.data"
)
notes = read.csv2(notes, check.names = FALSE, quote = "")
to_update = c(
"Date de mise à jour" = format(Sys.Date(), "%m-%Y"),
"Échelle" = extent,
"Origine des données pour la mise à jour" =
"Les séries d'indices sont disponibles aux adresses suivante :",
"Origine IPAMPA" = sprintf(
"https://www.insee.fr/fr/statistiques/serie/%s#Telechargement",
series[["ipampa"]]
),
"Origine IPPAP" = paste0(
sprintf(
"https://www.insee.fr/fr/statistiques/serie/%s#Telechargement",
series[["ippap_2015"]]
),
" et ",
sprintf(
"https://www.insee.fr/fr/statistiques/serie/%s#Telechargement",
series[["ippap_2020"]]
)
),
"Origine SAA" = "https://agreste.agriculture.gouv.fr/agreste-web/download/publication/publie/SAA-SeriesLongues/SAA_2010-2024-d%C3%A9finitives_donnees-DepartementalesetRegionales.zip",
"Millésime IPAMPA" = year_update,
"Millésime IPPAP" = year_update,
"Millésime SAA" = year_update,
"Production de la note" = paste0(
sprintf(
"Cette note a été produite avec la version %s de floodam.data",
utils::installed.packages()["floodam.data", "Version"]
),
" et ",
sprintf(
"la version %s de floodam.agri",
utils::installed.packages()["floodam.agri", "Version"]
)
)
)
notes[match(names(to_update), notes[[1]]), 2] = to_update
writexl::write_xlsx(
setNames(list(
notes,
agg_damaging
), c("notes-méthodologiques", sprintf("surfacique (€%s.ha)", year_update))),
path = file.path(path_output, sprintf("agriculture_level-2_%s_%s.xlsx", extent, year_update))
)Comparaison de courbes
La fonction compare_agriculture_damage de la librairie floodam.agri permet de produire un graphique avec plusieurs fonctions de dommages pour les comparer.
Ici nous comparons les courbes de dommages publiées en 2016, celles produites en appliquant l’indice INSEE IPAMPA (voir niveau 1) et celles produites dans la méthode décrite précédemment (niveau 2).
# Regroupement des fonctions de dommages pour la comparaison
dmg_list = setNames(
list(damage_agri, damage_agri_updated, agg_damaging),
c("Origin_2016", "Niveau-1_2024", "Niveau-2_2024")
)
# Renommage des paramètres d'inondations pour permettre la visualisation
dmg_list = lapply(dmg_list, function(x) {
names(x)[1:5] = c("height", "height_max", "current", "duration", "week")
return(x)
})
# Déclaration des paramètres d'inondation et de la culture d'intérêt
culture = "Vignes"
duration = c("courte", "moyenne")
week = "été"
current = "faible"
# Création du graphique avec la fonction `plot_compare_agg_damage_week
compare_agriculture_damage(
culture = culture,
damage = dmg_list,
output_title = "level-2",
output_format = "png",
destination = path_figure,
current = current,
week = week,
duration = duration,
hazard = floodam.agri::HAZARD,
language = "FR",
legend = "include",
include_legend = "topleft"
)
