Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?J'essaie d'exécuter la formule ci-dessous sur une colonne de 10 millions de lignes pour calculer la moyenne mobile, mais le script continue de s'exécuter indéfiniment et jmp cesse de répondre : thisTable << New Column( "av", Numeric, Continuous, Formula( Mean( :x[Index( Ligne() - 99999, Ligne() )] ) ) ); Y a-t-il une limitation ou quelque chose qui ne va pas avec la formule. Comment puis-je calculer la moyenne mobile dans ce cas?
ScriptRe : Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?Pour le pointer et cliquer les gens comme moi, vous pouvez obtenir une moyenne mobile sur une colonne en cliquant avec le bouton droit sur l'en-tête de la colonne d'intérêt et en sélectionnant "Nouvelle colonne de formule"> Ligne> Moyenne mobile.Vous devrez faire un autre clic ou deux pour décider si vous voulez ou non utiliser la pondération, mais c'était assez rapide une fois que j'ai cliqué sur OK pour ma table de données simulée de 10 millions de lignes.
HTH
Facture
Re : Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?Cela devrait fonctionner pour 10 000 000 lignes.
Veuillez répondre avec les résultats de vos tests.
Voici une version plus rapide de la formule ..... elle supprime le besoin d'un deuxième calcul de la somme
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 : Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?oui, maintenant il ne génère aucune erreur mais je dois vérifier si cela fonctionnera pour 10 millions d'entrées
Re : Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?Vous avez raison, la formule était erronée.Je ne définissais pas correctement la valeur de "theSum".Les éléments suivants devraient obtenir des résultats corrects :
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 : Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?J'ai essayé la solution suggérée mais elle ne donne pas la bonne réponse, pourriez-vous m'aider s'il vous plaît
Re : Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?La fonction Col Moving Average() peut facilement être retirée de la formule.En adoptant l'approche fournie dans la deuxième formule de mon post précédent, le calcul de la moyenne mobile en additionnant les données puis en les divisant, vous donnera ce que vous voulez.Assurez-vous de bien comprendre le fonctionnement du code qui vous est fourni.Voici une nouvelle modification de la formule :
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 : Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?ce script ne fonctionne pas sur JMP12 (Col Moving Average non pris en charge sur JMP12)Re : Comment calculer la moyenne mobile d'une colonne avec 10 millions d'entrées ?Essayez ceci et voyez s'il fonctionne plus vite
Col Moving Average( :x, 1, 999999, 0 )
Consultez l'index de script pour obtenir de la documentation et des exemples
Ou, vous pouvez essayer ceci, ce qui élimine la nécessité de calculer la moyenne d'une liste de 100 000 lignes pour le calcul de chaque ligne, et de la réduire à une seule soustraction, une seule addition et une seule division.
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;