Introdução

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.

Pacotes Requeridos

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

Preparação dos Dados

Nessa seção você encontrará com detalhes as operações que foram realizadas no dataset para as análises da próxima sessão.

Carregando os microdados do Enem 2022

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"

Limpando a base

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

Informações sobre algumas colunas

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.

Análise Exploratória dos Dados

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.

Quantidade de Inscritos por Municípios Sede de Provas

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

Análise por Faixa Etária e Sexo

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.

A escolaridade do pai influenciam nas notas?

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

A escolaridade da mãe influenciam nas notas?

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

Conclusão

Após as analises e insight obtidos, podemos tirar algumas conclusões:

  • Como o principal uso do ENEM é para o ingresso em instituições de ensino superior é compreensível que o maior número de inscritos seja na faixa etária de 17 e 18 anos, pois essa é exatamente a idade em que a grande maioria dos estudantes concluem o ensino médio;
  • Sabemos que São Paulo é o estado com a maior população, seguido de Minas Gerais e Rio de Janeiro, e foi possível analisar que a quantidade de inscritos no ENEM segue a mesma proporção;
  • Sabemos também que no Brasil, existem mais mulheres que homens, e também é possível analisar que a quantidade de inscritos no ENEM segue a mesma proporção;
  • Analisamos as notas de uma das provas, considerando o grau de escolaridade dos pais dos inscritos e identificamos que os com maiores notas tendem a possuir pais com um nível maior de escolaridade;

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.

Referência

Base de dados: Enem_2022

Dados IBGE : Censo_2022

Dados População: População_2022