1.2 millones de filas x 16 columnas
La columna de temperatura ambiente muestra muchas observaciones (por día) que se clasificaron como valores atípicos, por encima del cuadro y la cola superior del bigote en el generador de gráficos. Esto es lamentable, pero probablemente debido a la colocación de la sonda de medición de temperatura ambiente en un vehículo en movimiento.
El objetivo es identificar y suprimir correctamente las filas de datos que tienen valores atípicos de temperatura ambiente, antes de usar una red neuronal para modelar los datos y comparar el rendimiento del widget A con el widget B.
He leído algunos hilos aquí, pero no puedo encontrar una pregunta similar con la solución.
Peezy fácil
Trae tu caja atípica
Arrastre el cursor sobre todos los puntos atípicos que los seleccionarán a todos en su tabla de datos.
Ahora vaya a la columna RowState en su tabla de datos y vaya a una de las filas que ha sido seleccionada.
Mientras pasa el mouse sobre la fila seleccionada, haga clic con el botón derecho del mouse y seleccione "Excluir"
Todas las filas seleccionadas serán excluidas
Es posible que desee seleccionar Ocultar y excluir
Hola @ 4MUL8R
Una vez escribí un script que asigna filas si son valores atípicos en cualquiera de los grupos en cualquiera de las variables. Lo actualicé para incluir diferentes días en una columna y un par de columnas de temperatura. produce una nueva columna binaria que indica valores atípicos para cada columna original y una más que indica si la observación es un valor atípico en alguna de las variables.
Háganos saber si funciona.
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 );
Me gustaría sugerir un enfoque un poco diferente.
Tal vez intente crear scripts en la plataforma Explore Outliers, como este:
dt=current data table();<BR />obj=dt<<EXPLORE outliers=""></EXPLORE>
Para configurar esto, use la plataforma Explore Outliers para definir sus condiciones, luego simplemente guarde el script en la ventana del script.
Sustituye tus condiciones por las mías y listo.
También podría, simplemente seleccionar los valores atípicos, luego invertir la selección y luego hacer un subconjunto de los datos que desea conservar.