1,2 million de lignes x 16 colonnes
La colonne pour la température ambiante montre de nombreuses observations (par jour) qui ont été classées comme aberrantes, au-dessus de la boîte et de la queue supérieure de moustache dans le générateur de graphique. C'est malheureux, mais probablement dû au placement de la sonde de mesure de la température ambiante sur un véhicule en mouvement.
L'objectif est d'identifier et de supprimer correctement les lignes de données présentant des valeurs aberrantes de température ambiante, avant d'utiliser un réseau de neurones pour modéliser les données afin de comparer les performances du widget A au widget B.
J'ai lu quelques discussions ici, mais je ne trouve pas de question similaire avec une solution.
Facile à piquer
Apportez votre boîte aberrante
Faites glisser votre curseur sur tous les points aberrants qui les sélectionneront tous dans votre tableau de données.
Accédez maintenant à la colonne RowState de votre table de données et accédez à l'une des lignes sélectionnées.
En survolant la ligne sélectionnée, faites un clic droit sur votre souris et sélectionnez "Exclure"
Toutes les lignes sélectionnées seront exclues
Vous pouvez sélectionner Masquer et exclure
salut @ 4MUL8R
J'ai écrit une fois un script qui affecte des lignes si elles sont aberrantes dans l'un des groupes de l'une des variables. je l'ai mis à jour pour inclure différents jours dans une seule colonne et quelques colonnes de température. il produit une nouvelle colonne binaire indiquant les valeurs aberrantes pour chaque colonne d'origine et une autre indiquant si l'observation est une valeur aberrante dans l'une des variables.
nous fait savoir si cela fonctionne.
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 );
J'aimerais suggérer une approche légèrement différente.
Essayez peut-être de créer un script pour la plateforme Explore Outliers, comme ceci:
dt=current data table();<BR />obj=dt<<EXPLORE outliers=""></EXPLORE>
Pour configurer cela, utilisez la plate-forme Explore Outliers pour déterminer vos conditions, puis enregistrez simplement le script dans la fenêtre de script.
Remplacez vos conditions par les miennes, et vous êtes prêt à partir.
Vous pouvez également sélectionner simplement les valeurs aberrantes, puis inverser la sélection, puis créer un sous-ensemble des données que vous souhaitez conserver.