Questão 01

Qual a diferença entre as mensalidades médias e medianas dos cursos de Ciência da Computação do Nordeste e Sudeste? Na sua opnião, essa diferença é estatisticamente significativa? Justifique.

dff %>%
  left_join(br, by = c("uf_busca" = "uf")) %>%
  select(curso = curso_busca, regiao, mensalidade) %>%
  filter(curso == "Ciência da Computação", regiao %in% c("Nordeste", "Sudeste")) %>%
  group_by(regiao) %>%
  summarise(mean = mean(mensalidade),
            median = median(mensalidade),
            diff = mean - median) %>%
  knitr::kable(col.names = c("Região", "Média (R\\$)", "Mediana (R\\$)", "Média - Mediana (R\\$)"))
Região Média (R$) Mediana (R$) Média - Mediana (R$)
Nordeste 712.7342 742.8 -30.06581
Sudeste 899.0594 779.0 120.05938

Analisando a diferença entre a média e a mediana em cada região, vemos que:

A diferença é estatiscamente significativa em especial no segundo caso, como estamos lidando com valores na escala de centenas e milhares de reais, uma diferença de 30 reais como no primeiro cenário é muito pequena.

Questão 2

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.

dff %>%
  mutate(curso_id = as.character(curso_id)) %>%
  pivot_longer(
    cols = starts_with("bolsa"),
    names_to = "tipo_bolsa",
    values_to = "qtd_bolsa",
    values_drop_na = T
  ) %>%
  select(curso = nome, curso_id, universidade_nome, campus_nome, qtd_bolsa, mensalidade) %>%
  group_by(curso_id, curso, universidade_nome, campus_nome) %>%
  summarise(qtd_bolsa = sum(qtd_bolsa), mensalidade = first(mensalidade), .groups = "drop") %>%
  mutate(mens_per_bolsa = mensalidade / qtd_bolsa) %>%
  slice_max(order_by = mens_per_bolsa, n = 10) %>%
  separate(universidade_nome, into = c(NA, "universidade_sigla"), sep = " - ", remove = TRUE) %>%
  separate(campus_nome, into = c(NA, "campus_nome", NA, "campus_nome_2"), sep = " - ", remove = TRUE, fill = "right") %>%
  mutate(campus_nome = ifelse(is.na(campus_nome_2), campus_nome, campus_nome_2)) %>%
  select(-campus_nome_2, -mensalidade, -curso_id) %>%
  unite(col = "uni_campus", universidade_sigla, campus_nome, sep = " - ", remove = TRUE) %>%
  unite(col = "curso", curso, uni_campus, sep = "\n", remove = TRUE) %>%
  ggplot(aes(x = reorder(curso, mens_per_bolsa), y = mens_per_bolsa, label = glue::glue("{qtd_bolsa} b."))) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(nudge_y = 350) +
  theme_bw() +
  labs(y = "Mensalidade por bolsa (R$)",
       x = "Curso",
       title = "TOP 10 - Cursos com maior mensalidade por nº de bolsas") +
  coord_flip()

O Top 10 é composto por cursos cuja oferta de bolsas foi de uma bolsa no total, de maneira que a razão mensalidade por bolsa ficou elevada. Além disso, no 10º lugar temos um empate de 3 cursos.

df_aux <- dff %>%
  mutate(curso_id = as.character(curso_id)) %>%
  pivot_longer(
    cols = starts_with("bolsa"),
    names_to = "tipo_bolsa",
    values_to = "qtd_bolsa",
    values_drop_na = T
  ) %>%
  select(curso = nome, curso_id, universidade_nome, campus_nome, qtd_bolsa, mensalidade) %>%
  group_by(curso_id, curso, universidade_nome, campus_nome) %>%
  summarise(qtd_bolsa = sum(qtd_bolsa), mensalidade = first(mensalidade), .groups = "drop") %>%
  mutate(lb_bolsa = ifelse(qtd_bolsa > 30, "Mais de 30 bolsas", "Até 30 bolsas"))

Analisando então se existe alguma relação entre o número de bolsas e a mensalidade, temos o gráfico de dispersão abaixo, facetado por dois grupos:

Por fim, a correlação de Pearson (0.22) nos mostra que não existe uma correlação linear, enquanto a de Spearman (0.51) tem um valor moderado e nos mostra que há uma correlação moderada possivelmente motivada pela relação analisada nos dois grupos acima.

 df_aux %>%
  ggplot(aes(x = mensalidade, y = qtd_bolsa)) +
  geom_point() +
  facet_wrap(~ lb_bolsa, scales = "free") +
  theme_bw()

Questão 3

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

df_aux <- dff %>%
  filter(grau == "Tecnológico", uf_busca == "PB") %>%
  pivot_longer(
    cols = starts_with("bolsa"),
    names_to = "tipo_bolsa",
    values_to = "qtd_bolsa",
    values_drop_na = T
  ) %>%
  group_by(curso = nome, tipo_bolsa) %>%
  summarise(qtd_bolsa = sum(qtd_bolsa), .groups = "drop") %>%
  group_by(curso) %>%
  summarise(
    tipo_bolsa = tipo_bolsa,
    qtd_bolsa = qtd_bolsa,
    tot_bolsa = sum(qtd_bolsa),
    .groups = "drop"
  ) %>%
  mutate(tipo_bolsa = case_when(
    tipo_bolsa == "bolsa_integral_ampla" ~ "Integral Ampla",
    tipo_bolsa == "bolsa_integral_cotas" ~ "Integral Cotas",
    tipo_bolsa == "bolsa_parcial_ampla" ~ "Parcial Ampla",
    tipo_bolsa == "bolsa_parcial_cotas" ~ "Parcial Cotas"
  ))

top10_cursos <- df_aux %>%
  select(curso, tot_bolsa) %>%
  distinct() %>%
  slice_max(order_by = tot_bolsa, n = 10) %>% 
  pull(curso)

df_aux %>%
  filter(curso %in% top10_cursos) %>%
  ggplot(aes(x = reorder(curso, tot_bolsa), y = qtd_bolsa, label = qtd_bolsa, fill = tipo_bolsa)) +
  geom_bar(stat = "identity", position = position_dodge2()) +
  geom_text(aes(y = qtd_bolsa + 5),
            position = position_dodge(width = .9),
            size = 3) +
  theme_bw() +
  theme(legend.position = "top", axis.text.x = element_text(size = 6, angle = 90)) +
  labs(
    x = "Curso",
    y = "# Bolsas",
    fill = "Tipo de bolsa",
    title = "Cursos tecnológicos da Paraíba com maior oferta de bolsas"
  ) +
  guides(fill = guide_legend(nrow = 2))

O top 10 cursos com maior oferta podem ser visto no gráfico acima, as vagas estão estratificadas pelo seu tipo. O curso com maior oferta é o de Gestão em Recursos Humanos com um total de 124 bolsas.

Questão 4

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?

dff %>%
  filter(
    nome %in% c(
      "Ciência da Computação",
      "Engenharia da Computação",
      "Sistemas de Informação"
    )
  ) %>%
  pivot_longer(
    cols = starts_with("bolsa"),
    names_to = "tipo_bolsa",
    values_to = "qtd_bolsa",
    values_drop_na = T
  ) %>%
  group_by(curso = nome, turno) %>%
  summarise(qtd_bolsa = sum(qtd_bolsa), .groups = "drop") %>%
  group_by(curso) %>%
  summarise(
    turno = turno,
    qtd_bolsa = qtd_bolsa,
    tot_bolsa = sum(qtd_bolsa),
    .groups = "drop"
  ) %>%
  mutate(prop = qtd_bolsa / tot_bolsa) %>%
  arrange(turno) %>%
  ggplot(aes(
    x = curso,
    y = prop,
    fill = turno,
    label = glue::glue("{round(prop, 4)*100}%", prop = prop),
    group = prop
  )) +
  geom_bar(stat = "identity", position = position_dodge2()) +
  geom_text(aes(y = prop + 0.03),
            position = position_dodge(width = .9),
            size = 3) +
  theme_bw() +
  theme(legend.position = "top") +
  labs(
    x = "Curso",
    y = "Proporção (%)",
    fill = "Modalidade",
    title = "Oferta de bolsas por modalidade",
    subtitle = "Nos cursos de Ciência da Computação, Engenharia da Computação e Sistemas de Informação"
  )

É possível ver que a modalidade noturna é predominante em todos os cursos, enquanto que a modalidade vespertina é a com menos ofertas.