Reformateo y control de calidad de datosHola a todos,
Un procedimiento común de ralentización en mi flujo de trabajo es que un cliente nos envía una hoja de cálculo con resultados que contienen '<0.01' o algún otro número arbitrario para muestras que están por debajo de un límite de detección. Tenemos un código R interno que calcula la imputación de estos valores, pero necesitamos reformatear el conjunto de datos (ejemplo adjunto aquí). Desde el archivo, necesitamos crear dos CSV separados, uno con los no detectados reemplazados por cero (archivo de detección adjunto) y otro donde todos los valores son ceros y los no detectados se reemplazan con el límite de detección sin el símbolo '<' (Archivo adjunto Non-Detect).
¿Alguien sabe cómo automatizar este proceso para crear estos dos CSV a partir del conjunto de datos? Estaría encantado si JMP tuviera esta funcionalidad o si alguien pudiera proporcionar un script general.
ScriptingRe: Reformateo y control de calidad de datosEsta es una tarea bastante sencilla para JMP. Ejecute este código (después de editar las secciones ) y vea si le da lo que desea. Luego, debe ir a la Biblioteca de documentación de JMP y leer la Guía de secuencias de comandos, para que pueda comprender lo que hace el siguiente código
Names Default To Here( 1 );
// Open the Excel spreadsheet that has the issues
dt = Open( "<YOUR path="">\Sample Client Data.xlsx" );
// Get all of the character columns
colNames = dt << get column names( string, character );
// Go across all of the character columns, and if "<0.0" is found in one
// or more cells, then change those cells to 0. Then convert the column
// to a numeric column
For( i = 1, i <= N Items( colNames ), i++,
dt << select where( Contains( As Column( colNames[i] ), "<0.0" ) );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
Column( dt, colNames[i] )[selRows] = "0";
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
// Save the Detect version of the data
dt << save( "<YOUR path="">\Detect.csv" );
Close( dt, nosave );
// Reopen the Excel spreadsheet that has issues
dt = Open( "<YOUR path="">\Sample Client Data.xlsx" );
// Get all of the character columns
colNames = dt << get column names( string, character );
// Go across all of the character columns, and if "<0.0" is found in one
// or more cells, then loop through the cells getting rid of the "<"
// Then convert the column to a numeric column
For( i = 1, i <= N Items( colNames ), i++,
dt << select where( Contains( As Column( colNames[i] ), "<0.0" ) );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
For( k = 1, k <= N Rows( selRows ), k++,
theRow = selRows[k];
Column( dt, colNames[i] )[theRow] = Substr( Column( dt, colNames[i] )[theRow], 2 );
);
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
// Save the NonDetect version of the data
dt << save( "<YOUR path="">\NonDetect.csv" );
Close( dt, nosave );</YOUR></YOUR></YOUR></YOUR>
Re: Reformateo y control de calidad de datosHola Jim,
Revisé esto y me falta la segunda parte de la tarea. Necesitamos un script para 'No detectar' para cambiar también todos los valores a ceros.
Quiero ejecutar el ciclo, seleccionar todas las celdas que tienen valores> 0 (excluyendo las que tienen valores DL "<0.0").
La última parte del código que envió funciona muy bien, solo necesito insertar 'NonDetectPreprocess.csv' en él.
Intenté usar este script personalizado que hice:
// Reopen the Excel spreadsheet that has issues
dt = Open( "D:\MD\Datto Workplace\Projects\Internal\JMP Scripts\Zero Imputation\Fake Client Data.csv" );
// Go across all of the character columns, and if concentration is greater than zero is found in one
// or more cells, then change those cells to 0. Then convert the column
// to a numeric column
For( i = 1, i <= N Items( colNames ), i++,
dt << select where( dt > 0 );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
Column( dt, colNames[i] )[selRows] = "0";
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
//Save this sheet for next step
dt << save("D:\MD\Datto Workplace\Projects\Internal\JMP Scripts\Zero Imputation\NonDetectPreprocess.csv" )
Close( dt, nosave );</CODE></PRE><P> </P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-288098" slang="en-US">Re: Reformateo y control de calidad de datos</LINGO-SUB><LINGO-BODY id="lingo-body-288098" slang="en-US"><P>Buen intento ... pero creo que esto es lo que quieres</P>
<PRE><CODE class=" language-jsl">// Reopen the Excel spreadsheet that has issues
dt = Open( "<YOUR path="">\Sample Client Data.xlsx" );
// Get all of the character columns
colNames = dt << get column names( string, character );
// Go across all of the character columns, and if "<0.0" is found in one
// or more cells, then loop through the cells getting rid of the "<"
// Then convert the column to a numeric column
For( i = 3 i <= N Items( colNames ), i++,
dt << select where( ! Contains( As Column( colNames[i] ), "<0.0" ) );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
column( dt, colNames[i] )[selRows] = "0";
);
dt << invert row selection;
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
For( k = 1, k <= N Rows( selRows ), k++,
theRow = selRows[k];
Column( dt, colNames[i] )[theRow] = Substr( Column( dt, colNames[i] )[theRow], 2 );
);
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
// Save the NonDetect version of the data
dt << save( "<YOUR path="">\NonDetect.csv" );
Close( dt, nosave );</YOUR></YOUR>
Re: Reformateo y control de calidad de datosHola Jim,
Noté que hizo una selección de fila invertida. Aunque esto ayuda, el problema es que solo se seleccionan las columnas que contenían "<0.0". ¿Cómo selecciono todas las columnas que tienen datos numéricos en el conjunto de datos y las cambio?
¡Gracias por la ayuda!
Re: Reformateo y control de calidad de datosSimplemente haga un seguimiento con una foto si eso es más claro. Los amarillos son los límites de detección, "<0.0", que fueron reemplazados. Esas columnas fueron reemplazadas por ceros, pero el resto permaneció sin cambios.

Re: Reformateo y control de calidad de datosAh, veo el problema ... y he corregido el problema a continuación ... creo. Pero primero, déjame aclarar algo primero. Cuando JMP lee en las diferentes columnas, lee todos los datos de una columna determinada y decide si la columna es numérica o de caracteres. Todos los valores de una columna deben ser valores numéricos para que la columna se considere numérica. Por lo tanto, cuando JMP encuentra una columna con una celda no numérica, es decir, <0,0005, declara que la columna es una columna de caracteres. Mi código se aprovecha de eso, ya que permite que el código encuentre las columnas donde se ha encontrado un "<". También permite que JSL use funciones de manipulación de caracteres como Substr () para deshacerse de "<" y dejar un valor numérico válido en la celda. Pero luego, una vez que se eliminan todos los "<", la columna se puede cambiar a una columna numérica ...... << tipo de datos (numérico). Aquí está mi nuevo código, que convierte todas las columnas que encuentra como numéricas justo después de que se hayan leído los datos y antes de que se hayan procesado las columnas "<", a 0. Supongo que desea cambiar todos los valores en una columna numérica a 0, incluso si es un valor negativo. El código luego pasa a corregir las columnas "<", lo que cambia todas las celdas numéricas a 0, excepto las celdas que tenían "<".
dt = Open( "C:\users\jim\documents\discussion group\Sample Client Data.xlsx" );
// Get all of the character columns
colNames = dt << get column names( string, character );
colNamesNum = dt << get column names( string, numeric );
// zero out all current numeric columns
For( i = 2, i <= N Items( colNamesNum ), i++,
column( dt, colNamesNum[i] )[1::N Rows(dt)] = 0;
);
// Go across all of the character columns, and if "<0.0" is found in one
// or more cells, then loop through the cells getting rid of the "<"
// Then convert the column to a numeric column
For( i = 1, i <= N Items( colNames ), i++,
dt << select where( ! Contains( As Column( colNames[i] ), "<0.0" ) );
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
column( dt, colNames[i] )[selRows] = "0";
);
dt << invert row selection;
selRows = dt << get selected rows;
If( N Rows( selRows ) > 0,
For( k = 1, k <= N Rows( selRows ), k++,
theRow = selRows[k];
Column( dt, colNames[i] )[theRow] = Substr( Column( dt, colNames[i] )[theRow], 2 );
);
Column( dt, colNames[i] ) << data type( numeric ) << modeling type( continuous );
);
);
// Save the NonDetect version of the data
dt << save( "<YOUR path="">\NonDetect.csv" );
Close( dt, nosave );</YOUR>