Actualisation des fonctions de dommages aux parcelles agricoles.

R
gt-amc
agriculture

Actualisation des fonctions de dommages aux parcelles agricoles selon différentes méthodes.

Auteur·rice
Date de publication

6 mars 2026

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 et 2.1 : reconstruction des fonctions de dommages avec floodam.agri et des données actualisées.

Schéma d’explication de la méthode

Le schéma ci-dessous est une adaptation du schéma proposé par P. Brémond et al.: Flood damage modelling applied to the agricultural sector qui explique la méthode employé pour la création des fonctions de dommages nationales au secteur agricole. Les étapes 1 à 4 sont celles développées initialement lors de la première production des fonctions de dommages au secteur agricole en 2016. L’étape 5, en rouge, correspond au principe d’actualisation de “niveau 1”, avec l’application d’un indice monétaire global aux fonctions “prêtes à l’emploi” produites en 2016.

“Schéma explicatif de l’actualisation de niveau 1”

“Schéma explicatif de l’actualisation de niveau 1”

Logiciels et bibliothèques requis

ImportantInstallation des 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.agri qui permet notamment d’élaborer des fonctions de dommages aux parcelles agricoles et de faire de la visualisation des fonctions produites.
ImportantConditions pour aller au bout de la méthode.

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.

NoteSauvegarde des données téléchargées et produites

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.

# Chargement des librairies
library("floodam.data")
library("floodam.agri")

# Déclaration de chemins
path_output = file.path(tempdir(), "level-1")

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 une série monétaire à appliquer aux fonctions de dommages et les fonctions de dommages à actualiser. Nous avons choisit la série IPAMPA (010776857) de l’INSEE. (TO DO : Voir la méthode utilisation de séries INSEE pour l’actualisation des fonctions de dommages pour plus d’information) Au moment où cette notice méthodologique a été rédigée, les fonctions de dommages publiées sur le site du gouvernement datent de 2016.

Pour cette étape nous mobilisons deux fonctions de floodam.data :

  • download_insee_index() : téléchargement d’une ou plusieurs séries d’indices INSEE
  • download_damage() : téléchargement des fonctions de dommages officielles aux parcelles agricoles, aux logements, aux entreprises ou établissements publics
# Téléchargement de l'indice à appliquer : IPAMPA
serie = c(ipampa = "010776857")
floodam.data::download_insee_index(serie, destination = path_output)

# Téléchargement des fonctions de dommages publiées sur le site du gouvernement
damage = "agriculture"
floodam.data::download_damage(damage, path_output)

Actualisation des fonctions de dommages avec un indice

Nous appliquons ensuite l’indice INSEE aux fonctions de dommages de 2016 pour les actualiser à l’année 2025 (millésime IPAMPA le plus récent au moment de la rédaction de cette méthode).

Pour cette étape nous mobilisons la fonction de floodam.data nommée read_insee_serie() qui permet de lire un ou plusieurs indices INSEE :

# Lecture de l'index et des fonctions de dommages
index = floodam.data::read_insee_serie(
    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 = "2025"
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. Un squelette des notes méthodologiques est disponible dans la librairie floodam.data. Il faut donc la charger et actualiser les lignes indiquant :

  • la date de mise à jour ;
  • l’origine des données ;
  • le millésime de l’indice utilisé ;
  • version de floodam.data utilisée.
# 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. Dans l’exemple ci-dessous, nous faisons une comparaison des fonctions de dommages d’origine (2016) avec celles actualisées (2024) pour les parcelles de “Vignes” en été, avec un courant “faible” et une durée “courte” et “moyenne”.

# Regroupement des fonctions de dommages pour la comparaison
dmg_list = setNames(
    list(damage_agri, damage_agri_updated),
    c("Origin_2016", "Niveau-1_2025")
)

# 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
floodam.agri:::compare_agriculture_damage(
    culture = culture,
    damage = dmg_list,
    output_title = "level-1",
    output_format = "png",
    destination = path_output,
    current = current,
    week = week,
    duration = duration,
    hazard = floodam.agri::HAZARD,
    language = "FR",
    legend = "include", 
    include_legend = "topleft"
)

“Comparaison d’une fonction de dommage d’origine (€2016/ha) avec une fonction de dommage actualisée avec l’indice IPAMPA (€2024/ha)”

“Comparaison d’une fonction de dommage d’origine (€2016/ha) avec une fonction de dommage actualisée avec l’indice IPAMPA (€2024/ha)”

Ici nous comparons les courbes de dommages publiées en 2016 de celles produites dans la méthode décrite précédemment (niveau 1).

Schéma d’explication de la méthode

Le schéma ci-dessous est une adaptation du schéma proposé par P. Brémond et al.: Flood damage modelling applied to the agricultural sector qui explique la méthode employée pour la création des fonctions de dommages nationales au secteur agricole. Les étapes 1 à 4 sont celles développées initialement lors de la première production des fonctions de dommages au secteur agricole en 2016.

“Schéma explicatif de l’actualisation de niveau 2”

“Schéma explicatif de l’actualisation de niveau 2”

Logiciels et bibliothèques requis

ImportantInstallation des 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.agri qui permet notamment d’élaborer des fonctions de dommages aux parcelles agricoles et de faire de la visualisation des fonctions produites.
ImportantConditions pour aller au bout de la méthode.

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.

NoteSauvegarde des données téléchargées et produites

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.

# Chargement des librairies
library("floodam.data")
library("floodam.agri")

# Déclaration des chemins de stockage des données
path_output = file.path(tempdir(), "level-2")

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. La fonction prepare_input() permet de déclarer les chemins où se trouvent les données que floodam.agri aura besoin de mobiliser pour produire les fonctions de dommages.

NoteDéfinition des variables scope et extent

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

L’utilisation de la variable extent est sensible à l’écriture. Les valeurs possibles pour cette variables sont décrites ici :

  • national : “FRANCE MÉTROPOLITAINE”, “FRANCE ENTIÈRE”, “DOM” (nomenclature de la SAA);
  • région : voir données de la librairie floodam.data::region ;
  • département : voir données de la librairie floodam.data::department
NoteMillésime de mise à jour

Le millésime de mise à jour est 2024 car au moment de l’écriture de cette méthode, les données de la statistique agricole annuelle ne sont pas disponible pour 2025 contrairement aux indices INSEE

# Déclaration des échelles et millésime
extent = "FRANCE MÉTROPOLITAINE"
scope = "national"
year_update = "2024"

# Création des chemins "input"
floodam_paths = file.path(path_output, scope, extent, year_update, c("typology", "stat"))
lapply(floodam_paths, function(x) {dir.create(x, recursive = TRUE)})

# Déclaration des chemins indispensables à l'utilisation de `floodam.agri`
input = floodam.agri::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 global IPAMPA (010776857) et les prix de vente avec l’indice global IPPAP pour lequel il existe deux séries qui doivent être mise en cohérence :

  • 010538819 en base 2015
  • 010538819 en base 2020

Pour cette étape nous mobilisons trois fonctions de floodam.data :

  • download_insee_index() : téléchargement d’une ou plusieurs séries d’indices INSEE
  • read_insee_serie() : lecture d’une ou plusieurs séries d’indices INSEE
  • merge_insee_index() : mise en cohérence de deux séries d’indices INSEE
# Déclaration des variables importantes
series = setNames(
    c("010538819", "010776418", "010776857"),
    c("ippap_2015", "ippap_2020", "ipampa")
)

# Téléchargement des indices
lapply(series, floodam.data::download_insee_index, path_output)

# Lecture et adaptation des index
indexes = setNames(lapply(
    file.path(path_output, paste0(series, ".csv")),
    floodam.data::read_insee_serie
), names(series))

# Mise en cohérence des deux séries IPPAP
indexes[["ippap"]] = floodam.data::merge_insee_index(
    indexes[["ippap_2015"]],
    indexes[["ippap_2020"]],
    base_new = "2020"
)
indexes[c("ippap_2015", "ippap_2020")] = NULL

Té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 (SAA) (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.

Pour cette étape nous mobilisons deux fonctions de floodam.data :

  • download_saa() : téléchargement de la série longue SAA (2010-2024)
  • adapt_saa() : adaptation de la série longue SAA pour une harmonisation des noms des variables et extraction des données selon le scope (départemental, régional ou national).
  • adapt_saa_floodam() : adaptation de l’extraction faite typiquement par adapt_saa() pour sélectionner les rendements et surfaces d’une année spécifique et les stocker dans un fichier stat.SAA.csv au format de floodam.agri.

Nous utilisons la fonction adapt_saa() pour extraire l’échelle nationale pour toutes les cultures disponibles.

# Téléchargement/lecture des données
floodam.data::download_saa(destination = path_output, verbose = TRUE)

# Adaptation des données SAA
floodam.data::adapt_saa(
    origin = path_output,
    destination = path_output,
    scope = scope,
    verbose = TRUE
)

# Export des valeurs SAA de l'extent étudié
floodam.data::adapt_saa_floodam(
    origin = path_output,
    destination = file.path(input[[extent]], "stat"),
    archive = "SAA_2010-2024_national.csv",
    scope = scope,
    extent = extent,
    year = year_update,
    verbose = TRUE
)

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 (données mises à disposition dans floodam.agri) et mis à jour avec la fonction update_action_value() de floodam.agri. 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"
))

floodam.agri::update_action_value(
    action_value = action_value,
    year_new = year_update,
    year_origin = "2016",
    index_price = indexes[["ippap"]],
    index_prod = indexes[["ipampa"]],
    destination = floodam_paths,
    global_price = TRUE,
    global_price_name = "ippap",
    verbose = TRUE
)

# 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 résultats.

NoteCréation des chemins manquants

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

Dans cette étape, nous actualisons les valeurs d’endommagement des cultures avec un index (IPAMPA) et mobilisons deux fonctions de floodam.agri :

  • prepare_culture() : prépare les fichiers d’endommagement des cultures pour lesquelles on souhaite construire les fonctions de dommage
  • update_raw_damage() : actualisation des valeurs d’endommagement brutes d’une ou plusieurs cultures.
# Préparation des données d'endommagement par défaut
floodam.agri::prepare_culture(path)

# Mise à jour des données d'endommagement avec IPAMPA
floodam.agri::update_raw_damage(
    path = path,
    culture = NULL,
    year_new = year_update,
    year_origin = "2016",
    index_prod = indexes[["ipampa"]],
    verbose = TRUE
)

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 RPG
  • prepare_action_value() : reformate les valeurs des actions et des rendements pour les rendre mobilisable par floodam.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_2 = floodam.agri::aggregate_damage(
    path,
    damage_origin = "RPG_total",
    hazard_agg = floodam.agri::HAZARD_AGGREGATE_OFFICIAL,
    output_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. Un squelette des notes méthodologiques est disponible dans la librairie floodam.data. Il faut donc la charger et actualiser les lignes indiquant :

  • la date de mise à jour ;
  • l’origine des données (IPAMPA, IPPAP, SAA) ;
  • les millésimes utilisés (IPAMPA, IPPAP, SAA) ;
  • versions de floodam.data et floodam.agri utilisé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_2
    ), 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), celles produites au niveau 2 et celles produites dans la méthode décrite précédemment (niveau 2.1).

# Regroupement des fonctions de dommages pour la comparaison
dmg_list = setNames(
    list(damage_agri, damage_agri_updated, agg_damaging_2),
    c("Origin_2016", "Niveau-1_2025", "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
floodam.agri:::compare_agriculture_damage(
    culture = culture,
    damage = dmg_list,
    output_title = "level-2",
    output_format = "png",
    destination = path_output,
    current = current,
    week = week,
    duration = duration,
    hazard = floodam.agri::HAZARD,
    language = "FR",
    legend = "include", 
    include_legend = "topleft"
)

“Comparaison d’une fonction de dommage d’origine (€2016/ha) avec celles produites aux niveaux 1 et 2”

“Comparaison d’une fonction de dommage d’origine (€2016/ha) avec celles produites aux niveaux 1 et 2”

Schéma d’explication de la méthode

Le schéma ci-dessous est une adaptation du schéma proposé par P. Brémond et al.: Flood damage modelling applied to the agricultural sector qui explique la procédure pour la méthode employé pour la création des fonctions de dommages nationales au secteur agricole. Les étapes 1 à 4 sont celles développées initialement lors de la première production des fonctions de dommages au secteur agricole en 2016.

“Schéma explicatif de l’actualisation de niveau 2”

“Schéma explicatif de l’actualisation de niveau 2”

Logiciels et bibliothèques requis

ImportantInstallation des 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.agri qui permet notamment d’élaborer des fonctions de dommages aux parcelles agricoles et de faire de la visualisation des fonctions produites.
ImportantConditions pour aller au bout de la méthode.

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.

NoteSauvegarde des données téléchargées et produites

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.

# Chargement des librairies
package = file.path("~", "gitlab", "floodam.data")
library("floodam.data")
library("floodam.agri")

# Déclaration des chemins de stockage des données
path_output = file.path(tempdir(), "level-2.1")

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. La fonction prepare_input() permet de déclarer les chemins où se trouvent les données que floodam.agri aura besoin de mobiliser pour produire les fonctions de dommages.

NoteDéfinition des variables scope et extent

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

L’utilisation de la variable extent est sensible à l’écriture. Les valeurs possibles pour cette variables sont les suivantes :

  • national : “FRANCE MÉTROPOLITAINE”, “FRANCE ENTIÈRE”, “DOM” (nomenclature de la SAA);
  • région : voir données de la librairie floodam.data::region ;
  • département : voir données de la librairie floodam.data::department
NoteMillésime de mise à jour

Le millésime de mise à jour est 2024 car au moment de l’écriture de cette méthode, les données de la statistique agricole annuelle ne sont pas disponible pour 2025 contrairement aux indices INSEE.

# Déclaration des échelles et millésime
extent = "FRANCE MÉTROPOLITAINE"
scope = "national"
year_update = "2024"

# Création des chemins "input"
floodam_paths = file.path(
    path_output,
    scope,
    extent,
    year_update,
    c("typology", "stat")
)
lapply(floodam_paths, function(x) {dir.create(x, recursive = TRUE)})

# Déclaration des chemins indispensables à l'utilisation de `floodam.agri`
input = floodam.agri::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 et 2 , nous actualisons les coûts de productions et d’endommagement avec l’indice global IPAMPA (010776857) et les prix de vente avec des indices IPPAP attribués à chaque culture (voir la note méthodologique sur l’utilisation des séries INSEE pour l’actualisation des fonctions de dommages).

Pour sélectionner les bons indices, nous procédons en deux étapes :

  1. téléchargement des “dataflows” (tables de données issues du sservice web SDMX de l’INSEE) des séries IPPAP (2015 et 2020) et IPAMPA (2020) contenant toutes les séries disponibles pour ces indices.
  2. extraction des codes des séries d’intérêts et téléchargement.

Pour la première étape, nous mobilisons deux fonctions de floodam.data pour télécharger les dataflows :

  • retrieve_insee_serie() : télécharge les informations principales sur les séries disponibles sur le service web SDMX de l’INSEE.
  • adapt_insee_serie() : adaptation de l’archive téléchargée avec retrieve_insee_serie() pour essentiellement renommer les colonnes et extraire des noms d’indices abbrégés.
# Download names of available insee series
floodam.data::retrieve_insee_serie(
    destination = path_output,
    category = "IPAGRI-BASE",
    output_prefix = "insee_indexes",
    by = "id"
)

agricultural_insee_series = floodam.data::adapt_insee_serie( 
    origin = path_output,
    archive = "insee_indexes_IPAGRI-BASE.rds",
    destination = path_output,
    frequency = "A",
    output_format = "csv",
    retrieve = TRUE
)

# On ne garde que IPPAP_2015, 2020 (pour faire la cohérence) et IPAMPA 2020
selection = c("ippap_2015", "ippap_2020", "ipampa_2020")
agricultural_insee_series = agricultural_insee_series[selection]

Dans cette seconde étape, nous extrayons un numéro de série pour chaque culture de floodam en se basant sur une table de correspondance disponible dans la librairie floodam.data. Puis nous téléchargeons et faisons la mise en cohérence entre les séries IPPAP 2015 et 2020.

Nous mobilisons quatre fonctions de la librairie floodam.data :

  • select_insee_series() : extraction d’identifiants de séries INSEE globaux et spécifiques à partir d’une table de correspondance
  • download_insee_index() : téléchargement d’une ou plusieurs séries d’indices INSEE
  • read_insee_serie() : lecture d’une ou plusieurs séries d’indices INSEE
  • merge_insee_index() : mise en cohérence de deux séries d’indices INSEE
NoteMise en cohérence des séries hors ‘Indice global’

Les séries sélectionnées (hors indice global) de l’IPPAP 2020 couvrent les années de l’IPPAP 2015. Aucune mise en cohérence n’est faite pour ces séries et nous utilisons uniquement l’IPPAP 2020 pour mettre à jour les prix de vente des cultures associées à ces séries.

# Selection des séries d'intérêt
correspondance_insee = read.csv2(system.file(
    "extdata/correspondance_floodam_price_insee.csv",
    package = "floodam.data"
))

series = floodam.data:::select_insee_series(
    correspondance_insee,
    agricultural_insee_series,
    selection
)

# Téléchargement des index
invisible(lapply(
    names(series),
    function(x, series, destination) {
        message(sprintf("Processing %s.....", x))
        invisible(lapply(
            series[[x]],
            floodam.data::download_insee_index,
            destination,
            verbose = TRUE,
            overwrite = FALSE
        ))
    }, serie = series, destination = file.path(path_output, "insee_series")
))

# Lecture des séries
series_path = sapply(series, function(x, destination) {
        setNames(
            file.path(path_output, "insee_series", sprintf("%s.csv", x)),
            names(x)
        )
    }, destination
)
indexes = setNames(lapply(
    series_path,
    floodam.data::read_insee_serie
), names(series))

# Mise en cohérence des séries
indexes[["sale.price"]] = setNames(lapply(
    names(indexes[["ippap_2015"]]),
    function(x, indexes, verbose = TRUE) {
        if(isTRUE(verbose)) message(sprintf("Processing %s....", x))
        floodam.data::merge_insee_index(
            old_index = indexes[["ippap_2015"]][[x]],
            new_index = indexes[["ippap_2020"]][[x]],
            base_new = "2020"
        )[["value"]]
    }, indexes
), names(indexes[["ippap_2015"]]))

Té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 (SAA) (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.

Pour cette étape nous mobilisons deux fonctions de floodam.data :

  • download_saa() : téléchargement de la série longue SAA (2010-2024)
  • adapt_saa() : adaptation de la série longue SAA pour une harmonisation des noms des variables et extraction des données selon le scope (départemental, régional ou national).
  • adapt_saa_floodam() : adaptation de l’extraction faite typiquement par adapt_saa() pour sélectionner les rendements et surfaces d’une année spécifique et les stocker dans un fichier stat.SAA.csv au format de floodam.agri.

Nous utilisons la fonction adapt_saa() pour extraire l’échelle nationale pour toutes les cultures disponibles.

# Téléchargement/lecture des données
floodam.data::download_saa(destination = path_output, verbose = TRUE)

# Adaptation des données SAA
floodam.data::adapt_saa(
    origin = path_output,
    destination = path_output,
    scope = scope,
    verbose = TRUE
)

# Export des valeurs SAA de l'extent étudié
floodam.data::adapt_saa_floodam(
    origin = path_output,
    destination = file.path(input[[extent]], "stat"),
    archive = "SAA_2010-2024_national.csv",
    scope = scope,
    extent = extent,
    year = year_update,
    verbose = TRUE
)

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 (données mises à disposition dans floodam.agri) et mis à jour avec la fonction update_action_value() de floodam.agri. 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"
))

floodam.agri::update_action_value(
    action_value = action_value,
    year_new = year_update,
    year_origin = "2016",
    index_price = indexes[["sale.price"]],
    index_prod = indexes[["ipampa_2020"]],
    destination = floodam_paths,
    global_price = FALSE,
    verbose = TRUE
)

# 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 résultats.

NoteCréation des chemins manquants

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

Dans cette étape, nous actualisons les valeurs d’endommagement des cultures avec un index (IPAMPA) et mobilisons deux fonctions de floodam.agri :

  • prepare_culture() : prépare les fichiers d’endommagement des cultures pour lesquelles on souhaite construire les fonctions de dommage
  • update_raw_damage() : actualisation des valeurs d’endommagement brutes d’une ou plusieurs cultures.
# Préparation des données d'endommagement par défaut
floodam.agri::prepare_culture(path)

# Mise à jour des données d'endommagement avec IPAMPA
floodam.agri::update_raw_damage(
    path = path,
    culture = NULL,
    year_new = year_update,
    year_origin = "2016",
    index_prod = indexes[["ipampa_2020"]],
    verbose = TRUE
)

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 RPG
  • prepare_action_value() : reformate les valeurs des actions et des rendements pour les rendre mobilisable par floodam.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_2_1 = floodam.agri::aggregate_damage(
    path,
    damage_origin = "RPG_total",
    hazard_agg = floodam.agri::HAZARD_AGGREGATE_OFFICIAL,
    output_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. Un squelette des notes méthodologiques est disponible dans la librairie floodam.data. Il faut donc la charger et actualiser les lignes indiquant :

  • la date de mise à jour ;
  • l’origine des données (IPAMPA, IPPAP, SAA) ;
  • les millésimes utilisés (IPAMPA, IPPAP, SAA) ;
  • versions de floodam.data et floodam.agri utilisé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"]][["global"]]
    ),
    "Origine IPPAP" = paste(unique(sprintf(
        "https://www.insee.fr/fr/statistiques/serie/%s#Telechargement",
        series[["ippap_2020"]][-which(names(series[["ippap_2020"]]) == "global")]
    )), collapse = ", "),
    "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_2_1
    ), c(
        "notes-méthodologiques",
        sprintf("surfacique (€%s.ha)", year_update)
    )),
    path = file.path(
        path_output,
        sprintf("agriculture_level-2.1_%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_2, agg_damaging_2_1),
    c("Origin_2016", "Niveau-1_2025", "Niveau-2_2024", "Niveau-2.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
floodam.agri:::compare_agriculture_damage(
    culture = culture,
    damage = dmg_list,
    output_title = "level-2.1",
    output_format = "png",
    destination = path_output,
    current = current,
    week = week,
    duration = duration,
    hazard = floodam.agri::HAZARD,
    language = "FR",
    legend = "include", 
    include_legend = "topleft"
)

“Comparaison d’une fonction de dommage d’origine (€2016/ha) avec celles produites aux niveaux 1, 2 et 2.1”

“Comparaison d’une fonction de dommage d’origine (€2016/ha) avec celles produites aux niveaux 1, 2 et 2.1”
Retour au sommet