Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Ciao,
Sto cercando di replicare ciò che faccio manualmente nello script JSL.
So come eseguire la funzione "Esplora valori anomali" in JSL, ma devo ancora selezionare manualmente le righe con valori anomali identificati da "Esplora valori anomali", quindi premere "seleziona righe", quindi premere "escludi".
Sto cercando di creare uno script che eseguo ed esclude automaticamente i valori anomali identificati senza che io debba fare nient'altro (idealmente non apre nemmeno la finestra Esplora valori anomali.
Qualcuno ha qualche idea?
Grazie!
Automazione e scriptingMiscelazione e pulizia dei datiRi: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Hai commesso un errore molto comune.La prima volta che corri
el = Explore Outliers(
punta alla tabella dati "dt". Tuttavia, al momento di eseguire la seconda volta, è stata creata una nuova tabella di dati "dtQuant", che non è la tabella di dati corrente per quanto ne sa JMP.E, naturalmente, non troverà valori anomali.Per risolvere questo problema, tutto ciò che devi fare è forzare JMP ad assicurarsi che punti alla tabella dati corretta.
el = dt << Explore Outliers(
Su un altro argomento, l'uso di "j" come nome di variabile a volte può causare problemi.JMP ha una funzione chiamata j.Anche se puoi avere una variabile chiamata j, può rendere la lettura del codice confusa.
Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Ho scomposto il codice mentre sto cercando di eseguire il debug. Sembra che il problema sia che nel secondo ciclo non è in grado di salvare i limiti anomali dell'intervallo quantile.
Nel log c'è scritto "
Questa clausola Where per la tabella di dati 'Quantile Outlier Limits' non ha prodotto righe: dt:Grade == grades[j]"
Tuttavia, so che ogni grado in quella lista ha dei limiti ed esiste. L'ho verificato partendo da diversi valori di J e funziona sempre sul primo ciclo, quindi si blocca sul secondo ciclo. Presumo che abbia qualcosa a che fare con il modo in cui memorizzo i dati nella variabile el?
Names Default to here(1);
dt = current data table();
// Determine grades to loop through
dt1 = dt << summary(Group(:Grade));
dt1 << select where ( :Grade == "");
dt1 << delete rows;
dt1 << select where ( :Grade == "Check input");
dt1 << delete rows;
grades = dt1:Grade << get values;
Close (dt1, nosave);
For (j = 3, j<= N items ( grades ), J++,
show(grades[j]);
el = Explore Outliers(
Y( dt:Hardness, dt:UTS, dt:M100, dt:Elongation, dt:LCR, dt:Prof, dt:SG ),
Tail Quantile( 0.25 ),
Show only columns with outliers( 1 ),
Quantile Range Outliers,
Where( dt:Grade == grades[j]);
);
show (el);
dtQuant = el << Save Quantile Outlier Limits;
Report(el)<< close window;
);
Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Senza vedere il tuo codice, posso solo indovinare qual è il problema.Sembra che tu abbia aggiunto una colonna nella tua tabella di dati, che contiene le colonne su cui vuoi basare l'analisi dei valori anomali.Se sto indovinando correttamente, di seguito è una modifica al mio script precedente, che ha una nuova colonna aggiunta alla tabella dei dati, che contiene le colonne da analizzare.Lo script legge le colonne da analizzare dalla colonna e quindi utilizza i nomi di tali colonne per limitare le colonne da valutare
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Water Treatment.jmp" );
// Create a new column with the names of the columns to be used
// in the analysis
dt << New Column( "theColumns",
character,
set values(
{"Q-E", "ZN-E", "PH-E", "DBO-E", "DQO-E", "SS-E", "SSV-E", "SED-E", "COND-E", "PH-P", "DBO-P", "SS-P",
"SSV-P", "SED-P", "COND-P", "PH-D", "DBO-D", "DQO-D", "SS-D", "SSV-D", "SED-D", "COND-D", "PH-S"}
)
);
// Get the list of columns from the column that contains
// the columns to be analyzed
colNames = dt:theColumns << get values;
// Get rid of entries that have blank/null values
For( i = N Items( colNames ), i >= 1, i--,
If( colNames[i] == "",
Remove From( colNames, i, 1 )
)
);
// Run the analysis using the list of column extracted from the
// "theColumns" column
el = Explore Outliers(
Y( Eval( colNames ) ),
Quantile Range Outliers,
);
dtQuant = el << Save Quantile Outlier Limits;
dtQuant << show window( 0 );
Report( el ) << close window;
// Get rid of non involved columns
dtQuant << select where( :Number of Outliers == 0 );
dtQuant << delete rows;
// Loop through the remaining rows and set the affected rows in the dt table to selected
dt << clear row states;
For( i = 1, i <= N Rows( dtQuant ), i++,
dt << select where(
As Column( dt, dtQuant:Column[i] ) <= dtQuant:Low Threshold[i] | As Column( dt, dtQuant:Column[i] )
>= dtQuant:High Threshold[i],
current selection( "extend" )
)
);
// Hide and exclude the rows
dt << hide and exclude;
// Close the no longer needed data table
Close( dtQuant, nosave );Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Grazie @txnelson per la soluzione.
Ho provato a modificarlo in modo da poter eseguire il ciclo dell'intero codice attraverso un elenco di variabili da una colonna in modo da utilizzare Quantile Range Outliers con un'ulteriore funzione "where".
Il ciclo sembra arrestarsi in modo anomalo non essendo in grado di salvare limiti anomali quantili dicendo che l'oggetto non è scriptabile. Qualche idea?Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Inoltre @txnelson la risposta di , potresti trovare qualcosa in questo filo .
Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Sì, hai ragione, mi dispiace per quella svista da parte mia.Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?@SDF1 la richiesta è per Explore Outliers, non Explore Missing
@JC7
Ecco un esempio che ho elaborato che utilizza la tabella dei dati di esempio per il trattamento dell'acqua e nasconde ed esclude tutte le righe trovate per tutte le colonne che sono state trovate come valori anomali.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Water Treatment.jmp" );
el = Explore Outliers(
Y(
:Name( "Q-E" ),
:Name( "ZN-E" ),
:Name( "PH-E" ),
:Name( "DBO-E" ),
:Name( "DQO-E" ),
:Name( "SS-E" ),
:Name( "SSV-E" ),
:Name( "SED-E" ),
:Name( "COND-E" ),
:Name( "PH-P" ),
:Name( "DBO-P" ),
:Name( "SS-P" ),
:Name( "SSV-P" ),
:Name( "SED-P" ),
:Name( "COND-P" ),
:Name( "PH-D" ),
:Name( "DBO-D" ),
:Name( "DQO-D" ),
:Name( "SS-D" ),
:Name( "SSV-D" ),
:Name( "SED-D" ),
:Name( "COND-D" ),
:Name( "PH-S" ),
:Name( "DBO-S" ),
:Name( "DQO-S" ),
:Name( "SS-S" ),
:Name( "SSV-S" ),
:Name( "SED-S" ),
:Name( "COND-S" ),
:Name( "RD-DBO-P" ),
:Name( "RD-SS-P" ),
:Name( "RD-SED-P" ),
:Name( "RD-DBO-S" ),
:Name( "RD-DQO-S" ),
:Name( "RD-DBO-G" ),
:Name( "RD-DQO-G" ),
:Name( "RD-SS-G" ),
:Name( "RD-SED-G" )
),
Quantile Range Outliers,
);
dtQuant = el << Save Quantile Outlier Limits;
dtQuant << show window( 0 );
Report( el ) << close window;
// Get rid of non involved columns
dtQuant << select where( :Number of Outliers == 0 );
dtQuant << delete rows;
// Loop through the remaining rows and set the affected rows in the dt table to selected
dt << clear row states;
For( i = 1, i <= N Rows( dtQuant ), i++,
dt << select where(
As Column( dt, dtQuant:Column[i] ) <= dtQuant:Low Threshold[i] | As Column( dt, dtQuant:Column[i] )
>= dtQuant:High Threshold[i],
current selection( "extend" )
)
);
// Hide and exclude the rows
dt << hide and exclude;
// Close the no longer needed data table
Close( dtQuant, nosave );
Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?CIAO @JC7 ,
Dovrebbe essere abbastanza facile seguire qualcosa del genere:
Names Default To Here( 1 );
dt = Current Data Table();
colnames = dt << Get column Names();
obj = dt << Explore Missing Values( Y( Eval( colnames ) ) );
obj << select rows( Eval( colnames ) );
DS
Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Sto usando il metodo dei valori anomali della gamma quantile - scusa ho dimenticato di dirlo nel post originale!Ri: Come posso escludere automaticamente le righe che includono i valori anomali identificati dalla funzione "Esplora valori anomali"?Quale metodo anomalo stai selezionando quando esegui Explore Outliers? Sembra che possano essere necessarie soluzioni diverse per i diversi metodi.