Je suis intéressé à travailler avec des internautes, car je vois de plus en plus de problèmes avec beaucoup de données que je consulte. Vous vous demandez si des clients ont déjà évoqué ce point? Ces inliers ne sont pas quelque chose que l'outil d'exploration des valeurs aberrantes gérera bien dans de nombreux cas. Je finis donc par combiner une ou plusieurs de ces techniques. Ouvert aux suggestions sur d'autres tactiques ici.
J'ai eu un exemple de nos comptes d'utilisateurs de données client. La plupart des données étaient réalistes en termes de # utilisateurs, mais il y avait ces morceaux de comptes d'utilisateurs et 100, 200, 500, 2500, etc. Ce ne sont là que quelques contacts maximum, mais pas un décompte précis d'utilisateurs sur un site. Ils sont inliers et devraient vraiment être manquants ou traités d’une autre manière. Si vous connaissez ces valeurs, qui sont inliers (faciles à repérer dans Graph Builder ou distirbution), vous pouvez faire quelque chose comme ceci:
For Each Row(
:Name( "Potassium (mg)" ) = Match( :Name( "Potassium (mg)" ),
200, .,
:Name( "Potassium (mg)" )
)
);
Cela aura pour effet de supprimer de manière destructive ces valeurs inières de la ligne (vous pouvez également remplacer par manquant, utiliser des codes de valeur manquants ou quelque chose du genre).
J'utilise également de manière intensive la propriété de colonne check check pour éliminer les valeurs qui devraient être omises de l'analyse:
dt:Name( "Resting Calories (kcal)" ) << set property ("Range Check", LTLT( 1400, 2500 ) );
Celui-ci, par exemple, éliminera les valeurs aberrantes du côté haut et les jours incomplets du côté bas.
Mais le balisage automatique des valeurs trop fréquentes est ce que je souhaite explorer. En fait, je pense que recoder est un bon outil ici. En plus, il génère le script pour les remplacer par les éléments manquants, etc.
Le recodage d'une colonne numérique et le tri par nombre vous donnent un instantané des valeurs susceptibles de se produire trop souvent ou un équipement qui crache une valeur par défaut. Dans l'exemple ci-dessus, 1822 pourrait être suspect et justifier une enquête plus approfondie.
Je suppose que mon propos est de considérer certains des autres outils comme des détecteurs invisibles et non conformes aux étiquettes, ils peuvent être très utiles.
Il est également intéressant de noter qu'il est possible de pointer-cliquer dessus en effectuant une recherche dans le menu principal + un remplacement, si vous:
- Recherche sur 0
- Remplacer par .
- Cochez la case "Correspondre à la valeur de la cellule entière"
- Cochez la case "Données de recherche".
C'est génial parce que c'est simple, mais une mise en garde (peut-être ... Je ne suis pas sûr que cela se produise beaucoup dans les "vrais" jeux de données), c’est qu’il ne vérifie pas les caractères / chiffres ... de sorte que toutes les cellules des colonnes de caractères ne contenant que "0" deviennent "."
// get the continuous columns as a list of strings
dtcollist = dt << get column names( continuous, string );
// when doing lots of updates to the data table, use this to
// prevent the window being updated for each change
dt << Start Data Update();
For Each Row(
// Loop over each column within each row
// probably the same performance whichever way you do it
For( c = 1, c <= N Items( dtcollist ), c++,
AsColumn( dt, dtcollist[c] ) = Match( AsColumn( dt, dtcollist[c] ),
0, .,
AsColumn( dt, dtcollist[c] )
)
)
);
// Tell JMP it's okay to update the data in the window now
dt << End Data Update();
C'est un extrait de code très utile, en particulier pour l'ensemble de données que je consulte actuellement. Malheureusement, la table de données contient des 0, ce qui signifie vraiment qu'il manque. Ce script va parcourir toutes les colonnes numériques continues et changer tous les zéros en manquants. Merci Justin pour aider à optimiser cela.
Moi aussi, j'utilise Recode dans cette technique que je qualifierai de "technique de prescription hors étiquette" pour réparer les inliers.