순환 데이터에 대한 분석을 자동화하는 방법JMP 커뮤니티 여러분,
저는 온도를 지속적으로 변경하는 오븐을 가지고 있습니다(뜨거운 상태에서 차가운 상태로, 그런 다음 차가운 상태에서 뜨거운 상태로 반복).
오븐은 온도에 따른 시간을 기록합니다.
온도를 Y축에, 시간을 X축에 그래프로 그리면 첨부된 그래프가 나옵니다.
우리는 특정 온도 범위(이 경우 0℃와 130℃ 사이) 내에서 온도 변화율이 얼마인지 계산해야 합니다.
예를 들어:
녹색 고정 정보는 램프 다운(130dgc에서 0dgc로)을 나타냅니다.
해당 시간을 이용하면 온도 변화율(130을 시간 차이로 나눈 값)을 계산할 수 있습니다.
보라색 고정된 정보는 램프 업(0dgC에서 130dgc로)을 참조합니다.
그런 다음 동일한 방법으로 온도 변화율을 계산합니다.
녹색(램프 다운) 및 보라색(램프 업) = 1 사이클
이 경우, 우리는 여러 사이클 전체에 걸쳐 상승과 하강을 모두 계산해야 합니다.
실제로 예시 목적으로 몇 개의 사이클만 보여드리지만, 실제로는 수백 개의 사이클이 있습니다.
제 질문은 각 사이클의 램프 업과 램프 다운을 어떻게 계산하고 다른 데이터 테이블에 저장하는가입니다.
물론, 수동으로 할 수도 있지만 너무 지루합니다.
이 작업을 자동화하거나 "더 단순화된" 방법이 있나요?
데이터를 첨부합니다.
오븐은 2개의 데이터 열(시간 및 온도)만 기록합니다. 사이클(1차 사이클, 2차 사이클 등)에 대한 데이터는 없습니다.
긴 메일을 보내드려서 죄송하고, 조언을 해주셔서 감사합니다.
브,
크리스
자동화 및 스크립팅데이터 탐색 및 시각화Re: 순환 데이터에 대한 분석을 자동화하는 방법예를 들어 수식을 사용하여 이를 수행할 수 있습니다. 상태 열을 추가하여 시작할 수 있습니다.

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"
)
여기서 더 많은 계산을 추가할 수 있습니다.
Re: 순환 데이터에 대한 분석을 자동화하는 방법안녕하세요 @ChrisLooi 님 ,
@jthi가 생각한 것과 함께, 저는 여러분이 다루고 있을 수 있는 수백(수천?) 사이클을 자동화하는 데 도움이 될 수 있는 몇 가지 JSL을 추가하고 싶었습니다. 아래는 전체 데이터 세트에서 작동해야 하는 코드이지만, 여러분이 제공한 데이터 세트에 대해서만 테스트했습니다(감사합니다. 그렇게 하면 정말 많은 도움이 됩니다!). 저는 코드에 주석을 달지 않았지만, 이해가 되지 않는 부분이 있으면 알려주시면 무엇을 하는지 설명해 드리겠습니다.
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 );
물론, 관심 있는 온도 범위를 변경하는 기능을 추가하면 더 유연하게 만들 수 있습니다(여기서는 0~130으로 하드코딩되어 있음). 하지만 그렇게 되면 복잡성도 더 커집니다.
어쨌든 도움이 되길 바랍니다!
디에스
Re: 순환 데이터에 대한 분석을 자동화하는 방법jthi와 SDF1의 도움에 감사드립니다. 고맙습니다.