setwd("./data/cz/") # Nastavení pracovního adresáře

library(cluster)
#library("VIM")
#library("factoextra")

N <- input[[1]] # 'input' is a list of parametres, which comes from the NodeJS service

input <- read.csv(file = 'input_modified.csv',header=TRUE,sep=",",dec=".") # Načtení CSV souboru
#head(input) # Výpis prvních šesti řádek CSV souboru
mydata <- input[, -1, drop=F] # Odstranění prvního sloupce
#replace(mydata, is.na(mydata), 0) # Nahrazeni NA hodnot nulami
rownames(mydata) <- input[, 1] # Jména řádků
#head(mydata)
mydata <- scale(mydata) # Standardizace (normalizace) dat
#aggr(x = mydata) # Vykreslení prázných položek
#countNA(mydata) # Kontrola počtu prázdných položek

#res.dist <- get_dist(mydata, stand = TRUE, method = "euclidean") # Výpočet vzdáleností
#fviz_dist(res.dist, gradient = list(low = "#EEEEEE", mid = "#999999", high = "#444444")) # Grafické vyjádření vzdálenostní matice
#fviz_nbclust(mydata, kmeans, method = "silhouette")+labs(subtitle = "Silhouette method") # Optimální počet klastrů
#fviz_nbclust(mydata, kmeans, method = "gap_stat") # Graf s ideálním počtem intervalů pro nehierarchickou metodu; s číslem se zatím nikde nepracuje

# Nehierachické klastrování
km50l <- kmeans(mydata, N, nstart = 50, algorithm=c("Lloyd")) # Nehierarchické klastrování k-means
#fviz_cluster(km.res, data = mydata, # Vizualizace nehierarchických klastrů
#             ellipse.type = "convex",
#             palette = "jco",
#             ggtheme = theme_minimal())

# Hierarchické klastrování
d <- dist(mydata, method = "euclidean") # Distance matrix (matice vzdáleností)
fit <- hclust(d, method="ward.D2") # Výpočet hirarchie
#plot(fit) # Vizualizace hierarchie

groups <- cutree(fit, k=N) # Rozdělení stromu do k klastrů
haclustwd2 <- groups
#rect.hclust(fit, k=9, border="red") # Dedrogram s hranicemi klastrů

# Grafické vyjádření klastrů s barvami
# fviz_dend(fit, k = 9, # Počet klastrů
#          cex = 1, # Velikost popisků
#          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07", "#c17d11"), # Barvy klastrů
#          color_labels_by_k = TRUE, # Barevné popisky pro skupiny
#          rect = TRUE # Ohraničení skupin obdélníkem
#)

outdata <- data.frame(km50l$cluster, haclustwd2)
write.csv(outdata,'out_file_cz.csv') # zápis do souboru

# --------------------
