=====TRABALHO FINAL===== ====Help==== Por favor, salve o {{:bie5782:01_curso_atual:alunos:trabalho_final:giulia.bispo:trabalho_final:teste_diagtu.csv|teste}} em sua pasta diretório. diag.tu() package:unknown R Diagnóstico de turmas Descrição: A função diag.tu salva um .csv com as médias, podendo ser média ponderada ou comum; gera e salva gráficos de diagnóstico; lista e salva os nomes de alunos com médias baixas; e pode gerar um teste de ANOVA comparando as médias das turmas. Argumentos: nomes = “character”. Nome da coluna ou vetor que contem o nome dos alunos. notas = “numeric”. Data.frame contendo as colunas de interesse. prof = “character”. Vetor contendo o nome do professor. pesos = “numeric”. Vetor contendo um peso por coluna de notas, referente ao cálculo da média ponterada. Exemplo: “c(peso para prova 1, peso para prova 2 (...))”. Padrão média não-ponderada. corte = “numeric”. Valor inteiro do corte que a escola considera entre nota azul e vermelha. Ex.: 5. turma = “character”. Nome da coluna ou vetor referente à qual turma pertencem os alunos, na mesma ordem de nomes. Máximo recomendado de 10 turmas. graf = Padrão (b) cria boxplots por turma. Caso (h) substitui pelo histograma por turmas. stt = Argumento por padrão FALSE, caso TRUE faz um teste tipo anova das medias das turma. Uso: diag.tu<-function(nomes, prof, notas, pesos=NULL, corte, turma, graf="b", stt=FALSE) Detalhes: A função faz um breve diagnóstico de turmas, calculando as médias por aluno (ponderada ou não), e gerando gráficos de boxplot ou histogramas, conforme o interesse do educador ou coordenador. A saída apresenta os nomes dos alunos que tiveram notas baixas. A Função oferece também a possibilidade de realizar um teste tipo ANOVA, a fim de detectar diferenças reais entre as turmas. Avisos: Para que os gráficos sejam legíveis, se atenha ao máximo de 10 turmas por vez. É necessário atenção às classes dos argumentos. A função não é capaz de detectar possíveis notas faltantes, por isso é sempre bom averiguar o banco de notas. Autora: Giulia Baldaconi S. Bispo giulia.bispo@usp.br / gi.baldaconi@gmail.com Exemplos: ##CSV## #Médias não ponderadas, gráfico “b” e com teste estatístico. Por favor, salve o teste em sua pasta diretório. teste<-read.csv("teste_diagtu.csv",sep=";", as.is=T) turmas<-teste$Turma nome<-teste$Alunos notas<-data.frame(teste$P1,teste$P2,teste$Seminario,teste$P3) prof<-"Prof.Xis" diag.tu(nomes=nome, prof=prof, notas=notas, corte=6, turma=turmas, stt=T) ##Vetores## #Média ponderada com histograma, de um ano inteiro. grad<-seq(0,10, by=0.25) altas<-seq(6,10, by=0.25) baixas<-seq(0,7, by=0.25) p1<-sample(grad,280,replace=T) p2<-sample(altas,280,replace=T) p3<-sample(grad,280,replace=T) p4<-sample(baixas,280,replace=T) p5<-sample(baixas,280,replace=T) p6<-sample(altas,280,replace=T) p7<-sample(grad,280,replace=T) p8<-sample(altas,280,replace=T) pfinal<-sample(altas,280,replace=T) prec<-sample(altas,280,replace=T) seminar<-sample(altas,280,replace=T) notasano<-data.frame(p1,p2,p3,p4,p5,p6,p7,p8,pfinal,prec,seminar) nomes<-rep("fulano",280) X<-"Prof.Xis" turma<-c(rep("1A",30), rep("1B",20), rep("1C",30), rep("1D", 20), rep("2A",30), rep("2B",30), rep("2C",30), rep("3A",30), rep("3B",30), rep("3C",30)) pesos<-c(1,2,1,2,1,2,1,3,4,1,1) corte<-6 diag.tu(nomes=nomes, prof=X, notas=notasano, corte=6, pesos=pesos, turma=turma, graf="h", stt=F) ====Código diag.tu==== diag.tu <- function(nomes, prof, notas, pesos=NULL, corte, turma, graf="b", stt=FALSE) {#Normalmente escolas tem muitos alunos, então coloquei essa primeira mensagem pra pessoa ler enquanto o R trabalha: cat("\t Bem vindo! Isso pode levar alguns segundos, favor aguarde. É sempre bom verificar se todas as notas foram colocadas em seus devidos lugares, para que ninguem seja prejudicado ;). Caso a funcao de erros relacionados a NAs, verifique seus dados. \n") #Testando as premissas dos argumentos if(missing(nomes)) stop("insira coluna Nomes dos Alunos") # Caso o usuario nao insira $nomes a funcao emite um aviso if(missing(prof)) stop("insira coluna Nome do Professor") # Caso o usuario nao insira o $prof a funcao emite um aviso if(missing(notas)) stop("insira coluna Notas dos Alunos") # Caso o usuario nao insira $$notas, a funcao emite um aviso if(missing(corte)) stop("insira a Nota de Corte") # Caso o usuario nao insira a nota considerada corte na escola, a funcao emite um aviso ### if(class(nomes)!="character") # Caso nomes nao seja da classe correta { stop ("nomes precisa ser character") # A funcao emite um aviso } if(class(prof)!="character") # Caso profs nao seja da classe correta { stop ("prof precisa ser character") # A funcao emite um aviso } if(class(notas)!="data.frame") # Caso notas nao seja DA CLASSE CORRETA { stop ("notas precisa ser um data.frame numerico") # A funcao emite um aviso } if(class(corte)!="numeric") # Caso a nota de corte nao seja DA CLASSE CORRETA { stop ("o corte precisa ser numerico") # A funcao emite um aviso } ### Calculo das medias if(is.null(pesos)) #pesos tem padrão NULL, na ausencia deles, faz media comum: { medias<-apply(notas,1,mean) #fazendo a media simples } if(length(pesos) != 0) #caso pesos exista, ele calcula a media ponderada, mas antes testa algumas premissas: { if(class(pesos)!="numeric") # Caso os pesos nao sejam DA CLASSE CORRETA { stop ("pesos precisam ser numericos") # A funcao emite um aviso } if(dim(notas)[2]!= length(pesos)) # Caso o numero de colunas de notas seja diferente do n de pesos { stop("Insira pesos para todas as notas, em igual ordem") # A funcao emite um aviso solicitando a correcao } else{} #premissas cumpridas! segue normalmente medias<-rep(NA, nrow(notas)) #abrindo um vetor vazio para guardar os resultados do for de i umporum<-matrix(ncol=ncol(notas), nrow=nrow(notas)) #matriz vazia pra resultados do for de j por linha for(i in 1:(length(medias))) { for(j in 1:nrow(notas)) #multiplicara as notas pelos pesos delas { for (m in 1:ncol(notas)) #abre for para a dimensao m da matriz por linha { umporum[j,m]<-pesos[m]*notas[j,m] #e guarda aqui } } denominador<-sum(pesos) #soma os pesos medias[i]<-(sum(umporum[i,]))/denominador #calcula e guarda as medias ponderadas por aluno } } DIAG_tu<-data.frame(nomes,turma,medias) #criando o data.frame de output write.csv(DIAG_tu, file="DIAG_tu.csv") #salvando os resultados das medias. vermelhas<-nomes[(medias