Media mobile

di il
9 risposte

Media mobile

Salve a tutti,
Qualcuno ha provato a creare una query per il calcolo della media mobile di 8 ore, o avete dei suggerimenti per calcolarla con access?

Per chi non la conoscesse la media mobile su 8 ore è una media calcolata sui dati orari scegliendo un intervallo di 8 ore. Ogni ora l’intervallo viene aggiornato e, di conseguenza, ricalcolata la media.
Quindi il primo intervallo su cui sarà calcolata la media mobile sarà dalle ore 01:00 alle ore 08:00, il secondo intervallo sarà dalle ore 02:00 alle ore 09:00 e così via. Il valore della media è sempre attribuito alla prima ora dell'intervallo preso in considerazione.

Grazie in anticipo

9 Risposte

  • Re: Media mobile

    Magari mi sfugge qualcosa ma cosa rende difficile scrivere una query che estrae un determinato periodo (tra data/ora partenza e data/ora partenza + 8 ore) calcolando il valore medio del periodo ?
    Quando si aggiorna l'intervallo la query viene rieseguita semplicemente cambiando la data/ora di partenza .....
  • Re: Media mobile

    Dominik ha scritto:


    Salve a tutti,
    Qualcuno ha provato a creare una query per il calcolo della media mobile di 8 ore, o avete dei suggerimenti per calcolarla con access?

    Per chi non la conoscesse la media mobile su 8 ore è una media calcolata sui dati orari scegliendo un intervallo di 8 ore. Ogni ora l’intervallo viene aggiornato e, di conseguenza, ricalcolata la media.
    Quindi il primo intervallo su cui sarà calcolata la media mobile sarà dalle ore 01:00 alle ore 08:00, il secondo intervallo sarà dalle ore 02:00 alle ore 09:00 e così via. Il valore della media è sempre attribuito alla prima ora dell'intervallo preso in considerazione.

    Grazie in anticipo
    Si fa con i Logaritmi e l'Esponenziale... leggi questo articolo:
    http://www.riolab.org/index.php?option=com_content&view=article&id=134:media-geometrica-semplice-e-media-geometrica-ponderata&catid=46:access&Itemid=69
  • Re: Media mobile

    Se ho compreso l'esigenza, la richiesta parla di individuare la media mobile su un intervallo di 8 ore, quindi stiamo analizzando la serie di dati attraverso una semplice media aritmetica:
    https://it.wikipedia.org/wiki/Media_mobil

    Ne consegue che potrebbe essere fuorviante il suggerimento sull'uso di una media geometrica (essendo diverso il calcolo) infatti se prendiamo l'esempio indicato:

    dati i quattro valori: 10 15 12 13
    la media aritmetica sarà (10 + 15 + 12 + 13)/4 = 50/4 = 12,5
    mentre la media geometrica sarà (10 * 15 * 12 * 13)^(1/4) = 12,36812781

    Ora se si vuole, specificamente, determinare (in Access) la media aritmetica è sufficiente la funzione AVG
    https://support.office.com/it-it/article/funzione-media-8a24e7b2-5483-42ac-835e-907f4341f752
    che dovrà agire (in base a come sono strutturati i dati) sull'intervallo, interessato, delle 8 ore.
    Ad esempio se fossero gli ultimi 8 rilevamenti è sufficiente una query ove il calcolo sia basato sul predicato TOP per estrarre gli N records:
    https://support.office.com/it-it/article/predicati-all-distinct-distinctrow-top-24f2a47d-a803-4c7c-8e81-756fe298ce57
    https://www.techonthenet.com/access/queries/top_results2007.php
    Viceversa se i dati delle ore di rilevazione coprano diversi intervalli, di 8 ore (e si debba confrontare ciascuna serie degli 8 dati) una strada è operare attraverso codice VBA in modo che, nel recordset, si vada a calcolare la media aritmetica del gruppo degli 8 record interessati e scorrendo i vari valori si procederà a determinare la media mobile di ciascun gruppo che dovrà essere memorizzata progressivamente, ad esempio, in una tabella temporanea d'appoggio.
  • Re: Media mobile

    Innanzitutto ringrazio per avermi risposto.
    Forse sono stato poco chiaro.

    Io ho una tabella contenente 8760 righe e 2 colonne.
    La prima colonna contiene la data in formato (dd/mm/yyyy hh:mm) e la seconda un valore numerico corrispondente ad una concentrazione .
    Quello che la Query o una funzione in VBA voglio che faccia è andare a calcolare la media di 8 ore, partendo dai primi 8 dati e man man scendendo di un ora andare a calcolare le altre medie di 8 ore.
    Dovendo poi attribuire il valore della media calcolata alla prima ora dell'intervallo.

    E' quindi una media aritmetica ma mobile.

    Grazie per la pazienza.
  • Re: Media mobile

    Dominik ha scritto:


    Innanzitutto ringrazio per avermi risposto.
    Forse sono stato poco chiaro.

    Io ho una tabella contenente 8760 righe e 2 colonne.
    La prima colonna contiene la data in formato (dd/mm/yyyy hh:mm) e la seconda un valore numerico corrispondente ad una concentrazione .
    Quello che la Query o una funzione in VBA voglio che faccia è andare a calcolare la media di 8 ore, partendo dai primi 8 dati e man man scendendo di un ora andare a calcolare le altre medie di 8 ore.
    Dovendo poi attribuire il valore della media calcolata alla prima ora dell'intervallo.

    E' quindi una media aritmetica ma mobile.

    Grazie per la pazienza.
    Secondo me ti sei spiegato...
    Per fare la media di 8 Ore serve creare un campo calcolato aggregatore che ti consente di effettuare la Media avendo come elemento di partenza la concentrazione.

    L'esempio è questo:
    
    SELECT Exp(Sum(Log(Evento)*Frequenza)/Sum(Frequenza)) AS MediaGp FROM Tabella1
    La frequenza è la tua Concentrazione...
    Ora se fai una Query che ricrea gli STEP delle 8 Ore aggregati e la metti in JOIN con la tabella di base... forse...

    Come fare un campo Aggregato calcolato che divida la giornata in 3 Blocchi da 8 ore...?
    Esempio:
    
    Campo8Ore:Format(CampoDataOra,"dd/mm/yyyy") & "-" & Hour(CampoDataOra) \8
    Restituisce un valore Stringa aggregato con queste caratteristiche
    
    11/10/2018 00:00 --->  11/10/2018-0
    11/10/2018 07:59 --->  11/10/2018-0
    11/10/2018 08:00 --->  11/10/2018-1
    11/10/2018 15:59 --->  11/10/2018-1
    11/10/2018 16:00 --->  11/10/2018-2
    11/10/2018 23:59 --->  11/10/2018-2
    Ecco ora hai il campo utile per l'aggregazione [Campo8Ore].

    Fai attenzione al BackSlash usato per dividere... che funziona come Int(Ora/8)....
  • Re: Media mobile

    @Alex ha scritto:


    ...
    
    Campo8Ore:Format(CampoDataOra,"dd/mm/yyyy") & "-" & Hour(CampoDataOra) \8
    ....
    Ti confesso che io ho capito una cosa diversa .....
    Io ho capito che a lui interessa calcolare la media aritmetica di un set di record in un range di 8 ore che però si sposta ogni ora (quindi 1 record da 00.00 a 7.59, 1 record da 1.00 a 8.59, 1 record da 2.00 a 9.59 e così via - ovviamente il campo giorno è irrilevante ai fini del calcolo della media).
  • Re: Media mobile

    Grazie Alex, l'unica cosa è che in ogni giorno non ci sono 3 medie di 8 ore.
    La prima media va dalle 01:00 alle 08:00
    la seconda va dalle 02:00 alle 09:00.
    La terza dalle 03:00 alle 10:00
    la quarta va dalle 04:00 alle 11:00 e così via.
    Questo può influire nel procedimento da te proposto?
  • Re: Media mobile

    Come diceva Max... ma secondo te cosa cambia...?
    Il campo di aggregazione... ti basta usare l'ora ed impostare come limite <ora+7...?

    Fai un Po si sperimentazione
  • Re: Media mobile

    Se lo sapevo non lo chiedevo.

    Ora sperimento.
    Grazie mille
Devi accedere o registrarti per scrivere nel forum
9 risposte