안녕하세요 여러분,
에탄올 발효 데이터를 그래프 및 기타 측정항목으로 처리하기 위해 jmp를 통합하려고 합니다. 기존 데이터 형식을 JMP에서 사용할 수 있는 테이블로 변환하는 데 몇 가지 문제가 있습니다.
공장으로부터 데이터를 Google 시트로 받습니다. 이 데이터 테이블을 JMP에 업로드할 수 있습니다. 문제는 데이터 형식과 관련이 있습니다. 데이터는 각 행의 배치 번호별로 나열되며, 각 열은 "4hr Ethanol" 또는 "8hr Lactic"과 같은 숫자가 포함된 텍스트 문자열입니다. 예를 보려면 아래를 참조하세요.
| 일괄 | 0시간 에탄올 | 0시간 젖산 | 0시간 아세트산 | 4시간 에탄올 | 4시간 젖산 | 4시간 아세트산 | …. | 60시간 에탄올 | 60시간 젖산 | 60시간 아세트산 |
| 1 | | | | | | | | | | |
| 2 | | | | | | | | | | |
| 삼 | | | | | | | | | | |
| 4 | | | | | | | | | | |
각 카테고리를 시간별로 배치해야 합니다. 예를 들어 배치 2와 3에 대해 0~60시간의 에탄올 농도를 그래프로 표시하고 싶습니다. 나는 데이터 테이블, 텍스트를 열에 쌓고 레코드를 사용하여 열 머리글을 텍스트 문자열에서 숫자 항목의 시간 단위로 변경해야 한다고 생각합니다. 이러한 그래프를 생성하는 방법을 정확히 테이블로 가져오는 데 몇 가지 문제가 있습니다. 어떤 도움이라도 주시면 감사하겠습니다. 미리 감사드립니다.
저는 실제로 이 업계에서 일했고 우리가 접했던 모든 다양한 데이터 형식에 대한 좋은 추억을 가지고 있습니다. 가장 일반적으로 제공한 수평 데이터 형식이었습니다. 테이블을 쌓고 나누는 작업을 조합해야 한다는 Jim의 말은 정확히 맞습니다. 위의 스크립트에 대해 아주 작은 제안을 하나 하겠습니다. 아래 줄에서 "hr:m" 형식을 사용하면 시간 대신 기간 단위가 표시됩니다.
재미있게 보내세요!
// Create new time and Type of Gas
dtStack << New Column( "Time", Format( "hr:m" ), set each value( Num( Word( 1, :label, "hr" ) ) * 3600 ) );
다음은 가상 데이터를 사용하여 에탄올 차트를 생성하는 예입니다.

다음은 플롯을 생성하는 스크립트입니다.
Names Default To Here( 1 );
// Create a sample data table
dt = New Table( "Example",
Add Rows( 4 ),
New Column( "Batch", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4] ) ),
New Column( "0hr Ethanol",
Numeric,
"Nominal",
Format( "", 16 ),
Set Values( [103.347990080313, 90.8056789034286, 110.847323879326, 94.4892596023655] )
),
New Column( "0 hr Lactic",
Numeric,
"Nominal",
Format( "", 16 ),
Set Selected,
Set Values( [98.2941757953967, 87.0280094785425, 96.8477348247328, 92.910237668013] )
),
New Column( "0 hr Acetic",
Numeric,
"Nominal",
Format( "", 16 ),
Set Values( [86.0736604847805, 84.7654940657705, 103.653020778599, 103.896496570196] )
),
New Column( "4hr Ethanol",
Numeric,
"Nominal",
Format( "", 16 ),
Set Values( [106.780752584519, 83.6557999642181, 131.739275066723, 108.595538300447] )
),
New Column( "4hr Lactic",
Numeric,
"Nominal",
Format( "", 16 ),
Set Values( [117.501711811893, 110.280136421701, 99.5008817613032, 124.122069840277] )
),
New Column( "4hr Acetic",
Numeric,
"Nominal",
Format( "", 16 ),
Set Values( [65.8570956816124, 98.7590715244122, 116.085302666605, 77.465274192855] )
),
New Column( "60 hr Ethanol",
Numeric,
"Nominal",
Format( "", 16 ),
Set Values( [93.2946183359449, 102.663246654816, 88.3140432209597, 77.0616091856786] )
),
New Column( "60 hr Lactic",
Numeric,
"Nominal",
Format( "", 16 ),
Set Values( [115.208356681673, 94.3976953097385, 117.870933434213, 88.9448640120466] )
),
New Column( "60 hr Acetic",
Numeric,
"Nominal",
Format( "", 16 ),
Set Values( [101.707143312459, 115.87798730461, 111.256786967136, 114.046044409696] )
),
Set Row States( [1, 0, 0, 0] )
);
// Stack the columns
dtStack = dt << Stack(
columns(
:"0hr Ethanol"n, :"0 hr Lactic"n, :"0 hr Acetic"n, :"4hr Ethanol"n, :"4hr Lactic"n, :"4hr Acetic"n, :"60 hr Ethanol"n, :"60 hr Lactic"n,
:"60 hr Acetic"n
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
// Create new time and Type of Gas
dtStack << New Column( "Time", Format( "h:m" ), set each value( Num( Word( 1, :label, "h" ) ) * 3600 ) );
For each row(:label = word(-1,:Label," "));
// Split out into separate columns
dtSplit dtStack << Split(
Split By( :Label ),
Split( :Data ),
Group( :Batch, :Time ),
Sort by Column Property
);
// Graph the data
Graph Builder(
Size( 528, 454 ),
Show Control Panel( 0 ),
Variables( X( :Time ), Y( :Ethanol ), Overlay( :Batch ) ),
Elements( Line( X, Y, Legend( 15 ) ), Points( X, Y, Legend( 16 ) ) ),
Local Data Filter(
Add Filter(
columns( :Batch ),
Where( :Batch == {1, 2} ),
Display( :Batch, N Items( 4 ) )
)
)
);