library(readxl)
library(tidyverse)
library(viridis)
library(hrbrthemes)
library(patchwork)
library(reshape2)
library(plotly)
library(htmlwidgets)

dados <- read_xlsx("C:/Users/Rhyan/Desktop/Trabalhos/Mestrado/Análise Multivariada/Atividade Final/Dados.xlsx")
dados_limpos <- dados %>%
  select(`Idade`, `Cafeína (mg)`, `Qualidade de sono`, `Nível de foco`, `Tipo de bebida`) %>%
  drop_na()

pca_resultado <- prcomp(dados_limpos[, 1:4], scale = TRUE)

variancia_explicada <- summary(pca_resultado)$importance[2, ] * 100
lbl_pc1 <- paste0("PC1 (", round(variancia_explicada[1], 1), "%)")
lbl_pc2 <- paste0("PC2 (", round(variancia_explicada[2], 1), "%)")
lbl_pc3 <- paste0("PC3 (", round(variancia_explicada[3], 1), "%)")

df_pca_3d <- as.data.frame(pca_resultado$x[, 1:3]) %>%
  mutate(
    Bebida = dados_limpos$`Tipo de bebida`,
    Texto_Hover = paste("Bebida:", Bebida, 
                        "<br>", lbl_pc1, ":", round(PC1, 2), 
                        "<br>", lbl_pc2, ":", round(PC2, 2), 
                        "<br>", lbl_pc3, ":", round(PC3, 2)))

cores_projeto <- c("café" = "#FF5B2A", "chá" = "#10288C", "energético" = "#31FF2B")

PCA <- plot_ly(
  data = df_pca_3d, 
  x = ~PC1, 
  y = ~PC2, 
  z = ~PC3, 
  color = ~Bebida, 
  colors = cores_projeto,
  text = ~Texto_Hover,
  hoverinfo = "text", 
  type = "scatter3d", 
  mode = "markers",
  marker = list(size = 5, opacity = 0.8, line = list(color = "white", width = 0.5))) %>%
  layout(
    scene = list(
      xaxis = list(title = lbl_pc1),
      yaxis = list(title = lbl_pc2),
      zaxis = list(title = lbl_pc3)))

PCA
PCA_caminho <- "C:/Users/Rhyan/Desktop/Trabalhos/Mestrado/Análise Multivariada/Atividade Final/pca_3d_interativo.html"

saveWidget(PCA, file = PCA_caminho, selfcontained = TRUE)