library(tidyverse)
library(here)
library(dplyr)
library(tidyquery)
library(plotly)
library(factoextra)
library(NbClust)
library(klustR)

theme_set(theme_light())
#install.packages("extrafont")
#library(extrafont)
#font_import()
#loadfonts(device="win")       #Register fonts for Windows bitmap output
#fonts()

windowsFonts(A = windowsFont("Times New Roman"))
# SEMPRE read_csv NUNCA read.csv
alunos = read_csv(
    here("Dados-UFCG-jul2021/alunos.csv"),
        col_types = cols(
        
    ),
)
## Warning: 567184 parsing failures.
##  row        col expected                  actual                                                           file
## 2589 APV_NOTA_1 a double COMUNICACAO E EXPRESSAO 'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_2 a double LINGUA ESTRANGEIRA      'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_3 a double HISTORIA                'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_4 a double GEOGRAFIA               'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_5 a double MATEMATICA              'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/alunos.csv'
## .... .......... ........ ....................... ..............................................................
## See problems(...) for more details.
historico = read_csv(
    here("Dados-UFCG-jul2021/historico.csv"),
    col_types = cols(
        
        MAT_TUR_PERIODO = col_character(),
        MAT_TUR_ANO = col_character()
    )
)
## Warning: 5572026 parsing failures.
## row col  expected    actual                                                              file
##   1  -- 8 columns 9 columns 'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/historico.csv'
##   2  -- 8 columns 9 columns 'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/historico.csv'
##   3  -- 8 columns 9 columns 'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/historico.csv'
##   5  -- 8 columns 9 columns 'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/historico.csv'
##   6  -- 8 columns 9 columns 'C:/Users/perei/Desktop/eda-tcc/Dados-UFCG-jul2021/historico.csv'
## ... ... ......... ......... .................................................................
## See problems(...) for more details.
disciplinas = read_csv(
    here("Dados-UFCG-jul2021/disciplinas-geral.csv")
)
## 
## -- Column specification --------------------------------------------------------
## cols(
##   DIS_DISCIPLINA = col_double(),
##   DIS_DESCRICAO = col_character(),
##   DIS_QTD_CR = col_double(),
##   DIS_QTD_CH = col_double(),
##   DIS_SET_COD_SETOR = col_double(),
##   DIS_TDI_COD_TIPO = col_double()
## )
nomes_reserva = read_csv2(
    here("Dados-UFCG-jul2021/nomes_reserva.csv"))
## i Using '\',\'' as decimal and '\'.\'' as grouping mark. Use `read_delim()` for more control.
## 
## -- Column specification --------------------------------------------------------
## cols(
##   matricula = col_double(),
##   cota = col_character(),
##   nome = col_character()
## )
# Filtrando alunos n evadidos
# Filtrando alunos evadidos de 2009 a 2019
alunos_evadidos = alunos %>% filter(ALU_ANO_EVASA > 2008, ALU_ANO_EVASA < 2020, ALU_CCU_CUR_COD_CURSO==14102100,!is.na(ALU_ANO_EVASA))%>% filter(ALU_FORMA_EVASAO != 1)
alunos_no_curso = alunos %>% filter(ALU_CCU_CUR_COD_CURSO==14102100,is.na(ALU_ANO_EVASA))
formados = alunos %>% filter(ALU_CCU_CUR_COD_CURSO==14102100,ALU_FORMA_EVASAO == 1)
options(repr.plot.width = 16, repr.plot.height = 7)

Estatísticas Gerais

grafico1 <- alunos_evadidos %>%
  group_by(ALU_ANO_EVASA) %>%
  summarise(
    contagem = n(), .groups = 'drop') %>%

  ggplot(aes(x = as.factor(ALU_ANO_EVASA), y=contagem,label=contagem,fill=as.factor(ALU_ANO_EVASA))) +
  geom_bar(stat="identity",width = 0.9,alpha=0.5) +
  geom_text(size= 3.5, vjust = -0.3) +
  labs(
    x="Ano de evasão",
    y="Número de alunos"
  ) +

  scale_fill_discrete(guide="none") +  theme(text=element_text(family="A"))
  

ggsave("grafico1.png",grafico1,width = 5,
  height = 4)
grafico1

grafico2 <- alunos_evadidos %>%
  group_by(ALU_FORMA_EVASAO) %>%
  summarise(
    contagem = n(), .groups = 'drop') %>%

  ggplot(aes(x = reorder(ALU_FORMA_EVASAO,(-contagem)), y=contagem,label=contagem,fill=as.factor(ALU_FORMA_EVASAO))) +
  geom_bar(stat="identity",width = 0.9,alpha=0.5) +
  geom_text(size= 3.5, vjust = -0.3) +
  labs(
    x="Código de evasão",
    y="Número de alunos"
  ) +
  scale_fill_discrete(name="Forma de evasão",
                  breaks=c("0","001", "002", "003","004","005","006","007","008","009","010","011","012","013","014","015","016","017","018","019","020","021","022","023","050"),
                  labels=c("Aluno regularmente matriculado", "Graduado", "Transferência para outra Instituição de Ensino Superior","Falecimento","Abandono de curso","Cancelamento de matrícula","Cancelamento para mudança de curso","Cancelamento por decisão judicial","Cancelamento por solicitação do aluno","Suspensão temporária","Curso concluído - não colou grau","Cancelamento por não cumprimento da PEC","Reentrada no curso (novo vestibular)","Cumprimento convênio","Novo regimento","Não comparecimento a cadastro", "Remanejado de curso","Não compareceu ao remanejamento","Não compareceu à matrícula - Alunos ingressantes","Término de intercâmbio","Graduando por decisão judicial","Matrícula cancelada por reprovação por falta","Matrícula cancelada por reprovações na mesma disciplina","Matrícula suspensa - Débito na biblioteca","Aguardando cadastramento
"),guide="none") + theme(text=element_text(family="A"))


ggsave("grafico2.png",grafico2,width = 5,
  height = 4)
grafico2

Filtragem e preparação dos dados (Construção do perfil)

# Remover alunos que se formaram posteriormente ou ainda estão no curso (nova matricula)

cpfs_formados = formados[['ALU_CPF']]

cpfs_no_curso =  alunos_no_curso[['ALU_CPF']]

alunos_evadidos = alunos_evadidos %>% filter(!ALU_CPF %in% cpfs_formados)
alunos_evadidos = alunos_evadidos %>% filter(!ALU_CPF %in% cpfs_no_curso)
#Remove disciplinas ainda em curso e filtra apenas matriculas normais (excluindo despensa, extracurricular....)
historico = historico %>% filter(MAT_SITUACAO != 1) %>% filter(MAT_TIPO_MATRICULA==1)
historico_cc <- query(
"SELECT a.ALU_MATRICULA,a.ALU_CPF, a.ALU_FORMA_EVASAO, a.ALU_TIPO_RESERVA_VAGAS, a.ALU_SEXO, a.ALU_ANO_NASCIMENTO,a.ALU_PERIODO_EVASAO, h.MAT_TUR_DIS_DISCIPLINA, h.MAT_SITUACAO,h.MAT_TIPO_MATRICULA, a.ALU_ANO_EVASA, h.MAT_TUR_ANO,h.MAT_TUR_PERIODO,a.ALU_ANO_INGRESSO, a.ALU_PERIODO_INGRESSO

  FROM alunos_evadidos a LEFT JOIN historico h ON a.ALU_MATRICULA = h.MAT_ALU_MATRICULA;"
)
result <- query(
"SELECT p.ALU_MATRICULA,p.ALU_CPF, p.ALU_FORMA_EVASAO,p.ALU_TIPO_RESERVA_VAGAS, p.ALU_SEXO, p.ALU_ANO_NASCIMENTO, p.MAT_TUR_DIS_DISCIPLINA, d.DIS_QTD_CR, d.DIS_DESCRICAO, p.ALU_ANO_EVASA,p.ALU_PERIODO_EVASAO, p.MAT_SITUACAO, p.MAT_TIPO_MATRICULA,p.ALU_ANO_INGRESSO, p.ALU_PERIODO_INGRESSO

  FROM historico_cc p LEFT JOIN disciplinas d ON p.MAT_TUR_DIS_DISCIPLINA = d.DIS_DISCIPLINA;"
)

a = result %>% filter(ALU_MATRICULA=="113110899")

a
## # A tibble: 17 x 15
##    ALU_MATRICULA ALU_CPF     ALU_FORMA_EVASAO ALU_TIPO_RESERVA_VAGAS ALU_SEXO
##            <dbl> <chr>                  <dbl> <lgl>                     <dbl>
##  1     113110899 00377056103               22 NA                            1
##  2     113110899 00377056103               22 NA                            1
##  3     113110899 00377056103               22 NA                            1
##  4     113110899 00377056103               22 NA                            1
##  5     113110899 00377056103               22 NA                            1
##  6     113110899 00377056103               22 NA                            1
##  7     113110899 00377056103               22 NA                            1
##  8     113110899 00377056103               22 NA                            1
##  9     113110899 00377056103               22 NA                            1
## 10     113110899 00377056103               22 NA                            1
## 11     113110899 00377056103               22 NA                            1
## 12     113110899 00377056103               22 NA                            1
## 13     113110899 00377056103               22 NA                            1
## 14     113110899 00377056103               22 NA                            1
## 15     113110899 00377056103               22 NA                            1
## 16     113110899 00377056103               22 NA                            1
## 17     113110899 00377056103               22 NA                            1
## # ... with 10 more variables: ALU_ANO_NASCIMENTO <dbl>,
## #   MAT_TUR_DIS_DISCIPLINA <dbl>, DIS_QTD_CR <dbl>, DIS_DESCRICAO <chr>,
## #   ALU_ANO_EVASA <dbl>, ALU_PERIODO_EVASAO <dbl>, MAT_SITUACAO <dbl>,
## #   MAT_TIPO_MATRICULA <dbl>, ALU_ANO_INGRESSO <dbl>,
## #   ALU_PERIODO_INGRESSO <dbl>
#colocando semestre no formato ano.semestre
historico_cc <- historico_cc %>% mutate(SEMESTRE = paste(MAT_TUR_ANO,MAT_TUR_PERIODO, sep="."))
semestres <- query(
"SELECT p.ALU_MATRICULA as matricula, COUNT(DISTINCT(SEMESTRE)) as n_semestres

  FROM historico_cc p
  GROUP BY p.ALU_MATRICULA"
)
perfis = query(
"SELECT r.ALU_MATRICULA as matricula, r.ALU_CPF as cpf, r.ALU_FORMA_EVASAO as forma_evasao, r.ALU_ANO_EVASA as ano_evasao, r.ALU_PERIODO_EVASAO as periodo_evasao, r.ALU_SEXO as sexo, r.ALU_ANO_NASCIMENTO as ano_nascimento, SUM(r.DIS_QTD_CR) as creditos_matriculados, r.ALU_ANO_INGRESSO as ano_ingresso, r.ALU_PERIODO_INGRESSO as periodo_ingresso
  FROM result r
  GROUP BY r.ALU_MATRICULA, r.ALU_FORMA_EVASAO, r.ALU_ANO_EVASA,r.ALU_SEXO,r.ALU_ANO_NASCIMENTO,r.ALU_CPF,r.ALU_PERIODO_EVASAO,r.ALU_ANO_INGRESSO, r.ALU_PERIODO_INGRESSO
  ;"
)
#SELECIONA AS DISCIPLINAS APROVEITADAS, CONTAM SÓ AS APROVADAS(CÓDIGO 3) E TIPO DE MTRICULA (1 - NORMAL):


historico2 <- historico %>% filter(MAT_SITUACAO==3) %>% filter(MAT_TIPO_MATRICULA==1)

historico_cc2 <- query(
"SELECT a.ALU_MATRICULA, h.MAT_TUR_DIS_DISCIPLINA

  FROM alunos a LEFT JOIN historico2 h ON a.ALU_MATRICULA = h.MAT_ALU_MATRICULA;"
)

result2 <- query(
"SELECT p.ALU_MATRICULA, d.DIS_QTD_CR
  FROM historico_cc2 p LEFT JOIN disciplinas d ON p.MAT_TUR_DIS_DISCIPLINA = d.DIS_DISCIPLINA;"
)
alunos_aprovados = query(
"SELECT r.ALU_MATRICULA as matricula, SUM(r.DIS_QTD_CR) as creditos_integralizados
  FROM result2 r
  GROUP BY r.ALU_MATRICULA;"
)
# Trocar  aproveitados -> integralizados /acumulados -> matriculados
# Calculando Taxa de sucesso

perfis <- merge(perfis,alunos_aprovados)

# Calculando Carga Média (Créditos por semestre)

perfis <- merge(perfis,semestres)

# Adicionando idade do aluno no ano de evasão
perfis <- perfis %>% mutate(idade_evasao=ano_evasao - ano_nascimento) 
#Adicionando os nomes dos alunos no perfil
#perfis <- merge(perfis,nomes_reserva)
#linkedin <- read_csv(here("Dados-UFCG-jul2021/linkedin.csv")) %>% select("nome","url")
#Adicionado dados do linkedin
#perfis <- left_join(perfis,linkedin)
#alunos_ficha %>% count(nome)
# Parte_1 = Filtrar alunos com um matrícula só -> Filtrar apenas com código 8,4,21,22


# dataframe auxiliar
aux = perfis %>% count(cpf)
aux = aux %>% filter(n < 2)
aux = aux[['cpf']] #cpfs de alunos com apenas uma matricula

# filtrar perfis no qual o aluno possui uma mátricula só

perfis_1 = perfis %>% filter(cpf %in% aux)

#filtrar as matriculas de interesse

perfis_1 = perfis_1 %>% filter(forma_evasao == 22 | forma_evasao == 4| forma_evasao == 21 | forma_evasao == 8| forma_evasao == 14| forma_evasao == 5|forma_evasao == 6)

#Replace na coluna de evasão

altera = function(x){
  if(x == 4 | x == 5){
    return (4)
  }else if(x == 14 | x == 6){
    return (6)
  }else{
    return (x);
  }
}
altera_V <- Vectorize(altera)



perfis_1 <- perfis_1 %>% mutate(forma_evasao = altera_V(forma_evasao))

perfis_1 <- perfis_1 %>% select(cpf,forma_evasao,sexo,ano_nascimento,ano_evasao,creditos_matriculados,creditos_integralizados,n_semestres,idade_evasao)
# Parte 2

perfis_2 = perfis %>% filter(!cpf %in% aux)

aux2 = perfis_2 %>% filter(forma_evasao %in% c(22,4,21,8,6,5,14)) #7,2,10
aux2 = aux2[['cpf']]

#Removendo duplicações

aux2 = unique(aux2)

#Removendo alunos que não tem nenhuma matricula com as formas de evasão desejadas

perfis_2 = perfis_2 %>% filter(cpf %in% aux2)
# Variáveis que precisam ser somadas: creditos matriculados, integralizados e semestres 
p1 = query(
"SELECT p.cpf, sum(creditos_matriculados) as creditos_matriculados, sum(creditos_integralizados) as creditos_integralizados, sum(n_semestres) as n_semestres
  FROM perfis_2 p
  GROUP BY p.cpf
  ;"
)

# Varíaveis que se repetem

p2 = query(
"SELECT DISTINCT p.cpf, p.sexo, p.ano_nascimento
  FROM perfis_2 p
 
  ;"
)

#Varíaveis que ficará o registro mais recente

perfis_2 <- perfis_2 %>% select(cpf,forma_evasao,ano_evasao,periodo_evasao,idade_evasao,ano_ingresso,periodo_ingresso)
ss <- query("SELECT p.cpf, max(p.ano_evasao) as ano_evasao_u
  FROM perfis_2 p
  GROUP BY p.cpf
 
  ;")

perfis_2 = merge(ss,perfis_2) %>% filter(ano_evasao == ano_evasao_u)
dd <- query("SELECT p.cpf, max(p.periodo_evasao) as periodo_evasao_u
  FROM perfis_2 p
  GROUP BY p.cpf;")


perfis_2 = merge(dd,perfis_2) %>% filter(periodo_evasao == periodo_evasao_u)
nn <- query("SELECT p.cpf, max(p.ano_ingresso) as ano_ingresso_u
  FROM perfis_2 p
  GROUP BY p.cpf;")

perfis_2 = merge(nn,perfis_2) %>% filter(ano_ingresso == ano_ingresso_u)
perfis_2 = perfis_2 %>% select(cpf, forma_evasao,idade_evasao,ano_evasao)
perfis_2 = perfis_2 %>% mutate(forma_evasao= altera_V(forma_evasao))

perfis_2  = merge(perfis_2,p1)
perfis_2  = merge(perfis_2,p2)
#Juntando os perfis
perfis <- bind_rows(perfis_1,perfis_2)
perfis <- perfis %>% mutate(taxa_sucesso= creditos_integralizados / creditos_matriculados)
perfis <- perfis %>% mutate(carga_media = creditos_matriculados/ n_semestres)

perfis <- perfis %>% filter(!is.na(taxa_sucesso))
g <- perfis %>%
  group_by(forma_evasao) %>%
  summarise(
    contagem = n(), .groups = 'drop') %>%

  ggplot(aes(x = reorder(forma_evasao,(-contagem)), y=contagem,label=contagem,fill=as.factor(forma_evasao))) +
  geom_bar(stat="identity",width = 0.9,alpha=0.5) +
  geom_text(size= 3.5, vjust = -0.3) +
  labs(
    x="Código de evasão",
    y="Número de alunos"
  ) +
  scale_fill_discrete(name="Forma de evasão",
                  breaks=c("0","001", "002", "003","004","005","006","007","008","009","010","011","012","013","014","015","016","017","018","019","020","021","022","023","050"),
                  labels=c("Aluno regularmente matriculado", "Graduado", "Transferência para outra Instituição de Ensino Superior","Falecimento","Abandono de curso","Cancelamento de matrícula","Cancelamento para mudança de curso","Cancelamento por decisão judicial","Cancelamento por solicitação do aluno","Suspensão temporária","Curso concluído - não colou grau","Cancelamento por não cumprimento da PEC","Reentrada no curso (novo vestibular)","Cumprimento convênio","Novo regimento","Não comparecimento a cadastro", "Remanejado de curso","Não compareceu ao remanejamento","Não compareceu à matrícula - Alunos ingressantes","Término de intercâmbio","Graduando por decisão judicial","Matrícula cancelada por reprovação por falta","Matrícula cancelada por reprovações na mesma disciplina","Matrícula suspensa - Débito na biblioteca","Aguardando cadastramento
"),guide="none") + theme(text=element_text(family="A"))

g

grafico3 <- semestres %>%
  group_by(n_semestres) %>%
  summarise(
    contagem = n(), .groups = 'drop') %>%

  ggplot(aes(x = n_semestres, y=contagem,label=contagem, fill="#fff")) +
  geom_bar(stat="identity",width = 0.9,alpha=0.5) +
  geom_text(size= 3.5, vjust = -0.3) +
  labs(
    x="Números de semestres",
    y="Número de alunos"
  ) +

  scale_fill_discrete(guide="none") +  theme(text=element_text(family="A"))

ggsave("grafico3.png",grafico3,width = 5,
  height = 4)
grafico3

#Replace na coluna de evasão

altera = function(x){
  if(x == 4){
    return ("Abandono de Curso")
  }else if(x == 6){
    return ("Mudança de curso")
  }else if (x == 8){
    return ("Cancelamento por solicitação do aluno");
  } else if( x== 22){
    return("Reprovação por três vezes na mesma disciplina")
  }else{
    #21
    return("Reprovação por falta em todas as disciplinas de um período")
  }
}
altera_V <- Vectorize(altera)
perfis = perfis %>% mutate(forma_evasao_s = altera_V(forma_evasao)) %>% mutate(forma_evasao_s = as.factor(forma_evasao_s))
grafico4 <- perfis %>% ggplot(aes(x=creditos_matriculados,fill=forma_evasao_s)) +
  facet_wrap(~forma_evasao_s,ncol=1) + 
  geom_histogram(binwidth = 8) + labs(
  title="", x="Créditos Matriculados", y="Número de alunos"
) + theme(text=element_text(family="A"),strip.background = element_rect(fill = "grey"),strip.text.x = element_text(colour = 'black')
) + scale_fill_discrete(guide="none") +  scale_x_continuous(breaks=c(0,50,100,150,200,250,300,350,400))

ggsave("grafico4.png",grafico4,width = 5,height = 5)


grafico4

grafico4

Agrupamento

#separando os grupos
grupo_1 = perfis %>% filter(creditos_matriculados <= 40, creditos_integralizados <= 24)
grupo_2 = anti_join(perfis,grupo_1)
## Joining, by = c("cpf", "forma_evasao", "sexo", "ano_nascimento", "ano_evasao", "creditos_matriculados", "creditos_integralizados", "n_semestres", "idade_evasao", "taxa_sucesso", "carga_media", "forma_evasao_s")
grafico5 <- grupo_1 %>%  ggplot(aes(x=creditos_matriculados,fill=forma_evasao_s)) +
  facet_wrap(~forma_evasao_s,ncol=1) + 
  geom_histogram(binwidth = 8) + labs(
  title="", x="Créditos Matriculados", y="Número de alunos"
) + theme(text=element_text(family="A"),strip.background = element_rect(fill = "grey"),strip.text.x = element_text(colour = 'black')
) + scale_fill_discrete(guide="none") +  scale_x_continuous(breaks=c(0,10,20,30,40,50))


ggsave("grafico5.png",grafico5,width = 5,
  height = 5)

grafico5

grafico6 <- grupo_2 %>%  ggplot(aes(x=creditos_matriculados,fill=forma_evasao_s)) +
  facet_wrap(~forma_evasao_s,ncol=1) + 
  geom_histogram(binwidth = 8) + labs(
  title="", x="Créditos Matriculados", y="Número de alunos"
) + theme(text=element_text(family="A"),strip.background = element_rect(fill = "grey"),strip.text.x = element_text(colour = 'black')
) + scale_fill_discrete(guide="none") +  scale_x_continuous(breaks=c(0,50,100,150,200,250,350,400))



ggsave("grafico6.png",grafico6,width =5 ,
  height = 5)
grafico6

Agrupamento com Kmeans (grupo 1)

set.seed(1)

#grupo_1_rotulado <- grupo_1[,-1]
#row.names(grupo_1_rotulado) <- grupo_1[,1]


grupo_1_numerical <- grupo_1 %>% select("forma_evasao","taxa_sucesso","idade_evasao","carga_media","sexo")


# Normalization
grupo_1_numerical_norm <- as.data.frame(scale(grupo_1_numerical))
# Elbow method
grafico7 <- fviz_nbclust(grupo_1_numerical_norm, kmeans, method = "wss")


grafico7 <- grafico7 + theme(axis.text.x = element_text(size = 10),text=element_text(family="A"),axis.text.y = element_text(size = 10),axis.title.x = element_text(size = 11),axis.title.y = element_text(size = 11)) + labs(title=NULL, x="Número de clusters", y="Soma dos quadrados intra-clusters")


#labs(subtitle = "Método do cotovelo", title="Número ideal de clusters - grupo 1", x="Número de clusters", y="Total da soma dos quadrados")

ggsave("grafico7.png",grafico7,width = 8,
  height = 4)
grafico7

Executando algoritmo

set.seed(155)
grupo_1_kmeans <- kmeans(grupo_1_numerical_norm, centers=5)

Resultado

r <- aggregate(grupo_1_numerical, by=list(cluster=grupo_1_kmeans$cluster), mean)
pacoplot(r, r$cluster)

Agrupamento com Kmeans (grupo 2)

grupo_2_numerical = grupo_2 %>% select("forma_evasao","taxa_sucesso","idade_evasao","carga_media","sexo")

# Normalization
grupo_2_numerical_norm <- as.data.frame(scale(grupo_2_numerical))
# Elbow method
grafico8 <- fviz_nbclust(grupo_2_numerical_norm, kmeans, method = "wss")


grafico8 <- grafico8 + theme(axis.text.x = element_text(size = 10),text=element_text(family="A"),axis.text.y = element_text(size = 10),axis.title.x = element_text(size = 11),axis.title.y = element_text(size = 11)) + labs(title=NULL, x="Número de clusters", y="Soma dos quadrados intra-clusters")


#labs(subtitle = "Método do cotovelo", title="Número ideal de clusters - grupo 1", x="Número de clusters", y="Total da soma dos quadrados")

ggsave("grafico8.png",grafico8,width = 8,
  height = 4)
grafico8

Executando algoritmo

set.seed(155)

grupo_2_kmeans <- kmeans(grupo_2_numerical_norm, centers=5)

Resultado

e <- aggregate(grupo_2_numerical, by=list(cluster=grupo_2_kmeans$cluster), mean)
pacoplot(e, e$cluster)