Construir tabelas de selecionados por disciplinas.txt 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # -*- mode: org; org-confirm-babel-evaluate: nil; -*-
  2. # Construir tabelas de selecionados por disciplinas: para cada matéria no dia especificado, ordena e lista os acadêmicos.
  3. # Copyright (c) 2018 Adonay Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno>
  4. # This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation, version 3 of the License.
  7. # This program is distributed in the hope that it will be useful, but
  8. # WITHOUT ANY WARRANTY; without even the implied warranty of
  9. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  10. # General Public License for more details.
  11. # You should have received a copy of the GNU General Public License
  12. # along with this program. If not, see
  13. # <https://www.gnu.org/licenses/>.
  14. # Comentário:
  15. # Para editar este documento não é necessário ferramenta especial.
  16. # Porém, para exportá-lo, é necessário um conversor que entenda
  17. # marcações em modo Org, como é o caso do editor de textos GNU Emacs.
  18. # Além disso, para a exportação, assume-se que se pretende fazer um
  19. # .txt e que sua cópia do GNU Emacs reconhece a existência de uma
  20. # cópia do GNU R através do modo ESS, do modo Org (org-mode), e dos
  21. # pacotes Org Babel (ob), Org Babel Emacs Lisp (ob-emacs-lisp), Org
  22. # Babel R (ob-R), todos os quais são componentes padrão no GNU Emacs,
  23. # exceto o GNU R. Consulte a documentação do Org Babel para
  24. # saber como habilitar a interpretação da linguagem R no GNU Emacs.
  25. #+LANGUAGE: pt-BR
  26. # Retira informações para economizar espaço.
  27. #+OPTIONS: author:nil date:nil title:nil toc:nil
  28. # Lê o arquivo contendo a lista de acadêmicos sorteados. Mantém a
  29. # sessão do GNU R aberta.
  30. #+BEGIN_SRC R :exports none :session
  31. academicos <- read.csv("Academicos.csv",
  32. check.names = FALSE,
  33. na.strings = "")
  34. #+END_SRC
  35. # Retorna as disciplinas do dia informado, ou do atual, às quais os
  36. # acadêmicos sorteados estão frequentando. Usa-se da sessão já aberta.
  37. #+NAME: disciplinas
  38. #+BEGIN_SRC R :exports none :results list :session :var dia=""
  39. if(! isTRUE(which(dia == c("segunda", "terça", "quarta", "quinta", "sexta")) > 0)) {
  40. dia <- weekdays(as.Date(Sys.Date()))}
  41. levels(factor(academicos[! is.na(academicos$"Situação na pesquisa") & academicos$"Situação na pesquisa" == "Selecionado",
  42. dia]))
  43. #+END_SRC
  44. # Para cada disciplina, escreve um "invocador" responsável por usar a
  45. # sessão do GNU R já aberta e retornar uma tabela com o nome dos
  46. # acadêmicos que frequentam cada disciplina.
  47. #+NAME: preparar-tabelas
  48. #+BEGIN_SRC emacs-lisp :exports results :results raw :var disciplinas=disciplinas
  49. (mapconcat (lambda (x)
  50. (concat "#+NAME: tabela-"
  51. (replace-regexp-in-string "[^[:alnum:]]" "-" x)
  52. "\n"
  53. "#+BEGIN_SRC R :colnames yes :exports results :session\n"
  54. "tabela <- data.frame(unique(sort(academicos[eval(parse(text=paste('! is.na(academicos$\"Situação na pesquisa\") & academicos$\"Situação na pesquisa\" == \"Selecionado\" & ! is.na(academicos$\"', dia, '\") & academicos$\"', dia, '\" == \""
  55. x
  56. "\"', sep=\"\"))), \"Nome\"])))\n"
  57. "colnames(tabela) <- c(\""
  58. x
  59. "\")\n"
  60. "tabela\n"
  61. "#+END_SRC\n\n"
  62. "#+RESULTS: tabela-"
  63. (replace-regexp-in-string "[^[:alnum:]]" "-" x)))
  64. (mapcar 'car disciplinas)
  65. "\n\n")
  66. #+END_SRC