コード例 #1
0
 /**
  * Sumario estatistico de uma medida de variavel
  * @param id da medida
  * @param filtro a ser concatenado ao sql
  * @param coluna de agrupamento
  * @param limite numero maximo de registros que serao lidos do banco
  * @param le os dados diretamente da tabela sem nenhum tipo de agrupamento, seja por data ou outro parametro
  * @return array("colunavalor"=>,"soma"=>,"media"=>,"menor"=>,"maior"=>,"quantidade"=>,"histograma"=>,"grupos"=>,"unidademedida"=>,"quartis"=>)
  */
 function sumarioMedidaVariavel($id_medida_variavel, $filtro = "", $agruparpor = "", $limite = "", $direto = false)
 {
     if (!empty($agruparpor)) {
         $dados = $this->dadosMedidaVariavel($id_medida_variavel, $filtro, 1, "", $limite, $direto);
     } else {
         $dados = $this->dadosMedidaVariavel($id_medida_variavel, $filtro, 0, "", $limite, $direto);
     }
     if ($dados) {
         $metaVariavel = $this->listaMedidaVariavel("", $id_medida_variavel);
         $un = $this->listaUnidadeMedida($metaVariavel["codigo_unidade_medida"]);
         $agrupamento = "";
         $colunavalor = $metaVariavel["colunavalor"];
         foreach ($dados as $d) {
             if ($d[$colunavalor]) {
                 $valores[] = $d[$colunavalor];
             }
         }
         if (!empty($agruparpor)) {
             $agrupamento = array();
             foreach ($dados as $d) {
                 $g = $d[$agruparpor];
                 //var_dump($d);exit;
                 if (!empty($agrupamento[$g])) {
                     $agrupamento[$g] += $d[$colunavalor];
                 } else {
                     $agrupamento[$g] = $d[$colunavalor];
                 }
             }
             natsort($agrupamento);
         }
         $soma = "";
         $media = "";
         $min = "";
         $max = "";
         $quantidade = count($valores);
         $sturges = 1 + 3.322 * log10($quantidade);
         $quartis = array();
         if ($un["permitesoma"] == "1") {
             $soma = array_sum($valores);
         }
         if ($un["permitemedia"] == "1") {
             $media = $soma / $quantidade;
         }
         if ($un["permitesoma"] == "1" || $un["permitemedia"] == "1") {
             sort($valores);
             //var_dump($valores);exit;
             $min = $valores[0];
             $max = $valores[$quantidade - 1];
             include_once dirname(__FILE__) . "/../../classesphp/classe_estatistica.php";
             $calc = new estatistica();
             $calc->calcula($valores);
             $v = $calc->resultado;
             //expressao para o mapfile
             $expressao[] = "([" . $colunavalor . "]<=" . $v["quartil1"] . ")";
             $expressao[] = "(([" . $colunavalor . "]>" . $v["quartil1"] . ")and([" . $colunavalor . "]<=" . $v["quartil2"] . "))";
             if ($v["quartil3"] != 0) {
                 $expressao[] = "(([" . $colunavalor . "]>" . $v["quartil2"] . ")and([" . $colunavalor . "]<=" . $v["quartil3"] . "))";
                 $expressao[] = "([" . $colunavalor . "]>" . $v["quartil3"] . ")";
             }
             $nomes[] = "<= " . $v["quartil1"];
             $nomes[] = "> " . $v["quartil1"] . " e <= " . $v["quartil2"];
             if ($v["quartil3"] != 0) {
                 $nomes[] = "> " . $v["quartil2"] . " e <= " . $v["quartil3"];
                 $nomes[] = "> " . $v["quartil3"];
             }
             $quartis = array("cortes" => array("q1" => $v['quartil1'], "q2" => $v['quartil2'], "q3" => $v['quartil3']), "expressoes" => $expressao, "nomes" => $nomes);
         }
         $histograma = array_count_values($valores);
         //echo "<pre>".var_dump($quartis);exit;
         return array("colunavalor" => $colunavalor, "soma" => $soma, "media" => $media, "menor" => $min, "maior" => $max, "quantidade" => $quantidade, "histograma" => $histograma, "grupos" => $agrupamento, "unidademedida" => $un, "quartis" => $quartis, "sturges" => $sturges);
     }
     return false;
 }
コード例 #2
0
ファイル: cartograma.php プロジェクト: edmarmoretti/i3geo
function quartis($valores, $nomeColuna)
{
    $estat = new estatistica();
    $estat->calcula($valores);
    $calc = $estat->resultado;
    $nomes = array();
    $expressao = array();
    $expressao[] = "([" . $nomeColuna . "]<=" . $calc["quartil1"] . ")";
    $expressao[] = "(([" . $nomeColuna . "]>" . $calc["quartil1"] . ")and([" . $nomeColuna . "]<=" . $calc["quartil2"] . "))";
    if ($calc["quartil3"] != 0) {
        $expressao[] = "(([" . $nomeColuna . "]>" . $calc["quartil2"] . ")and([" . $nomeColuna . "]<=" . $calc["quartil3"] . "))";
        $expressao[] = "([" . $nomeColuna . "]>" . $calc["quartil3"] . ")";
    }
    $nomes[] = "Q1 valor <= " . $calc["quartil1"];
    $nomes[] = "Q2 valor > " . $calc["quartil1"] . " e valor <= " . $calc["quartil2"];
    if ($calc["quartil3"] != 0) {
        $nomes[] = "Q3 valor > " . $calc["quartil2"] . " e valor <= " . $calc["quartil3"];
        $nomes[] = "Q4 valor > " . $calc["quartil3"];
    }
    return array("nomes" => $nomes, "exp" => $expressao);
}
コード例 #3
0
 function estatDescritivas($item, $exclui)
 {
     if (!$this->layer) {
         return "erro";
     }
     $this->layer->set("template", "none.htm");
     $items = pegaItens($this->layer, $this->mapa);
     $valores = array();
     $filtro = $this->layer->getfilterstring();
     if ($filtro != "") {
         $this->layer->setfilter("");
     }
     //le o arquivo de query se existir e checa se existe sele&ccedil;&atilde;o para o tema
     $shapes = retornaShapesSelecionados($this->layer, $this->arquivo, $this->mapa);
     if (count($shapes) == 0) {
         $shapes = retornaShapesMapext($this->layer, $this->mapa);
     }
     //pega os valores
     foreach ($shapes as $shape) {
         $v = $shape->values[$item];
         $valores[] = $v;
     }
     $fechou = $this->layer->close();
     $valoresn = array();
     //verifica se a lista de valores contem numeros e exclusao
     foreach ($valores as $valor) {
         if (is_numeric($valor)) {
             if ($exclui != "") {
                 if ($valor != $exclui) {
                     $valoresn[] = $valor;
                 }
             } else {
                 $valoresn[] = $valor;
             }
         }
     }
     if (count($valoresn) == 0) {
         return "erro. Nenhum valor valido";
     }
     //faz os calculos
     if (file_exists($this->locaplic . "/classe_estatistica.php")) {
         include_once $this->locaplic . "/classe_estatistica.php";
     } else {
         include_once "classe_estatistica.php";
     }
     $estat = new estatistica();
     $resultado = $estat->calcula($valoresn);
     $resultado = $estat->resultado;
     $indice = $estat->indice;
     if ($resultado['min'] == "") {
         return "erro. Nenhum valor valido";
     }
     $chaves = array_keys($indice);
     return array("indices" => $chaves, "variaveis" => $indice, "valores" => $resultado);
 }
コード例 #4
0
 function quartis($item, $ignorar = "", $tipoLegenda = "minimo")
 {
     if (!$this->layer) {
         return "erro";
     }
     $valores = $this->pegaValores($this->mapa, $this->layer, $item, true, $ignorar);
     if (count($valores) > 0) {
         if (file_exists($this->locaplic . "/classe_estatistica.php")) {
             include_once $this->locaplic . "/classe_estatistica.php";
         } else {
             include_once "classe_estatistica.php";
         }
         $estat = new estatistica();
         $estat->calcula($valores);
         $calc = $estat->resultado;
         $numclassesatual = $this->layer->numclasses;
         //apaga todas as classes existentes
         $classetemp = $this->layer->getClass(0);
         for ($i = 0; $i < $numclassesatual; ++$i) {
             $classe = $this->layer->getClass($i);
             $classe->set("status", MS_DELETE);
         }
         //adiciona as classes novas
         $expressao[] = "([" . $item . "]<=" . $calc["quartil1"] . ")";
         $expressao[] = "(([" . $item . "]>" . $calc["quartil1"] . ")and([" . $item . "]<=" . $calc["quartil2"] . "))";
         if ($calc["quartil3"] != 0) {
             $expressao[] = "(([" . $item . "]>" . $calc["quartil2"] . ")and([" . $item . "]<=" . $calc["quartil3"] . "))";
             $expressao[] = "([" . $item . "]>" . $calc["quartil3"] . ")";
         }
         $nomes[] = "<= " . $calc["quartil1"];
         $nomes[] = "> " . $calc["quartil1"] . " e <= " . $calc["quartil2"];
         if ($calc["quartil3"] != 0) {
             $nomes[] = "> " . $calc["quartil2"] . " e <= " . $calc["quartil3"];
             $nomes[] = "> " . $calc["quartil3"];
         }
         $vcor = array(250, 230, 150, 0);
         for ($i = 0; $i < count($nomes); ++$i) {
             $classe = ms_newClassObj($this->layer);
             $novoestilo = ms_newStyleObj($classe);
             if ($this->layer->type == 0) {
                 $novoestilo->set("symbolname", "ponto");
                 $novoestilo->set("size", "6");
             }
             $classe->setexpression($expressao[$i]);
             if ($tipoLegenda == "completo") {
                 $nomeClasse = "Quartil " . ($i + 1) . " " . $expressao[$i];
             }
             if ($tipoLegenda == "simples") {
                 $nomeClasse = "Quartil " . ($i + 1) . " " . $nomes[$i];
             }
             if ($tipoLegenda == "minimo" || $tipoLegenda == "") {
                 $nomeClasse = $nomes[$i];
             }
             $classe->set("name", $nomeClasse);
             $ncor = $novoestilo->color;
             $ncor->setrgb(255, $vcor[$i], $vcor[$i]);
             $ncor = $novoestilo->outlinecolor;
             $ncor->setrgb(255, 255, 255);
         }
         $this->layer->setMetaData("cache", "");
         return "ok";
     } else {
         return "erro. Nenhum valor numerico no item";
     }
 }