Comment automatiser l'analyse des données cycliquesChère communauté JMP,
J'ai un four qui fait varier la température en continu (du chaud au froid, puis du froid au chaud et ainsi de suite...).
Le four permet l'enregistrement de la température en fonction du temps.
Si nous traçons la température sur l'axe Y et le temps sur l'axe X, nous obtenons le graphique ci-joint.
Nous devons calculer quel est le taux de changement de température dans une plage de température spécifique (dans ce cas entre 0 dgC et 130 dgC).
Par exemple:
Les informations épinglées en vert font référence à une rampe descendante (de 130 dgc à 0 dgc).
Avec le temps respectif, nous pouvons alors calculer le taux de changement de température (130 divisé par la différence de temps).
Les informations épinglées en violet font référence à la montée en puissance (de 0 dgC à 130 dgc).
Ensuite, nous faisons la même chose pour calculer le taux de changement de température.
Le vert (rampe descendante) et le violet (rampe ascendante) = 1 cycle
Dans ce cas, nous devons calculer toutes les rampes de montée et de descente pour l'ensemble des plusieurs cycles ici.
En fait, à titre d'exemple, nous ne montrons que quelques cycles, mais en réalité, il y en a des centaines.
Ma question est de savoir comment calculer la montée et la descente pour chaque cycle et la stocker dans une autre table de données ?
Bien sûr, on peut le faire manuellement mais c'est trop fastidieux.
Existe-t-il un moyen automatisé ou « plus simplifié » pour y parvenir ?
Je joins les données.
Le four enregistre uniquement 2 colonnes de données (heure et température). Il n'y a pas de données pour le cycle (1er cycle, 2e cycle, etc.).
Désolé pour le long courrier et merci pour tout conseil.
Fr,
Chris
Automatisation et scriptsExploration et visualisation des donnéesRé: Comment automatiser l'analyse des données cycliquesVous pouvez le faire par exemple en utilisant des formules. Vous pouvez commencer par ajouter une colonne d'état

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"
)
À partir de là, vous pouvez ensuite ajouter d’autres calculs.
Ré: Comment automatiser l'analyse des données cycliquesSalut @ChrisLooi ,
En accord avec ce que @jthi pensait, je voulais ajouter un peu plus de JSL qui pourrait aider à l'automatiser pour les centaines (milliers ?) de cycles que vous pourriez avoir à gérer. Vous trouverez ci-dessous un code qui devrait fonctionner pour l'ensemble des données, bien qu'il ait été testé uniquement pour celui que vous avez fourni (merci, cela aide vraiment beaucoup !). Je n'ai pas commenté le code, mais s'il y a une partie qui n'a pas de sens, faites-le moi savoir et je vous expliquerai ce qu'elle fait.
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 );
Vous pouvez bien sûr le rendre plus flexible en ajoutant la possibilité de modifier la plage de température qui vous intéresse (ici, elle est codée en dur à 0 et 130), mais cela ajoute également un peu plus de complexité.
Quoi qu'il en soit, j'espère que cela aide !
DS
Ré: Comment automatiser l'analyse des données cycliquesMerci à jthi et SDF1 pour leur aide. Je l'apprécie.