Mba ciência de dados MBA DS CECID

Thiago Marques

08/12/2021

Projeto Final Exemplo

Carregando Pacotes

#install.packages("remotes")  # Caso seja necessário
#remotes::install_github("juba/rmdformats",force=TRUE)
#remotes::install_github("glin/reactable",force=TRUE)



vetor_pacotes=c("readr",
                "ggplot2",
                "rmdformats",
                "reactable",
                "plotly",
                "e1071",
                "dplyr",
                "Hmisc",
                "DescTools",
                "esquisse",
                "kableExtra",
                "gridExtra",
                "e1071",
                "devtools"
)
#install.packages(vetor_pacotes)

lapply(vetor_pacotes, 
       require, 
       character.only = TRUE)
## Error in get(genname, envir = envir) : 
##   objeto 'testthat_print' não encontrado
## [[1]]
## [1] TRUE
## 
## [[2]]
## [1] TRUE
## 
## [[3]]
## [1] TRUE
## 
## [[4]]
## [1] TRUE
## 
## [[5]]
## [1] TRUE
## 
## [[6]]
## [1] TRUE
## 
## [[7]]
## [1] TRUE
## 
## [[8]]
## [1] TRUE
## 
## [[9]]
## [1] TRUE
## 
## [[10]]
## [1] TRUE
## 
## [[11]]
## [1] TRUE
## 
## [[12]]
## [1] TRUE
## 
## [[13]]
## [1] TRUE
## 
## [[14]]
## [1] TRUE

Importacao do banco do ENADE/INEP

enade2017 = read_csv2("MICRODADOS_ENADE_2017.txt") 

Selecionando as variaveis desejadas

microdados_enade_filtrados= enade2017 %>% dplyr::select(CO_GRUPO,CO_REGIAO_CURSO,NU_IDADE,
                                                        TP_SEXO,CO_TURNO_GRADUACAO,NT_GER,
                                                        QE_I01,QE_I02,QE_I08,
                                                        QE_I21,QE_I23,NT_OBJ_FG, 
                                                        NT_OBJ_CE
)      

Selecionando o curso de ADS

microdados_ti= microdados_enade_filtrados %>% filter(CO_GRUPO==72) 

Transformando as variaveis (Colocando os labels)

microdados_ti = microdados_ti %>% mutate(estado_civil2 = case_when( QE_I01 == "A" ~ "Solteiro(a)",
                                                                    QE_I01 == "B" ~ "Casado(a)",
                                                                    QE_I01 == "C" ~ "Separado(a)",
                                                                    QE_I01 == "D" ~ "Viúvo(a)",
                                                                    QE_I01 == "E" ~ "Outro"
)) 

microdados_ti = microdados_ti %>% mutate(regiao = 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"
)) 

#sexo
microdados_ti = microdados_ti %>% mutate(sexo = case_when( TP_SEXO == "M" ~ "Masculino",
                                                           TP_SEXO == "F" ~ "Feminino"
)) 

microdados_ti = microdados_ti %>% mutate(hestudos = case_when( QE_I23 == "A" ~ "Nenhuma, apenas assisto as aulas",
                                                               QE_I23 == "B" ~ "De uma a três",
                                                               QE_I23 == "C" ~ "De quatro a sete",
                                                               QE_I23 == "D" ~ "De oito a doze",
                                                               QE_I23 == "E" ~ "Mais de doze"
)) 

Data quality e Bloco da analise descritiva das variaveis

describe(microdados_ti$estado_civil2)
## microdados_ti$estado_civil2 
##        n  missing distinct 
##    10459     2079        5 
## 
## lowest : Casado(a)   Outro       Separado(a) Solteiro(a) Viúvo(a)   
## highest: Casado(a)   Outro       Separado(a) Solteiro(a) Viúvo(a)   
##                                                                       
## Value        Casado(a)       Outro Separado(a) Solteiro(a)    Viúvo(a)
## Frequency         2087         327         207        7827          11
## Proportion       0.200       0.031       0.020       0.748       0.001
unique(microdados_ti$estado_civil2) %>% kbl %>% kable_material_dark(full_width = F)
x
Solteiro(a)
Viúvo(a)
NA
Casado(a)
Separado(a)
Outro
#Contabilizando os Na´s
resumo_nas=microdados_ti %>%
  select(everything()) %>%  
  summarise_all(list(~sum(is.na(.))))

#Removendo  Na´S De todas As variáveis que possuem NA
microdados_ti_sem_NA=microdados_ti %>% na.omit()

#Verificando de foram retirados os NA´S
resumo_nas=microdados_ti_sem_NA %>%
  select(everything()) %>%  
  summarise_all(list(~sum(is.na(.))))
resumo_nas %>% kbl %>% kable_material_dark(full_width = F)
CO_GRUPO CO_REGIAO_CURSO NU_IDADE TP_SEXO CO_TURNO_GRADUACAO NT_GER QE_I01 QE_I02 QE_I08 QE_I21 QE_I23 NT_OBJ_FG NT_OBJ_CE estado_civil2 regiao sexo hestudos
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
microdados_ti_sem_NA %>% 
  select(NT_OBJ_CE) %>% 
  summarise(  quantidade=n(),
              media = mean(NT_OBJ_CE),
              mediana = median(NT_OBJ_CE),
              moda=Mode(NT_OBJ_CE),
              cv=sd(NT_OBJ_CE)/media*100,
              assimetria=skewness(NT_OBJ_CE),
              curtose=kurtosis(NT_OBJ_CE)
  ) %>% 
  arrange(desc(mediana))  %>% 
  kbl %>% 
  kable_material_dark(full_width = F)
quantidade media mediana moda cv assimetria curtose
9636 42.0906 40 40 37.42576 0.1863963 -0.2791433
#Estatísticas resumo 
summary(microdados_ti_sem_NA$NT_OBJ_CE) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   30.00   40.00   42.09   55.00   95.00

Gráficos da análise descritiva para a variável nota dos alunos de ADS

g_hist=ggplot(microdados_ti_sem_NA,aes(x=NT_OBJ_CE)) + 
  geom_histogram(color = "black",fill="lightblue",bins =50,aes(y=(..count..)/sum(..count..)))+
  ggtitle("Histograma da nota dos alunos de análise de sistemas (ADS) ")+
  xlab("nota") +
  ylab("Frequência relativa")

g_densidade=ggplot(microdados_ti_sem_NA,aes(x=NT_OBJ_CE))+
  geom_density(col=2,size = 1, aes(y = 27 * (..count..)/sum(..count..))) +
  ggtitle("Curva de densidade da nota dos alunos de análise de sistemas") +
  xlab("Nota dos alunos de ADS") +
  ylab("Frequência relativa")

g_hist_densidade = ggplot(microdados_ti_sem_NA,aes(x=NT_OBJ_CE)) + 
  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 análise de sistemas")+
  xlab("Nota dos alunos de ADS") +
  ylab("Frequência relativa")

grid.arrange( g_hist,
              g_densidade,
              g_hist_densidade,
              nrow=3,ncol=1)

Comparando as médias por sexo e estado civil

#Comparar as médias por sexo e estado civil
require(dplyr)
microdados_ti_mod2= microdados_ti_sem_NA %>% 
  select(estado_civil2,NT_GER,sexo) %>% 
  group_by(sexo,estado_civil2) %>% 
  summarise(  quantidade=n(),
              media = mean(NT_GER,na.rm = T),
              mediana = median(NT_GER,na.rm = T),
              cv=sd(NT_GER,na.rm=T)/media*100,
              amplitude_interquartil=IQR(NT_GER)) %>% 
  arrange(desc(mediana))
microdados_ti_mod2  %>% kbl %>% kable_material_dark(full_width = F)
sexo estado_civil2 quantidade media mediana cv amplitude_interquartil
Masculino Solteiro(a) 6196 40.73179 40.2 31.75809 18.125
Feminino Solteiro(a) 1093 40.16587 39.5 30.43281 16.700
Masculino Outro 264 39.57500 39.5 33.66701 17.225
Masculino Separado(a) 154 39.62597 38.9 32.83213 15.675
Feminino Outro 39 40.50000 38.7 29.81838 17.450
Masculino Casado(a) 1681 39.11059 38.2 33.63496 17.900
Feminino Separado(a) 29 39.88621 35.9 36.97135 21.100
Feminino Casado(a) 169 35.80473 35.8 28.19825 13.800
Masculino Viúvo(a) 7 32.01429 35.3 25.46293 10.150
Feminino Viúvo(a) 4 33.65000 32.7 18.85376 5.150
#Tabulação cruzada
table(microdados_ti_sem_NA$estado_civil2,microdados_ti_sem_NA$sexo)  %>% kbl %>% kable_material_dark(full_width = F)
Feminino Masculino
Casado(a) 169 1681
Outro 39 264
Separado(a) 29 154
Solteiro(a) 1093 6196
Viúvo(a) 4 7
#Tabulação cruzada proporção
prop.table(table(microdados_ti_sem_NA$estado_civil2,microdados_ti_sem_NA$sexo))  %>% kbl %>% kable_material_dark(full_width = F)
Feminino Masculino
Casado(a) 0.0175384 0.1744500
Outro 0.0040473 0.0273973
Separado(a) 0.0030095 0.0159817
Solteiro(a) 0.1134288 0.6430054
Viúvo(a) 0.0004151 0.0007264
#assimetria e curtose

dados_casados = microdados_ti_sem_NA %>% 
  select(estado_civil2,NT_GER,sexo) %>% 
  group_by(estado_civil2) %>% 
  #filter(estado_civil=="Casado(a)") %>% 
  summarise(  quantidade=n(),
              media = mean(NT_GER),
              mediana = median(NT_GER),
              cv=sd(NT_GER)/media*100,
              amplitude_interquartil=IQR(NT_GER),
              assimetria=skewness(NT_GER),
              curtose=kurtosis(NT_GER)
  ) %>% 
  
  arrange(desc(cv))

dados_casados  %>% kbl %>% kable_material_dark(full_width = F)
estado_civil2 quantidade media mediana cv amplitude_interquartil assimetria curtose
Separado(a) 183 39.66721 38.7 33.42125 15.95 0.3089961 0.4420301
Casado(a) 1850 38.80859 37.9 33.33901 17.60 0.3242207 -0.0127253
Outro 303 39.69406 39.3 33.13998 17.15 0.3696191 0.1760944
Solteiro(a) 7289 40.64693 40.1 31.56982 17.90 0.1533047 -0.1443958
Viúvo(a) 11 32.60909 33.6 22.24668 7.65 -0.4285442 -1.1530183

Análises Gráficas - Comparando as médias por sexo e estado civil

#Histograma
dados=microdados_ti_sem_NA
grafico_histograma1 = ggplot(dados, aes(x=NT_GER,fill=estado_civil2)) + 
  geom_histogram() +
  ggtitle("Gráfico histograma da Nota por estado civil") +
  xlab("Notas") +
  ylab("Frequência simples") +
  facet_grid(~estado_civil2)

ggplotly(grafico_histograma1)
dados=microdados_ti_sem_NA
grafico_boxplot1 = ggplot(dados, aes(x=estado_civil2,y=NT_GER,fill=estado_civil2)) + 
  geom_boxplot() +
  ggtitle("Gráfico de Box-plot da Nota por Estado civil e Sexo")+
  xlab("Estado civil") +
  ylab("Notas") +
  facet_grid(~sexo)+
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))


ggplotly(grafico_boxplot1)

Comparando as médias por sexo e região

microdados_ti_mod3= microdados_ti_sem_NA %>% 
  select(estado_civil2,NT_GER,regiao,hestudos,sexo) %>% 
  group_by(sexo,regiao) %>% 
  summarise(quantidade=n(),
            media = mean(NT_GER),
            mediana = median(NT_GER),
            cv=sd(NT_GER)/media*100,
            amplitude_interquartil=IQR(NT_GER),
            assimetria=skewness(NT_GER),
            curtose=kurtosis(NT_GER)) %>% 
  arrange(desc(media))

microdados_ti_mod3  %>% kbl %>% kable_material_dark(full_width = F)
sexo regiao quantidade media mediana cv amplitude_interquartil assimetria curtose
Feminino Nordeste 107 41.49439 40.10 26.89272 13.150 0.7279419 0.8011439
Masculino Sudeste 4864 40.69354 40.30 31.61288 17.925 0.1552135 -0.1305924
Feminino Sul 218 40.36743 39.20 31.38749 17.350 0.2003281 -0.2015103
Masculino Nordeste 746 40.20912 39.60 33.75074 18.400 0.2466751 -0.0938881
Masculino Sul 1866 40.17637 39.60 33.19460 18.675 0.1895243 -0.1812987
Feminino Sudeste 857 39.57235 38.90 30.76056 16.900 0.1622693 -0.0104767
Masculino Norte 218 39.45229 37.85 30.31492 17.100 0.2366240 -0.3260545
Masculino Centro-Oeste 608 38.47747 37.00 32.82592 17.100 0.3543374 -0.0472158
Feminino Norte 45 37.97111 35.60 29.31818 15.800 0.9252027 1.2911632
Feminino Centro-Oeste 107 37.01776 36.20 30.29093 16.000 0.1015846 -0.2714367
#Tabulação cruzada
table(microdados_ti_sem_NA$regiao,microdados_ti_sem_NA$sexo)  %>% kbl %>% kable_material_dark(full_width = F)
Feminino Masculino
Centro-Oeste 107 608
Nordeste 107 746
Norte 45 218
Sudeste 857 4864
Sul 218 1866
#Tabulação cruzada proporção
prop.table(table(microdados_ti_sem_NA$regiao,microdados_ti_sem_NA$sexo))%>% kbl %>% kable_material_dark(full_width = F)
Feminino Masculino
Centro-Oeste 0.0111042 0.0630967
Nordeste 0.0111042 0.0774180
Norte 0.0046700 0.0226235
Sudeste 0.0889373 0.5047738
Sul 0.0226235 0.1936488

Análises Gráficas - Comparando as médias por sexo e região

#Histograma
dados=microdados_ti_sem_NA
grafico_histograma2 = ggplot(dados, aes(x=NT_GER,fill=regiao)) + 
  geom_histogram()+
  ggtitle("Gráfico histograma da Nota por região e sexo" )+
  xlab("Notas") +
  ylab("Frequência simples") +
  facet_grid(~sexo)

ggplotly(grafico_histograma2)
#box-plot
dados=microdados_ti_sem_NA
grafico_boxplot2 = ggplot(dados, aes(x=regiao,y=NT_GER,fill=regiao)) + 
  geom_boxplot() +
  ggtitle("Gráfico boxplot da Nota por 
          região e sexo")+
  ylab("Notas") +
  facet_grid(~sexo)+
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

ggplotly(grafico_boxplot2)

Consolidando os gráficos

grid.arrange( grafico_histograma1,
              grafico_boxplot1,
              grafico_histograma2,
              grafico_boxplot2,
              nrow=2,ncol=2)