Come calcolare la media mobile di una colonna con 10 milioni di voci?Sto cercando di eseguire la formula seguente su una colonna con 10 milioni di righe per calcolare la media mobile, ma lo script continua a funzionare per sempre e jmp smette di rispondere: thisTable << New Column( "av", Numeric, Continuous, Formula( Mean( :x[Indice(Riga() - 99999, Riga() )] ) ) ); C'è qualche limitazione o qualcosa di sbagliato nella formula. Come posso calcolare la media mobile in questo caso?
SceneggiaturaRe: Come calcolare la media mobile di una colonna con 10 milioni di voci?Per le persone punta e clicca là fuori come me, puoi ottenere una media mobile su una colonna facendo clic con il pulsante destro del mouse sull'intestazione della colonna di interesse e selezionando "Nuova colonna formula"> Riga> Media mobile.Dovrai fare un altro clic o due per decidere se vuoi o meno usare la ponderazione, ma è stato abbastanza veloce dopo aver fatto clic su OK per la mia tabella di dati di riga simulata da 10 milioni.
HTH
Fattura
Re: Come calcolare la media mobile di una colonna con 10 milioni di voci?Dovrebbe funzionare per 10.000.000 di righe.
Si prega di rispondere con i risultati del test.
Ecco una versione più veloce della formula..... elimina la necessità di un secondo calcolo della somma
If( Row() == 1,
theLag = 3;
theSum = 0;
);
If( Row() <= theLag,
theSum = theSum + :yield;
theAvg = theSum / Row();
,
theSum = (theSum - :yield[Row() - theLag]) + :yield;
theAvg = theSum / theLag;
);
theAvg;
Re: Come calcolare la media mobile di una colonna con 10 milioni di voci?sì, ora non genera alcun errore ma devo verificare se funzionerà per 10 milioni di voci
Re: Come calcolare la media mobile di una colonna con 10 milioni di voci?Hai ragione, la formula era sbagliata.Non stavo impostando correttamente il valore di "theSum".Quanto segue dovrebbe ottenere risultati corretti:
If( Row() == 1,
theLag = 3;
theSum = 0;
);
If( Row() <= theLag,
theSum = theSum + :yield;
theAvg = theSum / Row();
,
theAvg = ((theSum - :yield[Row() - theLag]) + :yield) / theLag;
theSum = (theSum - :yield[Row() - theLag]) + :yield;
);
theAvg;
Re: Come calcolare la media mobile di una colonna con 10 milioni di voci?Ho provato la soluzione suggerita ma non dà la risposta corretta, per favore aiutatemi
Re: Come calcolare la media mobile di una colonna con 10 milioni di voci?La funzione Col Moving Average() può essere facilmente eliminata dalla formula.Prendendo l'approccio fornito nella seconda formula nel mio precedente post, il calcolo della media mobile sommando i dati e poi dividendo, ti darà quello che vuoi.Assicurati di aver compreso come funziona il codice che ti viene fornito.Ecco una nuova modifica della formula:
If( Row() == 1,
theLag = 100000;
theSum = 0;
);
If(
Row() <= theLag,
theSum = theSum + :x;
theAvg = theSum/Row(),
theAvg = ((theSum - :x[Row() - theLag]) + :x) / theLag
);
theAvg;
Re: Come calcolare la media mobile di una colonna con 10 milioni di voci?questo script non funziona su JMP12 (Col Moving Average non supportato su JMP12)Re: Come calcolare la media mobile di una colonna con 10 milioni di voci?Prova questo e vedi se funziona più velocemente
Col Moving Average( :x, 1, 999999, 0 )
Esamina l'indice degli script per la documentazione e l'esempio
Oppure potresti provare questo, che elimina il requisito di calcolare la media per un elenco di 100000 righe per il calcolo di ogni riga e lo riduce a una singola sottrazione, una singola addizione e una divisione.
If( Row() == 1,
theLag = 100000;
theSum = Sum( :x[Index( 1, theLag )] );
);
If(
Row() < theLag, theAvg = <FONT color="#c7254e" face="Consolas" style="background-color: #f4f2f9;">Col Moving Average( :x, 1, theLag, 0 )</FONT>,
Row() == theLag, theAvg = theSum / theLag,
theAvg = ((theSum - :x[Row() - theLag]) + :x) / theLag
);
theAvg;