/** * 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; }
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); }
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çã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); }
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"; } }