LAB 1

Q1: Qual a diferença entre as mensalidades médias e medianas dos cursos de Ciência da Computação das regiões Nordeste e Sudeste? Na sua opinião, o que causa essa diferença? Ela é estatisticamente significativa? Justifique.

cursos <- read_csv("../data/cursos-prouni.csv")
## Rows: 41447 Columns: 20
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (9): grau, turno, curso_busca, cidade_busca, uf_busca, cidade_filtro, u...
## dbl (11): mensalidade, bolsa_integral_cotas, bolsa_integral_ampla, bolsa_par...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(cursos)
## # A tibble: 6 × 20
##   grau        turno    mensalidade bolsa_integral_cotas bolsa_integral_ampla
##   <chr>       <chr>          <dbl>                <dbl>                <dbl>
## 1 Bacharelado Integral      10000.                   15                   14
## 2 Bacharelado Noturno        9836.                    1                   NA
## 3 Bacharelado Integral       9716.                    2                    5
## 4 Bacharelado Noturno        9689.                    3                    2
## 5 Bacharelado Integral       9674.                    4                    1
## 6 Bacharelado Integral       9650                     8                   15
## # ℹ 15 more variables: bolsa_parcial_cotas <dbl>, bolsa_parcial_ampla <dbl>,
## #   curso_id <dbl>, curso_busca <chr>, cidade_busca <chr>, uf_busca <chr>,
## #   cidade_filtro <chr>, universidade_nome <chr>, campus_nome <chr>,
## #   campus_id <dbl>, nome <chr>, nota_integral_ampla <dbl>,
## #   nota_integral_cotas <dbl>, nota_parcial_ampla <dbl>,
## #   nota_parcial_cotas <dbl>
#summary(cursos)
estados <- read_csv("../data/estados.csv")
## Rows: 33 Columns: 23
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (16): subdivision, region, name_prefix, name, wdId, lexLabel, category, ...
## dbl  (7): id, idIBGE, creation, extinction, utcOffset, utcOffset_DST, km2
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(estados)
## # A tibble: 6 × 23
##   subdivision region name_prefix name        id idIBGE wdId   lexLabel creation
##   <chr>       <chr>  <chr>       <chr>    <dbl>  <dbl> <chr>  <chr>       <dbl>
## 1 AC          N      Estado do   Acre         1     12 Q40780 acre         1904
## 2 AL          NE     Estado de   Alagoas      2     27 Q40885 alagoas      1889
## 3 AM          N      Estado do   Amazonas     3     13 Q40040 amazonas     1889
## 4 AP          N      Estado do   Amapá        4     16 Q40130 amapa        1943
## 5 BA          NE     Estado da   Bahia        5     29 Q40430 bahia        1889
## 6 CE          NE     Estado do   Ceará        6     23 Q40123 ceara        1889
## # ℹ 14 more variables: extinction <dbl>, category <chr>, timeZone <chr>,
## #   utcOffset <dbl>, utcOffset_DST <dbl>, postalCode_ranges <chr>, km2 <dbl>,
## #   borders <chr>, centroid_geohash <chr>, utm_zones <chr>,
## #   bounds_geohash <chr>, bounds_lat <chr>, bounds_long <chr>, notes <chr>
#summary(estados)

Coleatando os cursos do nordeste e sudeste. Começando primeiro pela associação de UF com região

check_categories <- estados %>% filter(category != "State")
head(check_categories)
## # A tibble: 5 × 23
##   subdivision region name_prefix   name        id idIBGE wdId  lexLabel creation
##   <chr>       <chr>  <chr>         <chr>    <dbl>  <dbl> <chr> <chr>       <dbl>
## 1 DF          CO     <NA>          Distrit…     7     53 Q119… distrit…     1975
## 2 FN          NE     Território de Fernand…    30     NA Q415… fernand…     1943
## 3 GU          <NA>   Território do Guaporé     32     NA Q103… guapore      1943
## 4 IG          <NA>   Estado de     Iguaçu      33     NA Q289… iguacu       1943
## 5 PP          <NA>   Território de Ponta P…    34     NA Q103… ponta.p…     1943
## # ℹ 14 more variables: extinction <dbl>, category <chr>, timeZone <chr>,
## #   utcOffset <dbl>, utcOffset_DST <dbl>, postalCode_ranges <chr>, km2 <dbl>,
## #   borders <chr>, centroid_geohash <chr>, utm_zones <chr>,
## #   bounds_geohash <chr>, bounds_lat <chr>, bounds_long <chr>, notes <chr>

Faz-se necessário filtrar por estados, dado que um registro no nordeste é de território.

Estados na base de dados ligadas ao nordeste

northeast_states <- estados %>%
  filter(category == "State") %>% 
  filter(region == "NE") %>% 
  select(subdivision)

head(northeast_states)
## # A tibble: 6 × 1
##   subdivision
##   <chr>      
## 1 AL         
## 2 BA         
## 3 CE         
## 4 MA         
## 5 PB         
## 6 PE

Repetindo o processo para o sudeste

sourtheast_states <- estados %>%
  filter(category == "State") %>% 
  filter(region == "SE") %>% 
  select(subdivision)

head(sourtheast_states)
## # A tibble: 4 × 1
##   subdivision
##   <chr>      
## 1 ES         
## 2 MG         
## 3 RJ         
## 4 SP

Coletando os dados do curso de computação no nordeste

cursos_nordeste <- cursos %>%
  filter(uf_busca %in% northeast_states$subdivision) %>%
  filter(curso_busca == "Ciência da Computação")
head(cursos_nordeste)
## # A tibble: 6 × 20
##   grau        turno   mensalidade bolsa_integral_cotas bolsa_integral_ampla
##   <chr>       <chr>         <dbl>                <dbl>                <dbl>
## 1 Bacharelado Noturno       1273.                   NA                   NA
## 2 Bacharelado Noturno       1149                     0                    2
## 3 Bacharelado Noturno       1025.                   NA                   NA
## 4 Bacharelado Noturno       1014.                    7                    5
## 5 Bacharelado Noturno       1006.                   NA                   NA
## 6 Bacharelado Noturno        986.                    1                   NA
## # ℹ 15 more variables: bolsa_parcial_cotas <dbl>, bolsa_parcial_ampla <dbl>,
## #   curso_id <dbl>, curso_busca <chr>, cidade_busca <chr>, uf_busca <chr>,
## #   cidade_filtro <chr>, universidade_nome <chr>, campus_nome <chr>,
## #   campus_id <dbl>, nome <chr>, nota_integral_ampla <dbl>,
## #   nota_integral_cotas <dbl>, nota_parcial_ampla <dbl>,
## #   nota_parcial_cotas <dbl>

O problema diz “diferença entre as mensalidades médias e medianas”, então somente a mensalidade interessa.

mensalidades_ne <- cursos_nordeste %>%
  select(mensalidade)
head(mensalidades_ne)
## # A tibble: 6 × 1
##   mensalidade
##         <dbl>
## 1       1273.
## 2       1149 
## 3       1025.
## 4       1014.
## 5       1006.
## 6        986.

Calculando media e mediana do nordeste

summary(mensalidades_ne)
##   mensalidade    
##  Min.   : 309.5  
##  1st Qu.: 520.2  
##  Median : 742.8  
##  Mean   : 712.7  
##  3rd Qu.: 852.5  
##  Max.   :1272.6

Fazendo o mesmo para Sudeste

cursos_sudeste <- cursos %>%
  filter(uf_busca %in% sourtheast_states$subdivision) %>%
  filter(curso_busca == "Ciência da Computação")
mensalidades_se <- cursos_sudeste %>%
  select(mensalidade)
summary(mensalidades_se)
##   mensalidade    
##  Min.   : 450.5  
##  1st Qu.: 638.0  
##  Median : 779.0  
##  Mean   : 899.1  
##  3rd Qu.:1019.0  
##  Max.   :4023.0

Plotando as mensalidades com o intuito de observar a diferença de distribuições

Distribuição das mensalidades no nordeste.

quartis <- quantile(mensalidades_ne$mensalidade, probs = c(0.25, 0.5, 0.75))
mensalidades_ne %>%
  ggplot(aes(x=mensalidade)) + 
  geom_histogram(binwidth = 50, color="black", fill="lightblue") +
  geom_vline(xintercept = quartis[1], color = "red", linetype = "dashed", size = 1) +   # Q1
  geom_vline(xintercept = quartis[2], color = "blue", linetype = "dashed", size = 1) +  # Mediana
  geom_vline(xintercept = quartis[3], color = "green", linetype = "dashed", size = 1) + # Q3
  labs(
    title = "Mensalidades no nordeste",
    x = "Mensalidade",
    y = "Quantidade"
  ) + 
  theme_minimal()
## 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.

Distribuição das mensalidades no sudeste. O valor máximo (4023) de mensalidade é um outlier da distribuição, para melhor vizualização ele será removido.

quartis <- quantile(mensalidades_se$mensalidade, probs = c(0.25, 0.5, 0.75))
mensalidades_se %>%
  filter(mensalidade != 4023.0) %>%
  ggplot(aes(x=mensalidade)) + 
  geom_histogram(binwidth = 50, color="black", fill="lightblue") +
  scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
  geom_vline(xintercept = quartis[1], color = "red", linetype = "dashed", size = 1) +   # Q1
  geom_vline(xintercept = quartis[2], color = "blue", linetype = "dashed", size = 1) +  # Mediana
  geom_vline(xintercept = quartis[3], color = "green", linetype = "dashed", size = 1) + # Q3
  labs(
    title = "Mensalidades no sudeste",
    x = "Mensalidade",
    y = "Quantidade"
  ) + 
  theme_minimal()

Para o curso de Ciência da Computação, nordeste possui média de mensalidade de 712.7, enquanto sudeste apresenta média de 899.1. Nota-se que a diferença de mínimo e máximo do sudeste é mais expressiva do que no nordeste, sugerindo maior variedade de mensalidades, característica também vista pelo intervalo interquartil maior do sudeste, em que os últimos 25% dos dados demonstram maiores valores extremos do que o resto da distribuição. Ademais, a mediana no nordeste é de 742.8 e a do sudeste é 779.0, indicando que a mensalidade da instituição “do meio” (que divide os dados em 50%) é maior do que no nordeste.

Q1 - “Na sua opinião, o que causa essa diferença? Ela é estatisticamente significativa? Justifique.”

O sudeste conta como estados ricos como São Paulo (SP) e Rio de Janeiro (RJ), em que há várias opções de financiamento, bem como mensalidades que chegam a ser exorbitantes. Dito isso, essa diferença é causada pelo leque de opções direcionado a mensalidades maiores. Tanto, que a diferença das mensalidades maiores (mediana, Q3 e máximo) no sudeste, supera em muito a do nordeste, sugerindo essa tendência a opções mais elitizadas na direita da distribuição de mensalidades.


Q2 - Quais são os top 10 cursos com maior valor de mensalidade pelo total de bolsas (diferentes tipos)? Existe uma relação entre o valor total de mensalidade e o total de bolsas por curso? Justifique.

#cursos <- read_csv("../data/cursos-prouni.csv")
#head(cursos)
bolsas <- cursos %>%
  select(curso_busca, mensalidade, bolsa_integral_cotas, bolsa_integral_ampla, bolsa_parcial_cotas, bolsa_parcial_ampla)
bolsas[is.na(bolsas)] <- 0
head(bolsas)
## # A tibble: 6 × 6
##   curso_busca mensalidade bolsa_integral_cotas bolsa_integral_ampla
##   <chr>             <dbl>                <dbl>                <dbl>
## 1 Medicina         10000.                   15                   14
## 2 Enfermagem        9836.                    1                    0
## 3 Medicina          9716.                    2                    5
## 4 Psicologia        9689.                    3                    2
## 5 Medicina          9674.                    4                    1
## 6 Medicina          9650                     8                   15
## # ℹ 2 more variables: bolsa_parcial_cotas <dbl>, bolsa_parcial_ampla <dbl>

Os dez cursos que possuem maior conjunto de mensalidade e bolsa (mensalidade * total de bolsas), em outras palavras, “quais são os cursos que possuem mais gastos com bolsas?”

top10 <- bolsas %>%
  mutate(total_integral = bolsa_integral_cotas + bolsa_integral_ampla) %>%
  mutate(total_parcial = bolsa_parcial_cotas + bolsa_parcial_ampla) %>%
  mutate(total_bolsas = total_integral + total_parcial) %>%
  mutate(preco_bolsas = mensalidade * total_bolsas) %>%
  group_by(curso_busca) %>%
  summarise(
    total_mensalidade = sum(preco_bolsas),
    total_bolsas = sum(total_bolsas),
    mediana = median(mensalidade)
    ) %>%
  arrange(desc(total_mensalidade)) %>%
  slice_head(n = 10)
top10
## # A tibble: 10 × 4
##    curso_busca            total_mensalidade total_bolsas mediana
##    <chr>                              <dbl>        <dbl>   <dbl>
##  1 Direito                        17325247.        14678   1069.
##  2 Administração                  14911714.        20761    394.
##  3 Engenharia Civil               11576667.         9442   1080.
##  4 Enfermagem                     11054552.        10302    960 
##  5 Ciências Contábeis              9147761.        13145    333 
##  6 Medicina                        8692958.         1177   7221.
##  7 Educação Física                 8624083.        10914    562.
##  8 Pedagogia                       8388710.        19448    308 
##  9 Psicologia                      7842562.         6779   1044 
## 10 Engenharia de Produção          7049079.         5946    812.

Direito é o curso que mais movimenta com bolsas, seguido de administração e engenharia civil. Nota-se que medicina está mais atrás apesar da mediana de mensalidade ser a maior entre os dez devido ao menor número de bolsas.

top10 %>%
  ggplot(aes(x = total_bolsas, y = total_mensalidade)) +
  geom_point(size = 3) +
  geom_smooth(method = "lm", se = FALSE, color = "blue")
## `geom_smooth()` using formula = 'y ~ x'

  labs(
    title = "Relação entre Total de Bolsas e Mensalidade",
    x = "Total de Bolsas",
    y = "Valor Total de Mensalidade"
  ) +
  theme_minimal()
## NULL

O gráfico sugere uma correlação positiva e fraca entre o montante de mensalidade e a quantidade de bolsas ofertadas, direito se comporta como um outlier, assim como medicina, apesar da proximidade da linha de tendência.

Calculando a correlação

cor(top10$total_bolsas, top10$total_mensalidade, method = 'pearson')
## [1] 0.5102247

Pelo método de Pearson a correlação de mensalidade e quantidade de bolsas nos dez cursos com maiores gastos totais com bolsas é moderada e positiva, com \(r = 0.5102\). Isso demonstra que o número de bolsas influencia diretamente no custo total da mensalidade, embora não seja o único determinante.


Q3 - Quais são os cursos tecnológicos do estado da Paraíba que oferecem mais bolsas de estudo e quantas bolsas de cada tipo estes cursos oferecem?

Cursos de nível tecnológo na Paraiba com maior quantidade de bolsas e quantas bolsas de cada tipo cada curso desse oferece.

#head(cursos)
cursos[is.na(cursos)] <- 0
ranking <- cursos %>%
  filter(grau == "Tecnológico") %>%
  filter(uf_busca == "PB") %>%
  mutate(total_bolsas = bolsa_integral_cotas + bolsa_integral_ampla + bolsa_parcial_cotas + bolsa_parcial_ampla) %>%
  group_by(curso_busca) %>%
  summarise(
    total_bolsas = sum(total_bolsas),
    total_integral = sum(bolsa_integral_cotas) + sum(bolsa_integral_ampla),
    total_parcial = sum(bolsa_parcial_cotas) + sum(bolsa_parcial_ampla),
  ) %>%
  arrange(desc(total_bolsas))
ranking
## # A tibble: 34 × 4
##    curso_busca                        total_bolsas total_integral total_parcial
##    <chr>                                     <dbl>          <dbl>         <dbl>
##  1 Gestão de Recursos Humanos                  124             51            73
##  2 Segurança no Trabalho                       110             18            92
##  3 Redes de Computadores                       106             26            80
##  4 Gestão da Tecnologia da Informação           99             18            81
##  5 Negócios Imobiliários                        95             10            85
##  6 Logística                                    80             12            68
##  7 Design de Interiores                         53             23            30
##  8 Radiologia                                   53             42            11
##  9 Gestão Comercial                             27             19             8
## 10 Marketing                                    27             23             4
## # ℹ 24 more rows
ranking %>%
  mutate(ratio_total_integral = (total_integral/total_bolsas) * sqrt(total_bolsas)) %>% #considera o total de bolsas mas de maneira amortizada
  arrange(desc(ratio_total_integral))
## # A tibble: 34 × 5
##    curso_busca    total_bolsas total_integral total_parcial ratio_total_integral
##    <chr>                 <dbl>          <dbl>         <dbl>                <dbl>
##  1 Radiologia               53             42            11                 5.77
##  2 Gastronomia              24             23             1                 4.69
##  3 Gestão de Rec…          124             51            73                 4.58
##  4 Marketing                27             23             4                 4.43
##  5 Gestão Financ…           22             20             2                 4.26
##  6 Análise e Des…           19             17             2                 3.90
##  7 Gestão Comerc…           27             19             8                 3.66
##  8 Gestão Pública           14             12             2                 3.21
##  9 Design de Int…           53             23            30                 3.16
## 10 Sistemas para…            9              9             0                 3   
## # ℹ 24 more rows

O curso de gestão de recursos humanos é o tecnólogo que mais oferece bolsas, contando com 73 parciais e 51 integrais. Entretanto, cursos como radiologia conseguem prover uma razão maior de bolsas integrais enquanto mantêm um número total alto de bolsas.


Q4 - Considerando os cursos de Ciência da Computação, Engenharia da Computação e Sistemas de Informação, qual o percentual de bolsas ofertadas para cada modalidade (a distância, integral, noturno, etc.) por cada um dos cursos? Existe uma modalidade que é predominante?

Para ciência da computação.

Descobrindo os módulos.

#head(cursos)
cursos %>%
  select(turno) %>%
  group_by(turno) %>%
  slice_head(n=1)
## # A tibble: 5 × 1
## # Groups:   turno [5]
##   turno            
##   <chr>            
## 1 Curso a Distância
## 2 Integral         
## 3 Matutino         
## 4 Noturno          
## 5 Vespertino
#head(cursos)
cursos %>%
  filter(curso_busca == "Ciência da Computação") %>%
  mutate(total_bolsas = bolsa_integral_cotas + bolsa_integral_ampla + bolsa_parcial_cotas + bolsa_parcial_ampla) %>%
  select(turno, total_bolsas, bolsa_integral_cotas,bolsa_integral_ampla,bolsa_parcial_cotas,bolsa_parcial_ampla) %>%
  group_by(turno) %>%
  summarise(
    total_bolsas = sum(total_bolsas),
    total_integral = sum(bolsa_integral_cotas) + sum(bolsa_integral_ampla),
    total_parcial = sum(bolsa_parcial_cotas) + sum(bolsa_parcial_ampla),
  ) %>%
  mutate(total = sum(total_bolsas)) %>%
  mutate(ratio = total_bolsas/total)
## # A tibble: 4 × 6
##   turno      total_bolsas total_integral total_parcial total  ratio
##   <chr>             <dbl>          <dbl>         <dbl> <dbl>  <dbl>
## 1 Integral             20             12             8  1590 0.0126
## 2 Matutino            384            246           138  1590 0.242 
## 3 Noturno            1169            558           611  1590 0.735 
## 4 Vespertino           17              9             8  1590 0.0107

Para ciência da computação, o turno da noite conta com \(73.52\%\) do total de bolsas de computação, seguido do período matutino com \(24.15\%\). Integral conta com \(1.26\%\) das bolsas e Vespertino com \(1.07\%\)

Para Engenharia da computação

#head(cursos)
cursos %>%
  filter(curso_busca == "Engenharia da Computação") %>%
  mutate(total_bolsas = bolsa_integral_cotas + bolsa_integral_ampla + bolsa_parcial_cotas + bolsa_parcial_ampla) %>%
  select(turno, total_bolsas, bolsa_integral_cotas,bolsa_integral_ampla,bolsa_parcial_cotas,bolsa_parcial_ampla) %>%
  group_by(turno) %>%
  summarise(
    total_bolsas = sum(total_bolsas),
    total_integral = sum(bolsa_integral_cotas) + sum(bolsa_integral_ampla),
    total_parcial = sum(bolsa_parcial_cotas) + sum(bolsa_parcial_ampla),
  ) %>%
  mutate(total = sum(total_bolsas)) %>%
  mutate(ratio = total_bolsas/total)
## # A tibble: 3 × 6
##   turno    total_bolsas total_integral total_parcial total ratio
##   <chr>           <dbl>          <dbl>         <dbl> <dbl> <dbl>
## 1 Integral           22              2            20   121 0.182
## 2 Matutino           19             16             3   121 0.157
## 3 Noturno            80             34            46   121 0.661

Para engenharia da computação, o turno da noite conta com \(66.16\%\) do total de bolsas, seguido do período integral com \(18.18\%\). O período matutino possui apenas \(15.70\%\)

Para Sistemas de Informação

#head(cursos)
cursos %>%
  filter(curso_busca == "Sistemas de Informação") %>%
  mutate(total_bolsas = bolsa_integral_cotas + bolsa_integral_ampla + bolsa_parcial_cotas + bolsa_parcial_ampla) %>%
  select(turno, total_bolsas, bolsa_integral_cotas,bolsa_integral_ampla,bolsa_parcial_cotas,bolsa_parcial_ampla) %>%
  group_by(turno) %>%
  summarise(
    total_bolsas = sum(total_bolsas),
    total_integral = sum(bolsa_integral_cotas) + sum(bolsa_integral_ampla),
    total_parcial = sum(bolsa_parcial_cotas) + sum(bolsa_parcial_ampla),
  ) %>%
  mutate(total = sum(total_bolsas)) %>%
  mutate(ratio = total_bolsas/total)
## # A tibble: 4 × 6
##   turno             total_bolsas total_integral total_parcial total  ratio
##   <chr>                    <dbl>          <dbl>         <dbl> <dbl>  <dbl>
## 1 Curso a Distância           95             93             2  1925 0.0494
## 2 Matutino                   260            104           156  1925 0.135 
## 3 Noturno                   1514            588           926  1925 0.786 
## 4 Vespertino                  56              2            54  1925 0.0291

Para sistemas de informação, o turno da noite conta com \(78.65\%\) do total de bolsas, seguido do período matutino com \(13.51\%\). À distância conta com \(4.93\%\) das bolsas e Vespertino com \(2.91\%\)

Diante da análise dos três cursos, pode-se concluir que o turno Noturno possui maior concentração de bolsas em todos os cursos analisados e é visto como o turno predominante de disponibilidade de bolsas.