-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathShiny_fonctionnel.R
101 lines (89 loc) · 2.9 KB
/
Shiny_fonctionnel.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
library(shiny)
library(ggplot2)
library(dplyr)
# Charger les données (assurez-vous que le chemin est correct)
files <- list.files(
"_SharedFolder_GlobalES/Dashboard/Canada/json_files",
full.names = TRUE
)
# Parse only non-empty files, handling errors gracefully
json_list <- lapply(files, function(file) {
tryCatch(
rjson::fromJSON(file = file),
error = function(e) NULL # Return NULL if parsing fails
)
})
unique_source_id_values <- unique(unlist(sapply(json_list, function(json) if (!is.null(json)) names(json$source_id) else NULL)))
unique_source_id_values <- unique_source_id_values[grepl("ces", unique_source_id_values)]
# Create a dataframe with the required structure
result <- do.call(rbind, lapply(unique_source_id_values, function(survey_name) {
data.frame(
variable = basename(files), # File names
ces = survey_name, # Survey name
cleaned = sapply(json_list, function(json) {
if (!is.null(json) && "source_id" %in% names(json) &&
survey_name %in% names(json$source_id) &&
"cleaned" %in% names(json$source_id[[survey_name]])) {
json$source_id[[survey_name]]$cleaned
} else {
NA
}
}),
stringsAsFactors = FALSE
)
}))
# Ordre spécifique des CES
ces_order <- c(
"ces65", "ces68", "ces74", "ces79", "ces84", "ces88",
"ces93", "ces97", "ces2000", "ces2004", "ces2006",
"ces2008", "ces2011", "ces2015", "ces2019", "ces2021"
)
# Préparer les données pour ggplot2
result_long <- result %>%
mutate(
ces = factor(ces, levels = ces_order), # Appliquer l'ordre personnalisé
cleaned_color = case_when(
cleaned == 1 ~ "Cleaned",
cleaned == 0 ~ "À faire",
is.na(cleaned) ~ "NA"
)
)
# Interface utilisateur
ui <- fluidPage(
titlePanel("Statut des données 'Cleaned' par année et fichier"),
sidebarLayout(
sidebarPanel(
helpText("Visualisez les données 'Cleaned' extraites des fichiers JSON."),
p("L'ordre des années CES est spécifiquement défini :"),
verbatimTextOutput("cesOrder")
),
mainPanel(
plotOutput("statusPlot")
)
)
)
# Logique serveur
server <- function(input, output) {
# Afficher l'ordre des CES dans la barre latérale
output$cesOrder <- renderText({
paste(ces_order, collapse = ", ")
})
# Générer le graphique
output$statusPlot <- renderPlot({
ggplot(result_long, aes(x = ces, y = variable, fill = cleaned_color)) +
geom_tile(color = "white") + # Ajouter des contours blancs pour les cases
scale_fill_manual(
values = c("Cleaned" = "lightgreen", "À faire" = "red", "NA" = "gray"),
name = "Cleaned"
) +
theme_minimal() +
labs(
x = "Année (CES)",
y = "Fichiers JSON",
title = "Statut des données 'Cleaned' par année et fichier"
) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
})
}
# Lancer l'application
shinyApp(ui = ui, server = server)