O Exame Nacional do Ensino Médio (ENEM) desempenha um papel fundamental na avaliação do desempenho educacional dos estudantes brasileiros, além de ser um reflexo da qualidade da educação em todo o país. Com sua abrangência nacional e a disponibilização de um extenso conjunto de dados, o ENEM oferece uma oportunidade única para análises abrangentes e insights significativos sobre as tendências educacionais e demográficas em diferentes regiões do Brasil.
Neste trabalho, concentramos nossa atenção na análise dos dados do ENEM 2022, com um enfoque específico nas variáveis relacionadas à idade dos alunos, ao local de aplicação da prova e às notas obtidas nas diferentes áreas de avaliação. O objetivo principal é entender como esses fatores estão interconectados e como podem influenciar o desempenho dos estudantes em diferentes regiões do país.
A abordagem metodológica compreenderá desde a preparação dos dados até a interpretação dos resultados. O uso de análises estatísticas e visualizações gráficas permitirá destacar padrões de desempenho, correlações entre variáveis e possíveis insights regionais.
Os pacotes a seguir são necessários para a execução do código que você verá nesse projeto.
| Pacotes | Utilização |
|---|---|
| library(rmarkdown) | utilizado na conversão de arquivo em R em diversos formatos |
| library(dplyr) | utilizado na manipulação e transformação de dados |
| library(ggplot2) | utilizado para criação dos gráficos |
Nessa seção você encontrará com detalhes as operações que foram realizadas no dataset para as análises da próxima sessão.
Como dito anteriormente, a análise a seguir será feita com base nos dados no Enem_2022
Acessando o link, é possível realizar o download dos arquivos.
Realizando o download e descompactando os arquivos, o arquivo a ser trabalhado será o nomeado de ‘MICRODADOS_ENEM_2022’.
enem2022 <- read.csv("MICRODADOS_ENEM_2022.csv", sep = ";", encoding = "UTF-8")A base possui as seguintes colunas:
cat('Total de Linhas:', nrow(enem2022), '. Total de Colunas:', ncol(enem2022), '\n')## Total de Linhas: 3476105 . Total de Colunas: 76
A base possui as seguintes colunas:
colnames(enem2022)## [1] "NU_INSCRICAO" "NU_ANO" "TP_FAIXA_ETARIA"
## [4] "TP_SEXO" "TP_ESTADO_CIVIL" "TP_COR_RACA"
## [7] "TP_NACIONALIDADE" "TP_ST_CONCLUSAO" "TP_ANO_CONCLUIU"
## [10] "TP_ESCOLA" "TP_ENSINO" "IN_TREINEIRO"
## [13] "CO_MUNICIPIO_ESC" "NO_MUNICIPIO_ESC" "CO_UF_ESC"
## [16] "SG_UF_ESC" "TP_DEPENDENCIA_ADM_ESC" "TP_LOCALIZACAO_ESC"
## [19] "TP_SIT_FUNC_ESC" "CO_MUNICIPIO_PROVA" "NO_MUNICIPIO_PROVA"
## [22] "CO_UF_PROVA" "SG_UF_PROVA" "TP_PRESENCA_CN"
## [25] "TP_PRESENCA_CH" "TP_PRESENCA_LC" "TP_PRESENCA_MT"
## [28] "CO_PROVA_CN" "CO_PROVA_CH" "CO_PROVA_LC"
## [31] "CO_PROVA_MT" "NU_NOTA_CN" "NU_NOTA_CH"
## [34] "NU_NOTA_LC" "NU_NOTA_MT" "TX_RESPOSTAS_CN"
## [37] "TX_RESPOSTAS_CH" "TX_RESPOSTAS_LC" "TX_RESPOSTAS_MT"
## [40] "TP_LINGUA" "TX_GABARITO_CN" "TX_GABARITO_CH"
## [43] "TX_GABARITO_LC" "TX_GABARITO_MT" "TP_STATUS_REDACAO"
## [46] "NU_NOTA_COMP1" "NU_NOTA_COMP2" "NU_NOTA_COMP3"
## [49] "NU_NOTA_COMP4" "NU_NOTA_COMP5" "NU_NOTA_REDACAO"
## [52] "Q001" "Q002" "Q003"
## [55] "Q004" "Q005" "Q006"
## [58] "Q007" "Q008" "Q009"
## [61] "Q010" "Q011" "Q012"
## [64] "Q013" "Q014" "Q015"
## [67] "Q016" "Q017" "Q018"
## [70] "Q019" "Q020" "Q021"
## [73] "Q022" "Q023" "Q024"
## [76] "Q025"
Primeiro passo para nossa análise vai ser criar uma nova base, apenas com as colunas que serão utilizadas.
library(dplyr)
colunasSelecionadasEnem <- c("NU_INSCRICAO","TP_FAIXA_ETARIA", "TP_SEXO", "TP_ESTADO_CIVIL", "TP_COR_RACA", "TP_ESCOLA", "TP_ENSINO", "CO_MUNICIPIO_PROVA", "NO_MUNICIPIO_PROVA", "CO_UF_PROVA", "SG_UF_PROVA", "NU_NOTA_CN", "NU_NOTA_CH", "NU_NOTA_LC", "NU_NOTA_MT", "NU_NOTA_REDACAO", "Q001", "Q002")
microdadosEnemSelecionados <- enem2022 %>%
select(all_of(colunasSelecionadasEnem))Dessa forma a base que será trabalhada ficou assim:
head(microdadosEnemSelecionados)## NU_INSCRICAO TP_FAIXA_ETARIA TP_SEXO TP_ESTADO_CIVIL TP_COR_RACA TP_ESCOLA
## 1 210057943671 14 M 2 2 1
## 2 210057516120 14 M 2 1 1
## 3 210057280536 5 F 1 2 1
## 4 210055724397 6 M 1 3 1
## 5 210055097896 4 M 0 3 1
## 6 210057850231 5 F 1 3 1
## TP_ENSINO CO_MUNICIPIO_PROVA NO_MUNICIPIO_PROVA CO_UF_PROVA
## 1 NA 5300108 Bras\xedlia 53
## 2 NA 5300108 Bras\xedlia 53
## 3 NA 2925758 Presidente Tancredo Neves 29
## 4 NA 3201308 Cariacica 32
## 5 NA 1506203 Salin\xf3polis 15
## 6 NA 3304557 Rio de Janeiro 33
## SG_UF_PROVA NU_NOTA_CN NU_NOTA_CH NU_NOTA_LC NU_NOTA_MT NU_NOTA_REDACAO Q001
## 1 DF NA NA NA NA NA A
## 2 DF NA NA NA NA NA D
## 3 BA 421.1 546.0 498.8 565.3 760 E
## 4 ES 490.7 388.6 357.8 416.0 320 C
## 5 PA NA NA NA NA NA D
## 6 RJ NA NA NA NA NA E
## Q002
## 1 A
## 2 D
## 3 F
## 4 A
## 5 B
## 6 C
Algumas colunas são códigos, então para facilitar o entendimento, aqui estão as descrições retiradas do arquivo de Dicionário da base - arquivo também disponível no download dos Microdados.
A primeira imagem mostra o significado dos códigos da coluna faixa etária.
knitr::include_graphics("faixa_etária.png") E a segunda, as perguntas do
questionário socioeconômico que usaremos - referentes ao nível de
escolaridade dos pais dos inscritos.
knitr::include_graphics("q1_2.png")Agora sim, depois da limpeza da base e do breve entendimento, vamos partir para as análises.
A análise exploratória de dados é uma etapa crucial na compreensão dos conjuntos de dados e na extração de insights valiosos. No contexto do Exame Nacional do Ensino Médio (Enem), uma análise detalhada pode nos fornecer informações valiosas sobre o perfil dos inscritos, bem como padrões e tendências interessantes.
Neste estudo, vamos nos concentrar na análise da quantidade de inscritos nas cidades que serão sede das provas do Enem, levando em consideração a faixa etária, o sexo dos candidatos e, posteriormente, analisar a relação das notas com as respostas do questionário sócioeconômico.
Iniciaremos explorando a distribuição dos inscritos nas cidades que serão sede das provas do Enem. Isso nos permitirá identificar quais cidades têm maior e menor número de inscritos.
library(ggplot2)
# Criar um novo dataframe com as contagens por estado
contagem_uf <- table(microdadosEnemSelecionados$SG_UF_PROVA)
contagem_df <- data.frame(uf = names(contagem_uf), contagem = as.numeric(contagem_uf))
# Ordenar o dataframe pela contagem em ordem decrescente
contagem_df <- contagem_df[order(-contagem_df$contagem), ]
# Criar o gráfico de barras ordenado
ggplot(data = contagem_df, aes(x = reorder(uf, -contagem), y = contagem)) +
geom_bar(stat = "identity", fill = "blue", color = "black") +
labs(title = "Histograma das Unidades Federativas de Prova no Enem",
x = "Unidade Federativa de Prova",
y = "Frequência") +
theme_minimal() +
scale_y_continuous(labels = scales::comma_format(scale = 1e-3))library(dplyr)
# Criar um novo dataframe com as contagens por estado
contagem_uf <- table(microdadosEnemSelecionados$SG_UF_PROVA)
contagem_df <- data.frame(uf = names(contagem_uf), contagem = as.numeric(contagem_uf))
# Ordenar o dataframe pela contagem em ordem decrescente
contagem_df <- contagem_df %>%
arrange(desc(contagem))
# Selecionar o estado com mais inscritos e o estado com menos inscritos
estado_mais_inscritos <- contagem_df$uf[1]
estado_menos_inscritos <- contagem_df$uf[nrow(contagem_df)]
# Montar a tabela
tabela_estados <- data.frame(Estado = c("Estado com Mais Inscritos", "Estado com Menos Inscritos"),
UF = c(estado_mais_inscritos, estado_menos_inscritos),
Inscritos = c(max(contagem_df$contagem), min(contagem_df$contagem)))
tabela_estados## Estado UF Inscritos
## 1 Estado com Mais Inscritos SP 544442
## 2 Estado com Menos Inscritos RR 8434
Realizando uma análise dos inscritos, em relação a faixa etária e o sexo, conseguimos obter as seguintes informações:
library(ggplot2)
library(dplyr)
# Selecionar faixa etária e sexo dos inscritos
faixa_etaria_sexo <- microdadosEnemSelecionados %>%
select(TP_FAIXA_ETARIA, TP_SEXO) %>%
group_by(SG_UF_PROVA = "PE")
# Contagem por faixa etária e sexo
contagem_faixa_etaria_sexo <- faixa_etaria_sexo %>%
group_by(TP_FAIXA_ETARIA, TP_SEXO) %>%
summarise(Contagem = n())
# Gráfico de barras
ggplot(contagem_faixa_etaria_sexo, aes(x = TP_FAIXA_ETARIA, y = Contagem, fill = TP_SEXO)) +
geom_bar(stat = "identity", position = "dodge") +
labs(x = "Faixa Etária", y = "Contagem") +
theme_minimal() +
theme(legend.title = element_blank()) +
scale_y_continuous(labels = scales::comma_format(scale = 1e-3))library(ggplot2)
library(dplyr)
# Selecionar faixa etária e sexo dos inscritos
faixa_etaria_sexo <- microdadosEnemSelecionados %>%
select(TP_FAIXA_ETARIA, SG_UF_PROVA) %>%
group_by(SG_UF_PROVA = "PE")
# Contagem por faixa etária e sexo
contagem_faixa_etaria_sexo <- faixa_etaria_sexo %>%
group_by(TP_FAIXA_ETARIA, SG_UF_PROVA) %>%
summarise(Contagem = n())
# Gráfico de barras
ggplot(contagem_faixa_etaria_sexo, aes(x = TP_FAIXA_ETARIA, y = Contagem, fill = SG_UF_PROVA)) +
geom_bar(stat = "identity", position = "dodge") +
labs(x = "Faixa Etária", y = "Contagem") +
theme_minimal() +
theme(legend.title = element_blank()) +
scale_y_continuous(labels = scales::comma_format(scale = 1e-3))# Criar a tabela idades
idades <- data.frame(
Codigo = c('1', '2', '3', '4', '5', '6', '7', '8', '9', '10',
'11', '12', '13', '14', '15', '16', '17', '18', '19', '20'),
Faixa_Etaria = c('Menor de 17 anos', '17 anos', '18 anos', '19 anos', '20 anos',
'21 anos', '22 anos', '23 anos', '24 anos', '25 anos',
'Entre 26 e 30 anos', 'Entre 31 e 35 anos', 'Entre 36 e 40 anos',
'Entre 41 e 45 anos', 'Entre 46 e 50 anos', 'Entre 51 e 55 anos',
'Entre 56 e 60 anos', 'Entre 61 e 65 anos', 'Entre 66 e 70 anos', 'Mais de 70 anos')
)
print(idades)## Codigo Faixa_Etaria
## 1 1 Menor de 17 anos
## 2 2 17 anos
## 3 3 18 anos
## 4 4 19 anos
## 5 5 20 anos
## 6 6 21 anos
## 7 7 22 anos
## 8 8 23 anos
## 9 9 24 anos
## 10 10 25 anos
## 11 11 Entre 26 e 30 anos
## 12 12 Entre 31 e 35 anos
## 13 13 Entre 36 e 40 anos
## 14 14 Entre 41 e 45 anos
## 15 15 Entre 46 e 50 anos
## 16 16 Entre 51 e 55 anos
## 17 17 Entre 56 e 60 anos
## 18 18 Entre 61 e 65 anos
## 19 19 Entre 66 e 70 anos
## 20 20 Mais de 70 anos
summary(faixa_etaria_sexo)## TP_FAIXA_ETARIA SG_UF_PROVA
## Min. : 1.000 Length:3476105
## 1st Qu.: 2.000 Class :character
## Median : 3.000 Mode :character
## Mean : 4.864
## 3rd Qu.: 6.000
## Max. :20.000
Temos como mediana o código 3, que corresponde aos 18 anos e a média fica entre o código 4 e 4, que seriam inscritos de 19 a 20 anos. E cerca de 75% dos inscritos se encaixam até o código 6 que corresponde aos 21 anos.
questSocioEnem_MT_Q1 <- microdadosEnemSelecionados %>%
select(NU_INSCRICAO, NU_NOTA_MT, NU_NOTA_REDACAO, Q001, Q002)
q001e002_dicionário <- c('A' = 'Nunca estudou.',
'B' = 'Não completou a 4ª série/5º ano do Ensino Fundamental.',
'C' = 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental.',
'D' = 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio.',
'E' = 'Completou o Ensino Médio, mas não completou a Faculdade.',
'F' = 'Completou a Faculdade, mas não completou a Pós-graduação.',
'G' = 'Completou a Pós-graduação.',
'H' = 'Não sei.')
#questSocioEnem_MT_Q1$NO_Q001 <- q001e002_dicionário[questSocioEnem_MT_Q1$Q001]
library(dplyr)
library(ggplot2)
q001_NU_NOTA_MT <- questSocioEnem_MT_Q1 %>%
filter(!is.na(NU_NOTA_MT)) %>% # Remove linhas com valores ausentes em NU_NOTA_MT
select(NU_NOTA_MT, Q001) %>%
group_by(Q001) %>%
summarize(media_NU_NOTA_MT = mean(NU_NOTA_MT, na.rm = TRUE)) %>%
arrange(desc(media_NU_NOTA_MT))
ggplot(q001_NU_NOTA_MT, aes(x = reorder(Q001, media_NU_NOTA_MT), y = media_NU_NOTA_MT)) +
geom_bar(stat = "identity") +
labs(title = "Média de Notas de Matemática por Q001",
x = "Q001",
y = "Média Nota de Matemática")Fazendo a mesma análise, mas dessa vez olhando
questSocioEnem_MT_Q2 <- microdadosEnemSelecionados %>%
select(NU_INSCRICAO, NU_NOTA_MT, NU_NOTA_REDACAO, Q001, Q002)
#questSocioEnem_MT_Q1$NO_Q001 <- q001e002_dicionário[questSocioEnem_MT_Q1$Q001]
library(dplyr)
library(ggplot2)
q002_NU_NOTA_MT <- questSocioEnem_MT_Q2 %>%
filter(!is.na(NU_NOTA_MT)) %>% # Remove linhas com valores ausentes em NU_NOTA_MT
select(NU_NOTA_MT, Q002) %>%
group_by(Q002) %>%
summarize(media_NU_NOTA_MT = mean(NU_NOTA_MT, na.rm = TRUE)) %>%
arrange(desc(media_NU_NOTA_MT))
ggplot(q002_NU_NOTA_MT, aes(x = reorder(Q002, media_NU_NOTA_MT), y = media_NU_NOTA_MT)) +
geom_bar(stat = "identity") +
labs(title = "Média de Notas de Matemática por Q002",
x = "Q002",
y = "Média Nota de Matemática")Após as analises e insight obtidos, podemos tirar algumas conclusões:
Reforço que essas conclusões são baseadas na análise exploratória dos dados do Enem, e é importante ressaltar que a correlação observada não implica necessariamente em causalidade. Outros fatores não considerados podem estar contribuindo para as tendências observadas. Portanto, essas observações servem como ponto de partida para uma análise mais profunda e podem guiar futuras investigações sobre as relações entre as variáveis.