Lab - FPCC 2

Com base no arquivo de dados (no diretório data) responda as questões abaixo, gerando um relatório final com as respostas. Cada resposta deve gerar tabelas e/ou gráficos para apresentar os resultados obtidos, além de uma justificativa para a escolha de métricas, estatísticas e visualizações. Vocês podem se basear no arquivo R Markdown gerado em sala (no diretório reports). O relatório final deve ser adicionado ao repositório do seu lab (por exemplo, um arquivo PDF).

library(readr)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ purrr     1.0.1
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ── 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
dff <- 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.
calculate_cs_fees_by_region <- function(df, states) {
  cs_df <- subset(df, nome == "Ciência da Computação" & uf_busca %in% states)
  
  avg_tuition <- mean(cs_df$mensalidade)
  median_tuition <- median(cs_df$mensalidade)
  
  return(list(avg_tuition = avg_tuition, median_tuition = median_tuition))
}

calculate_ratio_by_name <- function(df) {
  summary_stats <- aggregate(cbind(mensalidade, bolsa_integral_cotas, bolsa_integral_ampla, bolsa_parcial_cotas, bolsa_parcial_ampla) ~ nome, data = df, FUN = sum)
  
  summary_stats$tuition_ratio <- summary_stats$mensalidade / (summary_stats$bolsa_integral_cotas + summary_stats$bolsa_integral_ampla + summary_stats$bolsa_parcial_cotas + summary_stats$bolsa_parcial_ampla)
  
  summary_stats <- summary_stats[, c("nome", "mensalidade", "tuition_ratio")]
  
  summary_stats <- summary_stats[order(summary_stats$mensalidade, decreasing = TRUE), ]
  
  summary_stats <- head(summary_stats, 10)
  
  return(summary_stats)
}

calculate_totals_by_name <- function(df) {
  subset_df <- subset(df, uf_busca == "PB" & grau == "Tecnológico")
  subset_df[is.na(subset_df)] = 0

  summary_stats <- aggregate(cbind(bolsa_integral_cotas, bolsa_integral_ampla, bolsa_parcial_cotas, bolsa_parcial_ampla) ~ nome, data = subset_df, FUN = sum)
  
  summary_stats$total <- summary_stats$bolsa_integral_cotas + summary_stats$bolsa_integral_ampla + summary_stats$bolsa_parcial_cotas + summary_stats$bolsa_parcial_ampla
  
  summary_stats <- summary_stats[order(summary_stats$total, decreasing = TRUE), ]
  
  return(summary_stats[, c("nome", "bolsa_integral_cotas", "bolsa_integral_ampla", "bolsa_parcial_cotas", "bolsa_parcial_ampla", "total")])
}

calculate_totals_by_course <- function(df) {
  subset_df <- subset(df, nome %in% c("Ciência da Computação", "Engenharia da Computação", "Sistemas de Informação"))
  subset_df[is.na(subset_df)] = 0
  
  summarized_data <- subset_df %>%
    group_by(nome, turno) %>%
    summarise(b1_sum = sum(bolsa_integral_cotas), b2_sum = sum(bolsa_integral_ampla), b3_sum = sum(bolsa_parcial_cotas), b4_sum = sum(bolsa_parcial_ampla))
  
  summarized_data$total <- summarized_data$b1_sum + summarized_data$b2_sum + summarized_data$b3_sum + summarized_data$b4_sum
  
  grouped_data <- summarized_data %>%
    group_by(nome) %>%
    summarise(total_sum = sum(total))
  
  matutino <- subset(summarized_data, turno == "Matutino")
  matutino$total <- matutino$b1_sum + matutino$b2_sum + matutino$b3_sum + matutino$b4_sum
  
  grouped_matutino <- matutino %>%
    group_by(nome) %>%
    summarise(total_sum_matutino = sum(total))
  

  merged_data <- merge(x = grouped_data, y = grouped_matutino, by = "nome", all.x = TRUE)
  
  integral <- subset(summarized_data, turno == "Integral")
  integral$total <- integral$b1_sum + integral$b2_sum + integral$b3_sum + integral$b4_sum
  
  grouped_integral <- integral %>%
    group_by(nome) %>%
    summarise(total_sum_integral = sum(total))
  
  
  merged_data <- merge(x = merged_data, y = grouped_integral, by = "nome", all.x = TRUE)
  
  noturno <- subset(summarized_data, turno == "Noturno")
  noturno$total <- noturno$b1_sum + noturno$b2_sum + noturno$b3_sum + noturno$b4_sum
  
  grouped_noturno <- noturno %>%
    group_by(nome) %>%
    summarise(total_sum_noturno = sum(total))
  
  
  merged_data <- merge(x = merged_data, y = grouped_noturno, by = "nome", all.x = TRUE)
  
  ead <- subset(summarized_data, turno == "Curso a Distância")
  ead$total <- ead$b1_sum + ead$b2_sum + ead$b3_sum + ead$b4_sum
  
  grouped_ead <- ead %>%
    group_by(nome) %>%
    summarise(total_sum_ead = sum(total))
  
  
  merged_data <- merge(x = merged_data, y = grouped_ead, by = "nome", all.x = TRUE)
  
  vespertino <- subset(summarized_data, turno == "Vespertino")
  vespertino$total <- vespertino$b1_sum + vespertino$b2_sum + vespertino$b3_sum + vespertino$b4_sum
  
  grouped_vespertino <- vespertino %>%
    group_by(nome) %>%
    summarise(total_sum_vespertino = sum(total))
  
  
  merged_data <- merge(x = merged_data, y = grouped_vespertino, by = "nome", all.x = TRUE)
  
  merged_data[is.na(merged_data)] = 0
  
  merged_data$total_percent_matutino <- 100 * (merged_data$total_sum_matutino/merged_data$total_sum)
  merged_data$total_percent_integral <- 100 * (merged_data$total_sum_integral/merged_data$total_sum)
  merged_data$total_percent_noturno <- 100 * (merged_data$total_sum_noturno/merged_data$total_sum)
  merged_data$total_percent_ead <- 100 * (merged_data$total_sum_ead/merged_data$total_sum)
  merged_data$total_percent_vespertino <- 100 * (merged_data$total_sum_vespertino/merged_data$total_sum)
  
  return(merged_data)
}

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.

Resultados do sudeste:

results_southeast <- calculate_cs_fees_by_region(dff, c("SP", "RJ", "ES", "MG"))
print(results_southeast)
## $avg_tuition
## [1] 899.0594
## 
## $median_tuition
## [1] 779

Resultados do nordeste:

results_northeast <- calculate_cs_fees_by_region(dff, c("PB", "PE", "PI", "RN", "BA", "CE", "MA", "SE", "AL"))
print(results_northeast)
## $avg_tuition
## [1] 712.7342
## 
## $median_tuition
## [1] 742.8

Na minha opinião, as diferenças entre as médias é relativamente significativa, porém entre as medianas nem tanto. Isso leva a enteder que existem mensalidades no Sudeste que tendem a elevar a média, já que as medianas são próximas.

Questão 02

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.

results <- calculate_ratio_by_name(dff)

print(results)
##                        nome mensalidade tuition_ratio
## 35                  Direito   179997.41      60.34107
## 43         Engenharia Civil   137257.84      84.00113
## 1             Administração   134105.25      42.30450
## 95                 Medicina   126170.32     606.58808
## 103               Pedagogia   115562.89      19.73410
## 7   Arquitetura e Urbanismo   100506.34      89.49808
## 38               Enfermagem    96433.81      55.23128
## 101             Odontologia    92985.88     167.84455
## 112              Psicologia    87825.22      58.12390
## 36          Educação Física    83388.46      44.71231

Na minha opinião, não existe. Visto que não há um padrão entre os valores de mensalidade e a relação reais/bolsa_ofertada.

Questão 03

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?

results_by_name <- calculate_totals_by_name(dff)

print(results_by_name)
##                                        nome bolsa_integral_cotas
## 18               Gestão de Recursos Humanos                   31
## 33                    Segurança no Trabalho                   11
## 31                    Redes de Computadores                   16
## 16       Gestão da Tecnologia da Informação                   12
## 27                    Negócios Imobiliários                    6
## 25                                Logística                    9
## 5                      Design de Interiores                   13
## 30                               Radiologia                   12
## 13                         Gestão Comercial                   14
## 26                                Marketing                   15
## 11                              Gastronomia                   13
## 21                        Gestão Financeira                   14
## 1     Análise e Desenvolvimento de Sistemas                   12
## 9                      Estética e Cosmética                    7
## 23                           Gestão Pública                    9
## 4                   Construção de Edifícios                    3
## 34                   Sistemas para Internet                    6
## 7                            Design Gráfico                    4
## 12                         Gestão Ambiental                    4
## 6                            Design de Moda                    4
## 22                        Gestão Hospitalar                    2
## 28                     Processos Gerenciais                    1
## 29                    Produção Publicitária                    2
## 32                             Secretariado                    1
## 10                                  Eventos                    2
## 14            Gestão da Produção Industrial                    1
## 24                           Jogos Digitais                    2
## 3                         Comércio Exterior                    0
## 8            Embelezamento e Imagem Pessoal                    1
## 17     Gestão de Empreendimentos Esportivos                    1
## 2                            Banco de Dados                    0
## 15                      Gestão da Qualidade                    0
## 19 Gestão de Serviços Jurídicos e Notariais                    1
## 20                    Gestão do Agronegócio                    0
##    bolsa_integral_ampla bolsa_parcial_cotas bolsa_parcial_ampla total
## 18                   20                   3                  70   124
## 33                    7                   1                  91   110
## 31                   10                   0                  80   106
## 16                    6                   1                  80    99
## 27                    4                   0                  85    95
## 25                    3                   1                  67    80
## 5                    10                   0                  30    53
## 30                   30                   1                  10    53
## 13                    5                   5                   3    27
## 26                    8                   4                   0    27
## 11                   10                   1                   0    24
## 21                    6                   2                   0    22
## 1                     5                   2                   0    19
## 9                     6                   0                   6    19
## 23                    3                   2                   0    14
## 4                     1                   3                   2     9
## 34                    3                   0                   0     9
## 7                     2                   0                   0     6
## 12                    1                   1                   0     6
## 6                     1                   0                   0     5
## 22                    1                   1                   0     4
## 28                    0                   2                   1     4
## 29                    2                   0                   0     4
## 32                    0                   3                   0     4
## 10                    1                   0                   0     3
## 14                    0                   1                   1     3
## 24                    1                   0                   0     3
## 3                     0                   2                   0     2
## 8                     1                   0                   0     2
## 17                    1                   0                   0     2
## 2                     0                   1                   0     1
## 15                    0                   1                   0     1
## 19                    0                   0                   0     1
## 20                    0                   1                   0     1

Questão 04

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?

results_by_modality <- calculate_totals_by_course(dff)
## `summarise()` has grouped output by 'nome'. You can override using the
## `.groups` argument.
print(results_by_modality)
##                       nome total_sum total_sum_matutino total_sum_integral
## 1    Ciência da Computação      1590                384                 20
## 2 Engenharia da Computação       121                 19                 22
## 3   Sistemas de Informação      1925                260                  0
##   total_sum_noturno total_sum_ead total_sum_vespertino total_percent_matutino
## 1              1169             0                   17               24.15094
## 2                80             0                    0               15.70248
## 3              1514            95                   56               13.50649
##   total_percent_integral total_percent_noturno total_percent_ead
## 1               1.257862              73.52201          0.000000
## 2              18.181818              66.11570          0.000000
## 3               0.000000              78.64935          4.935065
##   total_percent_vespertino
## 1                 1.069182
## 2                 0.000000
## 3                 2.909091

Pelos dados apresentados, há uma maior concentração de bolsa ofertadas na modalidade Norturno.