Contrôle qualité et reformatage des donnéesSalut à tous,
Une procédure de ralentissement courante dans mon flux de travail est qu'un client nous envoie une feuille de calcul avec des résultats contenant «<0,01» ou un autre nombre arbitraire pour les échantillons inférieurs à une limite de détection. Nous avons un code R interne qui calcule l'imputation pour ces valeurs, mais nous devons reformater l'ensemble de données (exemple ci-joint). À partir du fichier, nous devons créer deux CSV séparés, l'un avec non-détecte remplacé par zéro (fichier de détection joint) et un autre où toutes les valeurs sont des zéros et les non-détectés sont remplacés par la limite de détection sans le symbole `` <'' (Fichier joint non détecté).
Quelqu'un sait-il automatiser ce processus pour créer ces deux CSV à partir de l'ensemble de données? Je serais ravi si JMP avait cette fonctionnalité ou si quelqu'un pouvait fournir un script général.
ScriptingRe: QA et reformatage des donnéesC'est une tâche assez simple pour JMP. Exécutez ce code (après avoir modifié les sections ) et voyez s'il vous donne ce que vous voulez. Ensuite, vous devez accéder à la bibliothèque de documentation JMP et lire le guide de script, afin que vous puissiez comprendre ce que fait le code ci-dessous
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: QA et reformatage des donnéesSalut Jim,
J'ai examiné cela et il manque la deuxième partie de la tâche. Nous avons besoin d'un script pour que «Non Detect» change également toutes les valeurs en zéros.
Je veux exécuter la boucle, sélectionnez toutes les cellules qui ont des valeurs> 0 (à l'exclusion de celles qui ont des valeurs DL "<0,0").
La dernière partie du code que vous avez envoyé fonctionne très bien, j'ai juste besoin d'insérer «NonDetectPreprocess.csv» dedans.
J'ai essayé d'utiliser ce script personnalisé que j'ai créé:
// 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: QA et reformatage des données</LINGO-SUB><LINGO-BODY id="lingo-body-288098" slang="en-US"><P>Bien essayé ... mais je pense que c'est ce que vous voulez</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: QA et reformatage des donnéesSalut Jim,
J'ai remarqué que vous avez fait une sélection de ligne inversée. Bien que cela aide, le problème est que seules les colonnes qui contenaient le, "<0.0", sont sélectionnées. Comment sélectionner toutes les colonnes contenant des données numériques dans l'ensemble de données et les modifier?
Merci pour l'aide!
Re: QA et reformatage des donnéesFaites un suivi avec une photo si cela est plus clair. Le jaune représente les limites de détection, "<0,0", qui ont été remplacées. Ces colonnes ont été remplacées par des zéros, mais le reste est resté inchangé.

Re: QA et reformatage des donnéesAh, je vois le problème ..... et j'ai corrigé le problème ci-dessous ..... Je crois. Mais d'abord, permettez-moi de clarifier quelque chose en premier. Lorsque JMP lit les différentes colonnes, il lit toutes les données d'une colonne donnée et décide si la colonne est une colonne numérique ou une colonne de caractères. Toutes les valeurs d'une colonne doivent être des valeurs numériques pour que la colonne soit considérée comme numérique. Par conséquent, lorsque JMP trouve une colonne avec une cellule non numérique, c'est-à-dire <0,0005, il déclare la colonne comme étant une colonne de caractères. Mon code en profite, en ce qu'il permet au code de trouver les colonnes où un "<" a été trouvé. Il permet également à JSL d'utiliser des fonctions de manipulation de caractères telles que Substr () pour se débarrasser du "<" et laisser un numérique valide dans la cellule. Mais alors, une fois que tous les "<" sont supprimés, la colonne peut alors être changée en une colonne numérique ...... << type de données (numérique). Voici mon nouveau code, convertissant toutes les colonnes qu'il trouve comme étant numériques juste après la lecture des données et avant que les colonnes «<» aient été traitées, en 0. Je suppose que vous souhaitez modifier toutes les valeurs d'une colonne numérique à 0, même s'il s'agissait d'une valeur négative. Le code corrige ensuite les colonnes «<», ce qui modifie toutes les cellules numériques à 0, à l'exception des cellules contenant «<».
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>