#Abra o arquivo da pesquisa desejado
rm(list = ls())
library(readxl)
caminho_arquivo <- file.choose()
# Ve'rifique se um arquivo foi selecionado
if (!is.null(caminho_arquivo)) {
# Leia o arquivo utilizando a função adequada (por exemplo, read.csv, read_excel, etc.)
  dados <- suppressMessages(read_excel(caminho_arquivo))
  dados <- as.data.frame(dados)
  # Faça o processamento dos dados conforme necessário
  # ...
  # Exemplo: imprima as primeiras linhas dos dados
} else {
  cat("Nenhum arquivo selecionado.\n")
}

Quebrando os dados por matéria

colnames(dados)[6]  <- "Disciplinas"
unique(dados$Disciplinas)
##  [1] "Economia Monetária e Financeira"             
##  [2] "Economia Brasileira 1"                       
##  [3] "Política Ambiental"                          
##  [4] "Economia dos Recursos Naturais e da Poluição"
##  [5] "Métodos e Técnicas da Ciência Econômica"     
##  [6] "Microeconomia 1"                             
##  [7] "Economia Regional e Urbana"                  
##  [8] "Evolução do Pensamento Econômico"            
##  [9] "Estatística Econômica 1"                     
## [10] "Econometria 1"                               
## [11] "Macroeconomia 1"                             
## [12] "Economia Matemática 2"                       
## [13] "Economia Matemática 3"                       
## [14] "Economia Internacional"                      
## [15] "FINALIZAR"

Segmentando o intervalo de dados útil das planilhas

# Selecionando cabeçalho de rótulos
rotulo <- dados[, 1:5]
head(rotulo, 5)
##   Carimbo de data/hora                     Nome     RA
## 1  2023-03-12 13:45:53   Fernando Lascane Arida 791837
## 2  2023-03-13 23:05:18                fernando2 159265
## 3  2023-03-14 13:15:16               Ana Donato 791688
## 4  2023-03-14 13:15:16 Gabriela Piovezan Ferraz 795320
## 5  2023-03-14 15:11:53 Gustavo Munhoz Guarnieri 810872
##                                  E-mail Ano de ingresso
## 1        fernandola@estudante.ufscar.br            2020
## 2       fernandola2@estudante.ufscar.br            2020
## 3         anadonato@estudante.ufscar.br            2020
## 4 gabriela.piovezan@estudante.ufscar.br            2020
## 5     gustavomunhoz@estudante.ufscar.br          2022.2
# Selecionando intervalos de cada matéria
EMF <- as.data.frame(dados[, 98:111])
# Juntando com os rótulos de dados permite a duplicação de todas as linhas com só as colunas das disciplinas
EMF <- cbind(rotulo, EMF)
# remover NAs cria o banco para a disciplina de interesse.
EMF <- EMF[complete.cases(EMF), ]
# ncol deve ser igual para cada dataframe
ncol(EMF)
## [1] 19
# Agora aplica-se o processo para as 13 disciplinas restantes e concatena-se o dataframe com todas as disciplinas resultantes. 

# Economia Brasileira 1 Check
BRA1 <- as.data.frame(dados[, 23:36])
BRA1 <- cbind(rotulo, BRA1)
BRA1 <- BRA1[complete.cases(BRA1), ]
ncol(BRA1)
## [1] 19
# Política Ambiental Check
POLAMB <- as.data.frame(dados[, 233:246])
POLAMB <- cbind(rotulo, POLAMB)
POLAMB <- POLAMB[complete.cases(POLAMB), ]
ncol(POLAMB)
## [1] 19
# Economia dos Recursos Naturais e da Poluição Check
ERNP <- as.data.frame(dados[, 38:51])
ERNP <- cbind(rotulo, ERNP)
ERNP <-ERNP[complete.cases(ERNP), ]
ncol(ERNP)
## [1] 19
# Métodos e Técnicas da Ciência Econômica CHECK
MTCE <- as.data.frame(dados[, 188:201])
MTCE <- cbind(rotulo, MTCE)
MTCE <- MTCE[complete.cases(MTCE), ]
ncol(MTCE)
## [1] 19
# Microeconomia 1
MICRO1 <- as.data.frame(dados[, 203:216])
MICRO1 <- cbind(rotulo, MICRO1)
MICRO1 <- MICRO1[complete.cases(MICRO1), ]
ncol(MICRO1)
## [1] 19
# Economia Regional e Urbana CHECK
ERU <- as.data.frame(dados[, 248:261])
ERU <- cbind(rotulo, ERU)
ERU <- ERU[complete.cases(ERU), ]
ncol(ERU)
## [1] 19
# Estatística Econômica 1 CHECK
ESTAT1 <- as.data.frame(dados[, 113:126])
ESTAT1<- cbind(rotulo, ESTAT1)
ESTAT1 <- ESTAT1[complete.cases(ESTAT1), ]
ncol(ESTAT1)
## [1] 19
# PORTUGUES CHECK
PORT <- as.data.frame(dados[, 158: 171])
PORT<- cbind(rotulo, PORT)
PORT<- PORT[complete.cases(PORT), ]
ncol(PORT)
## [1] 19
# MACROECONOMIA 1 CHECK
MACRO1 <- as.data.frame(dados[, 173: 186])
MACRO1<- cbind(rotulo, MACRO1)
MACRO1<- MACRO1[complete.cases(MACRO1), ]
ncol(MACRO1)
## [1] 19
# ECONOMETRIA 1 CHECK
ECON1 <- as.data.frame(dados[, 7: 20])
ECON1<- cbind(rotulo, ECON1)
ECON1<- ECON1[complete.cases(ECON1), ]
ncol(ECON1)
## [1] 19
# EConomia internacional CHECK
ECONINT <- as.data.frame(dados[, 218: 231])
ECONINT<- cbind(rotulo, ECONINT)
ECONINT<- ECONINT[complete.cases(ECONINT), ]
ncol(ECONINT)
## [1] 19
# Evolução do Pensamento Econômico CHECK
EPE <- as.data.frame(dados[, 128: 141])
EPE <- cbind(rotulo, EPE)
EPE <- EPE[complete.cases(EPE), ]

MAT3 <- as.data.frame(dados[, 83: 96])
MAT3 <- cbind(rotulo, MAT3)
MAT3 <- MAT3[complete.cases(MAT3), ]

# Econometria 1  7 ao 20
# MAT2 68 + 13
# MAT3 83
# ESTAT 1 99
# ESTA2 113
# PORT 158
# MACRO1 172
# MÉTODOS 188
# Internacional 218

Editando o nome das questões

# Todos os dataframes tem uma estrutura de Nx19, mas cada coluna recebe uma denominação diferente, embora seja a mesma questão. Precisamos tratar a partir da posição 6. De Q1 a Q14

# Define o slice inicial
place <- 6

# Cria uma lista com os dataframes trabalhados na secção anterior
dataframes <- c("EMF", "BRA1", "POLAMB", "ERU", "EPE", "ERNP", "ESTAT1", "MACRO1", "ECON1", "ECONINT", "PORT","MICRO1", "MTCE", "MAT3")


# Troca o nome das colunas a partir da coluna 6 para Q1 a Q14. 
for (df_name in dataframes) {
  # Acessar o dataframe usando o nome obtido
  df <- get(df_name)
  
  # Modificar os nomes das colunas a partir da posição 6
  colunas <- colnames(df)
  for (i in place:length(colunas)) {
    colunas[i] <- paste0("Q", i - place + 1)
  }
  colnames(df) <- colunas
  
  # Atribuir o dataframe modificado de volta à variável original
  assign(df_name, df)
}

Juntando num único dataframe

# Primeiro vamos readicionar os rótulos das disciplinas a cada dataframe. 

# Exemplo para monetária. Podemos repetir o código abaixo trocando variáveis, ou fazer via lista de dataframes!
# EMF$Disciplina <- "EMF"
# EMF

for (df_name in dataframes) {
  # Acessar o dataframe usando o nome obtido
  df <- get(df_name)
  
  # Adicionar uma nova coluna com a nomeação do dataframe
  df$Disciplina <- df_name
  
  # Atribuir o dataframe modificado de volta à variável original
  assign(df_name, df, envir = .GlobalEnv)
}

# Agora podemos juntar todos os dataframes por colunas, uma vez que não devem existir NAs, os rótulos são iguais e temos um label de Disciplina para identificar o conjunto de dados

dados <- rbind(EMF, BRA1, POLAMB, ERU, EPE, ERNP, ESTAT1, MACRO1, ECON1, ECONINT, PORT, MICRO1, MTCE, MAT3)
summary(dados)
##  Carimbo de data/hora                 Nome                 RA        
##  Min.   :2023-03-12 13:45:53.56   Length:150         Min.   :159265  
##  1st Qu.:2023-03-15 09:29:58.10   Class :character   1st Qu.:791920  
##  Median :2023-03-15 16:41:21.18   Mode  :character   Median :801306  
##  Mean   :2023-03-17 23:48:31.75                      Mean   :795777  
##  3rd Qu.:2023-03-17 18:18:58.97                      3rd Qu.:802717  
##  Max.   :2023-04-13 14:50:56.55                      Max.   :814092  
##     E-mail          Ano de ingresso         Q1                 Q2           
##  Length:150         Length:150         Length:150         Length:150        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##       Q3                 Q4                 Q5                 Q6           
##  Length:150         Length:150         Length:150         Length:150        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##       Q7                 Q8                 Q9                Q10           
##  Length:150         Length:150         Length:150         Length:150        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##       Q11            Q12              Q13             Q14       
##  Min.   : 1.0   Min.   : 1.000   Min.   : 1.00   Min.   : 1.00  
##  1st Qu.: 6.0   1st Qu.: 7.000   1st Qu.: 2.00   1st Qu.: 6.25  
##  Median : 8.0   Median : 8.500   Median : 5.00   Median : 9.00  
##  Mean   : 7.4   Mean   : 7.987   Mean   : 5.12   Mean   : 7.78  
##  3rd Qu.: 9.0   3rd Qu.:10.000   3rd Qu.: 8.00   3rd Qu.:10.00  
##  Max.   :10.0   Max.   :10.000   Max.   :10.00   Max.   :10.00  
##   Disciplina       
##  Length:150        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
# Percebemos que não temos NAs
# Filtro se tivessemos NAs
dados[rowSums(is.na(dados)) > 0, ]
##  [1] Carimbo de data/hora Nome                 RA                  
##  [4] E-mail               Ano de ingresso      Q1                  
##  [7] Q2                   Q3                   Q4                  
## [10] Q5                   Q6                   Q7                  
## [13] Q8                   Q9                   Q10                 
## [16] Q11                  Q12                  Q13                 
## [19] Q14                  Disciplina          
## <0 linhas> (ou row.names de comprimento 0)

Lidando com os valores categórios

# Definir a ordem das categorias
ordem <- c("Discordo completamente", "Discordo", "Nem concordo, nem discordo", "Concordo", "Concordo plenamente")

# Criar um vetor de valores de 1 a 5
valores <- 1:5

# Percorrer o loop de Q6 a Q10 e atribuir os valores correspondentes às categorias
for (i in 6:15) {
  coluna <- colnames(dados)[i]
  dados[[coluna]] <- factor(dados[[coluna]], levels = ordem, labels = valores)
}
dados[, 6:19] <- sapply(dados[, 6:19], as.numeric)
# Visualizando
head(dados)
##    Carimbo de data/hora                       Nome     RA
## 1   2023-03-12 13:45:53     Fernando Lascane Arida 791837
## 11  2023-03-14 21:12:50   Gabriela Piovezan Ferraz 795320
## 30  2023-03-16 08:56:47             Nicholas Blasi 790083
## 38  2023-03-24 16:21:29     Fernando Lascane Arida 791837
## 40  2023-03-26 15:38:38 Alex Albuquerque Rodrigues 770485
## 2   2023-03-13 23:05:18                  fernando2 159265
##                                   E-mail Ano de ingresso Q1 Q2 Q3 Q4 Q5 Q6 Q7
## 1         fernandola@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 11 gabriela.piovezan@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 30      nicholasbtmn@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 38        fernandola@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 40            alex76@estudante.ufscar.br            2019  5  5  5  5  5  5  5
## 2        fernandola2@estudante.ufscar.br            2020  2  4  5  1  3  2  3
##    Q8 Q9 Q10 Q11 Q12 Q13 Q14 Disciplina
## 1   5  5   5   2   1   5   1        EMF
## 11  5  5   5   8  10   3  10        EMF
## 30  5  5   5   9   9   6   9        EMF
## 38  5  5   5   6  10   2  10        EMF
## 40  5  5   5  10  10   1   8        EMF
## 2   5  1   2   5   8   2   5       BRA1
# Checando NAs
dados[rowSums(is.na(dados)) > 0, ]
##  [1] Carimbo de data/hora Nome                 RA                  
##  [4] E-mail               Ano de ingresso      Q1                  
##  [7] Q2                   Q3                   Q4                  
## [10] Q5                   Q6                   Q7                  
## [13] Q8                   Q9                   Q10                 
## [16] Q11                  Q12                  Q13                 
## [19] Q14                  Disciplina          
## <0 linhas> (ou row.names de comprimento 0)
# UFA! A partir daqui pode-se fazer alguma análise dos dados!
nrow(dados)
## [1] 150
# Pontos por Questão

head(dados)
##    Carimbo de data/hora                       Nome     RA
## 1   2023-03-12 13:45:53     Fernando Lascane Arida 791837
## 11  2023-03-14 21:12:50   Gabriela Piovezan Ferraz 795320
## 30  2023-03-16 08:56:47             Nicholas Blasi 790083
## 38  2023-03-24 16:21:29     Fernando Lascane Arida 791837
## 40  2023-03-26 15:38:38 Alex Albuquerque Rodrigues 770485
## 2   2023-03-13 23:05:18                  fernando2 159265
##                                   E-mail Ano de ingresso Q1 Q2 Q3 Q4 Q5 Q6 Q7
## 1         fernandola@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 11 gabriela.piovezan@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 30      nicholasbtmn@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 38        fernandola@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 40            alex76@estudante.ufscar.br            2019  5  5  5  5  5  5  5
## 2        fernandola2@estudante.ufscar.br            2020  2  4  5  1  3  2  3
##    Q8 Q9 Q10 Q11 Q12 Q13 Q14 Disciplina
## 1   5  5   5   2   1   5   1        EMF
## 11  5  5   5   8  10   3  10        EMF
## 30  5  5   5   9   9   6   9        EMF
## 38  5  5   5   6  10   2  10        EMF
## 40  5  5   5  10  10   1   8        EMF
## 2   5  1   2   5   8   2   5       BRA1
dados[, 6:19] <- sapply(dados[, 6:19], as.numeric)

notas <- aggregate(dados[, 6:(ncol(dados)-1)], by = list(dados$Disciplina), FUN = mean)
colnames(notas)[colnames(notas) == "Group.1"] <- "Disciplina"
head(notas)
##   Disciplina       Q1       Q2       Q3       Q4       Q5       Q6       Q7
## 1       BRA1 4.500000 4.750000 4.916667 4.583333 4.250000 4.333333 4.416667
## 2      ECON1 4.750000 4.333333 5.000000 5.000000 4.833333 4.666667 3.750000
## 3    ECONINT 4.923077 4.923077 5.000000 5.000000 4.923077 4.846154 4.923077
## 4        EMF 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000
## 5        EPE 4.833333 3.750000 4.666667 4.583333 4.250000 3.833333 4.083333
## 6       ERNP 4.400000 4.333333 5.000000 4.933333 5.000000 4.933333 4.800000
##         Q8       Q9      Q10      Q11      Q12      Q13      Q14
## 1 4.666667 4.083333 4.583333 7.916667 9.000000 4.000000 8.916667
## 2 4.916667 4.750000 5.000000 7.666667 8.583333 7.833333 9.833333
## 3 4.846154 4.846154 4.846154 9.307692 9.769231 4.538462 9.538462
## 4 5.000000 5.000000 5.000000 7.000000 8.000000 3.400000 7.600000
## 5 4.583333 2.000000 4.583333 7.000000 8.250000 3.500000 7.833333
## 6 4.933333 4.666667 4.866667 8.733333 9.533333 3.600000 7.666667
boxplot(notas[, 2:11], col = "gray", main = "Boxplot Q1 a Q14")

par(mar = c(5, 4, 4, 10))

boxplot(notas[, 12:15], col = "gray", main = "Boxplot Q1 a Q14")

par(mar = c(5, 4, 4, 10))


boxplot(dados[, 6:(ncol(dados)-1)], col = "blue", main = "Boxplot Q1 a Q4")

par(mar = c(5, 4, 4, 10))

Plotando as médias por matéria

library(ggplot2)
library(tidyr)

# Converter o dataframe para o formato longo usando a função gather
notas_long <- gather(notas, key = "coluna", value = "valor", -Disciplina)

# Plotar os valores como linhas separadas usando ggplot2
p <- ggplot(notas_long, aes(x = Disciplina, y = valor, color = coluna, group = coluna)) + geom_line()
print(p)

library(ggplot2)
library(tidyr)

# Converter o dataframe para o formato longo usando a função gather
notas_long <- gather(notas, key = "questao", value = "valor", -Disciplina)

# Dividir os valores por 2 a partir da questão Q10 em diante
notas_long$valor[notas_long$questao %in% colnames(notas)[-1][11:length(colnames(notas))]] <- notas_long$valor[notas_long$questao %in% colnames(notas)[-1][11:length(colnames(notas))]] / 2

# Definir a ordem dos níveis da coluna "questao" na ordem em que aparecem no dataframe original
notas_long$questao <- factor(notas_long$questao, levels = colnames(notas)[-1])

# Gerar sequência de tons de cinza com 11 valores distintos
cores <- gray(seq(0, 1, length.out = 14))

# Gerar sequência de valores para linetype
valores_linetype <- seq_along(unique(notas$Disciplina))

# Gerar sequência de valores para shape
valores_shape <- seq_along(unique(notas$Disciplina))

# Plotar os valores como linhas e pontos separados usando ggplot2
p <- ggplot(notas_long, aes(x = questao, y = valor, group = Disciplina)) +
  geom_line(aes(color = Disciplina), size = 1, linetype = "solid") +
  geom_point(aes(color = Disciplina, shape = Disciplina), size = 3) +
  scale_color_manual(values = cores) +
  scale_linetype_manual(values = valores_linetype) +
  scale_shape_manual(values = valores_shape) +
  theme(legend.position = "top") +
  labs(x = "Questões", y = "Valores")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
print(p)

# Calcular a média das questões Q1 a Q10 por disciplina

medias <- subset(notas, select = c(1:10))
names(medias)[1] <- names(notas)[1]
medias$Medias <- rowMeans(medias[2:10])
medias <- as.data.frame(cbind("Disciplina" = medias$Disciplina,"Medias" = medias$Medias))
medias$Medias <- as.numeric(medias$Medias)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

# Calculando a distância percentual entre os colocados
medias <- arrange(medias, desc(Medias))
medias <- mutate(medias, distancia_percentual = (Medias - lag(Medias)) / lag(Medias) * 100)

# Plotando o gráfico de barras com a legenda da coluna "Disciplina"
medias <- transform(medias, Disciplina = factor(Disciplina, levels = Disciplina))
plot <- ggplot(data = medias, aes(x = seq_along(distancia_percentual), y = distancia_percentual)) +
  geom_col(fill = "steelblue") +
  xlab("Colocação") +
  ylab("Distância Percentual") +
  ggtitle("Distância Percentual entre Colocados") +
  scale_x_continuous(breaks = seq_along(medias$Disciplina), labels = medias$Disciplina)

print(plot)
## Warning: Removed 1 rows containing missing values (`position_stack()`).

library(ggplot2)

# Converter a coluna "Disciplina" em um fator
medias$Disciplina <- factor(medias$Disciplina)

# Criar o gráfico de barras das médias com a legenda das disciplinas
plot <- ggplot(medias, aes(x = reorder(Disciplina, -Medias), y = Medias)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  xlab("Disciplina") +
  ylab("Médias") +
  ggtitle("Gráfico de Barras das Médias") +
  scale_x_discrete(labels = medias$Disciplina)

print(plot)

## Avaliação por Ano

# Realizando algumas checagens nos dados de anos de ingresso

dados$`Ano de ingresso` <- as.numeric(dados$`Ano de ingresso`)

# Verificando  a dispersão dos dados encontramos a burrada do guilherme
summary(dados$`Ano de ingresso`)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      20    2020    2021    1888    2021    2022
# transformando 20 para 2020
dados$`Ano de ingresso`[dados$`Ano de ingresso` == "20"] <- "2020"
dados$`Ano de ingresso` <- as.numeric(dados$`Ano de ingresso`)

# Calcular os limites dos intervalos
breaks <- seq(min(dados$`Ano de ingresso`), max(dados$`Ano de ingresso`) + 1, by = 1)

# Plotar o histograma com os limites ajustados
hist(dados$`Ano de ingresso`, breaks = breaks, main = "Histograma de Ano de Ingresso", xlab = "Ano de Ingresso")
legend("topright", legend = "Ano de ingresso", fill = "white", border = "white")

#corrigindo o problema
# Calcular as notas médias por ano e por disciplina

head(dados)
##    Carimbo de data/hora                       Nome     RA
## 1   2023-03-12 13:45:53     Fernando Lascane Arida 791837
## 11  2023-03-14 21:12:50   Gabriela Piovezan Ferraz 795320
## 30  2023-03-16 08:56:47             Nicholas Blasi 790083
## 38  2023-03-24 16:21:29     Fernando Lascane Arida 791837
## 40  2023-03-26 15:38:38 Alex Albuquerque Rodrigues 770485
## 2   2023-03-13 23:05:18                  fernando2 159265
##                                   E-mail Ano de ingresso Q1 Q2 Q3 Q4 Q5 Q6 Q7
## 1         fernandola@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 11 gabriela.piovezan@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 30      nicholasbtmn@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 38        fernandola@estudante.ufscar.br            2020  5  5  5  5  5  5  5
## 40            alex76@estudante.ufscar.br            2019  5  5  5  5  5  5  5
## 2        fernandola2@estudante.ufscar.br            2020  2  4  5  1  3  2  3
##    Q8 Q9 Q10 Q11 Q12 Q13 Q14 Disciplina
## 1   5  5   5   2   1   5   1        EMF
## 11  5  5   5   8  10   3  10        EMF
## 30  5  5   5   9   9   6   9        EMF
## 38  5  5   5   6  10   2  10        EMF
## 40  5  5   5  10  10   1   8        EMF
## 2   5  1   2   5   8   2   5       BRA1
mediaporano <- aggregate(dados[, 6:(ncol(dados)-1)], 
                             by = list(dados$`Ano de ingresso`, dados$Disciplina), 
                             FUN = mean)

medAnoProf <-subset(mediaporano, select = c(1:12))
colnames(medAnoProf)[1] <- "Ano"
colnames(medAnoProf)[2] <- "Disciplina"
medAnoProf$Medias <- rowMeans(medAnoProf[3:12]) 
medAnoProf <- cbind("Ano" =medAnoProf$Ano,"Disciplina" = medAnoProf$Disciplina, "Media" = medAnoProf$Medias)
medAnoProf <- as.data.frame(medAnoProf)
medAnoProf
##       Ano Disciplina            Media
## 1    2020       BRA1            4.025
## 2    2021       BRA1             4.75
## 3    2019      ECON1              4.9
## 4    2020      ECON1             4.95
## 5    2021      ECON1           4.5875
## 6    2020    ECONINT                5
## 7    2021    ECONINT 4.89090909090909
## 8    2019        EMF                5
## 9    2020        EMF                5
## 10   2020        EPE             4.05
## 11   2021        EPE              4.4
## 12   2022        EPE              4.2
## 13   2020       ERNP 4.83333333333333
## 14   2021       ERNP 4.78181818181818
## 15 2022.2       ERNP              4.7
## 16   2020        ERU 3.96666666666667
## 17   2020     ESTAT1 4.33333333333333
## 18   2021     ESTAT1              4.6
## 19   2022     ESTAT1 4.55714285714286
## 20   2020     MACRO1 4.36666666666667
## 21   2021     MACRO1 4.46666666666667
## 22   2022     MACRO1              3.4
## 23   2020       MAT3             4.05
## 24   2021       MAT3 4.54444444444444
## 25   2020     MICRO1              4.8
## 26   2021     MICRO1             4.85
## 27   2022     MICRO1              4.6
## 28   2019       MTCE             3.55
## 29   2020       MTCE              1.4
## 30   2021       MTCE 2.88571428571429
## 31 2022.2       MTCE                1
## 32   2020     POLAMB             3.35
## 33   2020       PORT              2.7
## 34   2021       PORT              4.9
## 35   2022       PORT 4.58333333333333
## 36 2022.2       PORT              4.6
library(ggplot2)
library(scales)

# Converter coluna "Media" para numérico
medAnoProf$Media <- as.numeric(medAnoProf$Media)

# Plotar gráfico de linhas com marcadores diferentes
ggplot(medAnoProf, aes(x = Ano, y = Media, group = Disciplina, color = Disciplina, shape = Disciplina)) +
  geom_line(size = 1.5) +
  geom_point(size = 3) +
  labs(x = "Ano", y = "Média", title = "Média por Disciplina e Ano") +
  theme_minimal() +
  scale_y_continuous(labels = comma_format(accuracy = 0.01)) +
  theme(legend.position = "top")
## Warning: The shape palette can deal with a maximum of 6 discrete values because
## more than 6 becomes difficult to discriminate; you have 14. Consider
## specifying shapes manually if you must have them.
## Warning: Removed 21 rows containing missing values (`geom_point()`).

library(ggplot2)

# Ordenar as disciplinas pelas médias em ordem crescente
medAnoProf <- medAnoProf[order(medAnoProf$Media), ]

# Obter as três piores disciplinas
worst_disciplinas <- head(medAnoProf$Disciplina, 3)

# Plotar o boxplot com destaque para as disciplinas que estão puxando a mediana para baixo
ggplot(medAnoProf, aes(x = Disciplina, y = Media, fill = Media < median(Media))) +
  geom_boxplot() +
  scale_fill_manual(values = c("FALSE" = "gray", "TRUE" = "red"), guide = FALSE) +
  labs(x = "Disciplina", y = "Média", title = "Boxplot das Médias por Disciplina") +
  theme_minimal() +
  theme(legend.position = "top")
## Warning: The `guide` argument in `scale_*()` cannot be `FALSE`. This was deprecated in
## ggplot2 3.3.4.
## ℹ Please use "none" instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

library(ggplot2)
library(dplyr)

dados$Media <- rowMeans(dados[, 6:15])

# Calcular a contagem de linhas por disciplina
dados_count <- dados %>%
  group_by(Disciplina) %>%
  summarise(Count = n())

# Plotar o boxplot da coluna Media com contagem de linhas
ggplot() +
  geom_boxplot(data = dados, aes(x = Disciplina, y = Media), outlier.colour = "red") +
  geom_text(data = dados_count, aes(x = Disciplina, y = max(dados$Media) + 0.1, label = Count), color = "black", size = 3, vjust = -0.5) +
  labs(x = "Disciplina", y = "Média", title = "Boxplot da Coluna Media por Disciplina Q1 a Q10") +
  theme_minimal() +
  theme(legend.position = "top", legend.box.spacing = unit(0.4, "cm"))