Hola a todos,
Estoy intentando integrar jmp para procesar datos de fermentación de etanol en gráficos y otras métricas. Tengo algunos problemas para convertir el formato existente de los datos en una tabla que JMP pueda usar.
Recibimos los datos como una hoja de Google de la planta. Puedo cargar esta tabla de datos en JMP. El problema viene con el formato de los datos. Los datos se enumeran por número de lote para cada fila, y cada columna es una cadena de texto con números como "Etanol de 4 horas" o "Láctico de 8 horas". Vea a continuación un ejemplo.
| Lote | 0 h Etanol | 0 h Láctico | 0 h Acético | 4 horas de etanol | Láctico 4h | 4 horas acético | …. | 60 h Etanol | 60 h Láctico | 60 h Acético |
| 1 | | | | | | | | | | |
| 2 | | | | | | | | | | |
| 3 | | | | | | | | | | |
| 4 | | | | | | | | | | |
Necesito poner cada categoría en una base por tiempo. Por ejemplo, quiero graficar la concentración de etanol de 0 a 60 horas para los lotes 2 y 3. Creo que necesito apilar la tabla de datos, texto en columnas y usar recodificar para cambiar el encabezado de la columna de la cadena de texto al tiempo en horas como una entrada numérica. Tengo algunos problemas para obtener la tabla exactamente como la quiero para crear estos gráficos. Cualquier ayuda sería apreciada. Gracias por adelantado.
Aquí hay un ejemplo que produce su gráfico de Etanol, con datos ficticios

Aquí hay un script que produce la trama.
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 ) )
)
)
);
De hecho, solía trabajar en esta industria y tengo buenos recuerdos de todos los diferentes formatos de datos con los que nos encontramos... Por lo general, fue el formato de datos horizontal que proporcionó. Jim tiene toda la razón en que necesitas hacer una combinación de apilar y dividir la mesa. Haría una sugerencia muy pequeña al script anterior. Si usa el formato "hr:m" en la línea de abajo, dará como resultado las unidades de duración en lugar de la hora del día.
¡Divertirse!
// Create new time and Type of Gas
dtStack << New Column( "Time", Format( "hr:m" ), set each value( Num( Word( 1, :label, "hr" ) ) * 3600 ) );