274 lines
8.1 KiB
PHP
Executable File
274 lines
8.1 KiB
PHP
Executable File
<?php
|
|
|
|
// Este script gera resultados de predicao para professores
|
|
// A partir dos arquivos notastreino.csv e notastestepreditas.csv de cada submissao em arquivospredicao/, geramos relatorios de predicao calculando a diferenca entre a nota predita e a nota dada pelo professor. Uma copia do relatorio é copiada no diretorio original e outra em resultadosobtidos/.
|
|
// É criada também uma página com os resultados de todas as tarefas
|
|
|
|
// Diretorio de entrada
|
|
|
|
$diretorioe= "arquivospredicao/";
|
|
$diretorior= "resultadosobtidos/";
|
|
$arqtreino="notastreino.csv"; // Contém todas as notas dadas pelo professor para uma questao
|
|
$arqteste= "notastestepreditas.csv";
|
|
|
|
|
|
if ((file_exists($diretorioe))) // If 1
|
|
{
|
|
// Abertura da página de resultados
|
|
$paginaresultados="apresentaresultados.htm";
|
|
$pr= fopen($paginaresultados,'w');
|
|
|
|
fwrite($pr,"<html><head><meta http-equiv=Content-Type content=text/html;charset=utf-8><title>SOAP</title></head><body><table align=center border=1 bordercolor=#BDBDBD bordercolordark=steelblue>");
|
|
fwrite($pr,"<tr><td colspan=6 align=center><font color=steelblue size=5>SOAP - Resultados de Predição de Notas </td> </tr>");
|
|
fwrite($pr,"<tr><td> Tarefas </td>");
|
|
fwrite($pr,"<td> Qtd. Notas preditas </td>");
|
|
fwrite($pr,"<td> Intervalo de Notas </td>");
|
|
fwrite($pr,"<td> Erro Médio </td>");
|
|
fwrite($pr,"<td> Erro Mínimo </td>");
|
|
fwrite($pr,"<td> Erro Máximo </td></tr>");
|
|
|
|
|
|
// Se não existe, cria o diretorio com resultados
|
|
|
|
if (!(file_exists($diretorior)))
|
|
{
|
|
mkdir($diretorior);
|
|
|
|
}
|
|
|
|
// Entrar em diretorio de entrada
|
|
|
|
$ponteiro1 = opendir($diretorioe);
|
|
|
|
|
|
// Para cada subdiretorio de arquivospredicao (isto é, cada questao)
|
|
|
|
while (($nometarefa = readdir($ponteiro1))) // While 1
|
|
{
|
|
|
|
|
|
if ( ($nometarefa<>".") && ($nometarefa<>"..") && ($nometarefa<>"listaavaliacao.txt") ) // If 2
|
|
{
|
|
|
|
|
|
// Abrir arquivo de gravação
|
|
|
|
$arqr = $diretorior."relatorio-".$nometarefa.".csv";
|
|
$fgr = fopen($arqr,'w');
|
|
|
|
fwrite($fgr,"Id-Questao; Nota do Professor; Nota Predita; Erro de Predicao \n \n");
|
|
|
|
$treino = $diretorioe.$nometarefa."/".$arqtreino;
|
|
$teste = $diretorioe.$nometarefa."/".$arqteste;
|
|
$ain = $diretorioe.$nometarefa."/"."intervalonotas.csv";
|
|
$contpreditas=0;
|
|
// Carrega o arquivo de teste (se não estiver vazio) e os separa em vetores de rotulos e notas
|
|
|
|
if ( (file_exists($teste)) && (file_exists($treino)) && (file_exists($ain))) // If 3
|
|
{
|
|
// Carregar intervalonotas.csv
|
|
|
|
$fin = file($ain);
|
|
$lir = explode("/",$fin[0]);
|
|
$vmin=$lir[0];
|
|
$vmax=trim($lir[1]);
|
|
unset($lir);
|
|
unset($fin);
|
|
|
|
// Carregar arquivo de teste
|
|
|
|
$te = file($teste);
|
|
$n=count($te);
|
|
|
|
// Carregar treino
|
|
|
|
$tr=file($treino);
|
|
$nt = count($tr);
|
|
|
|
if ($n>0)
|
|
{
|
|
$vte=array();
|
|
$vnte=array();
|
|
$i=0;
|
|
foreach($te as $linha)
|
|
{
|
|
// Copiar os rotulos de teste para vetor
|
|
|
|
$l= explode(";",$linha);
|
|
|
|
$vte[$i]=$l[0]; // Rotulo
|
|
$vnte[$i]= trim($l[1]); // Nota
|
|
|
|
unset($l);
|
|
|
|
$i++;
|
|
}
|
|
|
|
|
|
|
|
unset($te);
|
|
|
|
|
|
|
|
|
|
$j=0;
|
|
|
|
// Para avaliar erro
|
|
|
|
$somaerros=0;
|
|
$erromaximo=$vmin;
|
|
$errominimo=$vmax;
|
|
|
|
// Para cada linha do arquivo notastreino.csv
|
|
|
|
|
|
|
|
foreach($tr as $linha)
|
|
{
|
|
$l = explode(";", $linha);
|
|
|
|
// Obter rotulo e nota
|
|
|
|
$rotulo = trim($l[0]);
|
|
$notadada = trim($l[1]);
|
|
|
|
$pos = array_search($l[0],$vte);
|
|
|
|
if ($pos!='')
|
|
{
|
|
// Gravar Rotulo, Nota do Professor, Nota predita
|
|
|
|
|
|
|
|
if ($notadada>-1) // Se Professor atribuiu nota
|
|
{
|
|
$contpreditas++;
|
|
$notapredita = $vnte[$pos];
|
|
$erro = round($notapredita - $notadada, 2);
|
|
$erroabsoluto = abs($erro);
|
|
$somaerros=$somaerros + $erroabsoluto;
|
|
|
|
if ($erroabsoluto>$erromaximo)
|
|
{
|
|
$erromaximo=$erroabsoluto;
|
|
}
|
|
|
|
if ($erroabsoluto<$errominimo)
|
|
{
|
|
$errominimo=$erroabsoluto;
|
|
}
|
|
|
|
$pacote = "$rotulo; $notadada; $notapredita; $erro \n";
|
|
}
|
|
else // Se nota for -1, escreva "***"
|
|
{
|
|
$pacote = "$rotulo;***;******;*** \n";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
// Gravar Rotulo, Nota do professor, "treino"
|
|
// Se nota for -1, escreva "***"
|
|
|
|
if ($notadada>-1)
|
|
{
|
|
$pacote= "$rotulo;$notadada;NOTA DO PROFESSOR;*** \n";
|
|
}
|
|
else
|
|
{
|
|
$pacote = "$rotulo;***;NOTA DO PROFESSOR;*** \n";
|
|
}
|
|
|
|
|
|
}
|
|
|
|
fwrite($fgr, $pacote);
|
|
|
|
$j++;
|
|
|
|
unset($l);
|
|
|
|
} // Fim do foreach para ler notastreino
|
|
|
|
unset($tr);
|
|
unset($vte);
|
|
unset($vnte);
|
|
|
|
} // FIm do if que verifica se ($n>0)
|
|
else
|
|
{
|
|
$msg = "Não houve predicao para a questão $nometarefa. \n Número insuficiente de amostras ou professor não pontuou amostras solicitadas. \n";
|
|
$erromedio="***";
|
|
$errominimo="***";
|
|
$erromaximo="***";
|
|
fwrite($fgr, $msg);
|
|
}
|
|
|
|
if (($errominimo=="***") && ($erromaximo=="***"))
|
|
{
|
|
|
|
$erromedio="***";
|
|
}
|
|
else
|
|
{
|
|
if ($contpreditas>0)
|
|
{
|
|
if ($somaerros>0)
|
|
{
|
|
$erromedio=round($somaerros/$contpreditas,2);
|
|
}
|
|
else
|
|
{
|
|
$erromedio=0.0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$erromedio="***";
|
|
$erromaximo="***";
|
|
$errominimo="***";
|
|
}
|
|
}
|
|
|
|
|
|
$gravarhtml="<tr><td><a alink=black vlink=black link=black href=resultadosobtidos/relatorio-".$nometarefa.".csv target=blank>".$nometarefa."</a></td><td align=center>".$contpreditas." de ".$nt."</td><td align=center>".$vmin." a ".$vmax."</td><td align=center>".$erromedio."</td><td align=center>".$errominimo."</td><td align=center>".$erromaximo."</td></tr>";
|
|
|
|
fwrite($pr,$gravarhtml);
|
|
|
|
} // Fim do If 3
|
|
|
|
else
|
|
{
|
|
|
|
$msg = "Não houve predicao para a questão $nometarefa. \n Número insuficiente de amostras ou professor não pontuou amostras solicitadas. \n";
|
|
$erromedio="***";
|
|
$errominimo="***";
|
|
$erromaximo="***";
|
|
fwrite($fgr, $msg);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fclose($fgr);
|
|
|
|
} // Fim do If 2
|
|
|
|
} // Fim do While 1
|
|
|
|
fwrite($pr,"<tr><td colspan=6> <b>*** </b> Significa que não houve predição </tr>");
|
|
fwrite($pr,"</table></body></html>");
|
|
fclose($pr);
|
|
|
|
} // Fim do If 1
|
|
else
|
|
{
|
|
echo "\n \n Diretorio com resultados de predicao não encontrado! \n";
|
|
}
|
|
?>
|
|
|
|
|