#######################################################################################
#R Code to Run K_Means (first run ..._Choose_Cluster.R to determine number of clusters)
#######################################################################################

#install.packages("readxl" and "factoextra" and "writexl")
library(readxl)
library(factoextra)
library(writexl)

#set random seed
set.seed(123456789)

#Read data
energy_poll_data <- read_excel("energy_poll_data.xlsx")
cluster_dat <- energy_poll_data[, c("NGO", "GOVT", "INDUSTRY", "SCIENCE", "ECON", "ENV")]

#Set number of clusters
K<-5

#Run K-Means with chosen level of segments (centers)
k5_res <- kmeans(cluster_dat, centers = K, nstart = 100, iter.max = 200)

# Per-cluster summaries
cluster_sizes <- data.frame(cluster = 1:K, size = k5_res$size)
centers       <- data.frame(cluster = 1:K, k5_res$centers, row.names = NULL)
print(cluster_sizes)
print(centers)

# Row-level outputs
assignments <- data.frame(
  row = seq_len(nrow(cluster_dat)),
  cluster = k5_res$cluster
)

# Original data + cluster label
data_with_cluster <- cbind(energy_poll_data, cluster = k5_res$cluster)

# Cluster “profiles” on original scale (means per cluster)
feature_cols<-c("NGO", "GOVT", "INDUSTRY", "SCIENCE", "ECON", "ENV")
cluster_profiles <- aggregate(
  energy_poll_data[, feature_cols],
  by = list(cluster = k5_res$cluster),
  FUN = mean
)

# Write everything to one Excel workbook (one sheet per item)
write_xlsx(
  list(
    Cluster_Profiles   = cluster_profiles,
    Cluster_Sizes      = cluster_sizes,
    Data_with_Cluster  = data_with_cluster
  ),
  path = "kmeans_summary.xlsx"
)

cat("Wrote kmeans_summary.xlsx\n")
