Repository 'cb_div'
hg clone https://toolshed.g2.bx.psu.edu/repos/ecology/cb_div

Changeset 0:abc8da8c12ba (2023-01-04)
Next changeset 1:5b31641e6d30 (2023-03-18)
Commit message:
planemo upload for repository https://github.com/Marie59/champ_blocs commit 0d86db7d42b608c386a54500064f5f9c9d7019a4
added:
CB_ivr.tif
cb_dissimilarity.r
cb_ivr.r
cb_ivr_site_report_col_scale_loop.Rmd
div_index.r
div_index.xml
logo_merged.png
loop_col_scale.r
macro.xml
test-data/Clean_Rdata.rdata
test-data/champbloc_ivr.csv
test-data/champbloc_qecb.csv
test-data/ficheterrain.csv
b
diff -r 000000000000 -r abc8da8c12ba CB_ivr.tif
b
Binary file CB_ivr.tif has changed
b
diff -r 000000000000 -r abc8da8c12ba cb_dissimilarity.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cb_dissimilarity.r Wed Jan 04 13:21:41 2023 +0000
[
b'@@ -0,0 +1,1753 @@\n+# author: "Jonathan Richir"\r\n+# date: "01 October 2022"\r\n+\r\n+\r\n+#Rscript\r\n+\r\n+###############################\r\n+##  ##\r\n+###############################\r\n+\r\n+#####Packages : dplyr\r\n+#               tidyr\r\n+#               readr\r\n+#               writexl\r\n+#               stringr\r\n+#               readxl\r\n+#               tibble\r\n+#               lubridate\r\n+#               cowplot\r\n+#               magrittr\r\n+#               rmarkdown\r\n+library(magrittr)\r\n+#####Load arguments\r\n+\r\n+args <- commandArgs(trailingOnly = TRUE)\r\n+\r\n+#####Import data\r\n+\r\n+if (length(args) < 1) {\r\n+    stop("This tool needs at least 1 argument")\r\n+}else {\r\n+    fiche_val <- args[1]\r\n+    input_data <- args[2]\r\n+    choice <- args[3]\r\n+    choice_date <- as.numeric(args[4])\r\n+}\r\n+\r\n+#############################################################\r\n+#                                                           #\r\n+#               Loading and cleaning data                   #\r\n+#                                                           #\r\n+#############################################################\r\n+# load qecb data\r\n+\r\n+qecb <- read.csv2(input_data, header = TRUE, fileEncoding = "Latin1") # fileEncoding = "Latin1",  cfr \xc3\xa9 in variable names\r\n+\r\n+# import csv files ficheterrain\r\n+\r\n+fiche <- read.csv2(fiche_val, header = TRUE, fileEncoding = "Latin1") # fileEncoding = "Latin1",  cfr \xc3\xa9 in variable names\r\n+\r\n+## work on "Fiche terrain"\r\n+\r\n+date_fiche <- as.Date(stringr::str_sub(fiche$date.sortie, end = 10), origin = "1970-01-01")\r\n+fiche <- tibble::add_column(fiche, date_fiche, .after = "date.sortie")\r\n+rm(date_fiche)\r\n+\r\n+## qecb vs fiche terrain\r\n+\r\n+fiche_red <- dplyr::filter(fiche, fiche$ID.Fiche %in% unique(qecb[, c("id")]))\r\n+\r\n+id_count <- qecb %>% dplyr::group_by(id) %>% dplyr::count()\r\n+id_count <- dplyr::rename(id_count, "ID.Fiche" = "id")\r\n+id_count <- data.frame(id_count)\r\n+fiche_red <- dplyr::left_join(fiche_red, id_count)\r\n+\r\n+# rep fiche terrain information\r\n+fiche_expanded <- fiche_red[rep(row.names(fiche_red), fiche_red$n), 1:ncol(fiche_red)]\r\n+fiche_expanded <- dplyr::rename(fiche_expanded, "id" = "ID.Fiche")\r\n+\r\n+## merge qecb data and ficheterrain information\r\n+\r\n+qecb <- dplyr::bind_cols(qecb, fiche_expanded)\r\n+qecb <- dplyr::rename(qecb, "id_qecb" = "id...1")\r\n+qecb <- dplyr::rename(qecb, "id_fiche" = "id...68")\r\n+\r\n+rm(fiche_expanded, fiche_red, id_count)\r\n+\r\n+qecb <- qecb %>% tidyr::separate(date_fiche, c("Year", "Month", "Day"), sep = "-", remove = FALSE)\r\n+\r\n+\r\n+## quadrat nb : in contrast to ivr df, quadrat number is missing for many observations in qecb df ; but from the Numero.Photo variable (boulder photo associated to field data collection), I could get back most missing quadrat numbers\r\n+\r\n+quadrat <- stringr::str_extract(qecb$Numero.Photo, "Q[12345]")\r\n+qecb <- tibble::add_column(qecb, quadrat, .after = "Numero.Photo")\r\n+rm(quadrat)\r\n+\r\n+# check\r\n+quadrat_bis <- rep(NA, length = nrow(qecb))\r\n+qecb <- tibble::add_column(qecb, quadrat_bis, .after = "quadrat")\r\n+rm(quadrat_bis)\r\n+\r\n+qecb$quadrat_bis <- ifelse(qecb$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon %in% c(1, 2) & qecb$Type.Bloc == "Bloc mobile", "Q1", qecb$quadrat_bis)\r\n+qecb$quadrat_bis <- ifelse(qecb$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon %in% c(3, 4) & qecb$Type.Bloc == "Bloc mobile", "Q2", qecb$quadrat_bis)\r\n+qecb$quadrat_bis <- ifelse(qecb$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon %in% c(5, 6) & qecb$Type.Bloc == "Bloc mobile", "Q3", qecb$quadrat_bis)\r\n+qecb$quadrat_bis <- ifelse(qecb$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon %in% c(7, 8) & qecb$Type.Bloc == "Bloc mobile", "Q4", qecb$quadrat_bis)\r\n+qecb$quadrat_bis <- ifelse(qecb$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon %in% c(9, 10) & qecb$Type.Bloc == "Bloc mobile", "Q5", qecb$quadrat_bis)\r\n+\r\n+\r\n+qecb$quadrat_bis <- ifelse(qecb$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon == 1 & qecb$Type.Bloc %in% c("Bloc fix\xc3\xa9", "Roche en place"), "Q1", qecb$quadrat_bis)\r\n+qecb$quadrat_bis <- ifelse(qecb$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon == 2 & qecb$Type.Bloc %in% c("Bloc fix\xc3\xa9", "Roche en place"), "Q2", qe'..b'")) +\r\n+  ggplot2::geom_pointrange(ggplot2::aes(x = df1$Date, y = df1$BM_FS.FI_dist.med, ymin = df1$BM_FS.FI_dist.min, ymax =  df1$BM_FS.FI_dist.max), col = "black") +\r\n+  ggplot2::xlab("Date") +\r\n+  ggplot2::ylab("Coef dissim BM FS-FI") +\r\n+  ggplot2::ggtitle(unique(df1$Site_bis)) +\r\n+  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), legend.position = "none")\r\n+\r\n+ggplot2::ggsave(paste0("fs_fi_", df1$Site, ".png"), device = "png", bm_fs_fi_plot, height = 3, width = 3.5)\r\n+\r\n+}\r\n+\r\n+rm(df1, four, i, one, three, two, xmax_, xmin_, ymax_, ymin_)\r\n+\r\n+\r\n+## BM.BF_FS_dist => mobile boulder vs fixed boulder upper faces\r\n+\r\n+# Stats\r\n+\r\n+bm_bf_fs_dist_stat <- matri_full %>% dplyr::group_by(Site, Site_bis, Date, Year, Month, Day) %>% dplyr::summarize(BM.BF_FS_dist.moy = mean(BM.BF_FS_dist., na.rm = TRUE), BM.BF_FS_dist.et = sd(BM.BF_FS_dist., na.rm = TRUE), BM.BF_FS_dist.med = median(BM.BF_FS_dist., na.rm = TRUE), BM.BF_FS_dist.min = min(BM.BF_FS_dist., na.rm = TRUE), BM.BF_FS_dist.max = max(BM.BF_FS_dist., na.rm = TRUE), nb. = dplyr::n(), nb.notNa = sum(!is.na(BM.BF_FS_dist.)))\r\n+\r\n+bm_bf_fs_dist_stat <- dplyr::ungroup(bm_bf_fs_dist_stat)\r\n+\r\n+# Quality scale based on quartiles\r\n+\r\n+if (choice == "N") {\r\n+  one <- round(mean(unlist(dplyr::filter(matri_full, BM.BF_FS_dist. <= quantile(matri_full$BM.BF_FS_dist., 0.25, na.rm = TRUE))["BM.BF_FS_dist."])), digits = 3)\r\n+  two <- round(mean(unlist(dplyr::filter(matri_full, BM.BF_FS_dist. > quantile(matri_full$BM.BF_FS_dist., 0.25, na.rm = TRUE) & BM.BF_FS_dist. <= quantile(matri_full$BM.BF_FS_dist., 0.5, na.rm = TRUE))["BM.BF_FS_dist."])), digits = 3)\r\n+  three <- round(mean(unlist(dplyr::filter(matri_full, BM.BF_FS_dist. > quantile(matri_full$BM.BF_FS_dist., 0.5, na.rm = TRUE) & BM.BF_FS_dist. <= quantile(matri_full$BM.BF_FS_dist., 0.75, na.rm = TRUE))["BM.BF_FS_dist."])), digits = 3)\r\n+  four <- round(mean(unlist(dplyr::filter(matri_full, BM.BF_FS_dist. > quantile(matri_full$BM.BF_FS_dist., 0.75, na.rm = TRUE))["BM.BF_FS_dist."])), digits = 3)\r\n+\r\n+}else {\r\n+  one <- 0.19\r\n+  two <- 0.32\r\n+  three <- 0.455\r\n+  four <- 0.735\r\n+}\r\n+# Plot\r\n+\r\n+for (i in c(1:length(unique(bm_bf_fs_dist_stat$Site)))) {\r\n+\r\n+  df1 <- dplyr::filter(bm_bf_fs_dist_stat, bm_bf_fs_dist_stat$Site == unique(bm_bf_fs_dist_stat$Site)[i])\r\n+\r\n+  bm_bf_fs_plot <- ggplot2::ggplot() +\r\n+  ggplot2::geom_point(ggplot2::aes(x = bm_bf_fs_dist_stat$Date, y = bm_bf_fs_dist_stat$BM.BF_FS_dist.med), col = "grey") +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = - 0.1, ymax = one, fill = "red"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = one, ymax = two, fill = "orange"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = two, ymax = three, fill = "yellow"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = three, ymax = four, fill = "green"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = as.Date("2013-01-01", origin = "1970-01-01"), xmax = val_xmax, ymin = four, ymax = 1.1, fill = "blue"), alpha = 0.3) +\r\n+  ggplot2::scale_fill_manual(values = c("#FF0000", "#F59404", "#18E125", "#1A1AE8", "#FAFA15")) +\r\n+  ggplot2::geom_pointrange(ggplot2::aes(x = df1$Date, y = df1$BM.BF_FS_dist.med, ymin = df1$BM.BF_FS_dist.min, ymax =  df1$BM.BF_FS_dist.max), col = "black") +\r\n+  ggplot2::xlab("Date") +\r\n+  ggplot2::ylab("Coef dissim BM-BF FS") +\r\n+  ggplot2::ggtitle(unique(df1$Site_bis)) +\r\n+  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), legend.position = "none")\r\n+\r\n+ggplot2::ggsave(paste0("bm_bf_", df1$Site, ".png"), device = "png", bm_bf_fs_plot, height = 3, width = 3.5)\r\n+\r\n+}\r\n+\r\n+rm(df1, four, i, one, three, two, xmax_, xmin_, ymax_, ymin_)\r\n'
b
diff -r 000000000000 -r abc8da8c12ba cb_ivr.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cb_ivr.r Wed Jan 04 13:21:41 2023 +0000
[
b'@@ -0,0 +1,321 @@\n+# author: "Jonathan Richir"\r\n+# date: "19 April 2021"                     )\r\n+\r\n+#Rscript\r\n+\r\n+###############################\r\n+##  ##\r\n+###############################\r\n+\r\n+#####Packages : dplyr\r\n+#               tidyr\r\n+#               readr\r\n+#               writexl\r\n+#               stringr\r\n+#               readxl\r\n+#               tibble\r\n+#               lubridate\r\n+#               cowplot\r\n+#               magrittr\r\n+#               rmarkdown\r\n+library(magrittr)\r\n+#####Load arguments\r\n+\r\n+args <- commandArgs(trailingOnly = TRUE)\r\n+\r\n+### Import data\r\n+\r\n+if (length(args) < 1) {\r\n+    stop("This tool needs at least 1 argument")\r\n+}else {\r\n+    fiche_val <- args[1]\r\n+    input_data <- args[2]\r\n+\r\n+}\r\n+\r\n+#############################################################\r\n+#                                                           #\r\n+#                Load and clean the data                    #\r\n+#                                                           #\r\n+#############################################################\r\n+### load ivr data\r\n+\r\n+ivr <- read.csv2(input_data, header = FALSE, fileEncoding = "Latin1")\r\n+names_ <- as.vector(unlist(ivr[1, ]))\r\n+names_ <- gsub(" ", ".", names_)\r\n+colnames(ivr) <- names_\r\n+ivr <- ivr[-1, ]\r\n+ivr <- ivr[, -17]\r\n+\r\n+# NB inversion between id and ID.Fiche variable names\r\n+ivr <- dplyr::rename(ivr, XX = ID.Fiche)\r\n+ivr <- dplyr::rename(ivr, ID.Fiche = id)\r\n+ivr <- dplyr::rename(ivr, id = XX)\r\n+\r\n+\r\n+### load excel files "Fiche terrain" the metadata\r\n+\r\n+fiche <- read.csv2(fiche_val, fileEncoding = "Latin1") # fileEncoding = "Latin1" cfr \xc3\xa9 in variable names\r\n+\r\n+date_fiche <- as.Date(stringr::str_sub(fiche$date.sortie, end = 10), origin = "1970-01-01")\r\n+fiche <- tibble::add_column(fiche, date_fiche, .after = "date.sortie")\r\n+rm(date_fiche)\r\n+\r\n+## ivr vs fiche terrain\r\n+ivr$id <- as.numeric(ivr[, c("id")])\r\n+\r\n+fiche_red <- dplyr::filter(fiche, fiche$ID.Fiche %in% unique(ivr[, c("id")]))\r\n+\r\n+id_count <- ivr %>% dplyr::group_by(id) %>% dplyr::count()\r\n+id_count <- dplyr::rename(id_count, "ID.Fiche" = "id")\r\n+id_count <- dplyr::ungroup(id_count)\r\n+id_count <- as.data.frame(id_count)\r\n+\r\n+fiche_red <- dplyr::left_join(fiche_red, id_count)\r\n+\r\n+# rep fiche terrain information\r\n+fiche_expanded <- fiche_red[rep(row.names(fiche_red), fiche_red$n), 1:ncol(fiche_red)]\r\n+fiche_expanded <- dplyr::rename(fiche_expanded, "id" = "ID.Fiche")\r\n+\r\n+## merge ivr data and ficheterrain information\r\n+ivr <- dplyr::bind_cols(ivr, fiche_expanded)\r\n+ivr <- dplyr::rename(ivr, "id.ivr" = "id...1")\r\n+ivr <- dplyr::rename(ivr, "id.fiche" = "id...17")\r\n+\r\n+rm(fiche_expanded, fiche_red, id_count)\r\n+\r\n+ivr <- ivr %>% tidyr::separate(date_fiche, c("Year", "Month", "Day"), sep = "-", remove = FALSE)\r\n+\r\n+## I create two new variables for Site names, one for data analysis and one for data reporting. Only works for actual ivr df with 22 sites !\r\n+\r\n+# Name for data analysis\r\n+ivr <- tibble::add_column(ivr, Site = ivr$zone.habitat, .after = "ID.Fiche")\r\n+ivr$Site <- gsub(pattern = " \\\\(champ de blocs\\\\)", replacement = "", ivr$Site)\r\n+ivr$Site <- gsub(pattern = " \\\\(champ blocs\\\\)", replacement = "", ivr$Site)\r\n+\r\n+for (x in seq_along(ivr$Site)) {\r\n+  if (grepl(pattern = "Locmariaquer", ivr$Site[x]) == TRUE) {\r\n+    ivr$Site[x] <- "GDMO_Locmariaquer"\r\n+ } else if (grepl(pattern = "Beg Lann", ivr$Site[x]) == TRUE) {\r\n+    ivr$Site[x] <- "GDMO_BegLann"\r\n+ } else if (grepl(pattern = "Plateau du Four", ivr$Site[x]) == TRUE) {\r\n+    ivr$Site[x] <- "FOUR_PlateauFour"\r\n+ } else if (grepl(pattern = "Grouin", ivr$Site[x]) == TRUE) {\r\n+    ivr$Site[x] <- "EGMP_GroinCou"\r\n+ } else if (grepl(pattern = "Ensembert", ivr$Site[x]) == TRUE) {\r\n+    ivr$Site[x] <- "EGMP_PasEmsembert"\r\n+ } else if (grepl(pattern = "Br\xc3\xa9e-les-Bains", ivr$Site[x]) == TRUE) {\r\n+    ivr$Site[x] <- "EGMP_BreeBains"\r\n+ } else if (grepl(pattern = "Antiochat", ivr$Site[x]) == TRUE) {\r\n+    ivr$Site[x] <- "EGMP_PerreAntiochat"\r\n+ } else if (gre'..b'\n+saveRDS(ivr_val_qu_, "ivr_val_qu.RDS")\r\n+rm(ivr_naomit)\r\n+\r\n+\r\n+## Calculate ivr statistics now\r\n+ivr_val_qu_stat_ <- ivr_val_qu_ %>% dplyr::group_by(id.ivr, Site, Site_bis, Year, Month, Day) %>% dplyr::summarize(ivr_moy = mean(valeur.ivr_quadrat), ivr_et = sd(valeur.ivr_quadrat), ivr_med = median(valeur.ivr_quadrat), ivr_min = min(valeur.ivr_quadrat), ivr_max = max(valeur.ivr_quadrat), fr.r.moy = mean(blocs.retournes.fr.), fr.r.et = sd(blocs.retournes.fr.), fr.r.med = median(blocs.retournes.fr.), fr.r.min = min(blocs.retournes.fr.), fr.r.max = max(blocs.retournes.fr.), fr.nr.moy = mean(blocs.non.retournes.fr.), fr.nr.et = sd(blocs.non.retournes.fr.), fr.nr.med = median(blocs.non.retournes.fr.), fr.nr.min = min(blocs.non.retournes.fr.), fr.nr.max = max(blocs.non.retournes.fr.), nb. = dplyr::n())\r\n+\r\n+Date <- as.Date(paste0(ivr_val_qu_stat_$Year, "-", ivr_val_qu_stat_$Month, "-", ivr_val_qu_stat_$Day), origin = "1970-01-01")\r\n+ivr_val_qu_stat_ <- tibble::add_column(ivr_val_qu_stat_, Date, .after = "Site_bis")\r\n+rm(Date)\r\n+\r\n+ivr_val_qu_stat_ <- as.data.frame(ivr_val_qu_stat_)\r\n+indic <- ivr_val_qu_stat_\r\n+\r\n+\r\n+#############################################################\r\n+#                                                           #\r\n+#                  Plot the IVR per site                    #\r\n+#                                                           #\r\n+#############################################################\r\n+\r\n+## plot ivr (NB: Year, Month, Day variable names are replace by Annee, Mois, Jour, cfr previous label use in the script)\r\n+ivr_val_qu_stat_ <- dplyr::rename(ivr_val_qu_stat_, Annee = Year)\r\n+ivr_val_qu_stat_ <- dplyr::rename(ivr_val_qu_stat_, Mois = Month)\r\n+ivr_val_qu_stat_ <- dplyr::rename(ivr_val_qu_stat_, Jour = Day)\r\n+\r\n+\r\n+# new IVR scale with continuous 0 to 5 environmental status levels based on % of overturned boulders /20, plus other site data\r\n+\r\n+for (i in c(1:length(unique(ivr_val_qu_stat_$Site)))) {\r\n+\r\n+  ivr_val_eg <- dplyr::filter(ivr_val_qu_stat_, ivr_val_qu_stat_$Site == unique(ivr_val_qu_stat_$Site)[i])\r\n+\r\n+  ivr_plot <- ggplot2::ggplot() +\r\n+  ggplot2::geom_point(ggplot2::aes(x = ivr_val_qu_stat_$Date, y = ivr_val_qu_stat_$fr.r.moy / 20), col = "grey") +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = min(ivr_val_qu_stat_$Date), xmax = max(ivr_val_qu_stat_$Date), ymin = - 0.5, ymax = 5 / 20, fill = "#FF0000"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = min(ivr_val_qu_stat_$Date), xmax = max(ivr_val_qu_stat_$Date), ymin = 5 / 20, ymax = 25 / 20, fill = "#F59404"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = min(ivr_val_qu_stat_$Date), xmax = max(ivr_val_qu_stat_$Date), ymin = 25 / 20, ymax = 45 / 20, fill = "#FAFA15"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = min(ivr_val_qu_stat_$Date), xmax = max(ivr_val_qu_stat_$Date), ymin = 45 / 20, ymax = 65 / 20, fill = "#18E125"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = min(ivr_val_qu_stat_$Date), xmax = max(ivr_val_qu_stat_$Date), ymin = 65 / 20, ymax = 85 / 20, fill = "#04F5F5"), alpha = 0.3) +\r\n+  ggplot2::geom_rect(ggplot2::aes(xmin = min(ivr_val_qu_stat_$Date), xmax = max(ivr_val_qu_stat_$Date), ymin = 85 / 20, ymax = 5.5, fill = "#1A1AE8"), alpha = 0.3) +\r\n+  ggplot2::scale_fill_manual(values = c("#F59404", "#FAFA15", "#FF0000", "#04F5F5", "#18E125", "#1A1AE8")) +\r\n+  ggplot2::geom_pointrange(ggplot2::aes(x = ivr_val_eg$Date, y = ivr_val_eg$fr.r.moy / 20, ymin = ivr_val_eg$fr.r.moy / 20 - ivr_val_eg$fr.r.et / 20, ymax = ivr_val_eg$fr.r.moy / 20 + ivr_val_eg$fr.r.et / 20), col = "black") +\r\n+  ggplot2::xlab("Date") +\r\n+  ggplot2::ylab("IVR") +\r\n+  ggplot2::ggtitle(unique(ivr_val_eg$Site_bis)) +\r\n+  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), legend.position = "none")\r\n+\r\n+ggplot2::ggsave(paste0("ivr_", unique(ivr_val_eg$Site), ".png"), ivr_plot, height = 3, width = 3.5)\r\n+\r\n+\r\n+}\r\n+\r\n+report <- args[3]\r\n+loop_file <- source(args[4])\r\n'
b
diff -r 000000000000 -r abc8da8c12ba cb_ivr_site_report_col_scale_loop.Rmd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cb_ivr_site_report_col_scale_loop.Rmd Wed Jan 04 13:21:41 2023 +0000
[
b'@@ -0,0 +1,170 @@\n+---\r\n+params:\r\n+   Site: v\r\n+title: "Indice Visuel de Retournement des blocs (IVR) - suivi 2014-2022"\r\n+#author: "Jonathan Richir, Christian Kerbiriou, Pauline Poisson, Maud Bernard, Juliette Delavenne, Isabelle Le Viol"\r\n+#date: "30 Avril 2021"\r\n+output: \r\n+  #word_document:\r\n+    #reference_docx: word_template.docx\r\n+  officedown::rdocx_document\r\n+---\r\n+  \r\n+```{r setup, include=FALSE}\r\n+knitr::opts_chunk$set(\r\n+  echo = FALSE\r\n+  , message = FALSE\r\n+  , warning = FALSE\r\n+  )\r\n+\r\n+df <- indic\r\n+df_full <- indic_full\r\n+\r\n+df1 <- df %>% dplyr::filter(df$Site == v)\r\n+df1 <- droplevels(df1)\r\n+```\r\n+\r\n+# Contexte\r\n+\r\n+Mieux comprendre les effets des changements globaux et locaux sur les habitats marins, et l\xe2\x80\x99efficacit\xc3\xa9 des mesures de gestion adopt\xc3\xa9es sous-entend de disposer de suivis standardis\xc3\xa9s et d\xe2\x80\x99indicateurs robustes et sensibles refl\xc3\xa9tant l\xe2\x80\x99\xc3\xa9tat des habitats. \r\n+\r\n+L\xe2\x80\x99habitat \xc2\xab Champs de blocs m\xc3\xa9diolittoraux \xc2\xbb abrite une forte diversit\xc3\xa9 de micro-habitats et d\xe2\x80\x99esp\xc3\xa8ces de par sa forte h\xc3\xa9t\xc3\xa9rog\xc3\xa9n\xc3\xa9it\xc3\xa9 structurelle et sa position interm\xc3\xa9diaire sur l\xe2\x80\x99estran, qui en font un des habitats les plus diversifi\xc3\xa9s du m\xc3\xa9diolittoral et \xc3\xa0 fort int\xc3\xa9r\xc3\xaat \xc3\xa9cologique, le long de la fa\xc3\xa7ade Manche-Atlantique fran\xc3\xa7aise. Il est aussi un habitat tr\xc3\xa8s attractif pour la pratique de p\xc3\xaache \xc3\xa0 pied de loisir, qui via le remaniement des blocs, peut impacter les communaut\xc3\xa9s. \r\n+\r\n+Ainsi, l\xe2\x80\x99habitat \xc2\xab Champs de blocs m\xc3\xa9diolittoraux \xc2\xbb a-t-il fait l\xe2\x80\x99objet de plusieurs initiatives nationales et locales (dont LIFE+ \xc2\xab Exp\xc3\xa9rimentation pour une gestion durable et concert\xc3\xa9e de la p\xc3\xaache \xc3\xa0 pied r\xc3\xa9cr\xc3\xa9ative en France \xc2\xbb 2013-2017) pour mieux \xc3\xa9valuer son \xc3\xa9tat et le mettre en relation avec la pression de p\xc3\xaache \xc3\xa0 pied en vue d\xe2\x80\x99adapter la gestion locale, notamment \xc3\xa0 travers le r\xc3\xa9seau d\xe2\x80\x99Aires Marines Prot\xc3\xa9g\xc3\xa9es (Natura 2000, PNM, PNR etc.). \r\n+\r\n+Ces projets ont en particulier permis de d\xc3\xa9velopper un r\xc3\xa9seau d\xe2\x80\x99acteurs-trices de terrain-gestionnaires impliqu\xc3\xa9-e-s et des outils d\xe2\x80\x99\xc3\xa9valuation de l\xe2\x80\x99\xc3\xa9tat \xc3\xa9cologique et de la pression de p\xc3\xaache \xc3\xa0 pied: (1) l\xe2\x80\x99Indicateur Visuel de Retournement des blocs (IVR) - objet du pr\xc3\xa9sent rapport - qui s\xe2\x80\x99apparente \xc3\xa0 un indicateur \xc2\xab paysager \xc2\xbb pour \xc3\xa9valuer la pression de p\xc3\xaache sur la base de crit\xc3\xa8res architecturaux; (2) L\xe2\x80\x99indice de Qualit\xc3\xa9 \xc3\x89cologique des Champs de Blocs (QECB) bas\xc3\xa9 sur des variables biotiques et abiotiques qui r\xc3\xa9pondent \xc3\xa0 la perturbation \xc2\xab retournement des blocs \xc2\xbb.\r\n+\r\n+\r\n+# Application et calcul de l\'Indicateur Visuel de Retournement des blocs (IVR)\r\n+\r\n+Bas\xc3\xa9 sur les proportions de blocs \xc2\xab retourn\xc3\xa9s \xc2\xab et \xc2\xab non retourn\xc3\xa9s \xc2\xbb et variant entre 0 et 5, cet indicateur peut \xc3\xaatre appliqu\xc3\xa9 tr\xc3\xa8s rapidement et plusieurs fois dans l\'ann\xc3\xa9e par le-la gestionnaire. \r\n+\r\n+Pour son application, cinq quadrats de 25m^2^ sont r\xc3\xa9partis \xc3\xa0 l\xe2\x80\x99\xc3\xa9chelle du champ de blocs. Dans chaque quadrat, les blocs retournables \xc3\xa0 dominance d\'algues brunes et/ou rouges (blocs \xc2\xab bruns/rouges \xc2\xbb), et les blocs retournables \xc3\xa0 dominance d\'algues vertes opportunistes ou de roche nue (blocs \xc2\xab blancs/verts \xc2\xbb) sont d\xc3\xa9nombr\xc3\xa9s. \r\n+\r\n+Le rapport, par quadrat, entre le nombre de blocs \xc2\xab bruns/rouges \xc2\xbb ou le nombre de blocs \xc2\xab blancs/verts \xc2\xbb sur le nombre total de blocs compt\xc3\xa9s donnent deux valeurs de pourcentage (qui additionn\xc3\xa9es \xc3\xa9galent 100%). A partir de ces pourcentages, la valeur de l\'IVR peut \xc3\xaatre d\xc3\xa9termin\xc3\xa9e pour chaque quadrat.\r\n+\r\n+Dans sa version originale, ces plages de pourcentages \xc3\xa9taient transform\xc3\xa9es en des \xc3\xa9quivalents entiers num\xc3\xa9riques allant de 0 \xc3\xa0 5 comme suit:\r\n+\r\n+- IVR 0: pr\xc3\xa9sence quasi-exclusive de blocs \xc2\xab bruns/rouges \xc2\xbb (entre 95% et 100%), pas de bloc ou de rares blocs retourn\xc3\xa9s par les p\xc3\xaacheurs \xc3\xa0 pied (entre 0% et <5%);\r\n+- IVR 1: forte dominance des blocs \xc2\xab bruns/rouges \xc2\xbb (entre 75% et <95%) et faible repr\xc3\xa9sentation des blocs \xc2\xab blancs/verts \xc2\xbb (entre 5% et <25%);\r\n+- IVR 2: dominance des blocs \xc2\xab brun'..b' col = "black") +\r\n+  ggplot2::xlab("Date") +\r\n+  ggplot2::ylab("IVR") +\r\n+  ggplot2::ggtitle(unique(df1$Site_bis)) +\r\n+  ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), legend.position = "none")\r\n+```\r\n+\r\n+L\xc3\xa9gende des figures. Evolution temporelle de la valeur mediane de l\'IVR au site `r unique(df1$Site.bis)` (points noirs), en comparaison \xc3\xa0 celles des vingt-trois autres champs de blocs suivis le long de la fa\xc3\xa7ade Manche-Atlantique fran\xc3\xa7aise (points gris). Les barres repr\xc3\xa9sentent la distribution des valeurs individuelles d\'IVR par quadrat au site `r unique(df1$Site.bis)` (n = `r sort(unique(df1$nb.))`) entre valeurs minimums et maximums. Graphique du haut - La distribution en escalier des valeurs m\xc3\xa9dianes de l\'IVR refl\xc3\xa8te le caract\xc3\xa8re discret de l\'\xc3\xa9chelle utilis\xc3\xa9e. Graphique du bas - Le d\xc3\xa9coupage horizontal de la fen\xc3\xaatre graphique repr\xc3\xa9sente les 5 classes d\'occurrence de retournement des blocs mobiles, de quasi-inexistant en bleu \xc3\xa0 dominant en rouge, ramen\xc3\xa9e sur une \xc3\xa9chelle continue de 0 \xc3\xa0 5.\r\n+\r\n+Ces valeurs propres au site `r unique(df1$Site.bis)` peuvent \xc3\xaatre resitu\xc3\xa9es par rapport aux autres valeurs m\xc3\xa9dianes de l\'IVR obtenues pour les vingt-trois autres sites suivis sur la p\xc3\xa9riode 2014-2017 \xc3\xa0 l\xe2\x80\x99\xc3\xa9chelle de la fa\xc3\xa7ade Manche-Atlantique fran\xc3\xa7aise (points gris). Tous sites confondus, la pression de p\xc3\xaache \xc3\xa0 pied est tr\xc3\xa8s variable dans le temps et dans l\'espace, ce qui se traduit par une distribution des valeurs m\xc3\xa9dianes de l\'IVR occupant toute la fen\xc3\xaatre graphique. \r\n+\r\n+\r\n+# Continuit\xc3\xa9 du suivi du site `r unique(df1$Site_bis)`\r\n+\r\n+Ce bref rapport pr\xc3\xa9sente l\'\xc3\xa9volution de la valeur de l\'indice IVR au site `r unique(df1$Site.bis)`, suivi de `r min(unique(df1$Annee), na.rm = T)` \xc3\xa0 `r max(unique(df1$Annee), na.rm = T)`, et la resitue par rapport aux valeurs IVR des vingt-trois autres champs de blocs suivis  de 2014 \xc3\xa0 2017 sur la fa\xc3\xa7ade Manche-Atlantique fran\xc3\xa7aise. Il illustre l\'\xc3\xa9volution dans le temps de la pression de la p\xc3\xaache \xc3\xa0 pied, et rappelle la n\xc3\xa9cessit\xc3\xa9 de continuer d\'en \xc3\xa9valuer l\'impact, que les observations r\xc3\xa9colt\xc3\xa9es traduisent du maintien d\'une faible pression de p\xc3\xaache, d\'une diminution de cette derni\xc3\xa8re au fil du temps, au plus pr\xc3\xa9occupant d\'un retournement dommageable d\'un grand nombre de blocs.\r\n+\r\n+Au nom du Groupe de Travail Champs de Blocs, nous esp\xc3\xa9rons pouvoir continuer \xc3\xa0 compter sur vous pour participer \xc3\xa0 ces suivis; et bien \xc3\xa9videmment, si vous avez la possibilit\xc3\xa9 d\xc3\xa8s le printemps prochain de retourner sur le terrain effectuer de nouveaux relev\xc3\xa9s, ceux-ci, tr\xc3\xa8s utiles, permettront d\'\xc3\xa9valuer les tendances observ\xc3\xa9es graphiquement ci-dessus sur une plus longue p\xc3\xa9riode.\r\n+\r\n+\r\n+# Remerciements et bibliographie\r\n+\r\n+Le projet est financ\xc3\xa9, \xc3\xa0 dat\xc3\xa9 du 15 avril 2021, par une convention OFB Mus\xc3\xa9um national d\'Histoire naturelle (MNHN) dans le cadre du Life Marha (LIFE 16 IPE FR001). Le Groupe de Travail Champs de Blocs remercie tous les participants au projet.\r\n+\r\n+Contacts : jonathan.richir@mnhn.fr (post-doctorant MNHN, en charge du projet), isabelle.le-viol@mnhn.fr (responsable MNHN du projet), christian.kerbiriou@mnhn.fr (responsable MNHN du projet), pour le Groupe de Travail.\r\n+\r\n+Litt\xc3\xa9rature conseill\xc3\xa9e:\r\n+\r\n+- Bernard M., (2012). Les habitats rocheux intertidaux sous l\xe2\x80\x99influence d\xe2\x80\x99activit\xc3\xa9s anthropiques : structure, dynamique et enjeux de conservation. Sciences agricoles. Universit\xc3\xa9 de Bretagne occidentale - Brest. NNT : 2012BRES0010. 423 pp. Th\xc3\xa8se disponible sur https://tel.archives-ouvertes.fr/tel-00720611/.\r\n+\r\n+- Verbeke G., Maison E. (2013). Fiche S8. D\xc3\xa9finition d\xe2\x80\x99indicateurs de perturbations des champs de blocs, dans : La gestion de la p\xc3\xaache de loisir dans les aires marines prot\xc3\xa9g\xc3\xa9es, Recueil d\xe2\x80\x99exp\xc3\xa9riences des gestionnaires. Coll. \xc2\xab Cahiers techniques \xc2\xbb, Montpellier, Aten, n\xc2\xb087: 63-66. Fiche disponible sur http://ct87.espaces-naturels.fr/.\r\n+\r\n+<br>\r\n+\r\n+![](logo_merged.png){width=1000}\r\n'
b
diff -r 000000000000 -r abc8da8c12ba div_index.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/div_index.r Wed Jan 04 13:21:41 2023 +0000
[
b'@@ -0,0 +1,187 @@\n+# author: "Jonathan Richir"\n+# date: "01 October 2022"\n+\n+\n+#Rscript\n+\n+###############################\n+##  ##\n+###############################\n+\n+#####Packages : dplyr\n+#               tidyr\n+#               readr\n+#               writexl\n+#               stringr\n+#               readxl\n+#               tibble\n+#               lubridate\n+#               cowplot\n+#               magrittr\n+#               rmarkdown\n+library(magrittr)\n+library(dplyr)\n+#####Load arguments\n+\n+args <- commandArgs(trailingOnly = TRUE)\n+\n+#####Import data\n+\n+if (length(args) < 1) {\n+    stop("This tool needs at least 1 argument")\n+}else {\n+    qecnato0 <- args[1]\n+\n+}\n+\n+qecnato0 <- readRDS(qecnato0)\n+\n+\n+# first, create vector (4) for qecb and fishing by region (same as above)\n+\n+bret_egmp_basq_qecb <- c(\n+  "X..algues.brunes",\n+  "X..algues.rouges",\n+  "X..algues.vertes",\n+  "X..Cladophora",\n+  "X..Lithophyllum",\n+  "Nb.Littorina.obtusata",\n+  "Nb.Gibbula.cineraria",\n+  "Nb.Gibbula.pennanti",\n+  "Nb.Gibbula.umbilicalis",\n+  "Nb.Phallusia.mamillata",\n+  "Nb.Tethya.aurantium",\n+  "Nb.Spirobranchus.lamarckii.total",\n+  "Nb.spirorbis.total",\n+  "X..Eponges",\n+  "X..Ascidies.Coloniales",\n+  "X..Ascidies.Solitaires",\n+  "X..Bryozoaires.Dresses",\n+  "X..Balanes.Vivantes"\n+  #, "X..Recouvrement.Sediment"\n+  #, "X..Roche.Nue"\n+  #, "X..Surface.Accolement"\n+  )\n+\n+egmp_basq_qecb <- c("Nb.Crassostrea.gigas", "Nb.Ostrea.edulis", "X..Mytilus.sp.", "X..Hermelles", "X..Hydraires")\n+\n+bret_egmp_basq_fishing <- c("Nb.Cancer.pagurus..Tourteau.",\n+                            "Nb.Necora.puber..Etrille.",\n+                            "Nb.Carcinus.maenas..Crabe.vert.",\n+                            "Nb.Nucella.lapilus..Pourpre.",\n+                            "Nb.Galathea..Galath\xc3\xa9es.",\n+                            "Nb.Lophozozymus.incisus..ancien.Xantho.incisus.",\n+                            "Nb.Palaemon.sp..Crevette.bouquet.ou.crevette.rose.",\n+                            "Nb.Haliotis.tuberculata..Ormeau.",\n+                            "Nb.Littorina.littorea..Bigorneau.",\n+                            "Nb.Xantho.pilipes..Xanthe.poilu.",\n+                            "Nb.Mimachlamys.varia..P\xc3\xa9toncle.noir.")\n+\n+egmp_basq_fishing <- c("Nb.Eriphia.verrucosa..Crabe.verruqueux.", "Nb.Octopus.vulgaris..Poulpe.", "Nb.Paracentrotus.lividus..Oursin.", "Nb.Stramonita.haemastoma..Pourpre.bouche.de.sang.")\n+\n+# here I can choose to either replace spirorbis and/or spirobranchus by their log10 transformation in bret_egmp_basq_qecb vector\n+bret_egmp_basq_qecb <- replace(bret_egmp_basq_qecb, bret_egmp_basq_qecb == "Nb.spirorbis.total", "log10.Nb.spirorbis.total")\n+\n+## Diversity index\n+\n+\n+# adiv contains two main functions for species diversity indices: speciesdiv, which includes widely used indices such as species richness and the Shannon index, and divparam, which includes indices that have a parameter to control the importance given to rare versus abundant species in diversity measurements (Pavoine (2020) - adiv: An r package to analyse biodiversity in ecology).\n+\n+# NB: just like for dissimilarity distance matrices, no sense to use the "fishing" variable lists, because either they are present for the bloc mobile and not for the bloc fixe (therefore false higher diversity for bloc mobile), either they are repeated between face sup\xc3\xa9rieure and face inf\xc3\xa9rieure of bloc mobile.\n+\n+# function in a loop\n+\n+row.names(qecnato0) <- c(paste0(qecnato0$region.site_year_month_day, "_", qecnato0$Quadrat.bis, "_", qecnato0$Type.Bloc, "_", qecnato0$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon, "_", qecnato0$Face))\n+\n+# later on I can copy-paste above code to recreate variable names vector\n+#bret_egmp_basq_qecb\n+#egmp_basq_qecb\n+#Bret_EGMP.BASQ_fishing\n+#EGMP.BASQ_fishing\n+\n+# remove boulder variables\n+bret_egmp_basq_qecb <- bret_egmp_basq_qecb[! bret_egmp_basq_qecb %in% c("X..Recouvrement.Sediment", "X..Roche.Nue", "X..Surface.Accolement")]\n+\n+qecnato0$period <- as.character(qecnato0$period)\n+qec'..b'+  ifelse(unique(div_i$region) == "Bretagne", var. <- c(bret_egmp_basq_qecb), var. <- c(bret_egmp_basq_qecb, egmp_basq_qecb)) # Qu. : Why can\'t R\'s ifelse statements return vectors? => you can circumvent the problem if you assign the result inside the ifelse.\n+\n+  #8 remove empty row cfr: In speciesdiv(div_i[, var.]) & divparam(div_i[, var.]) : empty communities should be discarded\n+  div_i <- dplyr::filter(div_i, rowSums(div_i[, var.]) > 0)\n+\n+  div_i_speciesdiv <- adiv::speciesdiv(div_i[, var.])\n+  adiv_i_df <- data.frame(div_i_speciesdiv)\n+  \n+  div_i_divparam <- adiv::divparam(div_i[, var.], q = c(0, 0.25, 0.5, 1, 2, 4, 8)) # When q increases, abundant species are overweighted compared to rare species, we thus expect that the evenness in species weights decreases.\n+\n+\n+  par(mfrow = c (1, 1))\n+  plot(adiv::divparam(div_i[, var.], q = 0), main = unique(div_i$site_year_month_day))\n+  plot(adiv::divparam(div_i[, var.], q = 0:10), legend = FALSE, main = unique(div_i$site_year_month_day))\n+  \n+  adiv_i_df$x <- div_i_divparam$div$`1`\n+  colnames(adiv_i_df)[which(colnames(adiv_i_df) == "x")] <- paste0("Para. ISD, q = ", div_i_divparam$q[1], " (equi. richness)")\n+  adiv_i_df$x <- div_i_divparam$div$`2`\n+  colnames(adiv_i_df)[which(colnames(adiv_i_df) == "x")] <- paste0("Para. ISD, q = ", div_i_divparam$q[2])\n+  adiv_i_df$x <- div_i_divparam$div$`3`\n+  colnames(adiv_i_df)[which(colnames(adiv_i_df) == "x")] <- paste0("Para. ISD, q = ", div_i_divparam$q[3])\n+  adiv_i_df$x <- div_i_divparam$div$`4`\n+  colnames(adiv_i_df)[which(colnames(adiv_i_df) == "x")] <- paste0("Para. ISD, q = ", div_i_divparam$q[4])\n+  adiv_i_df$x <- div_i_divparam$div$`5`\n+  colnames(adiv_i_df)[which(colnames(adiv_i_df) == "x")] <- paste0("Para. ISD, q = ", div_i_divparam$q[5], " (equi. Simpson)")\n+  adiv_i_df$x <- div_i_divparam$div$`6`\n+  colnames(adiv_i_df)[which(colnames(adiv_i_df) == "x")] <- paste0("Para. ISD, q = ", div_i_divparam$q[6])\n+  adiv_i_df$x <- div_i_divparam$div$`7`\n+  colnames(adiv_i_df)[which(colnames(adiv_i_df) == "x")] <- paste0("Para. ISD, q = ", div_i_divparam$q[7])\n+  \n+  # plot\n+  par(mfrow = c(3, 2))\n+  sapply(names(adiv_i_df[, c(1, 8, 2, 3, 12, 4:7, 9:11, 13:ncol(adiv_i_df))]), \n+         function(cname) {\n+           png(paste0(cname, "_histo.png"))\n+           hist(adiv_i_df[, c(1, 8, 2, 3, 12, 4:7, 9:11, 13:ncol(adiv_i_df))][[cname]], main = "", xlab = cname, breaks = length(unique(adiv_i_df[, c(1, 8, 2, 3, 12, 4:7, 9:11, 13:ncol(adiv_i_df))][[cname]])))\n+dev.off()\n+         }\n+\n+)\n+  par(mfrow = c(1,1))\n+  \n+  div_list[[i]] <- adiv_i_df\n+  \n+  rm(div_i, adiv_i_df, div_i_speciesdiv, div_i_divparam)\n+  \n+}\n+\n+# for the error message due to richness NA data => 35 observations in 21 surveys; no reason to remove these data "...remo", was checked in the complete script.\n+\n+\n+div_df <- do.call("rbind", div_list)\n+\n+\n+# There is an issue with region.terri that are merged with no "_" ...\n+\n+div_df <- tibble::add_column(div_df, rownames. = rownames(div_df), .before = "richness")\n+div_df <- tidyr::separate(div_df, rownames., into = c("region.terri.", "site_year_month_day", "Quadrat.bis", "Type.Bloc", "Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon", "Face"), sep = "_")\n+\n+# I therefore add these lines to solve that issue\n+\n+div_df <- tibble::add_column(div_df, terri. = substring(div_df$region.terri., nchar(div_df$region.terri.)-3), .after = "region.terri.")\n+\n+div_df$region.terri. <- substring(div_df$region.terri., 1, nchar(div_df$region.terri)-4)\n+div_df <- dplyr::rename(div_df, region = region.terri.)\n+\n+div_df$site_year_month_day <- paste0(div_df$terri., "_", div_df$site_year_month_day)\n+div_df <- subset(div_df, select = -c(terri.))\n+\n+div_df$Type.Bloc <- as.factor(div_df$Type.Bloc)\n+div_df$Face <- as.factor(div_df$Face)\n+div_df$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon <- as.integer(div_df$Num\xc3\xa9ro.Bloc.\xc3\xa9chantillon)\n+\n+saveRDS(div_df, "div_df.RDS")\n+write.table(div_df, "Valeurs_stat.tabular", row.names = FALSE, quote = FALSE, sep = "\\t", dec = ".", fileEncoding = "UTF-8")\n'
b
diff -r 000000000000 -r abc8da8c12ba div_index.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/div_index.xml Wed Jan 04 13:21:41 2023 +0000
[
@@ -0,0 +1,83 @@
+<tool id="cb_div" name="Diversity" version="@VERSION@" profile = "20.01">
+    <description>indicators</description>
+    <macros>
+        <import>macro.xml</import>
+    </macros>
+    <expand macro="cb_requirements">
+        <requirement type="package" version="1.3.2">r-tidyverse</requirement>
+        <requirement type="package" version="1.7_20">r-ade4</requirement>
+        <requirement type="package" version="2.2">r-adiv</requirement>
+        <requirement type="package" version="3.4.0">r-ggplot2</requirement>
+    </expand>
+    <required_files>
+        <include type="literal" path="div_index.r"/>
+    </required_files>
+    <command detect_errors="exit_code"><![CDATA[
+        Rscript
+            '$__tool_directory__/div_index.r'
+            '$input_data'
+            '$output_div'
+            '$output_rdata'
+            '$plots'
+        ]]>
+    </command>
+    <inputs>
+        <param name="input_data" type="data" format="rdata" label="Input Clean data"/>
+    </inputs>
+    <outputs>
+        <data name="output_div" from_work_dir="Valeurs_stat.tabular" format="tabular" label="Diversity index"/>
+        <data name="output_rdata" from_work_dir="div_df.RDS" format="rdata" label="Diversity Rdata"/>
+        <collection type="list" name="plots" label="Diversity plot">
+            <discover_datasets pattern="(?P&lt;designation&gt;.+)\.png" visible="false" format="png"/>
+        </collection>
+    </outputs>
+    <tests>
+        <test expect_num_outputs="3">
+            <param name="input_data" value="Clean_Rdata.rdata"/>
+            <output name="output_div">
+                <assert_contents>
+                    <has_n_columns n="20"/>
+                </assert_contents>
+            </output>
+            <output name="output_rdata">
+                <assert_contents>
+                    <has_text text="no"/>
+                </assert_contents>
+            </output>
+            <output_collection name="plots" type="list" count="14"/>
+        </test>
+    </tests>
+    <help><![CDATA[
+====================
+Diversity indicators
+====================
+
+
+**What it does**
+
+Calculates the diversity indicators (Shannon, Simpson, ...). 
+
+**Input description**
+
+Clean Rdata file from the previous tool Dissimilarity.
+
++----------------+
+|      Rdata     |
++================+
+|   Clean data   |
++----------------+
+|       ...      |
++----------------+
+
+
+**Output**
+
+- 1 .RDS file
+- 1 tabular file for all the diversity indices
+- Multiple png plots one for each indices
+
+
+
+    ]]>    </help>
+        <expand macro="cb_bibref"/>
+</tool>
b
diff -r 000000000000 -r abc8da8c12ba logo_merged.png
b
Binary file logo_merged.png has changed
b
diff -r 000000000000 -r abc8da8c12ba loop_col_scale.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/loop_col_scale.r Wed Jan 04 13:21:41 2023 +0000
[
@@ -0,0 +1,14 @@
+library("rmarkdown")
+
+df <- indic
+df_full <- indic_full
+dir.create("results")
+slices <- unique(df$Site)[!is.na(unique(df$Site))]
+
+for (v in slices) {
+    rmarkdown::render(report,
+         output_file = paste0(v, ".docx"),
+         output_dir = file.path("results"),
+         params = list(Site = v)
+    )
+  }
b
diff -r 000000000000 -r abc8da8c12ba macro.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macro.xml Wed Jan 04 13:21:41 2023 +0000
b
@@ -0,0 +1,35 @@
+<macros>
+    <token name="@VERSION@">0.0.0</token>
+    <xml name="cb_requirements">
+        <requirements>
+            <requirement type="package" version="4.2.2">r-base</requirement>
+            <requirement type="package" version="1.0.10">r-dplyr</requirement>
+            <requirement type="package" version="1.2.1">r-tidyr</requirement>
+            <requirement type="package" version="1.5.0">r-stringr</requirement>
+            <requirement type="package" version="3.1.8">r-tibble</requirement>
+            <requirement type="package" version="1.41">r-knitr</requirement>
+            <requirement type="package" version="2.0.3">r-magrittr</requirement>
+           <yield/>
+        </requirements>
+    </xml>
+    <xml name="cb_input"> 
+        <param name="fiche_val" type="data" format="data" label="Input ficheterrain.csv"/>  
+    </xml>
+    <xml name="cb_bibref">  
+        <citations>
+            <citation type="bibtex">
+                @Manual{,
+                title = {Les habitats rocheux intertidaux sous l’influence d’activités anthropiques : structure, dynamique et enjeux de conservation. Sciences agricoles},
+                author = {Bernard M.},
+                year = {2012},
+                note = {https://tel.archives-ouvertes.fr/tel-00720611/}
+            </citation>
+        </citations>
+    </xml>
+    <xml name="topic">
+        <edam_topics>
+           <edam_topic>topic_0610</edam_topic>
+           <edam_topic>topic_3050</edam_topic>
+        </edam_topics>
+    </xml>
+</macros>
b
diff -r 000000000000 -r abc8da8c12ba test-data/Clean_Rdata.rdata
b
Binary file test-data/Clean_Rdata.rdata has changed
b
diff -r 000000000000 -r abc8da8c12ba test-data/champbloc_ivr.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/champbloc_ivr.csv Wed Jan 04 13:21:41 2023 +0000
b
b'@@ -0,0 +1,867 @@\n+"ID Fiche";"id";"Numero Quadrat";"GPS1 Latitude";"GPS1 Longitude";"GPS2 Latitude";"GPS2 Longitude";"GPS3 Latitude";"GPS3 Longitude";"GPS4 Latitude";"GPS4 Longitude";"Numero Photo";"Num\xe9ro strate";"Description Strate";"Nb Blocs Non Retournes";"Nb Blocs Retournes"\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";4;47.547729;-2.950839;;;;;;;"Strate1_Q4.JPG";"1";"Zone de blocs mobiles de taille moyenne sur sable grossier, cailloux et cailloutis. Blocs dont les faces sup\xe9rieures sont domin\xe9es par des algues vertes opportunistes, des algues rouges en m\xe9nage + nombreux patchs de roche nue";19;4;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";5;47.548053;-2.951211;;;;;;;"Strate2_Q5.JPG";"2";"Zone de blocs mobiles sur platier rocher qui s\'ensable,  domin\xe9s par le Fucus serratus, blocs de taille moyenne.";38;11;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";1;47.54815;-2.951336;;;;;;;"Strate2_Q1.JPG";"2";"Zone de blocs mobiles sur platier rocher qui s\'ensable,  domin\xe9s par le Fucus serratus, blocs de taille moyenne.";24;20;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";2;47.547829;-2.950839;;;;;;;"Strate1_Q2.JPG";"1";"Zone de blocs mobiles de taille moyenne sur sable grossier, cailloux et cailloutis. Blocs dont les faces sup\xe9rieures sont domin\xe9es par des algues vertes opportunistes, des algues rouges en m\xe9nage + nombreux patchs de roche nue";24;7;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";3;47.547866;-2.950759;;;;;;;"Strate1_Q3.JPG";"1";"Zone de blocs mobiles de taille moyenne sur sable grossier, cailloux et cailloutis. Blocs dont les faces sup\xe9rieures sont domin\xe9es par des algues vertes opportunistes, des algues rouges en m\xe9nage + nombreux patchs de roche nue";20;10;\n+373529;"BDD_IVR&QECB_Locmariaquer_22032015_VImport.xlsx";5;47.54803;-2.95118;;;;;;;"DSCN1175.JPG";"2";"Zone de blocs mobiles sur platier rocher qui s\'ensable,  domin\xe9s par le Fucus serratus, blocs de taille moyenne.";39;6;\n+373529;"BDD_IVR&QECB_Locmariaquer_22032015_VImport.xlsx";4;47.5477;-2.95079;;;;;;;"DSCN1167.JPG";"1";"Zone de blocs mobiles de taille moyenne sur sable grossier, cailloux et cailloutis. Blocs dont les faces sup\xe9rieures sont domin\xe9es par des algues vertes opportunistes, des algues rouges en m\xe9nage + nombreux patchs de roche nue";23;11;\n+373529;"BDD_IVR&QECB_Locmariaquer_22032015_VImport.xlsx";3;47.54779;-2.95073;;;;;;;"DSCN1160.JPG";"1";"Zone de blocs mobiles de taille moyenne sur sable grossier, cailloux et cailloutis. Blocs dont les faces sup\xe9rieures sont domin\xe9es par des algues vertes opportunistes, des algues rouges en m\xe9nage + nombreux patchs de roche nue";18;10;\n+373529;"BDD_IVR&QECB_Locmariaquer_22032015_VImport.xlsx";2;47.54783;-2.95083;;;;;;;"DSCN1149.JPG";"1";"Zone de blocs mobiles de taille moyenne sur sable grossier, cailloux et cailloutis. Blocs dont les faces sup\xe9rieures sont domin\xe9es par des algues vertes opportunistes, des algues rouges en m\xe9nage + nombreux patchs de roche nue";16;31;\n+373529;"BDD_IVR&QECB_Locmariaquer_22032015_VImport.xlsx";1;47.54812;-2.95133;;;;;;;"DSCN1141.JPG";"2";"Zone de blocs mobiles sur platier rocher qui s\'ensable,  domin\xe9s par le Fucus serratus, blocs de taille moyenne.";34;5;\n+373596;"BDD_IVR&QECB_Locmariaquer_20151030_VImport.xlsx";5;47.54803;-2.95118;;;;;;;"DSCN2997.JPG";"2";"Zone de blocs mobiles sur platier rocher qui s\'ensable,  domin\xe9s par le Fucus serratus, blocs de taille moyenne.";27;5;\n+373596;"BDD_IVR&QECB_Locmariaquer_20151030_VImport.xlsx";4;47.5477;-2.95079;;;;;;;"DSCN2991.JPG";"1";"Zone de blocs mobiles de taille moyenne sur sable grossier, cailloux et cailloutis. Blocs dont les faces sup\xe9rieures sont domin\xe9es par des algues vertes opportunistes, des algues rouges en m\xe9nage + nombreux patchs de roche nue";20;13;\n+373596;"BDD_IVR&QECB_Locmariaquer_20151030_VImport.xlsx";3;47.54779;-2.95073;;;;;;;"DSCN2985.JPG";"1";"Zone de blocs mobiles de taille moyenne sur sable grossier, cailloux et cailloutis. Blocs dont les face'..b'e teinte claire. Algues vertes (ulves) et rouges (15-20cm).";6;36;\n+513924;"2021-10-07-EGMP-CDB-002";5;46.027483;-1.347033;;;;;;;"2021-10-07_EGMP_114_CDB-Q5_513929.JPG";"Pas de stratification";"Nombreux blocs de tailles vari\xe9es, galets et sables grossiers sur platier rocheux. Immerg\xe9 en partie. Quelques algues vertes 10-15 cm.";27;4;\n+513924;"2021-10-07-EGMP-CDB-002";4;46.028233;-1.345733;;;;;;;"2021-10-07_EGMP_114_CDB-Q4_513928.JPG";"Pas de stratification";"Nombreux blocs de tailles vari\xe9es et sables grossiers. Pr\xe9sence de gros blocs. Algues vertes et rouges 30 cm.";10;0;\n+513924;"2021-10-07-EGMP-CDB-002";2;46.0266;-1.346567;;;;;;;"2021-10-07_EGMP_114_CDB-Q2_513927.JPG";"Pas de stratification";"Blocs immerg\xe9s et sables grossiers sur platier. Algues vertes et rouges 30 cm.";13;0;\n+513924;"2021-10-07-EGMP-CDB-002";1;46.028415;-1.346707;;;;;;;"2021-10-07_EGMP_114_CDB-Q1_513926.JPG";"Pas de stratification";"Sables grossiers et cailloux sur platier rocheux immerg\xe9. Peu de blocs. Algues 15-20 cm.";2;0;\n+526185;"2021-10-07-BRES-CDB-003";5;;;;;;;;;"2021-10-07_BRES_12_CDB-Q5_526191.JPG";"Pas de stratification";"  en attente de la carto";168;38;\n+526185;"2021-10-07-BRES-CDB-003";2;;;;;;;;;"2021-10-07_BRES_12_CDB-Q2_526188.JPG";"Pas de stratification";"  en attente de la carto";95;44;\n+526185;"2021-10-07-BRES-CDB-003";4;;;;;;;;;"2021-10-07_BRES_12_CDB-Q4_526190.JPG";"Pas de stratification";"en attente de la carto";85;63;\n+526834;"2021-10-08-PNMI-CDB-002";5;;;;;;;;;"2021-10-08_PNMI_07_CDB-Q5_526840.jpg";"Pas de stratification";"Chondrus crispus 80%\n+Algues rouges 10%\n+";67;0;\n+526834;"2021-10-08-PNMI-CDB-002";4;;;;;;;;;"2021-10-08_PNMI_07_CDB-Q4_526839.jpg";"Pas de stratification";"Himanthalia elongata 40%\n+Chondrus 40%\n+Bifurcaria bifurcata 5%\n+Algues vertes 5%";66;4;\n+526834;"2021-10-08-PNMI-CDB-002";3;;;;;;;;;"2021-10-08_PNMI_07_CDB-Q3_526838.jpg";"Pas de stratification";"Himanthalia elongata 40%\n+Chondrus 40%\n+Pr\xe9sence de laminaires\n+Algues vertes 5%\n+Algues rouges 5%";91;0;\n+526834;"2021-10-08-PNMI-CDB-002";2;;;;;;;;;"2021-10-08_PNMI_07_CDB-Q2_526837.jpg";"Pas de stratification";"laminaire 50%\n+palmaria palmata 20%\n+algues rouges 30%";23;1;\n+526834;"2021-10-08-PNMI-CDB-002";1;;;;;;;;;"2021-10-08_PNMI_07_CDB-Q1_526836.jpg";"Pas de stratification";"Chondrus crispus 70%\n+Algues vertes 5%\n+Himanthalia elongata 10%\n+Algues rouges 15%";103;2;\n+527881;"2020-03-13-BRES-CDB-001";3;48.32785;4.324033;;;;;;;;"Pas de stratification";"Peu de blocs, petits blocs\n+Sables grossiers, ma\xebrl\n+Quelques algues vertes\n+Algues brunes et rouges";51;53;\n+527881;"2020-03-13-BRES-CDB-001";2;48.327983;4.324367;;;;;;;;"Pas de stratification";"Blocs ensabl\xe9s nombreux, blocs \xe9parses\n+Majorit\xe9 de substrat (coquillages, ma\xebrl, sable grossier)\n+Majorit\xe9 d\'algues brunes et rouges";35;18;\n+527881;"2020-03-13-BRES-CDB-001";1;48.32795;4.324167;;;;;;;;"Pas de stratification";"Blocs petits \xe0 moyens sur sable grossier, ma\xebrl, petits blocs\n+M\xe9lange blocs retourn\xe9s/non retourn\xe9s + algues brunes/rouges";66;64;\n+527937;"2020-09-18-BRES-CDB-002";4;;;;;;;;;"2020-09-18_BRES_12_CDB-Q4_527942.JPG";"Pas de stratification";"Sable coquillier, petits d\xe9bris\n+Beaucoup de petits blocs mais quelques gros blocs";106;17;\n+527937;"2020-09-18-BRES-CDB-002";3;;;;;;;;;"2020-09-18_BRES_12_CDB-Q3_527941.JPG";"Pas de stratification";"Sable coquillier\n+Petits d\xe9bris\n+Beaucoup de petits blocs";36;40;\n+527937;"2020-09-18-BRES-CDB-002";2;;;;;;;;;"2020-09-18_BRES_12_CDB-Q2_527940.JPG";"Pas de stratification";"Petits blocs \xe9parses, d\xe9bris coquillers et ma\xebrl\n+En cours de recolonisation";16;50;\n+527937;"2020-09-18-BRES-CDB-002";1;;;;;;;;;"2020-09-18_BRES_12_CDB-Q1_527939.JPG";"Pas de stratification";"Dominance algues brunes, blocs de taille moyenne sur cailloutis, tr\xe8s accol\xe9s";104;57;\n+527943;"2020-09-19-BRES-CDB-003";5;;;;;;;;;"2020-09-19_BRES_12_CDB-Q5_527945.JPG";"Pas de stratification";"Petits blocs, peu de blocs\n+Dominance algues rouges\n+Ma\xebrl\n+Quelques algues vertes\n+Impact p\xeache visible";110;28;\n'
b
diff -r 000000000000 -r abc8da8c12ba test-data/champbloc_qecb.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/champbloc_qecb.csv Wed Jan 04 13:21:41 2023 +0000
b
b'@@ -0,0 +1,2939 @@\n+"id";"ID Fiche";"Type Bloc";"Num\xe9ro Bloc \xe9chantillon";"Face";"Couleur dominante";"Numero Photo";"R\xe9f\xe9rence bloc";"% algues brunes";"Strate algues brunes";"% algues rouges";"Strate algues rouges";"% algues vertes";"Strate algues vertes";"% Cladophora";"% Lithophyllum";"% Recouvrement Sediment";"Type Sediment";"% Roche Nue";"Nb Littorina obtusata";"Nb Gibbula cineraria";"Nb Gibbula pennanti";"Nb Gibbula umbilicalis";"Nb Phallusia mamillata";"Nb Tethya aurantium";"Nb Spirobranchus lamarckii 1B";"Nb Spirobranchus lamarckii 2B";"Nb Spirobranchus lamarckii 3B";"Nb Spirobranchus lamarckii 4B";"Nb Spirobranchus lamarckii 5B";"Nb Spirobranchus lamarckii total";"Nb spirorbis 1A";"Nb spirorbis 2A";"Nb spirorbis 3A";"Nb spirorbis 4A";"Nb spirorbis 5A";"Nb spirorbis total";"Nb Crassostrea gigas";"Nb Ostrea edulis";"% Mytilus sp.";"% Hermelles";"% Hydraires";"% Eponges";"% Ascidies Coloniales";"% Ascidies Solitaires";"% Bryozoaires Dresses";"% Balanes Vivantes";"Commentaires Avant";"% Surface Accolement";"Type sustrat observ\xe9";"Commentaires";"Nb Cancer pagurus (Tourteau)";"Nb Necora puber (Etrille)";"Nb Carcinus maenas (Crabe vert)";"Nb Nucella lapilus (Pourpre)";"Nb Eriphia verrucosa (Crabe verruqueux)";"Nb Octopus vulgaris (Poulpe)";"Nb Galathea (Galath\xe9es)";"Nb Paracentrotus lividus (Oursin)";"Nb Lophozozymus incisus (ancien Xantho incisus)";"Nb Palaemon sp (Crevette bouquet ou crevette rose)";"Nb Haliotis tuberculata (Ormeau)";"Nb Stramonita haemastoma (Pourpre bouche de sang)";"Nb Littorina littorea (Bigorneau)";"Nb Xantho pilipes (Xanthe poilu)";"Nb Mimachlamys varia (P\xe9toncle noir)";"Commentaires"\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";"Bloc fix\xe9";"2";"face sup\xe9rieure";"Rouge";"Strate 1 Q2 BF.JPG";"oct14-LocB1Q2";0.0;;75.0;2;1.0;2;0.0;0.0;20.0;"Vase";0.0;0;0;0;0;0;0;;;;;;0;;;;;;0;;;;;;4.0;0.0;0.0;0.0;0.0;;;;;;;;;;;;;;;;;;;;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";"Bloc mobile";"9";"face sup\xe9rieure";"Color\xe9e";"S2 Q5 Bloc9 face sup.JPG";"oct14-LocB9sup";75.0;2;15.0;2;1.0;1;0.0;0.0;0.0;"Pas de s\xe9diment";0.0;0;0;1;0;0;0;;;;;;2;;;;;;0;;;;;;3.0;0.0;0.0;0.0;45.0;;100.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;0;0;0;0;;;0;;0;0;0;;0;0;0;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";"Bloc mobile";"9";"face inf\xe9rieure";"Color\xe9e";"S2 Q5 Bloc9 face inf.JPG";"oct14-LocB9inf";0.0;;0.0;;0.0;;0.0;0.0;0.0;"Pas de s\xe9diment";35.0;0;0;0;0;0;0;;;;;;220;;;;;;320;;;;;;0.0;0.0;0.0;0.0;2.0;;100.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;0;0;0;0;;;0;;0;0;0;;0;0;0;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";"Bloc mobile";"8";"face sup\xe9rieure";"Rouge";"S1 Q4 Bloc8 face sup.JPG";"oct14-LocB8sup";0.0;;85.0;2;1.0;2;0.0;5.0;35.0;"Sable fin";1.5;0;0;5;0;0;0;;;;;;20;;;;;;0;;;;;;0.5;0.0;0.5;0.0;0.0;;7.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;1;0;0;0;;;0;;0;0;0;;0;0;0;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";"Bloc mobile";"8";"face inf\xe9rieure";"Rouge";"S1 Q4 Bloc8 face inf.JPG";"oct14-LocB8inf";0.0;;0.0;;0.0;;0.0;0.0;0.0;"Pas de s\xe9diment";1.0;0;18;0;0;0;0;;;;;;140;;;;;;1280;;;;;;2.5;1.5;0.5;0.0;0.0;;7.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;1;0;0;0;;;0;;0;0;0;;0;0;0;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";"Bloc mobile";"7";"face sup\xe9rieure";"Color\xe9e";"S1 Q4 Bloc7 face sup.JPG";"oct14-LocB7sup";0.0;;50.0;2;21.0;2;0.0;0.0;30.0;"Vase";3.0;0;0;2;0;4;0;;;;;;240;;;;;;0;;;;;;0.0;0.0;0.0;0.0;5.0;;70.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;0;0;0;0;;;0;;0;0;0;;0;0;0;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";"Bloc mobile";"7";"face inf\xe9rieure";"Color\xe9e";"S1 Q4 Bloc7 face inf.JPG";"oct14-LocB7inf";0.0;;0.0;;0.0;;0.0;0.0;0.0;"Pas de s\xe9diment";0.0;0;0;0;0;0;0;;;;;;380;;;;;;1960;;;;;;3.0;0.0;0.0;0.0;1.0;;70.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;0;0;0;0;;;0;;0;0;0;;0;0;0;\n+373462;"BDD_IVR&QECB_Locmariaquer_20141010_VImport.xlsx";"Bloc mobile";"6";"face sup\xe9rieure";"Rouge";"S1 '..b'ossier, d\xe9bris coquillers";;;1;;;;;;;;;;;;;;\n+527937;"2020-09-18-BRES-CDB-002";"Bloc fix\xe9";"1";"face sup\xe9rieure";"Color\xe9e";"2020-09-18_BRES_12_CDB-1_sup_527966.JPG";"BRES_PteduRoz_2020_09_18_Q1_Bref";52.0;2;6.0;2;2.0;2;0.0;25.0;0.0;"Pas de s\xe9diment";0.0;2;11;0;1;0;0;;;;;;0;1;0;0;1;1;120;;;;;;0.0;0.0;0.0;0.0;2.5;;;;;;;;;;;;;;;;;;;;\n+527937;"2020-09-18-BRES-CDB-002";"Bloc mobile";"2";"face sup\xe9rieure";"Color\xe9e";"2020-09-18_BRES_12_CDB-2_sup_527962.JPG";"BRES_PteduRoz_2020_09_18_Q1_B2_FS";1.0;;0.0;;11.0;;0.0;0.0;0.0;"Pas de s\xe9diment";9.0;0;0;0;1;0;0;;;;;;0;;;;;;0;;;;;;0.0;0.0;0.0;0.0;32.0;;24.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;;1;;;;;;;1;;;;;;;\n+527937;"2020-09-18-BRES-CDB-002";"Bloc mobile";"2";"face inf\xe9rieure";"Color\xe9e";"2020-09-18_BRES_12_CDB-2_inf_527962.JPG";"BRES_PteduRoz_2020_09_18_Q1_B2_FI";0.0;;0.0;;0.0;;0.0;3.5;0.0;"Pas de s\xe9diment";6.5;0;0;1;0;0;0;;;;;;79;21;29;22;19;28;4760;;;;;;0.0;4.0;0.0;0.0;1.0;;24.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;;1;;;;;;;1;;;;;;;\n+527937;"2020-09-18-BRES-CDB-002";"Bloc mobile";"1";"face sup\xe9rieure";"Color\xe9e";"2020-09-18_BRES_12_CDB-1_sup_527958.JPG";"BRES_PteduRoz_2020_09_18_Q1_B1_FS";20.0;;3.5;;0.0;;0.0;0.0;0.0;"Pas de s\xe9diment";25.0;2;5;0;6;0;0;13;14;3;3;8;820;8;9;0;18;9;1760;;;;;;0.0;0.75;0.0;0.0;9.0;;26.0;"Sable grossier";;;;;;;;;;;;;;;;;\n+527937;"2020-09-18-BRES-CDB-002";"Bloc mobile";"1";"face inf\xe9rieure";"Color\xe9e";"2020-09-18_BRES_12_CDB-1_inf_527958.JPG";"BRES_PteduRoz_2020_09_18_Q1_B1_FI";0.0;;0.0;;0.0;;0.0;0.0;0.0;"Pas de s\xe9diment";0.0;0;0;0;0;0;0;;;;;;42;12;19;25;8;12;3040;;;;;;0.0;3.5;0.0;0.0;13.0;;26.0;"Sable grossier";;;;;;;;;;;;;;;;;\n+527937;"2020-09-18-BRES-CDB-002";"Bloc mobile";"5";"face sup\xe9rieure";"Color\xe9e";"2020-09-18_BRES_12_CDB-5_sup_527982.JPG";"BRES_PteduRoz_2020_09_18_Q3_B5_FS";95.0;;25.0;;15.0;2;0.0;0.0;80.0;"Vase";0.0;1;1;0;3;0;0;;;;;;0;;;;;;0;;;;;;0.0;0.0;0.0;0.0;0.0;;20.0;"Sable grossier";;;;;;;;;;1;;;;;;6;\n+527937;"2020-09-18-BRES-CDB-002";"Bloc mobile";"5";"face inf\xe9rieure";"Color\xe9e";"2020-09-18_BRES_12_CDB-5_inf_527982.JPG";"BRES_PteduRoz_2020_09_18_Q3_B5_FI";0.0;;0.0;;0.0;;0.0;0.0;0.0;"Pas de s\xe9diment";0.0;0;1;0;0;0;0;;;;;;2;;;;;;48;;;;;;1.0;7.0;0.13;0.0;9.0;;20.0;"Sable grossier";;;;;;;;;;1;;;;;;6;\n+527943;"2020-09-19-BRES-CDB-003";"Bloc mobile";"9";"face sup\xe9rieure";"Color\xe9e";"2020-09-19_BRES_12_CDB-9_sup_527950.JPG";"BRES_PteduRoz_2020_09_19_Q5_B9_FS";12.0;2;5.0;2;8.0;;1.5;0.0;90.0;"Sable fin";0.0;0;0;0;1;0;0;;;;;;0;0;1;0;0;0;40;;;;;;0.0;0.0;0.0;0.0;0.0;;60.0;"Sable grossier";;0;0;3;0;;;0;;0;0;0;;0;0;1;"1 blennie\n+1 asterina gibboser\n+1 chiton"\n+527943;"2020-09-19-BRES-CDB-003";"Bloc mobile";"9";"face inf\xe9rieure";"Color\xe9e";"2020-09-19_BRES_12_CDB-9_inf_527950.JPG";"BRES_PteduRoz_2020_09_19_Q5_B9_FI";0.5;1;8.0;1;0.0;;0.0;0.0;0.0;"Pas de s\xe9diment";11.0;0;3;0;0;0;0;0;1;2;1;3;140;1;6;7;15;4;1320;;;;;;0.0;0.0;5.0;0.0;2.5;;60.0;"Sable grossier";;0;0;3;0;;;0;;0;0;0;;0;0;1;"1 blennie\n+1 asterina gibboser\n+1 chiton"\n+527943;"2020-09-19-BRES-CDB-003";"Roche en place";"5";"face sup\xe9rieure";"Color\xe9e";"2020-09-19_BRES_12_CDB-5_sup_527946.JPG";"BRES_PteduRoz_2020_09_19_Q5_Bref";0.0;;26.0;2;7.0;;0.0;3.0;90.0;"Sable fin";3.0;0;1;0;0;0;0;;;;;;6;0;1;3;12;5;840;;;;;;0.0;0.0;0.0;0.0;2.0;"1 bernard l\'hermite\n+1 nasse\n+2 p\xe9toncles";;;;;;;;;;;;;;;;;;;\n+527943;"2020-09-19-BRES-CDB-003";"Bloc mobile";"10";"face sup\xe9rieure";"Color\xe9e";"2020-09-19_BRES_12_CDB-10_sup_527954.JPG";"BRES_PteduRoz_2020_09_19_Q5_B10_FS";0.0;;0.0;;0.0;;0.0;0.5;0.0;"Pas de s\xe9diment";0.0;0;0;0;0;0;0;0;2;1;2;2;140;12;6;9;19;9;2200;;;;;;0.0;0.0;2.0;0.0;0.0;;51.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;0;0;0;0;;;0;;0;0;0;;0;0;0;\n+527943;"2020-09-19-BRES-CDB-003";"Bloc mobile";"10";"face inf\xe9rieure";"Color\xe9e";"2020-09-19_BRES_12_CDB-10_inf_527954.JPG";"BRES_PteduRoz_2020_09_19_Q5_B10_FI";0.0;;70.0;;5.0;;0.5;15.0;90.0;"Sable fin";1.5;0;0;0;0;0;0;;;;;;0;;;;;;0;;;;;;0.0;0.0;0.0;0.0;0.0;;51.0;"Petits blocs, sable grossier, d\xe9bris coquillers";;0;0;0;0;;;0;;0;0;0;;0;0;0;\n'
b
diff -r 000000000000 -r abc8da8c12ba test-data/ficheterrain.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/ficheterrain.csv Wed Jan 04 13:21:41 2023 +0000
b
b'@@ -0,0 +1,510 @@\n+"ID Fiche";"type de suivi";"date sortie";"heure d\xe9but";"heure fin";"coefficient mar\xe9e";"heure mar\xe9e basse";"hauteur basse mer";"p\xe9riode";"libell\xe9 campagne";"libell\xe9 sortie";"r\xe9f\xe9rent sortie";"\xe9quipe terrain";"territoire";"code site";"site";"sous site";"zone habitat";"type protocole";"version protocole";"auteur saisie";"organisme suivi";"couverture nuageuse";"pr\xe9cipitations";"pression atmosph\xe9rique";"temp\xe9rature";"force du vent";"force du vent en rafale";"direction du vent";"\xe9tat de la mer";"commentaires"\n+372990;"Suivi des champs de blocs";"2015-02-21 00:00:00.0";;;115;"15:33";;;"f\xe9vr.-15";"GONB_00C1_CDB_f\xe9vr.-15";"Non identifi\xe9";"Etienne ROGEAU";"Golfe Normand Breton";"GONB_00C";"Pointe de la Fosse Eyrand \xe0 la Pointe du Champ du Port";;"Champs de blocs de l\'\xeelot Saint-Michel (p\xe9rim\xe8tre \xe9tendu)";"Suivis comportementaux";"V2015";"SYSTEME";"Mission d\'\xe9tude du golfe normand-breton";;"Pluie fine";;7.0;;;;;"Reprise de donn\xe9es Champs Blocs\n+"\n+372999;"Suivi des champs de blocs";"2015-08-03 00:00:00.0";;;106;"16:43";;;"ao\xfbt-15";"GONB_00C1_CDB_ao\xfbt-15";"Non identifi\xe9";"Florent CORBAIN et \n+Aurelien GUIBERT (SMDC)";"Golfe Normand Breton";"GONB_00C";"Pointe de la Fosse Eyrand \xe0 la Pointe du Champ du Port";;"Champs de blocs de l\'\xeelot Saint-Michel (p\xe9rim\xe8tre \xe9tendu)";"Suivis comportementaux";"V2015";"SYSTEME";"Mission d\'\xe9tude du golfe normand-breton";;"Pas de pr\xe9cipitation";;25.0;"1-Tr\xe8s l\xe9g\xe8re brise-1 \xe0 5 km/h-Mer rid\xe9e";;;;"Reprise de donn\xe9es Champs Blocs\n+"\n+373005;"Suivi des champs de blocs";"2015-10-27 00:00:00.0";;;111;"13:14";;;"oct.-15";"GONB_00C1_CDB_oct.-15";"Non identifi\xe9";"Ana\xefs PERUCAUD et Florent CORBAIN";"Golfe Normand Breton";"GONB_00C";"Pointe de la Fosse Eyrand \xe0 la Pointe du Champ du Port";;"Champs de blocs de l\'\xeelot Saint-Michel (p\xe9rim\xe8tre \xe9tendu)";"Suivis comportementaux";"V2015";"SYSTEME";"Mission d\'\xe9tude du golfe normand-breton";;"Pluie fine";;12.0;"1-Tr\xe8s l\xe9g\xe8re brise-1 \xe0 5 km/h-Mer rid\xe9e";;;;"Reprise de donn\xe9es Champs Blocs\n+"\n+373007;"Suivi des champs de blocs";"2015-11-27 00:00:00.0";;;102;"14:25";;;"nov.-15";"GONB_00C1_CDB_nov.-15";"Non identifi\xe9";"Ana\xefs PERUCAUD";"Golfe Normand Breton";"GONB_00C";"Pointe de la Fosse Eyrand \xe0 la Pointe du Champ du Port";;"Champs de blocs de l\'\xeelot Saint-Michel (p\xe9rim\xe8tre \xe9tendu)";"Suivis comportementaux";"V2015";"SYSTEME";"Mission d\'\xe9tude du golfe normand-breton";;"Pas de pr\xe9cipitation";;12.0;"1-Tr\xe8s l\xe9g\xe8re brise-1 \xe0 5 km/h-Mer rid\xe9e";;;;"Reprise de donn\xe9es Champs Blocs\n+"\n+373010;"Suivi des champs de blocs";"2016-03-11 00:00:00.0";;;114;"13:37";;"Semaine";"mars-16";"GONB_00C1_CDB_mars-16";"R\xe9becca Bauchet";"Aur\xe9lien Guilbert, Florent Corbain";"Golfe Normand Breton";"GONB_00C";"Pointe de la Fosse Eyrand \xe0 la Pointe du Champ du Port";;"Champs de blocs de l\'\xeelot Saint-Michel (p\xe9rim\xe8tre \xe9tendu)";"Suivis comportementaux";"V2016";"SYSTEME";"Mission d\'\xe9tude du golfe normand-breton";"0-25% (Peu ou pas nuageux)";"Pas de pr\xe9cipitation";;24.0;"1-Tr\xe8s l\xe9g\xe8re brise-1 \xe0 5 km/h-Mer rid\xe9e";"1-Tr\xe8s l\xe9g\xe8re brise-1 \xe0 5 km/h-Mer rid\xe9e";"Nord-Ouest";;"Reprise de donn\xe9es Champs Blocs\n+"\n+373014;"Suivi des champs de blocs";"2016-05-06 00:00:00.0";;;109;"14:14";;"Semaine";"mai-16";"GONB_00C1_CDB_mai-16";"Marie Motte, R\xe9becca Bauchet";"Marie Motte, Margaux Pinel, R\xe9becca Bauchet";"Golfe Normand Breton";"GONB_00C";"Pointe de la Fosse Eyrand \xe0 la Pointe du Champ du Port";;"Champs de blocs de l\'\xeelot Saint-Michel (p\xe9rim\xe8tre \xe9tendu)";"Suivis comportementaux";"V2016";"SYSTEME";"Mission d\'\xe9tude du golfe normand-breton";"0-25% (Peu ou pas nuageux)";"Pas de pr\xe9cipitation";;24.0;"2-L\xe8g\xe8re brise-6 \xe0 11 km/h-Vaguelettes";"2-L\xe8g\xe8re brise-6 \xe0 11 km/h-Vaguelettes";"Sud-Est";;"Reprise de donn\xe9es Champs Blocs\n+"\n+373023;"Suivi des champs de blocs";"2016-08-21 00:00:00.0";;;101;"16:37";;"Week-end ou Jour F\xe9ri\xe9";"ao\xfbt-16";"GONB_00C1_CDB_ao\xfbt-16";"Margaux Pinel, R\xe9becca Bauchet";"Margaux Pinel, R\xe9becca Bauchet";"Golfe Normand Breton";"GONB_00C";"Pointe de la Fosse Eyrand \xe0 la Pointe du Champ du Port";'..b'00";107;"12:55";0.64;"Semaine";"oct-21";"2021-10-08-PNMI-CDB-002";"Jean-Andr\xe9 Prat";"Mickael Buanic ; Titouan Danilo";"Iroise";"PNMI_07";"Chauss\xe9e de Sein";;"Goulenez (champ de blocs)";"Suivi IVR+QECB - Bretagne";"V2016";"CAPIETTO";"Parc naturel marin de la mer d\'Iroise";;"Pas de pr\xe9cipitation";;10.0;"0-Calme-1 km/h-Mer d\'huile";"0-Calme-1 km/h-Mer d\'huile";"Nord-Ouest";"0-calme-0 m";\n+527825;"Suivi des champs de blocs";"2020-09-16 00:00:00.0";;;104;"11:54";;"Semaine";"sep-20";"2020-09-16-BRES-CDB-001";"Parc naturel r\xe9gional d\'Armorique";"Nazar\xe9 Das Neves Bicho, Valentine Dupond";"Rade de Brest";"BRES_12";"Ch\xe2teau > Pointe de l\'Anse du Roz";;;"Suivis comportementaux";"V2016";"DAS NEVES BICHO";"Parc naturel r\xe9gional d\'Armorique";"0-25% (Peu ou pas nuageux)";"Pas de pr\xe9cipitation";;20.0;"4-Jolie brise-20 \xe0 28 km/h-Petites vagues. Moutons.";"5-Bonne brise-29 \xe0 38 km/h-Vagues mod\xe9r\xe9es.";;;\n+527836;"Suivi des champs de blocs";"2021-03-29 00:00:00.0";;;111;"12:42";;"Semaine";"mar-21";"2021-03-29-BRES-CDB-001";"Parc naturel r\xe9gional d\'Armorique";"Nazar\xe9 Das Neves Bicho, Anne Troufl\xe9au";"Rade de Brest";"BRES_12";"Ch\xe2teau > Pointe de l\'Anse du Roz";;;"Suivis comportementaux";"V2016";"DAS NEVES BICHO";"Parc naturel r\xe9gional d\'Armorique";;;;14.0;"1-Tr\xe8s l\xe9g\xe8re brise-1 \xe0 5 km/h-Mer rid\xe9e";;"Sud-Est";;\n+527847;"Suivi des champs de blocs";"2021-04-28 00:00:00.0";;;111;"13:00";;"Semaine";"avr-21";"2021-04-28-BRES-CDB-001";"Parc naturel r\xe9gional d\'Armorique";"Micha\xebl Tanghe, Anne Troufl\xe9au";"Rade de Brest";"BRES_12";"Ch\xe2teau > Pointe de l\'Anse du Roz";;;"Suivis comportementaux";"V2016";"DAS NEVES BICHO";"Parc naturel r\xe9gional d\'Armorique";"25-75% (Nuageux)";"Pas de pr\xe9cipitation";;13.0;"2-L\xe8g\xe8re brise-6 \xe0 11 km/h-Vaguelettes";;"Nord-Ouest";;\n+527863;"Suivi des champs de blocs";"2021-08-23 00:00:00.0";;;94;"12:46";1.2;"Semaine";"aou-21";"2021-08-23-BRES-CDB-003";"Parc naturel r\xe9gional d\'Armorique";"Franck Oppermann, Anne Troufl\xe9au";"Rade de Brest";"BRES_12";"Ch\xe2teau > Pointe de l\'Anse du Roz";;;"Suivis comportementaux";"V2016";"DAS NEVES BICHO";"Parc naturel r\xe9gional d\'Armorique";"0-25% (Peu ou pas nuageux)";"Pas de pr\xe9cipitation";;;;;;;\n+527868;"Suivi des champs de blocs";"2021-10-06 00:00:00.0";;;97;"11:53";;"Semaine";"oct-21";"2021-10-06-BRES-CDB-001";"Parc naturel r\xe9gional d\'Armorique";"Anne Troufl\xe9au";"Rade de Brest";"BRES_12";"Ch\xe2teau > Pointe de l\'Anse du Roz";;;"Suivis comportementaux";"V2016";"DAS NEVES BICHO";"Parc naturel r\xe9gional d\'Armorique";"25-75% (Nuageux)";"Pas de pr\xe9cipitation";;;"1-Tr\xe8s l\xe9g\xe8re brise-1 \xe0 5 km/h-Mer rid\xe9e";;;;\n+527881;"Suivi des champs de blocs";"2020-03-13 00:00:00.0";;;100;"13:57";;"Semaine";"mar-20";"2020-03-13-BRES-CDB-001";"Parc naturel r\xe9gional d\'Armorique";"Maud Bernard, Nazar\xe9 Das Neves Bicho, Micha\xebl Tanghe, Maria";"Rade de Brest";"BRES_12";"Ch\xe2teau > Pointe de l\'Anse du Roz";;;"Suivi IVR+QECB - Bretagne";"V2016";"DAS NEVES BICHO";"Parc naturel r\xe9gional d\'Armorique";"25-75% (Nuageux)";;;8.0;;"4-Jolie brise-20 \xe0 28 km/h-Petites vagues. Moutons.";"Sud-Ouest";;\n+527937;"Suivi des champs de blocs";"2020-09-18 00:00:00.0";;;112;"12:38";;"Semaine";"sep-20";"2020-09-18-BRES-CDB-002";"Parc naturel r\xe9gional d\'Armorique";"Maud Bernard, Annick Postollec, Franck Oppermann, Agathe Larzilli\xe8re, Nazar\xe9 Das Neves Bicho, Hugo";"Rade de Brest";"BRES_12";"Ch\xe2teau > Pointe de l\'Anse du Roz";;;"Suivi IVR+QECB - Bretagne";"V2016";"DAS NEVES BICHO";"Parc naturel r\xe9gional d\'Armorique";"0-25% (Peu ou pas nuageux)";"Pas de pr\xe9cipitation";;20.0;"4-Jolie brise-20 \xe0 28 km/h-Petites vagues. Moutons.";;;;\n+527943;"Suivi des champs de blocs";"2020-09-19 00:00:00.0";;;113;"13:21";;"Week-end ou Jour F\xe9ri\xe9";"sep-20";"2020-09-19-BRES-CDB-003";"Parc naturel r\xe9gional d\'Armorique";"Annick Postollec, Nazar\xe9 Das Neves Bicho, Micha\xebl Tanghe";"Rade de Brest";"BRES_12";"Ch\xe2teau > Pointe de l\'Anse du Roz";;;"Suivi IVR+QECB - Bretagne";"V2016";"DAS NEVES BICHO";"Parc naturel r\xe9gional d\'Armorique";;"Pluie fine";;;"0-Calme-1 km/h-Mer d\'huile";;;;\n'