Autor Zpráva
jtfcobra
Profil
Ahoj potřeboval bych poradit potřebujji udělat asi průměr mam zaznamy 365 a více .... a každý den jiná hodnota ale potřebuji udělat ověření kdy je nějvětší rozdíl.....přemýšlím jak to udělat...poradíte?

Mám v DB uloženo

Např. (mam uložených 365 dni v roce)
1.1.2015       -  50
2.1.2015       -  38
3.1.2015       -  150  vysoká hodnota!! vypsat a uložit do DB jako chybu
4.1.2015       -  28
5.1.2015       -  50
6.1.2015       -  41
7.1.2015       -  55
8.1.2015       -  28
9.1.2015       -  50
10.1.2015     -  41
11.1.2015     -  55
12.1.2015     -  2128 - vysoká hodnota!! vypsat a uložit do DB jako chybu
13.1.2015     -  50
14.1.2015     -  41
15.1.2015     -  55
Joker
Profil
jtfcobra:
A jak přesně se pozná ta vysoká hodnota?

Jestli jde o rozdíl proti předchozímu dni, stačí to prostě odečíst (pokud se má evidovat i příliš velký pokles, ještě udělat absolutní hodnotu) a pokud výsledek je vyšší než zvolené číslo, uložit.
jtfcobra
Profil
Jde o to ze je treba zjistit cca s posledních 3 měsícu hodnotu od ktere se to bude zjistovat...


Přemýšlel jsem sečíst všechny 3 měsíce a vypočítat s toho průměr ... pak by to fungovalo možná ...
mimochodec
Profil
jtfcobra:
Projdi to cyklem. Když bude hodnota víc než dvojnásobná oproti minulé nebo menší než poloviční, našels.
Můžeš na to jít samozřejmě nějak sofistikovaněji, můžeš ten postup použít třeba pro odfiltrování nějakých jehel. Ze zbytku pak spočítáš průměr a budeš pak v dalším průchodu zjišťovat rozdíl oproti průměru.

(nevím, školy nemám, ale myslím, že kdybys ty jehly neodfiltroval a pracoval se všemi hodnotami, lepší než průměr by byl medián)
jtfcobra
Profil
Poradíš jak to napsat v PHP přes Mysql?
mimochodec
Profil
Jak je to s tím počtem hodnot? Pracuješ se všemi řádky nebo jen "s posledních 3 měsícu"?
jtfcobra
Profil
Stačí poslední 3 měsíce
mimochodec
Profil
Ještě mě napadlo toto:
SELECT AVG(hodnota) maximum FROM (SELECT hodnota FROM table ORDER BY hodnota ASC LIMIT 70) top70

neboli vezmu nejmenších 70 hodnot (čili odfiltruju z 90 dvacet ústřelů směrem nahoru), spočítám z nich průměr. Co bude větší než řekněme dvojnásobek (nebo jiná buharská konstanta) tohoto , to tě asi zajímá.
jtfcobra
Profil
Takle to vypisu?
$result = mysql_query("SELECT AVG(hodnota) maximum FROM (SELECT hodnota FROM table ORDER BY hodnota ASC LIMIT 70) top70",$db);
$radku = mysql_num_rows($result);
for($i=0;$i<$radku;$i++)
{
$b=mysql_result($result,$i,"hodnota");
}
echo $b;
mysql_close($db);
?>
mimochodec
Profil
$q = "SELECT AVG(hodnota) maximum FROM (SELECT hodnota FROM table ORDER BY hodnota ASC LIMIT 70) top70";
$prumer = mysql_result(mysql_query($q), 0);

a dále pak samozřejmě
    $q = "select hodnota from table where hodnota>".($prumer*2);
    $vysledek=mysql_query($q);
    $radku=mysql_num_rows($vysledek);

    if ($radku>0) {
      while ($zaznam=MySQL_Fetch_Array($vysledek)):
        echo $zaznam["hodnota"]."<br>";
      endwhile;
    };
(opraven překlep)
jtfcobra
Profil
vyzkouším a dám vědít
Keeehi
Profil
Z pohledu statistiky jde o hledání outlierů. Pokud o tom chceš vědět víc, můžeš začít třeba na wiki.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0