Nesta análise, faremos uma simples análise descritiva do perfil dos alunos inscritos em uma turma de uma disciplina de Pós Graduação em Ciência da Computação. Esta disciplina foi ofertada pela UFCG, universidade no estado da Paraíba (Brasil).




Carregando pacotes


library(here)
library(magrittr)
library(tidyverse)




Carregando dados


readr::read_csv(here::here('data/dados-fpcc2.csv'),
                col_types = cols(`Carimbo de data/hora` = col_character(),
                                 Idade = col_integer(),
                                 `Você é` = col_character(),
                                 `Curso no PPGCC / UFCG` = col_character(),
                                 `Área de pesquisa` = col_character(),
                                 `Nível de interesse na pós-gradução` = col_integer(),
                                 `Programa em R` = col_character(),
                                 `Instituição de origem (abreviado)` = col_character(),
                                 `Estado de nascimento (abreviado)` = col_character(),
                                 `Número de irmãos (irmãs)` = col_character(),
                                 `Altura (em centímetros)` = col_double()),
                progress = F) %>%
  dplyr::rename(timestamp = `Carimbo de data/hora`,
                age = `Idade`,
                sex = `Você é`,
                course = `Curso no PPGCC / UFCG`,
                research_area = `Área de pesquisa`,
                pg_interest_lvl = `Nível de interesse na pós-gradução`,
                programs_in_R = `Programa em R`,
                home_inst = `Instituição de origem (abreviado)`,
                home_state = `Estado de nascimento (abreviado)`,
                n_siblings = `Número de irmãos (irmãs)`,
                height_cm = `Altura (em centímetros)`) -> df

df %>%
  glimpse()
## Observations: 29
## Variables: 11
## $ timestamp       <chr> "2020/03/10 11:05:00 AM GMT-3", "2020/03/10 11:0…
## $ age             <int> 22, 22, 22, 23, 24, 24, 28, 26, 23, 23, 26, 32, …
## $ sex             <chr> "Homem", "Homem", "Homem", "Homem", "Homem", "Ho…
## $ course          <chr> "Mestrado", "Mestrado", "Mestrado", "Mestrado", …
## $ research_area   <chr> "Análise de dados", "Mobilidade Urbana", "Redes …
## $ pg_interest_lvl <int> 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, …
## $ programs_in_R   <chr> "Sim", "Sim", "Não", "Sim", "Não", "Sim", "Não",…
## $ home_inst       <chr> "UFCG", "UFCG", "UFCG", "UFCG", "IFCE Campus Cra…
## $ home_state      <chr> "PB", "PB", "PB", "DF", "SP", "BA", "SE", "PB", …
## $ n_siblings      <chr> "5", "1", "0", "2", "02", "1", "3", "2", "2", "0…
## $ height_cm       <dbl> 178.00, 175.00, 173.00, 184.00, 168.00, 165.00, …




Calcule média e desvio padrão da idade e nível de interesse.


df %>%
  select(age, pg_interest_lvl) %>%
  gather("variable", "value") %>%
  group_by(variable) %>%
  summarise(mean = mean(value),
            sd = sd(value)) %>%
  ungroup() %>%
  gather("metric", "value", mean, sd) %>%
  arrange(metric, desc(value)) -> global_metrics

global_metrics
  • Ordenemos por ordem alfabética da métrica (mean precede sd), e ordenemos os valores em ordem decrescente.


global_metrics %>%
  write_csv(here::here("data/global_metrics.csv"))




Qual o curso com maior valor médio de idade?


total_students <- nrow(df)

print(paste("Número total de estudantes:", total_students))
## [1] "Número total de estudantes: 29"
  • A turma oficialmente possui 34 alunos, assim 29 respostas representam uma amostra consideravelmente representativa em termos de representar a turma.


df %>%
  group_by(course) %>%
  summarise(avg_age = mean(age),
            sd_age = sd(age)) %>%
  ungroup()
  • Curiosamente, os alunos especiais são os mais velhos entre todos.


df %>%
  group_by(course) %>%
  summarise(avg_age = mean(age),
            sd_age = sd(age)) %>%
  ungroup() %>%
  ggplot(aes(reorder(course, avg_age), avg_age)) +
  geom_col() +
  labs(x = "Curso no PPGCC / UFCG", y="Idade Média") -> p1

ggsave(here::here("data/avg_age_by_course.jpeg"), plot=p1,
       device="jpeg", height=4, width=7)

p1

  • Existe uma tendência vísivel, em que alunos de Doutorado são mais velhos que os de Mestrado. O que faz sentido, já que normalmente alunos de Doutorado passaram um certo número de anos cursando o Mestrado.

  • Curiosamente, os alunos especiais em média são mais velhos que alunos de Mestrado e Doutorado.

Doutorado é o curso/programa com os alunos mais velhos. Se considerássemos Alunos especiais como um grupo por si só (já que não temos identificação de qual programa participam) este seriam o grupo com os alunos mais velhos.




Avalie o percentual de alunos para cada estado de origem


df %>%
  select(home_state) %>%
  unique()
  • O mesmo estado foi escrito de maneiras diferentes, coloquemos tudo em sigla


df %>%
  mutate(home_state = ifelse(home_state == 'Paraíba', 'PB', home_state)) %>%
  mutate(home_state = ifelse(home_state == 'Ceará', 'CE', home_state)) %>%
  mutate(home_state = ifelse(home_state == 'Santa Catarina', 'SC', home_state)) -> df

df %>%
  select(home_state) %>%
  unique()
df %>%
  group_by(home_state) %>%
  summarise(perc = 100 *  n() / total_students) %>%
  ungroup() %>%
  ggplot(aes(reorder(home_state, perc), perc)) +
  geom_col() +
  labs(x = "Estado de nascimento (abreviado)", y="Percentagem (%)") -> p2

ggsave(here::here("data/stdnt_perc_by_home_state.jpeg"), plot=p2,
       device="jpeg", height=4, width=7)

p2

  • Claramente a maior parte dos alunos é da própria Paraíba (estado em que reside a universidade). Esse resultado é intuitivo, já que em termos logísticos em geral é mais simples pra um aluno se manter e se articular em seu estado natal.




Compare a média de idade geral com a média dos top-5 e dos bottom-5


global_metrics %>%
  filter(variable == "age" & metric == "mean") %$%
  value -> overall_age

df %>%
  mutate(overall = overall_age) -> df

df %>% 
  glimpse()
## Observations: 29
## Variables: 12
## $ timestamp       <chr> "2020/03/10 11:05:00 AM GMT-3", "2020/03/10 11:0…
## $ age             <int> 22, 22, 22, 23, 24, 24, 28, 26, 23, 23, 26, 32, …
## $ sex             <chr> "Homem", "Homem", "Homem", "Homem", "Homem", "Ho…
## $ course          <chr> "Mestrado", "Mestrado", "Mestrado", "Mestrado", …
## $ research_area   <chr> "Análise de dados", "Mobilidade Urbana", "Redes …
## $ pg_interest_lvl <int> 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, …
## $ programs_in_R   <chr> "Sim", "Sim", "Não", "Sim", "Não", "Sim", "Não",…
## $ home_inst       <chr> "UFCG", "UFCG", "UFCG", "UFCG", "IFCE Campus Cra…
## $ home_state      <chr> "PB", "PB", "PB", "DF", "SP", "BA", "SE", "PB", …
## $ n_siblings      <chr> "5", "1", "0", "2", "02", "1", "3", "2", "2", "0…
## $ height_cm       <dbl> 178.00, 175.00, 173.00, 184.00, 168.00, 165.00, …
## $ overall         <dbl> 25.7931, 25.7931, 25.7931, 25.7931, 25.7931, 25.…
df %>%
  top_n(5, age) %$%
  age %>%
  mean() -> top_5_avg_age

print(paste("Idade Média dos Top 5:", top_5_avg_age))
## [1] "Idade Média dos Top 5: 35.2"


df %>%
  top_n(-5, age) %$%
  age %>%
  mean() -> bottom_5_avg_age

print(paste("Idade Média dos Bottom 5:", bottom_5_avg_age))
## [1] "Idade Média dos Bottom 5: 21.875"


df %>%
  mutate(top_5 = top_5_avg_age,
         bottom_5 = bottom_5_avg_age) -> df

df %>%
  glimpse()
## Observations: 29
## Variables: 14
## $ timestamp       <chr> "2020/03/10 11:05:00 AM GMT-3", "2020/03/10 11:0…
## $ age             <int> 22, 22, 22, 23, 24, 24, 28, 26, 23, 23, 26, 32, …
## $ sex             <chr> "Homem", "Homem", "Homem", "Homem", "Homem", "Ho…
## $ course          <chr> "Mestrado", "Mestrado", "Mestrado", "Mestrado", …
## $ research_area   <chr> "Análise de dados", "Mobilidade Urbana", "Redes …
## $ pg_interest_lvl <int> 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, …
## $ programs_in_R   <chr> "Sim", "Sim", "Não", "Sim", "Não", "Sim", "Não",…
## $ home_inst       <chr> "UFCG", "UFCG", "UFCG", "UFCG", "IFCE Campus Cra…
## $ home_state      <chr> "PB", "PB", "PB", "DF", "SP", "BA", "SE", "PB", …
## $ n_siblings      <chr> "5", "1", "0", "2", "02", "1", "3", "2", "2", "0…
## $ height_cm       <dbl> 178.00, 175.00, 173.00, 184.00, 168.00, 165.00, …
## $ overall         <dbl> 25.7931, 25.7931, 25.7931, 25.7931, 25.7931, 25.…
## $ top_5           <dbl> 35.2, 35.2, 35.2, 35.2, 35.2, 35.2, 35.2, 35.2, …
## $ bottom_5        <dbl> 21.875, 21.875, 21.875, 21.875, 21.875, 21.875, …
df %>%
  select(overall,top_5,bottom_5) %>%
  reshape2::melt(measure.vars = c("overall","top_5","bottom_5"),
                 variable.name = "var") %>%
  unique() %>%
  ggplot(aes(reorder(var, value), value)) +
  geom_col() +
  labs(x = "",
       y = "Idade Média (Anos)")

  • A média geral (overall) está bem mais próxima dos 5 valores menores.


df %>%
  write_csv(here::here("data/df_plus_means.csv"))
  • Salvemos um dataframe com as médias em questão.




Você acredita que existe uma relação entre idade e nível de interesse?


df %>%
  mutate(pg_interest_lvl = as.factor(pg_interest_lvl)) %>%
  ggplot(aes(pg_interest_lvl, age)) +
  geom_jitter() +
  labs(x="Nível de interesse na pós-gradução",
       y="Idade (anos)")

  • Acredito que não exista uma relação clara entre Idade e Nível de interesse na pós-gradução
  • Os alunos mais velhos parecem se concentrar entre os mais interessados.
  • A força dessa relação é passível de questionamente já que existe uma forte intersecção entre os dois grupos.

Em suma, os alunos mais velhos (de idade mais próxima a 30 anos) parecem se concentrar entre os mais interessados (nível 3).