1,2 milioni di righe x 16 colonne
La colonna per la temperatura ambiente mostra molte osservazioni (per giorno) che sono state classificate come valori anomali, sopra la scatola e la coda superiore del baffo nel generatore di grafici. Questo è un peccato, ma probabilmente a causa del posizionamento della sonda di misurazione della temperatura ambiente su un veicolo in movimento.
L'obiettivo è identificare e sopprimere correttamente le file di dati con valori anomali di temperatura ambiente, prima di utilizzare una rete neurale per modellare i dati per confrontare le prestazioni del widget A con il widget B.
Ho letto alcuni thread qui, ma non riesco a trovare una domanda simile con la soluzione.
Easy-Peezy
Apri la tua scatola dei valori anomali
Trascina il cursore su tutti i punti anomali che li selezioneranno tutti nella tabella dei dati.
Ora vai alla colonna RowState nella tabella dei dati e vai a una delle righe che è stata selezionata.
Passando con il mouse sulla riga selezionata, fai clic con il pulsante destro del mouse e seleziona "Escludi"
Tutte le righe selezionate verranno escluse
Potresti voler selezionare Nascondi ed Escludi
Ciao @ 4MUL8R
una volta ho scritto uno script che contrassegna le righe se sono valori anomali in uno dei gruppi in una delle variabili. l'ho aggiornato per includere diversi giorni in una sola colonna e un paio di colonne di temperatura. produce una nuova colonna binaria che indica valori anomali per ogni colonna originale e un'altra che indica se l'osservazione è un valore anomalo in una qualsiasi delle variabili.
facci sapere se funziona.
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 );
Vorrei suggerire un approccio leggermente diverso.
Forse prova a creare script per la piattaforma Explore Outliers, in questo modo:
dt=current data table();<BR />obj=dt<<EXPLORE outliers=""></EXPLORE>
Per configurarlo, usa la piattaforma Explore Outliers per ottenere le tue condizioni, quindi salva lo script nella finestra dello script.
Sostituisci le tue condizioni alle mie e sei a posto.
Puoi anche, selezionare i valori anomali, quindi invertire la selezione e quindi creare un sottoinsieme dei dati che desideri conservare.