#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")
}
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"
# 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
# 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)
}
# 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)
# 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))
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"))