Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Ich versuche, die folgende Formel auf einer Spalte mit 10 Millionen Zeilen auszuführen, um den gleitenden Durchschnitt zu berechnen, aber das Skript läuft für immer weiter und jmp reagiert nicht mehr: thisTable << New Column( "av", Numeric, Continuous, Formula( Mean( :x[Index(Zeile() - 99999, Zeile() )] ) ) ); Gibt es eine Einschränkung oder etwas falsch mit der Formel. Wie kann ich in diesem Fall den gleitenden Durchschnitt berechnen?
SkripterstellungBetreff: Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Für die Point-and-Click-Leute da draußen wie mich können Sie einen gleitenden Durchschnitt für eine Spalte erhalten, indem Sie mit der rechten Maustaste auf die Überschrift der interessierenden Spalte klicken und "Neue Formelspalte"> Zeile> Gleitender Durchschnitt auswählen.Sie müssen ein oder zwei weitere Klicks machen, um zu entscheiden, ob Sie die Gewichtung verwenden möchten oder nicht, aber es ging ziemlich schnell, als ich für meine simulierte 10M-Zeilendatentabelle auf OK klickte.
HTH
Rechnung
Betreff: Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Es sollte für 10.000.000 Zeilen funktionieren.
Bitte antworten Sie mit den Ergebnissen Ihrer Tests.
Hier ist eine schnellere Version der Formel ... sie macht eine zweite Berechnung der Summe überflüssig
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;
Betreff: Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Ja, jetzt wirft es keinen Fehler, aber ich muss prüfen, ob es für 10 Millionen Einträge funktioniert
Betreff: Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Du hast Recht, die Formel war falsch.Ich habe den Wert von "theSum" nicht richtig eingestellt.Folgendes sollte korrekte Ergebnisse liefern:
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;
Betreff: Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Ich habe die vorgeschlagene Lösung ausprobiert, aber sie gibt nicht die richtige Antwort. Könnten Sie bitte helfen?
Betreff: Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Die Funktion Col Moving Average() kann einfach aus der Formel herausgenommen werden.Wenn Sie den Ansatz verwenden, der in der zweiten Formel in meinem vorherigen Beitrag angegeben ist, erhalten Sie durch die Berechnung des gleitenden Durchschnitts durch Summieren der Daten und anschließendes Teilen, was Sie wollen.Bitte stellen Sie sicher, dass Sie verstehen, wie der Ihnen bereitgestellte Code funktioniert.Hier ist eine neue Modifikation der Formel:
If( Row() == 1,
theLag = 100000;
theSum = 0;
);
If(
Row() <= theLag,
theSum = theSum + :x;
theAvg = theSum/Row(),
theAvg = ((theSum - :x[Row() - theLag]) + :x) / theLag
);
theAvg;
Betreff: Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Dieses Skript funktioniert nicht auf JMP12 (Col Moving Average wird auf JMP12 nicht unterstützt)Betreff: Wie berechnet man den gleitenden Durchschnitt einer Spalte mit 10 Millionen Einträgen?Probieren Sie dies aus und sehen Sie, ob es schneller läuft
Col Moving Average( :x, 1, 999999, 0 )
Suchen Sie im Scripting Index nach Dokumentation und Beispielen
Oder Sie versuchen dies, wodurch die Notwendigkeit entfällt, den Mittelwert für eine Liste von 100000 Zeilen für die Berechnung jeder Zeile zu berechnen, und es auf eine einzelne Subtraktion, eine einzelne Addition und eine Division reduziert wird.
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;