Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Hi,
Ich möchte das, was ich manuell mache, im JSL-Skript replizieren.
Ich weiß, wie man die Funktion „Ausreißer erkunden“ in JSL ausführt, muss aber immer noch manuell die Zeilen mit den durch „Ausreißer erkunden“ identifizierten Ausreißern auswählen, dann auf „Zeilen auswählen“ und dann auf „Ausschließen“ klicken.
Ich versuche, ein Skript zu erstellen, das ich ausführe und das die identifizierten Ausreißer automatisch ausschließt, ohne dass ich etwas anderes tun muss (idealerweise öffnet sich nicht einmal das Fenster „Ausreißer erkunden“).
Hat jemand irgendwelche Ideen?
Danke!
Automatisierung und SkripterstellungDatenmischung und -bereinigungBetreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Sie haben einen sehr häufigen Fehler gemacht.Das erste Mal, dass du rennst
el = Explore Outliers(
es zeigt auf die Datentabelle „dt“. Wenn Sie jedoch die zweite Ausführung starten, haben Sie eine neue Datentabelle „dtQuant“ erstellt, die nach JMP-Informationen nicht die aktuelle Datentabelle ist.Und natürlich werden keine Ausreißer gefunden.Um dies zu beheben, müssen Sie JMP lediglich dazu zwingen, sicherzustellen, dass es auf die richtige Datentabelle verweist.
el = dt << Explore Outliers(
Bei einem anderen Thema kann die Verwendung von „j“ als Variablenname manchmal zu Problemen führen.JMP hat eine Funktion namens j.Auch wenn Sie eine Variable namens j haben können, kann dies das Lesen des Codes verwirrend machen.
Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Ich habe den Code aufgeschlüsselt, während ich versuche, ihn zu debuggen. Es scheint, dass das Problem darin besteht, dass in der zweiten Schleife die Ausreißergrenzen des Quantilbereichs nicht gespeichert werden können.
Im Protokoll steht: „
Diese Where-Klausel für die Datentabelle „Quantile Outlier Limits“ ergab keine Zeilen: dt:Grade == grades[j]“
Ich weiß jedoch, dass jeder Grad auf dieser Liste Grenzen hat und existiert. Ich habe es überprüft, indem ich mit verschiedenen Werten von J begonnen habe, und es funktioniert immer in der ersten Schleife und stürzt dann in der zweiten Schleife ab. Ich gehe davon aus, dass es etwas mit der Art und Weise zu tun hat, wie ich die Daten in der el-Variablen speichere?
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;
);
Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Ohne Ihren Code zu sehen, kann ich nur vermuten, wo das Problem liegt.Es hört sich so an, als hätten Sie Ihrer Datentabelle eine Spalte hinzugefügt, die die Spalten enthält, auf denen Sie Ihre Ausreißeranalyse basieren möchten.Wenn ich richtig geraten habe, finden Sie unten eine Änderung an meinem vorherigen Skript, bei der der Datentabelle eine neue Spalte hinzugefügt wurde, die die zu analysierenden Spalten enthält.Das Skript liest die zu analysierenden Spalten aus der Spalte und verwendet dann diese Spaltennamen, um die auszuwertenden Spalten einzuschränken
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 );Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Danke @txnelson für die Lösung.
Ich habe versucht, es so zu ändern, dass ich den gesamten Code durch eine Liste von Variablen aus einer Spalte schleifen kann, sodass ich die Quantilbereichsausreißer mit einer zusätzlichen „Where“-Funktion verwende.
Die Schleife scheint abzustürzen, da sie Quantil-Ausreißergrenzen nicht speichern kann und besagt, dass das Objekt nicht skriptfähig ist. Irgendwelche Ideen?Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Zusätzlich zu @txnelson 's Antwort, vielleicht findest du etwas darin dieser Thread .
Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Ja, Sie haben Recht, es tut mir leid, dass ich es so versäumt habe.Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?@SDF1 Die Anfrage bezieht sich auf „Explore Outliers“, nicht auf „Explore Missing“.
@JC7
Hier ist ein Beispiel, das ich ausgearbeitet habe und das die Beispieldatentabelle „Wasseraufbereitung“ verwendet und alle gefundenen Zeilen für alle Spalten ausblendet und ausschließt, die als Ausreißer gefunden wurden.
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 );
Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Hallo @JC7 ,
Sollte ziemlich einfach sein, so etwas zu befolgen:
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
Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Ich verwende die Methode der Quantilbereichsausreißer – leider habe ich vergessen, dies im ursprünglichen Beitrag zu erwähnen!Betreff: Wie schließe ich automatisch Zeilen aus, die Ausreißer enthalten, die durch die Funktion „Ausreißer untersuchen“ identifiziert wurden?Welche Ausreißermethode wählen Sie aus, wenn Sie „Explore Outliers“ ausführen? Es scheint, dass für die verschiedenen Methoden unterschiedliche Lösungen erforderlich sein können.