123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- ## Gerar agregações: Cria agregações e representações gráficas com base nos dados da pesquisa
- ## Copyright (c) 2017, 2018 Adonay Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno>
- ## This program is free software: you can redistribute it and/or
- ## modify it under the terms of the GNU General Public License as
- ## published by the Free Software Foundation, version 3 of the
- ## License.
- ## This program is distributed in the hope that it will be useful, but
- ## WITHOUT ANY WARRANTY; without even the implied warranty of
- ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ## General Public License for more details.
- ## You should have received a copy of the GNU General Public License
- ## along with this program. If not, see
- ## <https://www.gnu.org/licenses/>.
- ## Trata de grandes tabela de forma aprimorada.
- library(data.table)
- ## Ferramentas relacionadas à imputação e verificação de valores
- ## nulos.
- library(mice)
- library(VIM)
- ## Carrega os dados.
- dados <- read.csv("Dados.csv",
- check.names = FALSE,
- na.strings = "")
- dados <- data.table(dados)
- ## Parte a dimensão "e".
- outras_caracteristicas <-
- na.omit(unique(unlist(strsplit(as.character(dados[, e]),
- ","))))
- ## Parte as notas (para outras coisas além de "e").
- notas <- c()
- for (elemento in
- strsplit(na.omit(unique(unlist(strsplit(as.character(dados[, Notas]),
- ",")))),
- ": ")) {
- if (length(elemento) > 1) {
- notas <- append(notas,
- elemento[[1]])}
- else {
- notas <- append(notas,
- elemento)}}
- notas <- unique(notas)
- ## Não mencionar outras características ou notas não anula a questão,
- ## por isso usamos 0 ao invés de NA.
- dados[, (outras_caracteristicas) := 0]
- dados[, (notas) := as.character(0)]
- ## Para cada menção destas, cria uma coluna e para cada respondente
- ## atribui o número 1 em tal coluna.
- for (caracteristica in outras_caracteristicas) {
- dados[grep(caracteristica,
- dados[, e]), (caracteristica) := 1]}
- for (nota in notas) {
- linhas <- grep(nota,
- dados[, Notas])
- for (linha in linhas) {
- primeira_ocorrencia <-
- unlist(strsplit(grep(nota,
- unlist(strsplit(as.character(dados[linha,
- Notas]),
- ",")),
- value = TRUE)[[1]],
- ": "))
- if (length(primeira_ocorrencia) > 1) {
- dados[linha, (nota) :=
- paste(toupper(substr(primeira_ocorrencia[[2]],
- 1,
- 1)),
- substring(primeira_ocorrencia[[2]],
- 2),
- sep = "")]}
- else {
- dados[linha, (nota) :=
- primeira_ocorrencia]}}}
- ## Prepara as colunas com comparações aprimoradas. O valor NA em
- ## alguma delas denota que pelo menos uma das variáveis em comparação
- ## estava nula.
- combinacoes <- t(combn(rep(c(0,
- 1),
- 4),
- 4))
- combinacoes <- combinacoes[which(apply(combinacoes,
- 1,
- function(x) {
- !(list(x) %in%
- list(c(1,1,1,1)))})), ]
- combinacoes <- lapply(seq_len(nrow(combinacoes)),
- function(i) combinacoes[i, ])
- dimensoes <- list(list("Definição de programas livres",
- c(letters[1:4]),
- list("Convergente",
- list(c(1,
- 1,
- 1,
- 1))),
- list("Divergente",
- combinacoes)),
- list("Gestão universitária + Ensino-aprendizagem",
- c(letters[6:7]),
- list("Ambos",
- list(c(1,
- 1))),
- list("Gestão",
- list(c(1,
- 0))),
- list("Ensino",
- list(c(0,
- 1))),
- list("Nenhum",
- list(c(0,
- 0)))),
- list("Sustentabilidade + Economia local",
- c(letters[8:9]),
- list("Ambos",
- list(c(1,
- 1))),
- list("Sustentabilidade",
- list(c(1,
- 0))),
- list("Economia",
- list(c(0,
- 1))),
- list("Nenhum",
- list(c(0,
- 0)))),
- list("Competição + Colaboração",
- c(letters[10:11]),
- list("Ambos",
- list(c(1,
- 1))),
- list("Competição",
- list(c(1,
- 0))),
- list("Colaboração",
- list(c(0,
- 1))),
- list("Nenhum",
- list(c(0,
- 0)))),
- list("Compartilhamento digital + TCRSFDD",
- c(letters[12:13]),
- list("Ambos",
- list(c(1,
- 1))),
- list("Compartilhamento",
- list(c(1,
- 0))),
- list("TCRSFDD",
- list(c(0,
- 1))),
- list("Nenhum",
- list(c(0,
- 0)))),
- list("Intenção em contratos",
- c(letters[14:15]),
- list("Competitiva",
- list(c(0,
- 0))),
- list("Igual ao tipo",
- list(c(0,
- 1))),
- list("Inversa ao tipo",
- list(c(1,
- 0))),
- list("Colaborativa",
- list(c(1,
- 1)))))
- for (dimensao in dimensoes) {
- colunas <- dimensao[[2]]
- for (padrao in dimensao[- c(1, 2)]) {
- dados[which(apply(dados[, ..colunas],
- 1,
- function(x) {
- list(c(as.double(x))) %in%
- padrao[[2]]})), (dimensao[[1]]) :=
- padrao[[1]]]}}
- ## Salva cada consulta em seu arquivo específico.
- consultas_e_arquivos <-
- list(list("dados[, c(letters[1:4], letters[6:15]), with = FALSE]",
- "Dados primários.csv"),
- list("md.pattern(as.data.frame(dados)[, c(letters[1:4], letters[6:15])])",
- "Padrão das dimensões com observações de valores nulos.csv"),
- list("dados[, .N, by = c(letters[1:4])]",
- "Agregação a a d.csv"),
- list("dados[, .N, by = c(letters[6:7])]",
- "Agregação f e g.csv"),
- list("dados[, .N, by = c(letters[8:9])]",
- "Agregação h e i.csv"),
- list("dados[, .N, by = c(letters[10:11])]",
- "Agregação j e k.csv"),
- list("dados[, .N, by = c(letters[12:13])]",
- "Agregação l e m.csv"),
- list("dados[, .N, by = c(letters[14:15])]",
- "Agregação n e o.csv"),
- list("dados[, .N, by = c(names(dados)[c(17:(16 + length(outras_caracteristicas)))])]",
- "Agregação dos dados da dimensão e.csv"),
- list("dados[, .N, by = c(grep('^Compartilhamento digital$|^TCRSFDD$', names(dados), value = TRUE))]",
- "Agregação dos dados das notas sobre compartilhamento digital e TCRSFDD.csv"),
- list("dados[, .N, by = c(grep('^Contrato', names(dados), value = TRUE))]",
- "Agregação dos dados das notas sobre intenções de comportamento em contratos.csv"),
- list("dados[, .N, by = c(unlist(lapply(dimensoes, getElement, 1)))]",
- "Agregação aprimorada dos dados.csv"),
- list("dados[, .N, by = c(grep('^Definição', names(dados), value = TRUE), outras_caracteristicas)]",
- "Agregação aprimorada entre a definição de software livre e outras características.csv"),
- list("dados[, .N, by = c(grep('^Definição|^Gestão', names(dados), value = TRUE))]",
- "Agregação aprimorada entre a definição, gestão e ensino.csv"),
- list("dados[, .N, by = c(grep('^Definição|^Sustentabilidade', names(dados), value = TRUE))]",
- "Agregação aprimorada entre a definição, sustentabilidade e economia.csv"),
- list("dados[, .N, by = c(grep('[Cc]ontrato', names(dados), value = TRUE))]",
- "Agregação aprimorada entre as intenções de comportamento e suas notas.csv"))
- for (item_da_lista in consultas_e_arquivos) {
- write.csv(eval(parse(text = item_da_lista[[1]])),
- file = item_da_lista[[2]],
- na = "",
- row.names = FALSE)}
- ## Imprimo o histograma e o padrão em uma imagem .png. Você vai
- ## querer trocar `height' e `width' caso a função reclame de espaço
- ## vertical e horizontal insuficientes, respectivamente.
- png(file = "Histograma e padrão das dimensões com observações de valores nulos.png",
- bg = "transparent",
- family = "NimbusSan",
- height = 1024,
- pointsize = 12 * 90 / 72,
- res = 90,
- width = 768)
- aggr(as.data.frame(dados)[, c(letters[1:4],
- letters[6:15])],
- cex.axis = 0.7,
- labels = names(dados)[c(1:4,
- 6:15)],
- numbers = TRUE,
- sortVars = TRUE,
- ylab = c("Histograma das dimensões com valores nulos",
- "Padrão"))
- dev.off()
- ## Finaliza o arquivo .png.
|