File size: 1,879 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 fold 1 ===
fold1 <- data$folds[[5]]
metrics_list <- fold1$metrics

# === 3. Buat data frame semua model di fold 1 ===
df_fold1 <- lapply(names(metrics_list), function(model_name) {
  metric <- metrics_list[[model_name]]
  data.frame(
    model = model_name,
    accuracy = metric$accuracy,
    precision = metric$precision,
    recall = metric$recall,
    f1 = metric$f1,
    total_vulnerable = metric$total_vulnerable,
    percentage = metric$percentage,
    is_vulnerable = as.numeric(metric$is_vulnerable),
    train_time_sec = metric$train_time_sec
  )
}) %>% bind_rows()

print("=== Data Fold 1 ===")
print(df_fold1)

# === 4. Normalisasi semua kolom numerik ke skala 0–1 (biar radar chart proporsional) ===
norm_df <- df_fold1
num_cols <- sapply(norm_df, is.numeric)
norm_df[num_cols] <- lapply(norm_df[num_cols], function(x) {
  (x - min(x)) / (max(x) - min(x))
})

# === 5. Siapkan data radar chart ===
radar_data <- norm_df %>% select(-model)
rownames(radar_data) <- df_fold1$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 untuk fold 1 ===
colors <- c("red", "blue", "green", "orange")
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 = "📊 Fold 1 – Model Comparison (All Metrics Normalized)"
)

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