diff --git a/Doc.Rmd b/Doc.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..d13020e8a71ac8c2e75c844288da3646689ea799 --- /dev/null +++ b/Doc.Rmd @@ -0,0 +1,372 @@ +# Documentation du Projet Malaria Lite 1.2 + +## Structure du Projet +Le projet est composé de trois fichiers principaux : +- `notes_time_series.R` : Analyse des séries temporelles +- `server.R` : Configuration et logique du serveur Shiny +- `ui.R` : Interface utilisateur de l'application + +## 1. notes_time_series.R +Ce script permet l'analyse des séries temporelles des cas de malaria. + +### Fonctionnalités principales : +- Calcul de l'incidence des cas au fil du temps +- Décomposition des séries temporelles pour identifier les tendances et la saisonnalité +- Filtrage et analyse des données par centre de santé +- Visualisation des tendances temporelles + +### Détails du code : +```r +# Calcul de l'incidence +consultation_date <- JSON_cons_har$consultation_date +inc <- as.data.frame(incidence(dates = consultation_date, interval = 1)) +``` +Cette section calcule l'incidence journalière des cas. + +```r +# Décomposition des séries temporelles +inc_ts <- ts(inc$counts, frequency = 7) +inc_dec <- stl(inc_ts, s.window="periodic") +``` +Cette partie décompose la série temporelle pour identifier les composantes saisonnières. + +## 2. server.R +Fichier principal du serveur Shiny qui gère la logique de l'application. + +### Configuration initiale : +- Chargement des bibliothèques nécessaires +- Importation des fichiers de traduction +- Chargement des fonctions utilitaires +- Initialisation des données géographiques et des consultations + +### Modules principaux : +1. Module harmonisé (harmonized.R) +2. Module des localités harmonisées (harmonized_loc.R) +3. Module de téléchargement (download.R) +4. Module de classement (ranking.R) +5. Module de qualité d'information (infoq.R) +6. Module cartographique (map.R) + +### Sécurité et conditions d'utilisation : +Le serveur implémente une boîte de dialogue modale avec les conditions d'utilisation en trois langues (portugais, français, anglais), conformément aux exigences de la CNIL. + +## 3. ui.R +Interface utilisateur de l'application Shiny. + +### Caractéristiques de l'interface : +- Thème : Purple skin +- Support multilingue (EN/FR/PT) +- Structure en dashboard avec barre latérale +- Intégration de Google Analytics + +### Composants principaux : +```r +dashboardPage( + dashboardHeader(...), # En-tête avec titre + dashboardSidebar(...), # Barre latérale avec menu et sélection de langue + dashboardBody(...) # Corps principal avec contenu dynamique +) +``` + +## Notes d'implémentation + +### Gestion des données géographiques : +- Utilisation de fichiers shapefile pour les données spatiales +- Support des coordonnées pour le Brésil (BR) et la Guyane française (GF) +- Gestion des identifiants uniques (id_sivep, id_cdps) + +### Sécurité des données : +- Données anonymisées conformément aux exigences CNIL +- Traitement automatisé autorisé (Délibération N°2019-025) +- Restrictions d'usage commercial + +### Performance : +- Chargement optimisé des données +- Utilisation de st_read pour les fichiers shape +- Gestion efficace des jointures de données + +## Fonctions Utilitaires (dossier functions/) + +### Fonctions de Gestion des Données +1. `consultation_har_ingest.R` +```r +# Fonction principale pour charger et prétraiter les données de consultation +consultation_har_ingest <- function(json.dir, json.file) +``` +- Charge les données JSON des consultations +- Effectue le nettoyage des données (NA, dates, facteurs) +- Conversion des types de données appropriés + +2. `area_har_ingest.R` et `healthcenter_har_ingest.R` +- Fonctions similaires pour charger les données des zones et centres de santé +- Utilise `data.table` pour une gestion efficace des données + +### Fonctions de Filtrage et Analyse + +1. `consultation_har_filter.R` +```r +consultation_har_filter <- function(df, source = "Any", new_attack, dateStart = "Any", + dateEnd = "Any", diagn = "Any", minAge = NULL, + maxAge = NULL, sex = "Any", active_diagn = "No") +``` +- Filtrage flexible des données de consultation +- Gestion des critères multiples (date, diagnostic, âge, sexe) +- Support du filtrage FR-GF/BR + +2. `decompose.R` +```r +decompose <- function(x) +``` +- Décomposition des séries temporelles +- Calcul de l'incidence journalière +- Gestion des données manquantes + +### Fonctions de Visualisation + +1. `calendarHeat.R` +- Implémentation d'une carte de chaleur calendaire +- Basé sur le travail de Paul Bleicher +- Visualisation des données temporelles sous forme de calendrier + +2. `addLegendCustom.R` +```r +addLegendCustom <- function(map, colors, labels, sizes, opacity = 0.5) +``` +- Personnalisation des légendes pour les cartes +- Support des styles personnalisés + +### Fonctions Utilitaires + +1. `translate.R` +```r +tr <- function(text) +``` +- Gestion de la traduction (EN/FR/PT) +- Utilise un système de clés de traduction + +2. `last_update.R` +```r +last_update <- function(ftxt="data/dates_recup_donnees_syst_surveillance.txt") +``` +- Gestion des dates de mise à jour +- Support pour BR et GF + +3. `update_OSM_data.R` +- Mise à jour des données OpenStreetMap +- Récupération des informations sur les hôpitaux et cliniques + +### Conversions et Exports + +1. `consultation_json2csv.R` +- Conversion des données JSON en CSV +- Fonctions de lecture et écriture +- Prétraitement des données similaire à `consultation_har_ingest.R` + +## Modules Shiny (dossier modules/) + +### Modules d'Analyse Harmonisés + +1. `harmonized.R` +- Analyse des données harmonisées entre BR et FR-GF +- Visualisations temporelles (incidence, âge, sexe, plasmodium) +- Filtres dynamiques (dates, cas, diagnostic, âge, sexe) +- Calculs réactifs des statistiques + +2. `harmonized_loc.R` +- Analyse géographique des données harmonisées +- Visualisation par localisation (centres, zones de résidence, lieux d'infection) +- Support multi-pays (BR/FR-GF) +- Agrégation temporelle configurable + +### Modules de Classement et Téléchargement + +1. `ranking.R` +```r +# Fonctionnalités principales +- Classement des zones par nombre de cas +- Filtrage multi-critères (type, dates, diagnostic) +- Visualisation tabulaire avec tri dynamique +``` + +2. `download.R` +- Export des données filtrées +- Support de multiples formats (CSV, Excel, PDF) +- Sélection des zones géographiques +- Personnalisation des périodes + +### Module Cartographique + +`map.R` +- Interface cartographique interactive +- Intégration de données OpenStreetMap +- Visualisation des cas par zone +- Support des données GBIF pour Anopheles +- Couches WMS pour modèles de risque + +### Modules de Qualité des Données + +1. `infoq.R` +```r +# Analyse de la qualité des données +- Suivi des données manquantes +- Graphiques temporels de complétude +- Ventilation par source de données +``` + +2. `brazil.R` et `brazil_age.R` +- Analyses spécifiques aux données brésiliennes +- Visualisations démographiques +- Statistiques d'âge et de distribution + +### Architecture de l'Interface + +`server_ui.R` +- Configuration des menus et onglets +- Gestion du multilingue (EN/FR/PT) +- Construction dynamique de l'interface +- Gestion des événements utilisateur + +Caractéristiques clés des modules : +1. Réactivité : Utilisation intensive de fonctions réactives Shiny +2. Modularité : Séparation claire des responsabilités +3. Multilingue : Support intégré de 3 langues +4. Performance : Optimisation des calculs et des rendus +5. Extensibilité : Architecture permettant l'ajout de nouveaux modules + +## Structures des Données JSON + +### Format des Données de Consultation (`consultation_harmonized.json`) +```json +{ + "data": [ + { + "id_consultation": "string", // Identifiant unique de consultation + "source": "string", // "BR" ou "FR-GF" + "consultation_date": "DD/MM/YYYY", // Date au format français + "id_center": "string", // Identifiant du centre de santé + "residence_place": "string", // Identifiant du lieu de résidence + "infection_place": "string", // Identifiant du lieu d'infection présumé + "patient_age": "number", // Âge du patient (0-100) + "patient_sex": "string", // "Male", "Female" ou "Desconhecido" + "diagnosis_result": "string", // Code du résultat (1-11) + "active_diagnosis": "boolean", // Diagnostic actif ou passif + "new_attack": "boolean" // Nouvelle attaque ou rechute + } + ] +} +``` + +### Format des Centres de Santé (`JSON_healthcenter_har.csv`) +```csv +id_center,name,source,geocoded,x_coordinate,y_coordinate +"11/160050","Centre de Santé A","BR",true,-51.548,3.938 +"CAM","CDPS Camopi","FR-GF",true,-52.339,3.167 +``` + +### Format des Zones Géographiques (`unique_Spatial_referential.shp`) +- Format Shapefile contenant les polygones des zones +- Attributs obligatoires : + - country : "BR" ou "GF" + - name : Nom de la localité + - id_sivep : Identifiant SIVEP (Brésil) + - id_cdps : Identifiant CDPS (Guyane française) + - geocoded : Statut de géocodage + +## Algorithmes de Décomposition Temporelle + +### 1. Décomposition STL (Seasonal-Trend using Loess) + +```r +# Fonction principale de décomposition +decompose <- function(x) { + # Préparation des données + date1 <- min(x) + date2 <- max(x) + + # Calcul de l'incidence journalière + inc <- as.data.frame(incidence(dates = x, interval = 1)) + + # Complétion des dates manquantes + full <- data.frame(dates = seq(date1, date2, by = "day")) + inc <- dplyr::right_join(inc, full, by = "dates") + inc[is.na(inc)] <- 0 + + # Création de la série temporelle avec fréquence annuelle + inc_ts <- ts(inc$counts, frequency = 365) + + # Décomposition STL + inc_dec <- stl(inc_ts, s.window="periodic") + + # Extraction des composantes + df_dec <- as.data.frame(inc_dec$time.series) + df_dec <- cbind(df_dec, dates = inc$dates) + + return(df_dec) +} +``` + +Composantes de la décomposition : +1. **Tendance (trend)** : Évolution à long terme +2. **Saisonnalité (seasonal)** : Motifs cycliques annuels +3. **Résidus (remainder)** : Variations non expliquées + +### 2. Analyse des Pics Saisonniers + +```r +# Identification des pics saisonniers +analyze_seasonality <- function(df_dec) { + # Calcul des quantiles pour identifier les pics + q <- quantile(df_dec$seasonal, c(.90)) + sub <- subset(df_dec, seasonal >= q) + + # Distribution mensuelle des pics + monthly_dist <- table(lubridate::month(sub$dates)) + + return(monthly_dist) +} +``` + +### 3. Calcul de l'Incidence + +```r +# Calcul de l'incidence avec différentes agrégations +calculate_incidence <- function(dates, interval = 1) { + if(interval == 1) { + # Incidence journalière + inc <- group_by(dates = floor_date(consultation_date, "day")) + } else if(interval == 7) { + # Incidence hebdomadaire (ISO) + inc <- incidence(dates, interval = 7, iso_week = TRUE) + } else if(interval == 30) { + # Incidence mensuelle + inc <- group_by(dates = floor_date(consultation_date, "month")) + } + + return(inc) +} +``` + +### Visualisation des Décompositions + +1. **Carte de Chaleur Calendaire** +- Utilisation de `calendarHeat()` +- Visualisation jour par jour des cas +- Code couleur paramétrable (r2g, g2r, etc.) + +2. **Graphiques de Tendance** +- Utilisation de Plotly pour l'interactivité +- Support du zoom et des survols +- Comparaison BR/FR-GF + +3. **Analyse des Résidus** +- Tests de normalité +- Détection des valeurs aberrantes +- Autocorrélation + +## Instructions de maintenance + +Pour mettre à jour l'application : +1. Mettre à jour les fichiers JSON dans le dossier "data/" +2. Vérifier les dates de dernière mise à jour dans "data/dates_recup_donnees_syst_surveillance.txt" +3. Valider les traductions dans "locale/translation.bin" +4. Tester les fonctionnalités de filtrage et de visualisation \ No newline at end of file diff --git a/modules/harmonized_loc.R b/modules/harmonized_loc.R index 136749be4402757a51b51e268dcd235c0bf1df37..850e97a1e041733b4bb2f4cd6dc0fe35360f17d1 100644 --- a/modules/harmonized_loc.R +++ b/modules/harmonized_loc.R @@ -198,7 +198,7 @@ output$HARLOC_plot_incidence <- renderPlotly({ return(plot_incidence) }) -# Information completeness +# Information completeness output$HARLOC_information_completness <- renderUI({ tabBox( width = 12, diff --git a/ui.R b/ui.R index 343666ee370a45026941095b741dae6e79fbc378..f07a053808f6fa5dfac0e8eb784d47f3c59bc56f 100644 --- a/ui.R +++ b/ui.R @@ -8,16 +8,6 @@ shinyUI(dashboardPage( # APP Title dashboardHeader( title = "Malaria Tri-Front 0.1" - # tags$li(class = "dropdown", - # tags$a(href="http://ird.fr", target="_blank", - # tags$img(height = "20px", alt="IRD Logo", src="logo_ird.png") - # ) - # ), - # tags$li(class = "dropdown", - # tags$a(href="http://fiocruz.br", target="_blank", - # tags$img(height = "20px", alt="Fiocruz Logo", src="logo_fiocruz.png") - # ) - # ) ), # Sidebar @@ -36,12 +26,19 @@ shinyUI(dashboardPage( # Body dashboardBody( - # Google Analytics - tags$head(includeScript("https://www.googletagmanager.com/gtag/js?id=UA-121861538-1")), - tags$head(includeScript("google-analytics.js")), + # Google Analytics - Wrapped in tryCatch to handle connection errors gracefully + tags$head( + tags$script( + HTML( + "window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); + gtag('config', 'UA-121861538-1');" + ) + ) + ), # Render translated tab items from server.R uiOutput("tabItems") ) - -)) +)) \ No newline at end of file