Controllo qualità dei dati e riformattazioneCiao a tutti,
Una procedura di rallentamento comune nel mio flusso di lavoro è che un cliente ci invia un foglio di calcolo con risultati contenenti "<0,01" o un altro numero arbitrario per i campioni che sono al di sotto di un limite di rilevamento. Abbiamo un codice R interno che calcola l'assegnazione di questi valori, ma dobbiamo riformattare il set di dati (esempio allegato qui). Dal file dobbiamo creare due CSV separati, uno con i non rilevati sostituiti con zero (Detect file allegato) e un altro in cui tutti i valori sono zeri e i non rilevati vengono sostituiti con il limite di rilevamento senza il simbolo '<' (File allegato non rilevato).
Qualcuno sa come automatizzare questo processo per creare questi due CSV dal set di dati? Sarei entusiasta se JMP avesse questa funzionalità o se qualcuno potesse fornire uno script generale.
ScriptingOggetto: controllo qualità dei dati e riformattazioneQuesta è un'attività abbastanza semplice per JMP. Esegui questo codice (dopo aver modificato le sezioni ) e vedi se ti dà quello che vuoi. Quindi devi andare alla Libreria della documentazione di JMP e leggere la Guida allo scripting, in modo da poter capire cosa sta facendo il codice seguente
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>
Oggetto: controllo qualità dei dati e riformattazioneCiao Jim,
Ho esaminato questo aspetto e manca la seconda parte del compito. Abbiamo bisogno di uno script per "Non Detect" per modificare anche tutti i valori in zeri.
Voglio eseguire il ciclo, seleziona tutte le celle che hanno valori> 0 (escluse quelle che hanno valori DL "<0,0").
L'ultima parte del codice che hai inviato funziona alla grande, devo solo inserire "NonDetectPreprocess.csv" al suo interno.
Ho provato a utilizzare questo script personalizzato che ho creato:
// 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">Oggetto: controllo qualità dei dati e riformattazione</LINGO-SUB><LINGO-BODY id="lingo-body-288098" slang="en-US"><P>Bel tentativo .... ma penso che questo sia quello che vuoi</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>
Oggetto: controllo qualità dei dati e riformattazioneCiao Jim,
Ho notato che hai selezionato una riga invertita. Anche se questo aiuta, il problema è che sono selezionate solo le colonne che contenevano "<0,0". Come faccio a selezionare tutte le colonne che contengono dati numerici nel set di dati e a modificarle?
Grazie per l'aiuto!
Oggetto: controllo qualità dei dati e riformattazioneBasta seguire una foto se è più chiaro. Il giallo sono i limiti di rilevamento, "<0,0", che sono stati sostituiti. Quelle colonne sono state sostituite con zeri, ma il resto è rimasto invariato.

Oggetto: controllo qualità dei dati e riformattazioneAh, vedo il problema ..... e ho corretto il problema di seguito ..... credo. Ma prima, lasciatemi chiarire qualcosa prima. Quando JMP legge le diverse colonne, legge tutti i dati per una data colonna e decide se la colonna è una colonna numerica o di caratteri. Tutti i valori in una colonna devono essere valori numerici affinché la colonna sia considerata numerica. Pertanto, quando JMP trova una colonna con una cella non numerica, cioè <0.0005, dichiara che la colonna è una colonna di caratteri. Il mio codice ne approfitta, in quanto consente al codice di trovare le colonne in cui è stato trovato un "<". Consente inoltre a JSL di utilizzare funzioni di manipolazione dei caratteri come Substr () per eliminare "<" e lasciare un valore numerico valido nella cella. Ma poi, una volta rimossi tutti i caratteri "<", la colonna può essere modificata in una colonna numerica ...... << tipo di dati (numerico). Ecco il mio nuovo codice, che converte tutte le colonne che trova come numeriche subito dopo che i dati sono stati letti e prima che le colonne "<" siano state elaborate, a 0. Suppongo che tu voglia modificare tutti i valori in una colonna numerica su 0, anche se fosse un valore negativo. Il codice quindi continua a correggere le colonne "<", che cambia tutte le celle numeriche a 0 tranne le celle che avevano "<".
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>