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.