=====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