Questão 1

Q1 - 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.

# lista de estados do Nordeste
nordeste <- c("AL", "BA", "CE", "MA", "PB", "PE", "PI", "RN", "SE")

# lista de estados do Sudeste
sudeste <- c("ES", "MG", "RJ", "SP")

# filtrando os dados apenas para os cursos de Ciência da Computação
dados_cc <- dff[dff$curso_busca == "Ciências da Computação", ]

# criar novas colunas para mensalidade média e mediana para cada região
dados_cc$regiao <- ifelse(dados_cc$uf_busca %in% c("PE", "CE", "RN", "PB", "SE", "AL", "BA", "MA", "PI"), "Nordeste", "Sudeste")
media_mensalidade <- tapply(dados_cc$mensalidade, dados_cc$regiao, mean)
mediana_mensalidade <- tapply(dados_cc$mensalidade, dados_cc$regiao, median)
media_resumo <- data.frame(regiao = names(media_mensalidade), media_mensalidade)
mediana_resumo <- data.frame(regiao = names(mediana_mensalidade), mediana_mensalidade)
dados_cc <- merge(dados_cc, media_resumo, by = "regiao")
dados_cc <- merge(dados_cc, mediana_resumo, by = "regiao")

# gráfico de caixa
boxplot(mensalidade ~ regiao, data = dados_cc, 
        main = "Mensalidade média e mediana para Ciência da Computação",
        ylab = "Mensalidade", xlab = "Região")

# gráfico de densidade
library(ggplot2)
ggplot(dados_cc, aes(x = mensalidade, fill = regiao)) + 
  geom_density(alpha = 0.5) + 
  xlab("Mensalidade") + 
  ylab("Densidade") + 
  ggtitle("Densidade de mensalidades para Ciência da Computação") +
  theme(plot.title = element_text(hjust = 0.5))

Acredito que não seja signficativa, uma vez que a diferença não é grande.Aonde apresentam numeros que não distoam um do outro.Analisando a mediana gerada por ambas as regiões pode se analisar que existe uma diferença de, no maximo, 100 reais entre as mensalidades.

dp <- dff %>% 
  group_by(curso_busca) %>% 
  summarise(mens_media = mean(mensalidade),
            mens_max = max(mensalidade),
            mens_median = median(mensalidade))

dp
## # A tibble: 296 × 4
##    curso_busca                           mens_media mens_max mens_median
##    <chr>                                      <dbl>    <dbl>       <dbl>
##  1 Administração                               543.    6553.        394.
##  2 Administração Pública                       390.     870.        311 
##  3 Administração de Empresas                   919      919         919 
##  4 Administração de Recursos Humanos           469.     579         436 
##  5 Agroindústria                               651.     651.        651.
##  6 Agronegócio                                 385.    1113.        319 
##  7 Agronomia                                  1304.    2166.       1228 
##  8 Agropecuária                               1000.    1000.       1000.
##  9 Alimentos                                   684.     966.        595 
## 10 Análise e Desenvolvimento de Sistemas       401.    2520         299 
## # ℹ 286 more rows

Questão 2

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.

library(dplyr)

# criar uma nova coluna com o valor líquido da mensalidade
dff$mensalidade_liquida <- dff$mensalidade * (1 - (dff$bolsa_integral_cotas + dff$bolsa_integral_ampla) / 100)

# agrupar dados por curso e calcular a média de mensalidade líquida por curso
dados_agrupados <- dff %>%
  group_by(curso_busca) %>%
  summarise(media_mensalidade = mean(mensalidade_liquida, na.rm = TRUE))

# ordenar dados pela média de mensalidade em ordem decrescente e selecionar os 10 cursos com maior média
top_10_cursos <- dados_agrupados %>%
  arrange(desc(media_mensalidade)) %>%
  head(10)

# imprimir tabela com os top 10 cursos com a maior média de mensalidade considerando diferentes tipos de bolsas
top_10_cursos
## # A tibble: 10 × 2
##    curso_busca                              media_mensalidade
##    <chr>                                                <dbl>
##  1 Medicina                                             6566.
##  2 Engenharia de Materiais e Nanotecnologia             4026.
##  3 Sistemas Biomédicos                                  3352.
##  4 Desenho Industrial                                   3224.
##  5 Artes Cênicas                                        3055.
##  6 Comunicação Social - Cinema                          2710.
##  7 Comunicação e Multimeios                             2482.
##  8 Música - Composição                                  2189.
##  9 Odontologia                                          2178.
## 10 Design de Games                                      2136.

Analisando as bolsas de maior valor, vemos que o top 10 apresenta um padrão da presença de medicina, porém sem nenhuma por parte do numero de bolsas

dados_resumidos <- dff %>%
  group_by(curso_id, curso_busca) %>%
  summarise(total_mensalidade = sum(mensalidade),
            total_bolsas = sum(bolsa_integral_cotas + bolsa_integral_ampla + bolsa_parcial_cotas + bolsa_parcial_ampla, na.rm = T))
## `summarise()` has grouped output by 'curso_id'. You can override using the
## `.groups` argument.
# Calcular a relação entre o valor total de mensalidade e o total de bolsas por curso
correlacao <- cor(dados_resumidos$total_mensalidade, dados_resumidos$total_bolsas)

# Imprimir a correlação entre o valor total de mensalidade e o total de bolsas por curso
correlacao
## [1] 0.06602413

Ao tentar fazer uma analise de correlação podemos ver que é uma correlação baixa ficando fora da primeira casa. Confirmando assim a inexistencia de relação entre numero de bolsas e valor da mensalidade.

# agrupando por curso e calculando o total de bolsas
df_bolsas <- dff %>%
  group_by(curso_busca) %>%
  summarize(total_bolsas = sum(bolsa_integral_cotas) + sum(bolsa_integral_ampla) + sum(bolsa_parcial_cotas) + sum(bolsa_parcial_ampla))

# ordenando de forma decrescente pelo valor da mensalidade
df_top10 <- dff %>%
  mutate(total_bolsas = df_bolsas$total_bolsas[match(curso_busca, df_bolsas$curso_busca)]) %>%
  arrange(desc(mensalidade)) %>%
  filter(!is.na(total_bolsas)) %>%
  distinct(curso_busca, .keep_all = TRUE) %>%
  top_n(10)
## Selecting by total_bolsas
# plotando o gráfico
ggplot(df_top10, aes(x = reorder(curso_busca, -mensalidade), y = mensalidade, fill = as.factor(total_bolsas))) +
  geom_col() +
  scale_fill_discrete(name = "Total de bolsas") +
  labs(x = "Curso", y = "Mensalidade", title = "Top 10 cursos com maior valor de mensalidade pelo total de bolsas") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

Questão 3

Q3 - 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?

library(dplyr)
library(ggplot2)
library(tidyr)
# Filtrar para cursos tecnológicos da Paraíba
cursos_tec <- dff %>% 
  filter(uf_busca == "PB", grepl("tecnológico", grau, ignore.case = TRUE))

# agrupando por curso e somando as bolsas
cursos_tec_bolsas <- cursos_tec %>%
  group_by(curso_busca) %>%
  summarise_at(vars(starts_with("bolsa")), sum, na.rm = TRUE)

# ordenando de forma decrescente pelo total de bolsas
cursos_tec_bolsas <- cursos_tec_bolsas %>%
  arrange(desc(bolsa_integral_cotas + bolsa_integral_ampla + bolsa_parcial_cotas + bolsa_parcial_ampla)) %>%
  head(5)

# transformando os dados para formato longo
cursos_tec_bolsas_melt <- cursos_tec_bolsas %>%
  pivot_longer(cols = starts_with("bolsa"), 
               names_to = "bolsa_tipo", 
               values_to = "quantidade_bolsas") %>%
  mutate(bolsa_tipo = factor(bolsa_tipo, 
                             levels = c("bolsa_integral_cotas", 
                                        "bolsa_integral_ampla", 
                                        "bolsa_parcial_cotas", 
                                        "bolsa_parcial_ampla")))

# criando o plot
ggplot(cursos_tec_bolsas_melt, aes(x = curso_busca, y = quantidade_bolsas, fill = bolsa_tipo)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_manual(values = c("#00429d", "#0072c6", "#80bfff", "#bfe6ff")) +
  labs(title = "Cursos tecnológicos com mais bolsas na Paraíba",
       subtitle = "Top 5",
       x = "Curso",
       y = "Quantidade de bolsas",
       fill = "Tipo de bolsa") +
  theme(plot.title = element_text(size = 18, hjust = 0.5),
        plot.subtitle = element_text(size = 16, hjust = 0.5),
        axis.title = element_text(size = 14),
        axis.text.x = element_text(angle = 45, hjust = 1))

Podemos ver os cursos que apresentam o maior numero de bolsa e a quantidade de bolsa disponibilizada por eles, aonde analisamos a maior presença da bolsa de ampla concorrencia parcial, porém uma quase inexistencia dessa modalidade para a parte de cotas.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Filtra apenas cursos tecnológicos da Paraíba
df_paraiba <- dff %>% 
  filter(uf_busca == "PB", grau == "Tecnológico")

# Agrupa por curso e soma as bolsas
df_bolsas <- df_paraiba %>% 
  group_by(curso_busca) %>% 
  summarise(total_bolsas = sum(bolsa_integral_cotas, na.rm = TRUE) +
                          sum(bolsa_integral_ampla, na.rm = TRUE) +
                          sum(bolsa_parcial_cotas, na.rm = TRUE) +
                          sum(bolsa_parcial_ampla, na.rm = TRUE))

# Ordena pelo número de bolsas decrescente e seleciona os top 5
df_top5 <- df_bolsas %>% 
  top_n(5, total_bolsas) %>% 
  arrange(desc(total_bolsas))

# Formata os nomes dos cursos
df_top5$curso_busca <- str_to_title(str_replace_all(df_top5$curso_busca, "_", " "))

# Cria o gráfico
ggplot(df_top5, aes(x = fct_reorder(curso_busca, total_bolsas), y = total_bolsas)) +
  geom_bar(stat="identity", fill="steelblue") +
  xlab("Curso") +
  ylab("Total de Bolsas") +
  ggtitle("Top 5 cursos tecnológicos da Paraíba com mais bolsas de estudo") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))

Questão 4

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?

library(ggplot2)
library(dplyr)
library(tidyr)

# Selecionando apenas as colunas necessárias e os cursos desejados
df_ccomp <- dff %>% 
  filter(str_detect(tolower(curso_busca), "ciência da computação") | 
           str_detect(tolower(curso_busca), "engenharia da computação") | 
           str_detect(tolower(curso_busca), "sistemas de informação")) %>% 
  select(curso_busca, turno) %>% 
  na.omit()

# Agrupando os dados por curso e tipo de bolsa e calculando o total
df_ccomp_total <- df_ccomp %>% 
  group_by(curso_busca, turno) %>% 
  summarise(total = n()) %>% 
  ungroup()
## `summarise()` has grouped output by 'curso_busca'. You can override using the
## `.groups` argument.
# Calculando o percentual de bolsas por tipo em cada curso
df_ccomp_percent <- df_ccomp_total %>% 
  group_by(curso_busca) %>% 
  mutate(percentual = round(total / sum(total) * 100, 2)) %>% 
  ungroup()

# Ordenando as modalidades por ordem crescente de percentual para cada curso
df_ccomp_percent <- df_ccomp_percent %>% 
  mutate(turno = factor(turno, levels = unique(turno)[order(percentual)]))

# Criando o gráfico
ggplot(df_ccomp_percent, aes(x = turno, y = percentual, fill = curso_busca)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(x = "Tipo de bolsa", y = "Percentual de bolsas (%)", 
       title = "Percentual de bolsas por tipo em cursos de TI") +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5),
        legend.position = "bottom",
        axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.y = element_line(color = "gray", linetype = "dashed"),
        panel.grid.minor.y = element_blank())

Analisando o percentual podemos ver uma grande descrepancia entre as modalidadaes, onde a modalidade noturna sai a frente de todas as outras e a vespertina quase não existe.