File size: 1,960 Bytes
1162e72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
library(jsonlite)
library(dplyr)
library(fmsb)

# === 1. Baca file JSON ===
data <- fromJSON("summary.json", simplifyVector = FALSE)

# === 2. Ambil final_results ===
final_results <- data$final_results

# === 3. Ubah ke data frame ===
df_final <- lapply(names(final_results), function(model_name) {
  metric <- final_results[[model_name]]
  data.frame(
    model = model_name,
    accuracy = metric$accuracy,
    precision = metric$precision,
    recall = metric$recall,
    f1 = metric$f1,
    total_vulnerable = metric$total_vulnerable %||% NA,
    percentage = metric$percentage %||% NA,
    is_vulnerable = as.numeric(metric$is_vulnerable %||% NA),
    train_time_sec = metric$train_time_sec %||% NA
  )
}) %>% bind_rows()

print("=== FINAL RESULTS DATA ===")
print(df_final)

# === 4. Normalisasi semua nilai ke skala 0–1 (biar proporsional di radar chart) ===
norm_df <- df_final
num_cols <- sapply(norm_df, is.numeric)
norm_df[num_cols] <- lapply(norm_df[num_cols], function(x) {
  rng <- range(x, na.rm = TRUE)
  if (rng[1] == rng[2]) rep(1, length(x)) else (x - rng[1]) / (rng[2] - rng[1])
})

# === 5. Siapkan data radar chart ===
radar_data <- norm_df %>% select(-model)
rownames(radar_data) <- df_final$model

max_val <- rep(1, ncol(radar_data))
min_val <- rep(0, ncol(radar_data))
radar_plot_data <- rbind(max_val, min_val, radar_data)

# === 6. Plot radar chart ===
colors <- c("red", "blue", "green", "orange", "purple")
par(mfrow = c(1, 1), mar = c(2, 2, 4, 2))

radarchart(
  radar_plot_data,
  axistype = 1,
  pcol = colors,
  plwd = 3,
  plty = 1,
  cglcol = "grey",
  cglty = 1,
  axislabcol = "grey30",
  caxislabels = seq(0, 1, 0.2),
  cglwd = 0.8,
  vlcex = 0.8,
  title = "Final Results – Model Comparison (All Metrics Normalized)"
)

legend(
  "bottomright",
  legend = rownames(radar_data),
  col = colors,
  lty = 1,
  lwd = 3,
  bty = "n",
  cex = 0.8
)