diff --git a/notas.Rmd b/notas.Rmd index dc4a5fa2ab0b0c81ac3eda197ed7697f06630ff0..fb9f700f184ecbbd423f3cf9fe663c2f98446ea8 100644 --- a/notas.Rmd +++ b/notas.Rmd @@ -10,23 +10,24 @@ output: # Pacotes. rm(list = objects()) -library(gdata) +# library(gdata) library(tidyverse) #----------------------------------------------------------------------- # MatrÃcula. path <- "/home/walmes/Dropbox/Ensino/ce089-2018-02/" -x <- read.xls(paste0(path, "RelatoriodeDiariodeClasseExcel.xls"), - encoding = "latin1", - stringsAsFactors = FALSE, - skip = 6) +x <- gdata::read.xls(paste0(path, "RelatoriodeDiariodeClasseExcel.xls"), + encoding = "latin1", + stringsAsFactors = FALSE, + skip = 6) +v <- names(x) %in% c("MatrÃcula", "Nome", "Faltas") mat <- x %>% - select(c("MatrÃcula", "Nome")) %>% + select(names(x)[v]) %>% filter(grepl("\\d$", MatrÃcula)) %>% as_tibble() %>% - setNames(c("GRR", "nome")) %>% + rename("GRR" = "MatrÃcula", "nome" = "Nome") %>% mutate(GRR = str_replace(GRR, "\\D+", "") %>% as.integer()) str(mat) @@ -42,7 +43,7 @@ str(nt) # Seleção de variáveis. nt <- nt %>% select(`Data e hora`:`Nota revisada`) -str(nt, give.attr = FALSE) +str(nt) # Renomeia variáveis. names(nt) <- c("ts", "nome", "email", "item", "orig", "revis") @@ -51,9 +52,9 @@ names(nt) <- c("ts", "nome", "email", "item", "orig", "revis") nt <- nt %>% filter(grepl("^Sabatina", item), !grepl("walmes", nome, ignore.case = TRUE)) -str(nt, give.attr = FALSE) +str(nt) -# Cria a estampa de tempo para ordenação. +# Cria a estampa de tempo para ordenação cronológica dos registros. ts_fmt <- "%A, %d %b %Y, %H:%M" nt$ts <- as.POSIXct(nt$ts, format = ts_fmt) @@ -61,20 +62,20 @@ nt$ts <- as.POSIXct(nt$ts, format = ts_fmt) nt <- nt %>% arrange(nome, item, ts) -# Agrupa pegando o último registro por avaliação. +# Agrupa pegando o último registro por sabatina. ntg <- nt %>% group_by(nome, item) %>% summarise(nota = last(revis)) %>% ungroup() str(ntg) -# Para verificar a escala de variação das notas. +# Para verificar a amplitude de escala das notas. # ntg %>% # group_by(item) %>% # summarise(min = min(nota, na.rm = TRUE), # max = max(nota, na.rm = TRUE)) -# Cria a variável indentificadora da sabatina ao separar texto. +# Quebra texto em duas variáveis para ter sabatina e questão. ntg <- ntg %>% separate(col = "item", into = c("S", "Q"), @@ -82,7 +83,7 @@ ntg <- ntg %>% str(ntg) # Passa notas para escala 0 - 100. -ntg$nota <- ifelse(ntg$S == "Sabatina 10", yes = 100, no = 10) * ntg$nota +ntg$nota <- ntg$nota * 10 # Calcula a média por sabatina e converte NA/NaN para 0. ntg <- ntg %>% @@ -159,20 +160,14 @@ nts <- nts %>% #----------------------------------------------------------------------- # Tabela em HTML. -# nt$Nome <- paste( -# sub(pattern = "^(\\w+) .*$", -# replacement = "\\1", -# x = nt$Nome), -# sub(pattern = "^\\w.* (\\w+)$", -# replacement = "\\1", -# x = nt$Nome)) - library(DT) -cap <- - "Notas nas avaliações (S: sabatina) ordenadas pelo GRR. Valores entre 0 e 100.*" +cap <- "Notas nas avaliações (S: sabatina) ordenadas pelo GRR. Valores entre 0 e 100." +if (require(htmltools)) { + cap <- HTML("<strong>Tabela 1</strong>:", cap) +} -dt <- datatable(data = select(nts, "GRR", contains("S")), +dt <- datatable(data = select(nts, "GRR", contains("S"), contains("Faltas")), filter = "top", caption = cap, rownames = FALSE, @@ -183,7 +178,6 @@ dt <- datatable(data = select(nts, "GRR", contains("S")), paging = FALSE, pageLength = NULL, lengthMenu = NULL)) -# str(dt$x$data) dt <- formatStyle(table = dt, columns = grepl("^S", names(dt$x$data)), @@ -193,6 +187,14 @@ dt <- formatStyle(table = dt, "gray", "#3333ff"))) +if (is.element("Faltas", names(dt$x$data))) { + dt <- formatStyle(table = dt, + columns = "Faltas", + color = styleInterval(cuts = c(15), + values = c("#3333ff", + "#ff3300"))) +} + dt ``` @@ -200,7 +202,7 @@ dt #----------------------------------------------------------------------- # Visualização. -cap <- "Escore final das sabatinas em função do GRR. Cores indicam grupos conforme corte do escore classes." +cap <- "**Figura 1**: Escore final das sabatinas em função do GRR. Cores indicam grupos conforme corte do escore classes." # # Acumulada empÃrica. # ggplot(nts, aes(x = S_escore)) + @@ -226,7 +228,22 @@ ggplot(data = nts, xlim(0, 100) ``` -```{r, eval = FALSE, echo = FALSE, results = "hide", fig.cap = cap} +```{r, echo = FALSE, fig.cap = cap, message = FALSE, warning = FALSE, results = "hide"} +ggplot(data = nts, + mapping = aes(y = S_escore, + x = Faltas)) + + geom_jitter(height = 0, width = 0.5) + + geom_smooth(se = FALSE, span = 0.8, color = "gray50") + +# Correlação de Spearman. +x <- with(nts, cor.test(x = S_escore, y = Faltas, method = "spearman")) +x$p.value + +cap <- "**Figura 2**: Diagrama de dispersão relacionando o escore final nas sabatinas e o número de faltas (Spearman, rho = %0.2f, valor p = %0.3g)." +cap <- sprintf(cap, x$estimate, x$p.value) +``` + +```{r, echo = FALSE, results = "hide", fig.cap = cap} #----------------------------------------------------------------------- # Análise multivariada das notas. @@ -249,7 +266,7 @@ pca$loadings #-------------------------------------------- # Agrupamento hierárquico. -cap <- "Agrupamento hierárquico dos GRR baseado nas distâncias entre os vetores de notas das sabatinas." +cap <- "**Figura 3**: Agrupamento hierárquico dos GRR baseado nas distâncias entre os vetores de notas das sabatinas." d <- dist(X) hc <- hclust(d = d) @@ -264,7 +281,7 @@ plot(hc, ``` ```{r, eval = FALSE, echo = FALSE, results = "asis"} -x <- knitr::kable(subset(nt, select = v), +x <- knitr::kable(nt, caption = cap, row.names = FALSE, na.string = "",