So automatisieren Sie die Analyse zyklischer DatenLiebe JMP-Community,
Ich habe einen Ofen, bei dem die Temperatur kontinuierlich wechselt (von heiß auf kalt, dann von kalt auf heiß und wieder von vorne …).
Der Ofen ermöglicht die Aufzeichnung der Temperatur im Zeitverlauf.
Wenn wir die Temperatur auf der Y-Achse und die Zeit auf der X-Achse auftragen, erhalten wir das beigefügte Diagramm.
Wir müssen berechnen, wie hoch die Temperaturänderungsrate innerhalb eines bestimmten Temperaturbereichs (in diesem Fall zwischen 0 °C und 130 °C) ist.
Zum Beispiel:
Die grün angepinnten Informationen beziehen sich auf einen Ramp-Down (von 130 dgc auf 0 dgc).
Mit der jeweiligen Zeit können wir dann die Temperaturänderungsrate berechnen (130 geteilt durch die Zeitdifferenz).
Die violett angepinnten Informationen beziehen sich auf den Anstieg (von 0 °C auf 130 °C).
Dann machen wir dasselbe, um die Rate der Temperaturänderung zu berechnen.
Grün (Rampe runter) und Lila (Rampe hoch) = 1 Zyklus
In diesem Fall müssen wir alle Auf- und Abwärtsbewegungen für alle Zyklen hier berechnen.
Tatsächlich zeigen wir zu Beispielzwecken nur einige wenige Zyklen, aber tatsächlich gibt es Hunderte von Zyklen.
Meine Frage lautet: Wie berechnen wir den Hoch- und Runterlauf für jeden Zyklus und speichern ihn in einer anderen Datentabelle?
Natürlich kann man es auch manuell machen, aber das ist zu mühsam.
Gibt es eine automatisierte oder „vereinfachtere“ Möglichkeit, dies zu tun?
Ich füge die Daten bei.
Der Ofen zeichnet nur 2 Datenspalten auf (Zeit und Temperatur). Es gibt keine Daten für den Zyklus (1. Zyklus, 2. Zyklus usw.).
Entschuldigen Sie die lange E-Mail und danke für alle Ratschläge.
Br,
Chris
Automatisierung und SkriptingDatenexploration und -visualisierungBetreff: So automatisieren Sie die Analyse zyklischer DatenSie können dies beispielsweise durch die Verwendung von Formeln tun. Sie könnten beginnen, indem Sie die Spalte „state“ hinzufügen.

If(
0 < :Temp Profile < 130 & Dif(:Temp Profile) < 0, curstate = "Down Ramp",
0 < :Temp Profile < 130 & Dif(:Temp Profile) > 0, curstate = "Ramp Up",
curstate = "No Ramp"
)
Von dort aus können Sie dann weitere Berechnungen hinzufügen.
Betreff: So automatisieren Sie die Analyse zyklischer DatenHallo @ChrisLooi ,
Neben dem, was @jthi dachte, wollte ich noch mehr JSL hinzufügen, das helfen könnte, es für die Hunderte (Tausende?) von Zyklen zu automatisieren, mit denen Sie möglicherweise zu tun haben. Unten finden Sie Code, der für den gesamten Datensatz funktionieren sollte, obwohl er nur für den von Ihnen bereitgestellten getestet wurde (danke, das hilft wirklich sehr!). Ich habe den Code nicht kommentiert, aber wenn ein Teil keinen Sinn ergibt, lassen Sie es mich wissen und ich erkläre, was er tut.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "State",
"Character",
"Nominal",
Formula(
If(
0 <= :Temp Profile < 130 & Dif( :Temp Profile ) < 0, "Ramp down",
0 <= :Temp Profile < 130 & Dif( :Temp Profile ) > 0, "Ramp up",
"No Ramp"
)
)
);
dt << New Column( "Cycle No", "Numeric", "Ordinal" );
dt << New Column( "Phase", "Character", "Nominal" );
l = 1;
:"Cycle No"n[1] = 1;
For( i = 2, i <= N Rows( dt ) - 1, i++,
If(
(:State[i] == :State[i - 1]), :"Cycle No"n[i] = l,
((:State[i] != :State[i - 1]) & (:State[i] == "Ramp down" & :State[i - 1] == "No Ramp")),
:"Cycle No"n[i] = l;
:Phase[i] = "Start";,
((:State[i] != :State[i - 1]) & (:State[i] == "No Ramp" & :State[i - 1] == "Ramp down")),
:"Cycle No"n[i] = l;
:Phase[i - 1] = "End";,
((:State[i] != :State[i - 1]) & (:State[i] == "Ramp up" & :State[i - 1] == "No Ramp")),
:"Cycle No"n[i] = l;
:Phase[i] = "Start";,
((:State[i] != :State[i - 1]) & (:State[i] == "No Ramp" & :State[i - 1] == "Ramp up")),
:Phase[i - 1] = "End";
l++;
:"Cycle No"n[i] = l;
)
);
:"Cycle No"n[N Row( dt )] = l;
dt << Row Selection( Select Where( :Phase == "Start" ) );
dt << Row Selection( Select Where( :Phase == "End" ), Current Selection( "Extend" ) );
dtsubset = dt << Subset( Selected Rows( 1 ), Selected columns only( 0 ), Suppress Formula Eval( 1 ) );
dt << Clear Select;
dt_results = dtsubset << Summary(
Group( :State, :Cycle No ),
Mean( :Time ),
Mean( :Temp Profile ),
Subgroup( :Phase ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" ),
Link to original data table( 0 )
);
Close( dtsubset, no save );
dt_results << New Column( "Temp Rate Change (°C/sec)",
"Numeric",
"Continuous",
Formula( (:"Temp Profile, End"n - :"Temp Profile, Start"n) / (:"Time, End"n - :"Time, Start"n) )
);
dt_results << Sort( By( :Cycle No, :"Time, End"n, :State ), Order( Ascending, Ascending, Ascending ), Replace Table, Suppress Formula Eval( 0 ) );
dt_results << Delete Columns( :"N Rows"n );
Sie können es natürlich flexibler gestalten, indem Sie die Möglichkeit hinzufügen, den relevanten Temperaturbereich zu ändern (hier ist er fest als 0 und 130 codiert), aber das führt auch zu etwas mehr Komplexität.
Wie auch immer, ich hoffe, das hilft!
DS
Betreff: So automatisieren Sie die Analyse zyklischer DatenVielen Dank an jthi und SDF1 für die Hilfe. Wir wissen das zu schätzen.