Organização do Documento

  1. Bibliotecas Utilizadas
  2. Carregando os Dados
  3. Parte 1
  4. Parte 2
  5. Parte 3

Bibliotecas Utlizadas

Primeiramente vamos importar as bibliotecas necessárias para esse script ser executado.

library(ggplot2) 
library(plyr)
library(dplyr) 

Carregando dados

Os dados estão em um arquivo em que cada linha representa uma relação entre uma aluno e uma disciplina.

dados_alunos_ufcg = read.csv("/home/marianne-linhares/alunosUFCGAnon.csv")

names(dados_alunos_ufcg)
##  [1] "Matricula"        "Cod_Curso"        "Cod_Disciplina"  
##  [4] "Cod_Evasao"       "Nome_Curso"       "Periodo"         
##  [7] "Nome_Disciplina"  "Creditos"         "Departamento"    
## [10] "Media_Disciplina" "Situacao"         "Centro"          
## [13] "Campus"           "Creditos_Curso"   "Tipo"            
## [16] "Periodo_Ingresso" "Periodo_Relativo"
summary(dados_alunos_ufcg)
##    Matricula        Cod_Curso        Cod_Disciplina      Cod_Evasao     
##  B32258 :   143   Min.   :11104120   Min.   :1105013   Min.   :0.00000  
##  B30701 :   138   1st Qu.:13306200   1st Qu.:1301063   1st Qu.:0.00000  
##  B22035 :   132   Median :21204100   Median :2101046   Median :0.00000  
##  B25585 :   129   Mean   :28575038   Mean   :2815884   Mean   :0.06797  
##  B27775 :   128   3rd Qu.:41403100   3rd Qu.:4101151   3rd Qu.:0.00000  
##  B28061 :   124   Max.   :91402100   Max.   :9101274   Max.   :1.00000  
##  (Other):919735                                                         
##                      Nome_Curso        Periodo    
##  MEDICINA VETERINÁRIA - D : 60372   Min.   :2002  
##  MEDICINA - D             : 56689   1st Qu.:2008  
##  ENFERMAGEM - D           : 53611   Median :2011  
##  ENGENHARIA CIVIL - D     : 42458   Mean   :2010  
##  ENGENHARIA ELÉTRICA      : 41408   3rd Qu.:2012  
##  CIÊNCIA DA COMPUTAÇÃO - D: 38246   Max.   :2014  
##  (Other)                  :627745                 
##                                Nome_Disciplina      Creditos    
##  CALCULO DIFERENCIAL E INTEGRAL I      : 14822   Min.   : 0.00  
##  ÁLGEBRA VETORIAL E GEOMETRIA ANALÍTICA: 13091   1st Qu.: 4.00  
##  FÍSICA GERAL I                        :  7620   Median : 4.00  
##  CALCULO DIFERENCIAL E INTEGRAL II     :  7285   Mean   : 3.89  
##  METODOLOGIA CIENTÍFICA                :  7068   3rd Qu.: 4.00  
##  LINGUA PORTUGUESA                     :  6581   Max.   :53.00  
##  (Other)                               :864062                  
##                                             Departamento   
##  UNID. ACAD. DE EDUCAÇÃO                          : 89211  
##  UNID. ACAD. DE DIREITO                           : 73924  
##  UNID. ACAD. DE MEDICINA VETERINÁRIA              : 60320  
##  UNID. ACAD. DE MATEMÁTICA                        : 55618  
##  UNID. ACAD. DE AGRONOMIA E TECNOLOGIA DE ALIMENTO: 38988  
##  UNID. ACAD. DE SISTEMAS E COMPUTAÇÃO             : 36013  
##  (Other)                                          :566455  
##  Media_Disciplina                Situacao          Centro     
##  Min.   : 0.000   Aprovado           :751010   Min.   :11.00  
##  1st Qu.: 6.000   Reprovado          : 74289   1st Qu.:13.00  
##  Median : 7.600   Reprovado por Falta: 69216   Median :21.00  
##  Mean   : 6.789   Trancado           : 26014   Mean   :28.34  
##  3rd Qu.: 8.500                                3rd Qu.:41.00  
##  Max.   :10.000                                Max.   :91.00  
##  NA's   :26042                                                
##      Campus      Creditos_Curso           Tipo        Periodo_Ingresso
##  Min.   :1.000   Min.   :120.0   Obrigatória:828078   Min.   :1995    
##  1st Qu.:1.000   1st Qu.:204.0   Optativa   : 92451   1st Qu.:2007    
##  Median :2.000   Median :240.0                        Median :2009    
##  Mean   :2.641   Mean   :246.6                        Mean   :2009    
##  3rd Qu.:4.000   3rd Qu.:265.0                        3rd Qu.:2011    
##  Max.   :9.000   Max.   :526.0                        Max.   :2014    
##                  NA's   :3332                                         
##  Periodo_Relativo
##  Min.   : 1.000  
##  1st Qu.: 2.000  
##  Median : 4.000  
##  Mean   : 4.231  
##  3rd Qu.: 6.000  
##  Max.   :28.000  
## 

Observando esses dados podemos identificar algumas situações em que devemos ter cuidado:

Parte 1

“Em quais cursos estão as melhores e piores notas? Por que você acha que isso acontece em cada caso?”

Primeiramente, é válido dizer que nesta análise cada curso foi identificado por seu Cod_Curso, o motivo para isso já foi explicado na sessão anterior. Utilizando essa abordagem temos 95 cursos possíveis.

Seguindo com a análise, há varios modos de buscarmos essa resposta nos dados, algumas delas:

  1. Uma delas seria utilizar apenas a mediana, porém não acho que essa solução seja a mais adequada, pois se, por exemplo, num curso X as notas são [1, 2, 2, 2, 9, 10, 10] a mediana é 2, porém esse valor não representa bem a realidade. No entanto, Utilizando um Box Plot teremos mais informações a respeito da dispersão das notas de cada curso e assim um resultado mais próximo da realidade que pode ser considerado portanto mais representativo.

  2. Utilizando o mesmo exemplo do quesito anterior e calculando a média aparada (10%) e desvio padrão, teríamos que a média é ~5.143 e desvio padrão ~4.26. Assim sabemos que o curso X tem média aproximadamente 5, porém os dados são bastante variados. Para os dados desse exercício, é possível que encontremos desvios padrões muito grandes devido aos desistentes e reprovados que serão outliers e puxarão a média para baixo e aumentarão o desvio padrão, porém ainda sim acredito que seja possível chegar a resultados interessantes com essa abordagem ao utilizar a média aparada.

  3. Outra forma seria definir o que faz uma nota ser considerada alta e baixa (exemplo: [8,10] são consideradas notas altas, e [0,4] notas baixas), e verificar quais cursos tem a maior porcentagem de notas localizadas nessa “região” de notas altas e baixas. O problema dessa abordagem é que dados são perdidos, por exemplo se uma disciplina tem vários 7.9, essa observação não será considerada nota alta, apesar de estar bem perto do intervalo considerado como “nota alta”.

Assim, de acordo com o que foi dito acima, escolhi utilizar as análises 1. e 2. e verificar os resultados e chegar a uma conclusão.

Utilizando o Box Plot

Vamos ordenar os cursos pela mediana da variável Media_Disciplina, “plotar” o Box Plot de todos dados e considerar os 10 primeiros valores (menores medianas) e 10 últimos (maiores medianas) para nossa análise.

Plotando Box Plot

# Ordenar por Mediana para um gráfico mais visual 
dados_mediana_curso_graf <- dados_alunos_ufcg %>%
  group_by(Cod_Curso) %>%
  mutate(Mediana_Curso = median(Media_Disciplina, na.rm = T))

dados_mediana_curso_graf <- dados_mediana_curso_graf[order(dados_mediana_curso_graf$Mediana_Curso),]

# Gráfico Ordenado por Mediana
ggplot(dados_mediana_curso_graf, aes(x = factor(reorder(Cod_Curso, Mediana_Curso, na.rm = T)), y = Media_Disciplina), na.rm = T) + geom_boxplot(alpha=1/8, na.rm = T) +
  theme(axis.text.x=element_blank(),
        axis.ticks.x=element_blank()) + xlab("Cursos") + ylab("Distribuição das Médias")

Selecionando os 10 Cursos com Maiores e Menores Medianas

# Agrupar e Ordenar por Mediana
dados_mediana_curso <- aggregate(x = dados_alunos_ufcg$Media_Disciplina, by=list(Cod_Curso = factor(dados_alunos_ufcg$Cod_Curso), Nome_Curso = dados_alunos_ufcg$Nome_Curso, Campus = dados_alunos_ufcg$Campus), FUN=median, na.rm=TRUE)

# Renomeando de x para Mediana_Curso
colnames(dados_mediana_curso)[4] <- "Mediana_Curso"

# Ordenação
dados_mediana_curso <- dados_mediana_curso[order(dados_mediana_curso$Mediana_Curso),]

# 10 Maiores e Menores Medianas
menores_10_medianas_curso = dados_mediana_curso[1:10,] 
maiores_10_medianas_curso = dados_mediana_curso[95:86,] 

# Filtrando dados
dados_maiores_10_medianas_curso = na.omit(subset(dados_alunos_ufcg, Cod_Curso %in% maiores_10_medianas_curso[,1])) 
dados_menores_10_medianas_curso = na.omit(subset(dados_alunos_ufcg, Cod_Curso %in% menores_10_medianas_curso[,1]))

# Gerando nova coluna que diferencia disciplinas com mesmo nome porém
# de campus diferentes
dados_maiores_10_medianas_curso$Nome_Curso_Campus <- paste(dados_maiores_10_medianas_curso$Nome_Curso, dados_maiores_10_medianas_curso$Campus, sep=": ")

dados_menores_10_medianas_curso$Nome_Curso_Campus <- paste(dados_menores_10_medianas_curso$Nome_Curso, dados_menores_10_medianas_curso$Campus, sep=": ")

plot_10_maiores_medianas <- ggplot(dados_maiores_10_medianas_curso, aes(x = reorder(Cod_Curso,Media_Disciplina, FUN="median"), y = Media_Disciplina, fill = Nome_Curso_Campus)) + geom_boxplot() + xlab("Código do Curso") + ylab("Distribuição das Médias")  +
  labs(fill = "Nome do Curso : Campus") + theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  ggtitle("10 Cursos com Maiores Medianas")
 
plot_10_maiores_medianas

plot_10_menores_medianas <- ggplot(dados_menores_10_medianas_curso, aes(x = reorder(Cod_Curso, Media_Disciplina, FUN="median"), y = Media_Disciplina, fill = Nome_Curso_Campus)) + geom_boxplot() + xlab("Código do Curso") + ylab("Distribuição das Médias")  +
  labs(fill = "Nome do Curso : Campus") + theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  ggtitle("10 Cursos com Menores Medianas")

plot_10_menores_medianas

Utilizando Média Aparada e Desvio Padrão

Vamos utilizar o mesmo procedimento do Box Plot: visualizar os dados dos cursos como um todo e depois selecionar os cursos com 10 maiores e menores médias.

Gerando gráfico da Média Aparada e Desvio Padrão

# Agrupar e Ordenar por Média aparada e Desvio padrão para gráfico mais visual
dados_media_desvio_curso <- group_by(dados_alunos_ufcg, Cod_Curso, Campus, Nome_Curso)

dados_media_desvio_curso <- summarise(dados_media_desvio_curso, 
                                      Media_Curso = mean(Media_Disciplina,trim=0.10, na.rm= T),
                                      Desvio_Curso = sd(Media_Disciplina, na.rm = T))
 
dados_media_desvio_curso <- dados_media_desvio_curso[order(dados_media_desvio_curso$Media_Curso),]

# Gerando nova coluna que diferencia disciplinas com mesmo nome porém
# de campus diferentes
dados_media_desvio_curso$Nome_Curso_Campus <- paste(dados_media_desvio_curso$Nome_Curso, dados_media_desvio_curso$Campus, sep=": ")

# Gráfico - Todos Ordenados
ggplot() +
  
  geom_point(data = dados_media_desvio_curso, aes(x = factor(reorder(Cod_Curso, Media_Curso)), y = Media_Curso),
  size = 2) +
  
  geom_errorbar(data = dados_media_desvio_curso, aes(x = factor(Cod_Curso), ymin =
  Media_Curso - Desvio_Curso, ymax = Media_Curso + Desvio_Curso),
  colour = 'blue', width = 0.4) +
  
  theme(axis.text.x=element_blank(),
        axis.ticks.x=element_blank()) + xlab("Cursos") + ylab("Média") +
  ggtitle("Cursos Ordenados por Média Aparada")

Selecionando os 10 Cursos com Maiores e Menores Médias

# Agrupar e Ordenar por Média aparada
dados_media_curso <- aggregate(x = dados_alunos_ufcg$Media_Disciplina, by=list(Cod_Curso = factor(dados_alunos_ufcg$Cod_Curso), Nome_Curso = dados_alunos_ufcg$Nome_Curso), FUN=function(x) mean(x, trim = 0.10, na.rm = T))

dados_media_curso <- dados_media_curso[order(dados_media_curso$x),]

# 10 maiores e menores Médias
dados_10_menores_medias <- dados_media_desvio_curso[1:10,]
dados_10_maiores_medias <- dados_media_desvio_curso[95:86,]

# Gráfico - 10 Maiores Médias Ordenadas
ggplot() +
  geom_point(data = dados_10_maiores_medias, aes(x = factor(reorder(Nome_Curso_Campus, Media_Curso)), y = Media_Curso), size = 2) +
  
  geom_errorbar(data = dados_10_maiores_medias, aes(x = factor(reorder(Nome_Curso_Campus, Media_Curso)), ymin  = Media_Curso - Desvio_Curso, ymax = Media_Curso + Desvio_Curso), width = 0.4) + xlab("Nome do Curso : Campus") + ylab("Média") + coord_flip() + ggtitle("10 Maiores Médias Ordenadas")

# Gráfico - 10 Menores Médias Ordenadas
ggplot() +
  geom_point(data = dados_10_menores_medias, aes(x = factor(reorder(Nome_Curso_Campus, -Media_Curso)), y = Media_Curso), size = 2) +
  
  geom_errorbar(data = dados_10_menores_medias, aes(x = factor(reorder(Nome_Curso_Campus, -Media_Curso)), ymin  = Media_Curso - Desvio_Curso, ymax = Media_Curso + Desvio_Curso), width = 0.4) + xlab("Nome do Curso : Campus") + ylab("Média") + coord_flip() + ggtitle("10 Menores Médias Ordenadas")

Conclusão

Cursos com 10 Menores Notas

menores_10_medianas_curso
##    Cod_Curso                  Nome_Curso Campus Mediana_Curso
## 28  11105110            FÍSICA (LIC) - D      1           0.7
## 16  15125100 ENGENHARIA DE ALIMENTOS - D      1           3.9
## 24  11134100             ESTATÍSTICA - D      1           4.2
## 51  21105210            FÍSICA (LIC) - N      2           5.0
## 80  51105210            FÍSICA (LIC) - N      5           5.0
## 27  11105150            FÍSICA (BAC) - D      1           5.1
## 43  15108100            METEOROLOGIA - D      1           5.2
## 26  13314210         FILOSOFIA (LIC) - N      1           5.4
## 25  13314250         FILOSOFIA (BAC) - N      1           6.0
## 41  11107210        MATEMÁTICA (LIC) - N      1           6.3
dados_10_menores_medias
## Source: local data frame [10 x 6]
## Groups: Cod_Curso, Campus [10]
## 
##    Cod_Curso Campus                  Nome_Curso Media_Curso Desvio_Curso
##        <int>  <int>                      <fctr>       <dbl>        <dbl>
## 1   11105110      1            FÍSICA (LIC) - D    2.361673     3.277094
## 2   15125100      1 ENGENHARIA DE ALIMENTOS - D    3.795978     3.114403
## 3   11134100      1             ESTATÍSTICA - D    3.879579     3.527961
## 4   51105210      5            FÍSICA (LIC) - N    4.169588     3.688588
## 5   21105210      2            FÍSICA (LIC) - N    4.314537     3.319036
## 6   11105150      1            FÍSICA (BAC) - D    4.391892     3.347933
## 7   15108100      1            METEOROLOGIA - D    4.505206     3.596768
## 8   13314210      1         FILOSOFIA (LIC) - N    4.779648     3.220512
## 9   11107210      1        MATEMÁTICA (LIC) - N    5.180718     3.389617
## 10  51107210      5        MATEMÁTICA (LIC) - N    5.279742     3.629887
## # ... with 1 more variables: Nome_Curso_Campus <chr>

Em relação aos cursos de menores notas: ambas análises obtiveram resultados similares, concordando por exemplo que Física (Código: 11105110) se destaca apresentando tanto média quanto mediana bem baixas, no entanto apresenta desvio padrão bem alto, o Blox Plot mostra uma grande dispersão dessas notas acima da mediana com poucos (ou nenhum) outliers. Devido ao baixo número de outliers a média deve representar bem os dados.

Os demais cursos seguem este mesmo resultado: poucos outliers, dados muito dispersos, e ambas as análises concordaram em geral a respeito de quais são as 10 cursos com menores notas, havendo apenas algumas trocas de posição no ranking, e uma troca de disciplina presente no ranking.

Assim, podemos perceber que alguns dos cursos com menores notas em geral são popularmente conhecidos pelo pequeno número de alunos e dificuldade do curso, como é o caso de Física e Matemática que aparece várias vezes no ranking mesmo em diferentes campus e turnos. Outras aparições foram mais surpreendentes como por exemplo Engenharia de Alimentos, que tem tanto a segunda menor mediana quanto a segunda menor média. Algumas possibilidades do que poderia diminuir a mediana ou média dos cursos são: grande número de desistência (a nota do aluno fica como 0 no sistema), uma amostra indevida dos alunos (escolheu muitos alunos desistentes ou com notas muito baixas). Mas suposições desse tipo necessitariam mais estudos e análises para serem comprovadas.

maiores_10_medianas_curso
##    Cod_Curso                           Nome_Curso Campus Mediana_Curso
## 66  31350100                          DIREITO - M      3           8.6
## 68  31350300                          DIREITO - V      3           8.5
## 60  21205100                         MEDICINA - D      2           8.5
## 48  12208200                       PSICOLOGIA - N      1           8.5
## 44  13311150                     MÚSICA (BAC) - D      1           8.5
## 50  21204100                       ENFERMAGEM - D      2           8.4
## 69  31340100                   SERVIÇO SOCIAL - M      3           8.3
## 67  31350200                          DIREITO - N      3           8.3
## 57  21310110 LETRAS - LÍNGUA PORTUGUESA (LIC) - M      2           8.3
## 61  21312110         PEDAGOGIA (LICENCIATURA) - M      2           8.2
dados_10_maiores_medias
## Source: local data frame [10 x 6]
## Groups: Cod_Curso, Campus [10]
## 
##    Cod_Curso Campus                           Nome_Curso Media_Curso
##        <int>  <int>                               <fctr>       <dbl>
## 1   31350100      3                          DIREITO - M    8.533155
## 2   31350300      3                          DIREITO - V    8.515662
## 3   21205100      2                         MEDICINA - D    8.496193
## 4   13311150      1                     MÚSICA (BAC) - D    8.492349
## 5   12208200      1                       PSICOLOGIA - N    8.391074
## 6   31350200      3                          DIREITO - N    8.347820
## 7   21204100      2                       ENFERMAGEM - D    8.323356
## 8   31340100      3                   SERVIÇO SOCIAL - M    8.249038
## 9   21310110      2 LETRAS - LÍNGUA PORTUGUESA (LIC) - M    8.188319
## 10  12205100      1                         MEDICINA - D    8.168864
## # ... with 2 more variables: Desvio_Curso <dbl>, Nome_Curso_Campus <chr>

Os cursos de maiores notas apresentaram menor desvio padrão e mais outliers, devido ao grande número de outliers abaixo do resultado as médias devem estar um pouco a baixo das medianas, e as medianas devem ser mais confiáveis. Apesar disso os resultados são bem similares, havendo apenas alguns “desacordos” entre os rankings em relação a posição dos cursos. E devido à baixa dispersão dos dados podemos “falar com mais propriedade” sobre os resultados observados do que em relação às de menores notas que eram bastante dispersas.

Assim, podemos concluir a partir das análises que os cursos que provavelmente tem as maiores notas são: Direito - M do Campus 3, Direito - V do Campus 3 e Medicida - D do Campus 2. Além disso os cursos dos rankings são em sua maioria da área de saúde e humanas e algumas possibilidades para as notas serem tão altas são: baixo número de desistência, uma amostra indevida dos alunos (escolheu muitos alunos com boas notas), amostra de alunos muito pequena, ou simplesmente os alunos realmente apresentam um bom rendimento nesses cursos.

Obs: no Box Plot essa quantidade grande de 0’s devem ser consequência de várias reprovações por falta, ou desistências que estão presentes nos dados e não foram retirados para manter a consistência nos dados.

Parte 2

“Em qual período estão as melhores e piores notas do curso de Ciência da Computação?”

Nesta análise é considerado que a questão pede o período (2002.1, 2002.2, …) em que as disciplinas cursadas tiveram melhores notas e o período em que as disciplinas cursadas tiveram as menores notas.

Para esta análise foi utilizada a variável Cod_Curso para filtrar os dados pertencentes a Computação, em seguida os dados foram agrupados por Periodo e foi analisada a variável Media_Disciplina através de um Box Plot, perceba que estamos na mesma situação da Parte 1 e outras técnicas poderiam ter sido utilizadas. Assim, também analisei a partir da Média Aparada e Desvio Padrão para obter mais resultados (a variável Periodo representa o Período em as disciplinas foram cursadas).

# Filtro dos Dados de CC
COD_CC = 14102100
dados_alunos_cc <- subset(dados_alunos_ufcg, Cod_Curso == COD_CC, na.rm = T)

# Agrupa por Período e Calcula Média e Desvio
dados_media_cc <- group_by(dados_alunos_cc, Periodo)
dados_media_cc <- summarise(dados_media_cc, 
                            Media_Periodo = mean(Media_Disciplina, trim=0.1, na.rm = T),
                            Desvio_Periodo = sd(Media_Disciplina, na.rm = T))

# Ordena dados pela Média
dados_media_cc <- dados_media_cc[order(dados_media_cc$Media_Periodo),]


# Box Plot 
dados_mediana_cc <- group_by(dados_alunos_cc, Periodo)
dados_mediana_cc <- summarise(dados_mediana_cc, 
                            Mediana_Periodo = median(Media_Disciplina, na.rm = T))

ggplot(dados_alunos_cc, aes(factor(Periodo), Media_Disciplina, na.rm = T))  + geom_boxplot(alpha=1/4, na.rm = T) + xlab("Período") + ylab("Distribuição das Notas em relação à Mediana") + theme(axis.text.x = element_text(angle = 90, hjust = 1))

# Médias e Desvio Padrão
ggplot() +
  geom_point(data = dados_media_cc, aes(x = factor(Periodo), y =
  Media_Periodo), size = 2) +
  
  geom_errorbar(data = dados_media_cc, aes(x = factor(Periodo), 
  ymin = Media_Periodo - Desvio_Periodo, ymax = Media_Periodo + Desvio_Periodo),
  colour = 'blue', width = 0.4) + xlab("Período") + 
  ylab("Média") + theme(axis.text.x = element_text(angle = 90, hjust = 1))

Conclusão

Ambas as análises indicam que o Período 2002.1 apresenta as maiores médias (Média: 8.1, Desvio Padrão: 2.1, Mediana: 8.2), além disso contém poucos outliers e desvio padrão consideravelmente abaixo dos demais, de forma que assim temos mais confiança no nosso resultado.

Já o Período de menores médias é mais difícil de afirmar com precisão, porém de todos os anos o que apresentou tanto menor média quanto menor mediana foi o ano de 2014.1 (Média: 5.84, Desvio Padrão: 3.19, Mediana: 7.0) e segundo o Box Plot também vemos uma grande concentração de notas abaixo da mediana. Ainda segundo as análises os últimos anos (2009.2 - 2014.1) vem tendo as menores médias com mediana em torno de ~7 e a média entre [6, 7] com grande desvio padrão, e poucos outliers.

Parte 3

“Existe correlação entre as notas de Matemática Discreta e Cáclulo I para o curso de Ciência da Computação? Se sim, a correlação é positiva ou negativa? Qual a força dessa correlação? (Dica: cada par ordenada de notas (x,y) onde x é a nota de Cálculo I e y de Matemática Discreta corresponde a um aluno que cursou as duas disciplinas).”

Essa atividade é mais direta, vamos calcular a correlação entre as notas das disciplinas indicadas e “plotar” um Scatter Plot para visualizar melhor como as variáveis estão distribuídas no plano.

Algumas questões para ter cuidado são:

# Seleciona-se os alunos de Discreta e Calculo
COD_DISCRETA = 1109113
COD_CALCULO = 1109103

discreta = subset(dados_alunos_cc, Cod_Disciplina == COD_DISCRETA)
calculo = subset(dados_alunos_cc, Cod_Disciplina == COD_CALCULO)

# Agrupa-se os dados e escolhe-se apenas a última nota como representante do
# desempenho desse aluno
discreta = discreta %>% group_by(Matricula) %>% top_n(1, Media_Disciplina)
calculo = calculo %>% group_by(Matricula) %>% top_n(1, Media_Disciplina)

# Retiramos colunas desnecessárias
discreta = subset(discreta, select = c("Matricula", "Media_Disciplina"))
calculo = subset(calculo, select = c("Matricula", "Media_Disciplina"))

# Fazemos o Merge entre os data-frames
discreta_e_calculo = merge(calculo, discreta, by.x = "Matricula", by.y = "Matricula", na.rm = T)

# Gráfico Scatter Plot do resultado
ggplot(discreta_e_calculo, aes(Media_Disciplina.x, Media_Disciplina.y)) + geom_point(shape=19,   alpha=1/4) + xlab("Média em Discreta") + ylab("Média em Cálculo")

Conclusão

De acordo com o Scatter Plot visualizamos uma aparente correlação positiva, consideravelmente forte (> 0.5).

E de fato se calcularmos a correlação entre as médias das disciplinas, temos:

  cor(discreta_e_calculo$Media_Disciplina.x, discreta_e_calculo$Media_Disciplina.y)
## [1] 0.6927944

Portanto a correlação é forte e positiva, já que a correlação é maior que 0 e próxima de 0.7 que é um valor positivo e consideravelmente próximo de 1.