Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481

    algoritmo per calcolare la media a campione

    Ho creato una tabella DB di questo tipo
    id
    giorno
    visite

    ogni istanza è un giorno dell'anno e per ogni giorno mi salvo il numero di visite ricevute in quel giorno. Ora sto riportando tutto in un grafico, ma il problema è che se seleziono ad esempio un periodo di 3 mesi, il grafico largo 700 pixel riesce a visualizzare decentemente 90 punti (3 mesi) diversi perchè mi resta uno spazio di 7 pixel di media tra un punto e l'altro da congiungere, ma se seleziono un periodo di un anno, il grafico ovviamente diventa illeggibile.

    La soluzione sarebbe poter calcolare il valore medio tra n valori in base a quanti giorni ho selezionato, ma come può fare una roba simile??

  2. #2
    Non ho ben capito che tipo di media devi calcolare...in ogni caso MySQL fornisce funzioni di minimo, massimo, media...ed altre; ad esempio:

    codice:
    SELECT AVG(visite) AS media_visite
    FROM ...
    WHERE ...
    GROUP BY ...

  3. #3
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    magari si potrà fare anche in sql, ma con AVG non è possible, e neanche INTERVAL() che serve ad un'altra cosa.

  4. #4
    Originariamente inviato da james
    magari si potrà fare anche in sql, ma con AVG non è possible, e neanche INTERVAL() che serve ad un'altra cosa.
    lo fai da php, fai la media a coppie di valori

  5. #5
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da ascatem2
    lo fai da php, fai la media a coppie di valori
    la media a coppie va bene se visualizzo circa 180 punti, ma se ne visualizzo 360 ad esempio, devo fare la media tra 3 valori, cioè, come determino ogni quanti valori calocare la media? E poi come scrivo una roba del genere? non posso usare un ciclo predeterminato.

  6. #6
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da LeaderGL
    Non ho ben capito che tipo di media devi calcolare...in ogni caso MySQL fornisce funzioni di minimo, massimo, media...ed altre; ad esempio:

    codice:
    SELECT AVG(visite) AS media_visite
    FROM ...
    WHERE ...
    GROUP BY ...
    questo è vero, ma la media viene calcolata su tutti i valori, io devo selezionare il valore medio ogni, ad esempio, 3 valori. Tipo:
    ho 1000 valori,
    anzichè tirare fuori tutti e 100 questi valori, ne devo tirare fuori solo 100 in cui ognuno sia la media di 10 valori consecutivi...non so se mi sono spiegato

  7. #7
    Originariamente inviato da james
    la media a coppie va bene se visualizzo circa 180 punti, ma se ne visualizzo 360 ad esempio, devo fare la media tra 3 valori, cioè, come determino ogni quanti valori calocare la media? E poi come scrivo una roba del genere? non posso usare un ciclo predeterminato.
    tu hai un numero di pixel disponibile per i punti,ok?
    x=arrotondaEccesso(numGiorni/numPunti)
    e poi fai la media ogni x valori

  8. #8
    Utente di HTML.it L'avatar di james
    Registrato dal
    Jun 2002
    Messaggi
    1,481
    Originariamente inviato da ascatem2
    tu hai un numero di pixel disponibile per i punti,ok?
    x=arrotondaEccesso(numGiorni/numPunti)
    e poi fai la media ogni x valori
    sì, praticamente il grafico è largo 750 pixel, e facendo varie prove ho appurato che visualizzare al massimo 90 punti diversi va bene, sopra i 90 punti il grafico diventa illeggibile, quindi, 90 punti significa che ogni punti dista dall'altro:

    750/90 -> 8 pixel

    avevo provato una cosa del genere, ma guarda cosa succede:

    IPOTESI 1
    Codice PHP:
    $n_giorni 270;
    $max_visualizzabili 90;
    $x floor($n_giorni/$max_visualizzabili); // x = 3
    $resto $n_giorni%$max_visualizzabili// resto = 0 
    in questo caso il resto è zero, e devo fare la media ogni 3 valori. Ma guarda ora:
    Codice PHP:
    $n_giorni 179;
    $max_visualizzabili 90;
    $x floor($n_giorni/$max_visualizzabili); // x = 1
    $resto $n_giorni%$max_visualizzabili// resto = 89 
    ed ora che gli faccio? fatto in maniera automatica con dei clicli, il grafico mi visualizzerà tutti e 179 i punti, i primi 90, poi i restanti 89, oppure non ho capito cosa mi mi hai detto.

  9. #9
    arrotondare per eccesso.

    Codice PHP:
    $n_giorni 179;
    $max_visualizzabili 90;
    $x ceil($n_giorni/$max_visualizzabili); // x = 2 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.