diff --git a/Module_correlation.Rmd b/Module_correlation.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..3bd04713287750c2216e44df341a68347bbf0996
--- /dev/null
+++ b/Module_correlation.Rmd
@@ -0,0 +1,258 @@
+---
+title: '"Module d''analyse des corrélations des annotations des échantillons"'
+output: html_document
+---
+
+```{r load_packages, include=FALSE}
+# Installer et charger les packages nécessaires (à exécuter une seule fois)
+if(!require(GGally)) install.packages("GGally")
+if(!require(readr)) install.packages("readr")
+if(!require(dplyr)) install.packages("dplyr")
+if(!require(ggplot2)) install.packages("ggplot2")
+if(!require(corrplot)) install.packages("corrplot")
+if(!require(ComplexHeatmap)) {
+  if(!requireNamespace("BiocManager", quietly = TRUE))
+    install.packages("BiocManager")
+  BiocManager::install("ComplexHeatmap")
+}
+if(!require(RColorBrewer)) install.packages("RColorBrewer")
+if(!require(reshape2)) install.packages("reshape2")
+
+library(GGally)
+library(readr)
+library(dplyr)
+library(ggplot2)
+library(corrplot)
+library(ComplexHeatmap)
+library(RColorBrewer)
+library(reshape2)
+
+```
+
+```{r}
+# Importer le fichier d'annotations (ex: CSV)
+setwd("C:/Users/User/Desktop/projet_visualisation")
+annotations <- read.csv("design_test.csv", sep=",", stringsAsFactors = FALSE)
+
+# Aperçu de la structure et résumé des données
+glimpse(annotations)
+summary(annotations)
+
+# Vérification des valeurs manquantes par colonne
+missing_values <- colSums(is.na(annotations))
+print(missing_values)
+
+```
+
+2. Séparation et Conversion des Variables
+
+
+```{r}
+# Variables numériques d'origine (pour certaines analyses)
+num_data <- annotations %>% select(where(is.numeric))
+
+# Variables catégorielles d'origine (caractère ou facteur)
+cat_data <- annotations %>% select(where(~ is.character(.) | is.factor(.)))
+
+cat("Variables numériques détectées : ", paste(colnames(num_data), collapse = ", "), "\n")
+cat("Variables catégorielles détectées : ", paste(colnames(cat_data), collapse = ", "), "\n")
+
+
+```
+
+2.1 Conversion Automatisée pour le Calcul de Corrélation
+
+```{r}
+convert_to_numeric <- function(df, date_cols = NULL, drop_cols = NULL, date_format = "%d.%m.%Y") {
+  # Supprime les colonnes non désirées
+  if (!is.null(drop_cols)) {
+    df <- df %>% select(-all_of(drop_cols))
+  }
+  
+  df_numeric <- df %>% mutate(across(everything(), ~ {
+    if (is.numeric(.)) {
+      return(.)
+    } else if (is.character(.)) {
+      # Si la colonne est spécifiée comme date ou peut être parsée en date
+      if (!is.null(date_cols) && cur_column() %in% date_cols) {
+        return(as.numeric(as.Date(., format = date_format)))
+      } else {
+        parsed_date <- suppressWarnings(as.Date(., format = date_format))
+        if (all(!is.na(parsed_date))) {
+          return(as.numeric(parsed_date))
+        } else {
+          return(as.numeric(factor(.)))
+        }
+      }
+    } else if (is.factor(.)) {
+      return(as.numeric(.))
+    } else {
+      return(as.numeric(.))
+    }
+  }))
+  
+  return(df_numeric)
+}
+
+# Exemple : traiter "experiment" et "extraction" comme dates, et supprimer "sample"
+data_numeric <- convert_to_numeric(annotations,
+                                   date_cols = c("experiment", "extraction"),
+                                   drop_cols = c("sample"))
+str(data_numeric)
+
+
+```
+3. Visualisations de Corrélation et Distributions
+3.1 Matrice de Corrélation avec corrplot
+```{r}
+if(ncol(data_numeric) > 1){
+  cor_matrix <- cor(data_numeric, use = "complete.obs", method = "pearson")
+  corrplot(cor_matrix, method = "circle", type = "lower",
+           tl.col = "black", tl.cex = 0.8,
+           col = colorRampPalette(c("blue", "white", "red"))(200))
+} else {
+  cat("Pas assez de colonnes numériques pour calculer une matrice de corrélation.\n")
+}
+
+```
+
+3.2 Heatmap avec ComplexHeatmap
+```{r}
+if(ncol(data_numeric) > 1){
+  Heatmap(cor_matrix, name = "Corrélation",
+          col = colorRampPalette(brewer.pal(8, "RdYlBu"))(50),
+          column_title = "Heatmap de la matrice de corrélation")
+} else {
+  cat("Pas assez de variables numériques pour générer une heatmap.\n")
+}
+
+```
+
+3.3 Pairs Plot des Variables Numériques
+```{r}
+if(ncol(num_data) > 1){
+  ggpairs(num_data, title = "Pairs Plot des variables numériques", progress = FALSE)
+} else {
+  cat("Pas assez de variables numériques pour générer un pairs plot.\n")
+}
+
+```
+
+3.4 Distribution des Variables Numériques
+Pour chaque variable numérique, un histogramme et une courbe de densité sont affichés.
+```{r}
+numeric_vars <- names(data_numeric)
+for (var in numeric_vars) {
+  p <- ggplot(data_numeric, aes_string(x = var)) +
+    geom_histogram(aes(y = ..density..), bins = 30, fill = "blue", alpha = 0.5) +
+    geom_density(color = "red", size = 1) +
+    labs(title = paste("Distribution de", var),
+         x = var, y = "Densité") +
+    theme_minimal()
+  print(p)
+}
+
+
+```
+
+3.5 Scatter Plots pour Paires de Variables Fortement Corrélées
+On identifie les paires de variables dont la corrélation absolue dépasse un seuil (ici 0.7) et on affiche un scatter plot avec une droite de régression.
+```{r}
+cor_threshold <- 0.7
+if(ncol(data_numeric) > 1){
+  high_cor_pairs <- which(abs(cor_matrix) > cor_threshold & abs(cor_matrix) < 1, arr.ind = TRUE)
+  high_cor_pairs <- high_cor_pairs[high_cor_pairs[,1] < high_cor_pairs[,2], ]
+  
+  if(nrow(high_cor_pairs) > 0){
+    for (i in 1:nrow(high_cor_pairs)) {
+      var1 <- colnames(cor_matrix)[high_cor_pairs[i, 1]]
+      var2 <- colnames(cor_matrix)[high_cor_pairs[i, 2]]
+      p <- ggplot(data_numeric, aes_string(x = var1, y = var2)) +
+           geom_point(alpha = 0.6) +
+           geom_smooth(method = "lm", se = FALSE, color = "red") +
+           labs(title = paste("Scatter Plot de", var1, "vs", var2),
+                subtitle = paste("Corrélation =", round(cor_matrix[high_cor_pairs[i,1], high_cor_pairs[i,2]], 2))) +
+           theme_minimal()
+      print(p)
+    }
+  } else {
+    cat("Aucune paire de variables avec une corrélation absolue supérieure à", cor_threshold, "\n")
+  }
+} else {
+  cat("Pas assez de variables numériques pour générer des scatter plots.\n")
+}
+
+```
+3.6 Distribution des Variables Catégorielles
+```{r}
+cat_vars <- names(cat_data)
+for (var in cat_vars) {
+  p <- ggplot(annotations, aes_string(x = var)) +
+       geom_bar(fill = "blue", alpha = 0.7) +
+       labs(title = paste("Distribution de la variable catégorielle :", var),
+            x = var, y = "Fréquence") +
+       theme_minimal()
+  print(p)
+}
+
+
+```
+3.7 Visualisation de la Variable sample
+```{r}
+if("sample" %in% names(annotations)){
+  p <- ggplot(annotations, aes(x = factor(sample))) +
+       geom_bar(fill = "steelblue", alpha = 0.7) +
+       labs(title = "Distribution de la variable 'sample'",
+            x = "Sample", y = "Fréquence") +
+       theme_minimal()
+  print(p)
+} else {
+  cat("La variable 'sample' n'existe pas dans les données.\n")
+}
+
+
+```
+
+
+3.8 Visualisation Avancée (Matrice Améliorée)
+
+```{r}
+# Créer une copie des données pour conversion en facteurs
+data_factors <- annotations
+
+# Conversion des colonnes spécifiques en facteurs si elles existent
+cols_to_factor <- c("condition", "animal", "experiment", "extraction")
+for (col in cols_to_factor) {
+  if (col %in% names(data_factors)) {
+    data_factors[[col]] <- as.factor(data_factors[[col]])
+  }
+}
+
+# Supprimer la colonne "sample" pour cette visualisation
+if("sample" %in% names(data_factors)) {
+  data_factors <- data_factors %>% select(-sample)
+}
+
+# Définition des couleurs personnalisées
+custom_colors <- c("#1B9E77", "#D95F02", "#7570B3")  # Vert, Orange, Bleu
+
+# Génération de la matrice de plots avec ggpairs
+ggpairs(data_factors, 
+        mapping = aes(color = condition),
+        lower = list(
+          continuous = wrap("points", alpha = 0.7, color = custom_colors[1]),
+          combo = wrap("box_no_facet", outlier.colour = "red")
+        ),
+        diag = list(
+          continuous = wrap("densityDiag", alpha = 0.5, fill = custom_colors[2])
+        ),
+        upper = list(
+          continuous = wrap("cor", size = 5, color = "black")
+        )
+) +
+  theme_bw() +
+  theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10),
+        axis.text.y = element_text(size = 10),
+        legend.position = "bottom")
+```
+