Avaliação final - MBA em IA, Data Sience e Big Data para Negócios - Estatística para Ciência de dados - IBMEC (Turma 1)
# geralmente o chunk de setup é feito c "include=FALSE" p ficar oculto
knitr::opts_chunk$set(
message = FALSE, # oculta mensagens
warning = FALSE, # oculta avisos
fig.align = 'center', # centraliza gráficos
fig.width = 8,
fig.height = 5
)
Apresentação
Avaliação final - MBA em IA, Data Science e Big Data para Negócios - Estatística para Ciência de dados - IBMEC (Turma 1)
Professor: Thiago Marques
Carregar os Pacotes
ITEM B
Selecionar e classificar as variáveis
Selecionar as Variáveis
Criar a tabela de classificação
tabela_classificacao <- data.frame(
Variavel = c(
"NT_OBJ_FG",
"CO_GRUPO",
"CO_REGIAO_CURSO",
"QE_I02",
"CO_TURNO_GRADUACAO"
),
Descricao_ENADE = c(
"Nota bruta na formação geral",
"Código da área de enquadramento do curso no Enade",
"Código da região de funcionamento do curso",
"Cor/Raça do Aluno",
"Código do turno de graduação"
),
Classificacao_Estatistica = c(
"Quantitativa Continua",
"Qualitativa Nominal",
"Qualitativa Nominal",
"Qualitativa Nominal",
"Qualitativa Nominal"
),
stringsAsFactors = FALSE
)
tabela_classificacao %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
Variavel | Descricao_ENADE | Classificacao_Estatistica |
---|---|---|
NT_OBJ_FG | Nota bruta na formação geral | Quantitativa Continua |
CO_GRUPO | Código da área de enquadramento do curso no Enade | Qualitativa Nominal |
CO_REGIAO_CURSO | Código da região de funcionamento do curso | Qualitativa Nominal |
QE_I02 | Cor/Raça do Aluno | Qualitativa Nominal |
CO_TURNO_GRADUACAO | Código do turno de graduação | Qualitativa Nominal |
ITEM C
Selecionar o curso
** Escolhido pela equipe: Engenharia de Controle e Automação = 5814 **
ITEM D
Transformar as variáveis (renomeação das colunas)
df_automacao = df_automacao %>%
mutate(Região = case_when(
CO_REGIAO_CURSO == 1 ~ "Norte",
CO_REGIAO_CURSO == 2 ~ "Nordeste",
CO_REGIAO_CURSO == 3 ~ "Sudeste",
CO_REGIAO_CURSO == 4 ~ "Sul",
CO_REGIAO_CURSO == 5 ~ "Centro-Oeste"
)
)
df_automacao = df_automacao %>%
mutate(Turno = case_when(
CO_TURNO_GRADUACAO == 1 ~ "Matutino",
CO_TURNO_GRADUACAO == 2 ~ "Vespertino",
CO_TURNO_GRADUACAO == 3 ~ "Integral",
CO_TURNO_GRADUACAO == 4 ~ "Noturno"
)
)
df_automacao = df_automacao %>%
mutate(Cor_ou_raça = case_when(
QE_I02 == "A" ~ "Branca",
QE_I02 == "B" ~ "Preta",
QE_I02 == "C" ~ "Amarela",
QE_I02 == "D" ~ "Parda",
QE_I02 == "E" ~ "Indígena",
QE_I02 == "F" ~ "Não quero declarar"
)
)
ITEM E
Eliminar a NAs
Visualizar a quantidade de NAs (pré-exclusão de NAs)
resumo_nas_antes = df_automacao %>% summarise_all(~sum(is.na(.)))
resumo_nas_antes %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
NT_OBJ_FG | CO_GRUPO | CO_REGIAO_CURSO | QE_I02 | CO_TURNO_GRADUACAO | NT_GER | Região | Turno | Cor_ou_raça |
---|---|---|---|---|---|---|---|---|
654 | 0 | 0 | 502 | 6 | 654 | 0 | 6 | 502 |
Excluir e visualizar a quantidade de NAs (pós-exclusão de NAs)
df_automacao_sem_na = df_automacao %>% na.omit()
resumo_nas_depois = df_automacao_sem_na %>% summarise_all(~sum(is.na(.)))
resumo_nas_depois %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
NT_OBJ_FG | CO_GRUPO | CO_REGIAO_CURSO | QE_I02 | CO_TURNO_GRADUACAO | NT_GER | Região | Turno | Cor_ou_raça |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
ITEM F
Análises Gráficas
Estatística descritiva dos dados
df_automacao_sem_na %>%
summarise(
quantidade = n(),
media = mean(NT_GER),
mediana = median(NT_GER),
moda = Mode(NT_GER),
cv = sd(NT_GER) / media * 100, # Coeficiente de Variação
assimetria = skewness(NT_GER),
curtose = kurtosis(NT_GER)) %>%
kbl() %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
quantidade | media | mediana | moda | cv | assimetria | curtose |
---|---|---|---|---|---|---|
4770 | 42.15971 | 41.5 | 34.3 | 31.15111 | 0.2540156 | -0.051687 |
g_hist <- ggplot(df_automacao_sem_na, aes(x = NT_GER)) +
geom_histogram(color = "black", fill = "lightblue", bins = 50, aes(y = ..count../sum(..count..))) +
ggtitle("Histograma da nota dos alunos de Engenharia de Controle e Automação") +
xlab("Nota") +
ylab("Frequência relativa")
g_densidade <- ggplot(df_automacao_sem_na, aes(x = NT_GER)) +
geom_density(col = 2, size = 1, aes(y = 27 * ..count../sum(..count..))) +
ggtitle("Curva de densidade da nota dos alunos de Engenharia de Controle e Automação") +
xlab("Nota dos alunos de Engenharia de Controle e Automação") +
ylab("Frequência relativa")
g_hist_densidade <- ggplot(df_automacao_sem_na, aes(x = NT_GER)) +
geom_histogram(color = "black", fill = "lightblue", bins = 50, aes(y = ..count../sum(..count..))) +
geom_density(col = 2, size = 1, aes(y = 27 * ..count../sum(..count..))) +
ggtitle("Histograma e curva de densidade da nota dos alunos de Engenharia de Controle e Automação") +
xlab("Nota dos alunos de Engenharia de Controle e Automação") +
ylab("Frequência relativa")
grid.arrange(g_hist, g_densidade, g_hist_densidade, nrow = 3)
CONCLUSÃO A análise apresentou média de 42,16 pontos,
mediana de 41,5 e moda de 34,3, em uma escala de 0 a 100, com 4.770
alunos analisados. O coeficiente de variação de 31,15% sugere
heterogeneidade de desempenho entre os estudantes. A assimetria positiva
(0,25) e a curtose ligeiramente negativa (-0,05) apontam para uma
distribuição aproximadamente normal, mas com leve concentração de notas
abaixo da média e uma cauda alongada à direita, indicando poucos alunos
com notas mais elevadas.
Gráfico pizza de Frequência Relativa por Cor/Raça
df_pizza_raca = data.frame(table(df_automacao_sem_na$Cor_ou_raça))
df_pizza_raca = df_pizza_raca %>% mutate(
Freq_Relat = paste(format(round((((df_pizza_raca$Freq/sum(df_pizza_raca$Freq)) * 100)),
2), nsmall = 2), "%"))
kable(df_pizza_raca) %>% kable_styling()
Var1 | Freq | Freq_Relat |
---|---|---|
Amarela | 144 | 3.02 % |
Branca | 2913 | 61.07 % |
Indígena | 11 | 0.23 % |
Não quero declarar | 176 | 3.69 % |
Parda | 1235 | 25.89 % |
Preta | 291 | 6.10 % |
graf_pizza_raca = plot_ly(df_pizza_raca,
labels = ~Var1,
values = ~Freq,
type = 'pie') %>%
layout(title = 'Frequência relativa por Raça/Cor (%)')
graf_pizza_raca
CONCLUSÃO Há uma predominância de alunos brancos (61,1%) no curso de Engenharia de Controle e Automação, seguidos por alunos pardos (25,9%). Juntos, esses dois grupos representam quase 87% do total da amostra analisada. A presença de alunos pretos (6,1%), amarelos (3%) e indígenas (0,2%) é consideravelmente menor, revelando baixa diversidade racial entre os participantes.
Gráfico Barra - Número de alunos por Cor/Raça
graf_col_vert_raca =
ggplot(df_automacao_sem_na, aes(Cor_ou_raça, fill = Cor_ou_raça)) +
geom_bar(position = "dodge") +
ggtitle("Número de alunos por cor ou raça") +
xlab("Cor ou Raça") +
ylab("Frequência")
graf_col_vert_raca
Tabela da nota geral agrupado por cor/raça
análise_raça = df_automacao_sem_na %>%
group_by(Cor_ou_raça) %>%
summarise(
quantidade = n(),
media = mean(NT_GER),
mediana = median(NT_GER),
moda = Mode(NT_GER),
cv = sd(NT_GER) / media * 100, # Coeficiente de Variação
assimetria = skewness(NT_GER),
curtose = kurtosis(NT_GER),
.groups = 'drop' # Remove o agrupamento após o resumo
) %>%
arrange(desc(media)) # Ordena pela maior média
análise_raça %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE)
Cor_ou_raça | quantidade | media | mediana | moda | cv | assimetria | curtose |
---|---|---|---|---|---|---|---|
Não quero declarar | 176 | 44.57045 | 44.95 | 48.4 | 31.87483 | -0.1905650 | 0.0230452 |
Branca | 2913 | 42.92736 | 42.40 | 44.6 | 31.05890 | 0.2339094 | -0.1074355 |
Amarela | 144 | 42.83611 | 42.30 | 43.8 | 28.46567 | 0.1825376 | 0.1011963 |
Parda | 1235 | 40.80146 | 40.10 | 34.3 | 31.19088 | 0.3247685 | 0.0082977 |
Preta | 291 | 38.64192 | 38.50 | 41.8 | 29.89635 | 0.2493645 | 0.1783808 |
Indígena | 11 | 37.00000 | 39.40 | NA | 24.12925 | -0.3069603 | -1.4250617 |
Boxplot da nota geral por raça
boxplot_nota_geral_por_raça = ggplot(df_automacao_sem_na, aes(x = Cor_ou_raça, y = NT_GER, fill = Cor_ou_raça)) +
geom_boxplot() +
ggtitle("Box-Plot da Nota Geral (NT_GER) por Cor/Raça") +
xlab("Cor ou Raça") +
ylab("Nota Geral do ENADE") +
# Ajusta o ângulo do texto no eixo X para melhor leitura
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Torna o gráfico interativo
ggplotly(boxplot_nota_geral_por_raça)
CONCLUSÃO Os alunos brancos e amarelos obtiveram notas médias próximas da média geral (≈42), enquanto os pardos e especialmente os pretos apresentaram médias mais baixas, indicando possíveis desigualdades de desempenho acadêmico. O grupo “Não quero declarar” teve o melhor desempenho médio (44,6), o que pode refletir características socioeconômicas distintas.
Boxplot da nota geral por região
boxplot_nota_geral_por_região = ggplot(df_automacao_sem_na,
# Eixo X é a Região; Eixo Y é a Nota
aes(x = Região, y = NT_GER, fill = Região)) +
geom_boxplot() +
ggtitle("Box-Plot da Nota Geral por Região") +
xlab("Região do Curso") +
ylab("Nota Geral do ENADE (NT_GER)") +
# Ajusta o texto do eixo X para que não se sobreponha
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Torna o gráfico interativo
ggplotly(boxplot_nota_geral_por_região)
CONCLUSÃO As regiões Sul e Sudeste apresentam maiores medianas e distribuições mais amplas, indicando tanto melhor desempenho médio quanto maior diversidade de resultados. As regiões Centro-Oeste e Nordeste possuem notas medianas intermediárias, enquanto a região Norte registra as menores medianas e menor amplitude, refletindo desempenho mais concentrado em faixas baixas de nota. A presença de outliers positivos no Sudeste e Sul sugere que nessas regiões há alunos e instituições com resultados excepcionalmente altos.
Boxplot da nota por região, dividido por raça
boxplot_nota_geral_por_região_dividido_raça = ggplot(df_automacao_sem_na,
# Eixo X é a Região; Eixo Y é a Nota
aes(x = Região, y = NT_GER, fill = Região)) +
geom_boxplot() +
ggtitle("Nota geral por região, separada por raça") +
xlab("Região do Curso") +
ylab("Nota Geral (NT_GER)") +
# Facetamento principal: cria um painel (gráfico) para cada Cor/Raça
facet_wrap(~ Cor_ou_raça, ncol = 3) +
# Ajusta o texto do eixo X (Região) para que não se sobreponha
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Torna o gráfico interativo
ggplotly(boxplot_nota_geral_por_região_dividido_raça)
Boxplot da nota geral por raça, dividido por região
boxplot_nota_geral_por_raça_dividido_região = ggplot(df_automacao_sem_na,
# Eixo X é a Raça; Eixo Y é a Nota
aes(x = Cor_ou_raça, y = NT_GER, fill = Cor_ou_raça)) +
geom_boxplot() +
ggtitle("Nota Geral por Raça, separada por região") +
xlab("Cor ou Raça") +
ylab("Nota Geral (NT_GER)") +
# Facetamento principal: cria um painel (gráfico) para cada Região
facet_wrap(~ Região) +
# Ajusta o texto do eixo X para que não se sobreponha
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Torna o gráfico interativo
ggplotly(boxplot_nota_geral_por_raça_dividido_região)
CONCLUSÃO Em todas as raças, as regiões Sul e Sudeste concentram as maiores medianas e a maior dispersão de notas, indicando melhor desempenho e maior heterogeneidade entre os estudantes. Os alunos brancos e amarelos mantêm as maiores médias em todas as regiões, enquanto os pardos e pretos registram as menores notas medianas, especialmente nas regiões Norte e Nordeste. O grupo “não quero declarar” apresenta desempenho relativamente alto em todas as regiões. Esses resultados reforçam a existência de diferenças de desempenho associadas tanto à localização geográfica quanto ao perfil racial, sugerindo desigualdades estruturais no acesso e na qualidade do ensino.