Skip to content
Snippets Groups Projects
analyse.R 4.94 KiB
Newer Older
# Script d'analyse des données de consultation harmonisées
# Ce script examine en détail la structure et le contenu du fichier consultation_harmonized.json
# pour comprendre les patterns et caractéristiques des données

# Chargement des bibliothèques nécessaires
library(jsonlite)      # Pour la lecture du fichier JSON
library(dplyr)         # Pour la manipulation des données
library(tidyr)         # Pour le nettoyage des données
library(lubridate)     # Pour l'analyse des dates
library(ggplot2)       # Pour la visualisation
library(stringr)       # Pour la manipulation des chaînes de caractères

# Fonction principale d'analyse
analyze_consultation_data <- function(file_path) {
  # Lecture du fichier JSON
  print("Chargement des données...")
  data <- fromJSON(file_path)$data
  
  # 1. Analyse de la structure générale
  print("\n=== Structure générale des données ===")
  print("Nombre total d'enregistrements :")
  print(nrow(data))
  print("\nColonnes présentes :")
  print(names(data))
  
  # 2. Analyse par pays
  print("\n=== Distribution par pays ===")
  country_dist <- table(data$source)
  print(country_dist)
  
  # 3. Analyse temporelle
  # Correction pour l'analyse temporelle
  print("\n=== Analyse temporelle ===")
  data$consultation_date <- as.Date(data$consultation_date, format = "%d-%m-%Y")  # Changé de %d/%m/%Y à %d-%m-%Y
  print("Période couverte :")
  print(paste("Du", min(data$consultation_date, na.rm = TRUE), 
              "au", max(data$consultation_date, na.rm = TRUE)))
  
  # 4. Analyse des diagnostics
  print("\n=== Distribution des diagnostics ===")
  diag_dist <- table(data$diagnosis_result)
  print(diag_dist)
  
  # 5. Analyse des données manquantes
  print("\n=== Analyse des données manquantes ===")
  missing_data <- sapply(data, function(x) sum(is.na(x)))
  print("Nombre de valeurs manquantes par colonne :")
  print(missing_data)
  
  # 6. Analyse démographique
  print("\n=== Analyse démographique ===")
  print("Distribution des âges :")
  age_summary <- summary(data$patient_age)
  print(age_summary)
  print("\nDistribution par sexe :")
  sex_dist <- table(data$patient_sex)
  print(sex_dist)
  
  # 7. Analyse géographique
  print("\n=== Analyse géographique ===")
  print("Nombre de centres de santé uniques :")
  print(length(unique(data$id_center)))
  print("\nNombre de lieux de résidence uniques :")
  print(length(unique(data$residence_place)))
  print("\nNombre de lieux d'infection uniques :")
  print(length(unique(data$infection_place)))
  
  # 8. Création de visualisations
  
  # Cas par mois
  monthly_cases <- data %>%
    mutate(month = floor_date(consultation_date, "month")) %>%
    count(month, source)
  
  # Sauvegarde du graphique des cas mensuels
  print("\nCréation du graphique des cas mensuels...")
  ggplot(monthly_cases, aes(x = month, y = n, color = source)) +
    geom_line() +
    labs(title = "Évolution mensuelle des cas",
         x = "Date",
         y = "Nombre de cas") +
    theme_minimal()
  ggsave("monthly_cases.png")
  
  # 9. Analyse des patterns spécifiques
  print("\n=== Patterns spécifiques ===")
  
  # Nouvelles attaques vs récurrences
  print("Distribution nouvelles attaques vs récurrences :")
  attack_dist <- table(data$new_attack)
  print(attack_dist)
  
  # Diagnostic actif vs passif
  print("\nDistribution diagnostic actif vs passif :")
  active_diag_dist <- table(data$active_diagnosis)
  print(active_diag_dist)
  
  # 10. Génération de statistiques résumées par pays
  print("\n=== Statistiques par pays ===")
  country_stats <- data %>%
    group_by(source) %>%
    summarise(
      n_cases = n(),
      avg_age = mean(patient_age, na.rm = TRUE),
      pct_male = mean(patient_sex == "Male", na.rm = TRUE) * 100,
      pct_new_attack = mean(new_attack == TRUE, na.rm = TRUE) * 100,
      n_centers = n_distinct(id_center),
      n_residence_places = n_distinct(residence_place),
      earliest_date = min(consultation_date),
      latest_date = max(consultation_date)
    )
  print(country_stats)
  
  # 11. Sauvegarde des résultats
  print("\n=== Sauvegarde des résultats ===")
  
  # Création d'un résumé structuré
  summary_data <- list(
    general = list(
      total_records = nrow(data),
      date_range = c(min(data$consultation_date), max(data$consultation_date)),
      countries = as.list(country_dist)
    ),
    diagnostics = as.list(diag_dist),
    demographics = list(
      age_summary = as.list(age_summary),
      sex_distribution = as.list(sex_dist)
    ),
    geography = list(
      unique_centers = length(unique(data$id_center)),
      unique_residences = length(unique(data$residence_place)),
      unique_infections = length(unique(data$infection_place))
    ),
    country_statistics = country_stats
  )
  
  # Sauvegarde au format JSON pour référence future
  writeLines(toJSON(summary_data, pretty = TRUE), "analysis_summary.json")
  
  return(summary_data)
}

# Exécution de l'analyse
results <- analyze_consultation_data("data/consultation_harmonized.json")