1,2 Millionen Zeilen x 16 Spalten
Die Spalte für die Umgebungstemperatur zeigt viele Beobachtungen (nach Tag), die als Ausreißer oberhalb der Box und des oberen Whisker-Schwanzes im Graph Builder klassifiziert wurden. Dies ist bedauerlich, aber wahrscheinlich auf die Platzierung der Umgebungstemperatur-Messsonde an einem fahrenden Fahrzeug zurückzuführen.
Ziel ist es, Datenreihen mit Ausreißern der Umgebungstemperatur korrekt zu identifizieren und zu unterdrücken, bevor ein neuronales Netzwerk zum Modellieren der Daten verwendet wird, um die Leistung von Widget A mit Widget B zu vergleichen.
Ich habe ein paar Threads hier gelesen, kann aber keine ähnliche Frage mit Lösung finden.
Easy-peezy
Bringen Sie Ihre Ausreißerbox
Ziehen Sie den Cursor über alle Ausreißerpunkte, um alle in Ihrer Datentabelle auszuwählen.
Wechseln Sie nun zu der Spalte RowState in Ihrer Datentabelle und zu einer der ausgewählten Zeilen.
Klicken Sie mit der rechten Maustaste auf die ausgewählte Zeile und wählen Sie "Ausschließen".
Alle ausgewählten Zeilen werden ausgeschlossen
Möglicherweise möchten Sie Ausblenden und Ausschließen auswählen
Hallo @ 4MUL8R
Ich habe einmal ein Skript geschrieben, das Zeilen kennzeichnet, wenn sie Ausreißer in einer der Gruppen in einer der Variablen sind. Ich habe es aktualisiert, um verschiedene Tage in einer Spalte und ein paar Spalten der Temperatur einzuschließen. Es wird eine neue binäre Spalte erstellt, die Ausreißer für jede ursprüngliche Spalte angibt, und eine weitere, die angibt, ob die Beobachtung in einer der Variablen ein Ausreißer ist.
Lass uns wissen, ob es funktioniert.
Ron
Names Default To Here( 1 );
// make a sample data table
dt = New Table( "Data",
add rows( 10000 ),
New Column( "it", Numeric, Ordinal, Format( "Best", 8 ), Formula( Row() ) ),
New Column( "Day", Numeric, Ordinal, Format( "Best", 8 ), formula( Random Integer( 110 ) ) ),
New Column( "temp1", Numeric, Continues, Format( "Best", 8 ), formula( Random Lognormal( :Day / 10, 5 ) ) ),
New Column( "temp2", Numeric, Continues, Format( "Best", 8 ), formula( Random Lognormal( :Day / 10, 5 ) ) ),
New Column( "Out",
Numeric,
Ordinal,
Format( "Best", 8 ),
Set Property( "Value Colors", {0 = -13977687, 1 = -4222943} ),
Color Cell by Value,
formula( 0 )
),
New Column( "Outtemp1",
Numeric,
Ordinal,
Format( "Best", 8 ),
Set Property( "Value Colors", {0 = -13977687, 1 = -4222943} ),
Color Cell by Value,
formula( 0 )
),
New Column( "Outtemp2",
Numeric,
Ordinal,
Format( "Best", 8 ),
Set Property( "Value Colors", {0 = -13977687, 1 = -4222943} ),
Color Cell by Value,
formula( 0 )
),
);
dt << run formulas;
Column( dt, "it" ) << delete formula;
Column( dt, "Day" ) << delete formula;
Column( dt, "temp1" ) << delete formula;
Column( dt, "temp2" ) << delete formula;
Column( dt, "Out" ) << delete formula;
Column( dt, "Outtemp1" ) << delete formula;
Column( dt, "Outtemp2" ) << delete formula;
// now we get to work
// make a list of days
byvarlist = Associative Array( dt:Day ) << get keys;
// make a list of columns
cols = dt << get column names( Continuous ); //List all Numeric columns
// loop through the days
For( i = 1, i <= N Items( byvarlist ), i++,
// select each Day
dt << select where( dt:Day == byvarlist[i] );
// subset each Day
subdt = dt << Subset( Selected Rows( 1 ) );
// clear selection for smooth workflow
dt << clear select;
// fined outliers in each variable within each Day
For( ii = 1, ii <= N Items( cols ), ii++,
out = Eval(
Parse(
"subdt << get rows where(
subdt:" || Char( cols[ii] ) || " > Col Quantile( subdt:" || Char( cols[ii] ) ||
", 0.75 ) + 1.5 * (Col Quantile( subdt:" || Char( cols[ii] ) || ", 0.75 ) - Col Quantile( subdt:" || Char( cols[ii] ) ||
", 0.25 )) | subdt:" || Char( cols[ii] ) || " <
Col Quantile( subdt:" || Char( cols[ii] ) ||
", 0.25 ) - 1.5 * (Col Quantile( subdt:" || Char( cols[ii] ) || ", 0.75 ) - Col Quantile( subdt:" || Char( cols[ii] ) ||
", 0.25 )));"
)
)`;
Eval( Parse( "column (subdt, \!"Out" || Char( cols[ii] || "\!" )[" || Char( out ) || "] = 1;" ) ) );
// also indicate the global outlier
Column( subdt, "Out" )[out] = 1;
//wait (0.00001);
);
// update original data table with new information for the Day
subdt << delete columns( "Day" );
subdt << delete columns( cols );
dt << Update( With( subdt ), Match Columns( :it = :it ) );
Close( subdt, No Save );
//Wait( 0.00001 );
);
dt << color by column( :Out );
Ich möchte einen etwas anderen Ansatz vorschlagen.
Versuchen Sie vielleicht, ein Skript für die Explore Outliers-Plattform zu erstellen:
dt=current data table();<BR />obj=dt<<EXPLORE outliers=""></EXPLORE>
Verwenden Sie zum Einrichten die Explore Outliers-Plattform, um Ihre Bedingungen festzulegen, und speichern Sie dann das Skript im Skriptfenster.
Ersetzen Sie meine durch Ihre Bedingungen, und Sie können loslegen.
Sie können auch einfach die Ausreißer auswählen, die Auswahl umkehren und dann eine Teilmenge der Daten erstellen, die Sie behalten möchten.