# Chargement des librairies
library(floodam.data)
# Déclaration des chemins et variables
damage = "logements"
path_output = file.path(tempdir(), damage)
date_origin = "2016" # date d'origine
date_update = "2025" # date actualiséeActualisation des fonctions de dommages aux logements.
Actualisation des fonctions de dommages aux logements avec des indices INSEE.
Objectifs
Cette méthodologie vise à montrer comment actualiser les fonctions de dommages aux logements produites en 2016 à l’échelle nationale en France avec l’aide d’indices INSEE.
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 la bibliothèque R suivante (les instructions d’installations sont disponibles sur son site web) :
- floodam.data qui permet de réaliser des opérations adaptées aux données de l’observatoire.
TEMPORAIRE : Le code ci dessous est éxécutable pour les membres du dépôt floodam.data 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 le bibliothèque floodam.data, définir les chemins d’accès à vos fichiers et dossiers et définir les variables d’intérêts pour paramétrer l’actualisation des fonctions de dommages.
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
Une fois la configuration terminée, nous devons télécharger les séries monétaires à appliquer aux fonctions de dommages et les fonctions de dommages à actualiser. Les séries recommandées INSEE pour l’actualisation des données sont l’indice du coût de la construction des immeubles à usage d’habitation (ICC, série “000008630”) et l’Indice annuel des prix à la consommation (IPC, série “001765171”).
Pour cette étape nous mobilisons deux fonctions de floodam.data :
download_insee_index(): téléchargement d’une ou plusieurs séries d’indices INSEEdownload_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
series = setNames(
c("000008630", "001765171"),
c("icc", "ipc")
)
lapply(series, floodam.data::download_insee_index, path_output)
# Téléchargement des fonctions de dommages publiées sur le site du gouvernement
floodam.data::download_damage(damage, path_output)Lecture des données
Une fois les données téléchargées, nous pouvons les lire et les attribuer à des variables. Les deux séries d’indices INSEE téléchargées sont stockées dans une liste nommée indexes tandis que toutes les feuilles du classeur au format .xlsx sont stockées dans une liste nommée dataset.
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 des indices INSEE
indexes = setNames(lapply(
file.path(path_output, paste0(series, ".csv")),
read_insee_serie
), names(series))
# Lecture du contenu de l'archive des fonctions de dommages
damage_path = file.path(path_output, sprintf("%s.xls", damage))
sheet = readxl::excel_sheets(damage_path)
dataset = setNames(lapply(
sheet,
function(sheet, damage_path) {
result = as.data.frame(readxl::read_excel(
file.path(damage_path),
sheet,
skip = 1
))
}, damage_path = damage_path
), sheet)Actualisation des fonctions de dommages avec un indice
Nous appliquons ensuite les indices INSEE aux fonctions de dommages de 2016 pour les actualiser à l’année 2025. Comme mentionné plus haut dans la Section 4, nous appliquons des indices différents ou des moyennes d’indices pour chaque fonction de dommages aux entreprises.
La méthode générale de calcul est décrite ci-dessous :
\(Pa = Po*R\)
- \(Pa\) : Prix actualisé
- \(Po\) : Prix d’origine
- \(R\) : Ratio entre l’indice de l’année à actualiser et celle d’origine où \(R = Ia/ Io\) avec \(Ia\) étant l’indice de l’année à actualiser et \(Io\) étant l’indice de l’année d’origine
Les indices disponibles pour l’ICC sont trimestriels donc nous faisons une moyenne des trismestres de l’année pour obtenir un indice annuel comme présenté ci-dessous :
- \(Iicc = (It1 + It2 + It3 + It4)/4\)
Utilisation des indices pour déterminer des ratios à appliquer pour l’actualisation
Nous déterminons dans un premier temps les ratios à appliquer aux fonctions de dommages d’origines.
# Trimestrial values for ICC : mean of all available trimesters to obtain one value
## Origin
selection_origin = grep(date_origin, row.names(indexes[["icc"]]))
icc_annual_origin = mean(indexes[["icc"]][selection_origin, "value"])
ipc_origin = indexes[["ipc"]][date_origin, ]
## Update
selection_update = grep(date_update, row.names(indexes[["icc"]]))
icc_annual_update = mean(indexes[["icc"]][selection_update, "value"])
ipc_update = indexes[["ipc"]][date_update, ]
## Ratio for all three sheets to update
ratio_bati = icc_annual_update / icc_annual_origin
ratio_equip = ipc_update / ipc_originApplication des ratios calculés aux fonctions de dommages
Ici nous appliquons les ratios précédemment calculés ratio_bati et ratio_equip aux fonctions de dommages logement_surfacique_2016 et logement_euro_2016 stockées dans la liste dataset.
Le ratio_bati s’applique aux endommagements du bâtiment, soit les colonnes suivantes :
- “Individuel sans étage” ;
- “Individuel avec étage” ;
- “Logement en collectif” ;
- “Sous-sol individuel” ;
- “Sous-sol d’un immeuble (cave + garage)”.
Le ratio_equip s’applique aux endommagements du bâtiment, soit les colonnes suivantes :
- “Mobilier individuel sans étage” ;
- “Mobilier individuel avec étage” ;
- “Mobilier logement en collectif”.
# Application des rations calculés aux fonctions de dommages
to_update = list(
ratio_bati = c(
"Individuel sans étage",
"Individuel avec étage",
"Logement en collectif",
"Sous-sol individuel",
"Sous-sol d'un immeuble (cave + garage)"
),
ratio_equip = c(
"Mobilier individuel sans étage",
"Mobilier individuel avec étage",
"Mobilier logement en collectif"
)
)
hazard = c(
"Hauteur d'eau min (cm)",
"Hauteur d'eau max (cm)",
"Durée de submersion"
)
for(i in names(dataset)) {
dataset[[i]] = data.frame(
dataset[[i]][hazard],
dataset[[i]][to_update[["ratio_bati"]]]*ratio_bati,
dataset[[i]][to_update[["ratio_equip"]]]*ratio_equip
)
}
dataset = setNames(dataset, gsub("2016", date_update, names(dataset)))Mise à jour de la notice d’utilisation
Enfin, pour garder trace des actions effectuées nous mettons à jour la notice d’utilisation de ces fonctions puis pouvons exporter la liste au format “.xlsx”.
notes = system.file(
"extdata",
"notes-df-logement.csv",
package = "floodam.data"
)
notes = read.csv2(notes, check.names = FALSE, quote = "")
to_update = c(
"Date de mise à jour" = format(Sys.Date(), "%m-%Y"),
"Indice bâti" = paste(
notes[notes[[1]] == "Indice bâti", 2],
"Série :",
series[["icc"]]
),
"Indice mobilier" = paste(
notes[notes[[1]] == "Indice mobilier", 2],
"Série :",
series[["ipc"]]
),
"Origine ICC" = sprintf(
"https://www.insee.fr/fr/statistiques/serie/%s#Telechargement",
series[["icc"]]
),
"Origine IPC" = sprintf(
"https://www.insee.fr/fr/statistiques/serie/%s#Telechargement",
series[["ipc"]]
),
"Millésime de mise à jour ICC" = sprintf(
"Moyenne des trimestres de l'année %s",
date_update
),
"Millésime de mise à jour IPC" = 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 as xlsx
export_path = file.path(path_output, sprintf("%s_%s.xlsx", damage, date_update))
writexl::write_xlsx(
setNames(c(
list(notes),
dataset
), c("notes-méthodologique", names(dataset))),
path = export_path
)
message(sprintf("Output created at : %s", export_path))Visualisation des résultats
TO DO Intégrer une fonction de visualisation dans floodam.data ?