Après avoir utilisé la science des données avec R, je me suis rendu compte que le nettoyage des mauvaises données est une partie très importante de la préparation des données pour analyse.
Existe-t-il des meilleures pratiques ou processus pour nettoyer les données avant de les traiter? Si tel est le cas, existe-t-il des outils automatisés ou semi-automatisés mettant en œuvre certaines de ces meilleures pratiques?
r
data-cleaning
Jay Godse
la source
la source
Réponses:
R contient des standards fonctions de manipulation de données, qui peuvent être utilisés pour le nettoyage de données, dans sa base de paquet (
gsub
,transform
, etc.), ainsi que dans divers paquets de tierce partie, comme stringr , remodeler / reshape2 et plyr / dplyr . Des exemples et les meilleures pratiques d'utilisation de ces packages et de leurs fonctions sont décrits dans l'article suivant: http://vita.had.co.nz/papers/tidy-data.pdf .De plus, R propose des packages spécifiquement dédiés au nettoyage et à la transformation des données:
Une approche complète et cohérente de la purification des données dans R, comprenant des exemples et l'utilisation de règles de montage et de packages déductibles , ainsi qu'une description du flux de travail ( structure ) du nettoyage des données dans R, sont présentées dans le document suivant, que je recommande vivement: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .
la source
dplyr
une nouvelle formulation optimisée de certainsplyr
outils etdata.table
une approche complètement différente de la manipulation des données. Les deux par Hadley Wickham.dplyr
paquet, mais pasdata.table
celui-là.De mon point de vue, cette question convient à une réponse en deux étapes. La première partie, appelons- le pré-traitement logiciel , pourrait être considérée comme l'utilisation de différents algorithmes d'exploration de données pour pré-traiter les données de manière à ce qu'elles soient adaptées à des analyses ultérieures. Notez que cela pourrait être l’analyse elle-même, au cas où l’objectif serait suffisamment simple pour être abordé en un seul coup.
La deuxième partie, le prétraitement brutal , précède tout autre processus et peut être assimilée à l’utilisation d’outils simples ou de scripts pour nettoyer les données, en sélectionnant des contenus spécifiques à traiter. Pour résoudre ce problème, POSIX nous fournit un ensemble merveilleux d’outils magiques, qui peuvent être utilisés pour composer des scripts de prétraitement concis et très puissants.
Par exemple, pour les personnes qui traitent avec des données provenant de sites Web sociaux (twitter, facebook, ...), la récupération de données donne généralement des fichiers avec un format très spécifique - bien que pas toujours bien structuré, car ils peuvent contenir des champs manquants, etc. . Dans ces cas, un simple
awk
script pourrait nettoyer les données, produisant un fichier d'entrée valide pour un traitement ultérieur. De l'ensemble de la magie, on peut aussi remarquergrep
,sed
,cut
,join
,paste
,sort
et une multitude d'autres outils.Dans le cas où le fichier source contient trop de ressources, il peut également être nécessaire de produire un ensemble de méthodes pour nettoyer les données. Dans de tels cas, il est généralement préférable d'utiliser des langages de script (autres que ceux du shell), tels que Python, Ruby et Perl. Cela permet de créer des API pour sélectionner des données spécifiques de manière très simple et réutilisable. De telles API sont parfois rendues publiques par leurs rédacteurs, tels que IMDbPY , Stack Exchange API et bien d’autres.
Alors, répondez à la question: existe-t-il des meilleures pratiques? Cela dépend généralement de votre tâche. Si vous utilisez toujours le même format de données, il est généralement préférable d'écrire un script organisé pour le prétraiter. tandis que, si vous avez juste besoin d’un nettoyage simple et rapide de certains ensembles de données, comptez sur les outils POSIX pour obtenir des scripts de shell concis qui effectueront l’ensemble du travail beaucoup plus rapidement qu’un script Python, ou plus. Comme le nettoyage dépend à la fois du jeu de données et de vos objectifs, il est difficile de tout avoir déjà fait. Pourtant, de nombreuses API vous permettent de résoudre le problème à mi-chemin.
la source
grep
utilise par défaut une expression rationnelle de base POSIX et autorise les expressions rationnelles POSIX étendues lorsqu’elles sont exécutéesgrep -E
, et pour PCRE lorsqu’elles sont exécutées sousgrep -P
.Une des raisons pour lesquelles le nettoyage des données est rarement entièrement automatisé est qu’il faut faire preuve de beaucoup de jugement pour définir ce qu’il faut entendre par "nettoyage", compte tenu de votre problème, de vos méthodes et de vos objectifs.
Cela peut être aussi simple que l'imputation de valeurs pour les données manquantes ou aussi complexe que le diagnostic d'erreurs de saisie ou de transformation de données issues de processus automatisés antérieurs (par exemple, codage, censure, transformation). Dans ces deux derniers cas, les données semblent bonnes en apparence, mais elles sont vraiment erronées. Un tel diagnostic nécessite souvent une analyse et une inspection manuelles, ainsi que des informations hors bande, telles que des informations sur les sources de données et les méthodes utilisées.
En outre, certaines méthodes d'analyse de données fonctionnent mieux lorsque des données erronées ou manquantes sont laissées vides (ou N / A) plutôt qu'imputées ou dotées d'une valeur par défaut. Cela est vrai lorsqu'il existe des représentations explicites d'incertitude et d'ignorance, telles que les fonctions de Dempster-Shafer Belief.
Enfin, il est utile de disposer de diagnostics et de mesures spécifiques pour le processus de nettoyage. Des valeurs manquantes ou erronées sont distribuées de manière aléatoire ou sont-elles concentrées d'une manière pouvant affecter le résultat de l'analyse. Il est utile de tester les effets de stratégies ou d'algorithmes de nettoyage alternatifs pour voir s'ils affectent les résultats finaux.
Compte tenu de ces préoccupations, je me méfie beaucoup de toute méthode ou processus qui traite le nettoyage des données de manière superficielle, cavalière ou entièrement automatisée. De nombreux démons se cachent dans ces détails et il est important de leur accorder une attention sérieuse.
la source
À propos du nettoyage automatique: Vous ne pouvez vraiment pas nettoyer les données automatiquement, car le nombre d’erreurs et la définition d’une erreur dépendent souvent des données. Ex.: Votre colonne "Revenu" peut contenir des valeurs négatives, ce qui est une erreur - vous devez faire quelque chose à propos des cas. D'autre part, une colonne "épargne mensuelle" pourrait raisonnablement contenir des valeurs négatives.
De telles erreurs dépendent fortement du domaine. Pour les trouver, vous devez donc posséder une connaissance du domaine, un domaine dans lequel les humains excellent, des processus automatisés, mais pas tellement.
Là où vous pouvez et devriez automatiser, ce sont des projets répétés. Par exemple, un rapport qui doit être produit tous les mois. Si vous constatez des erreurs, vous devez mettre en place un processus automatisé capable de détecter ces erreurs au cours des mois suivants, ce qui vous permettra de gagner du temps.
la source
Je pense qu'il n'y a pas de technique universelle pour "nettoyer" les données avant de faire de la recherche. D'autre part, je vise à faire autant de recherches reproductibles que possible. En effectuant des recherches reproductibles, si vous utilisiez des techniques de nettoyage avec des insectes ou avec de mauvais paramètres / hypothèses, elles pourraient être repérées par d’autres.
Il existe un package R knitr agréable qui facilite beaucoup la recherche reproductible.
Bien entendu, toutes les recherches ne peuvent pas être entièrement reproduites (par exemple, les données Twitter en direct), mais vous pouvez au moins documenter facilement les étapes de nettoyage, de mise en forme et de prétraitement.
Vous pouvez vérifier mon évaluation préparée pour le cours Reproductible Research à Coursera .
la source
OpenRefine (anciennement Google Fine ) est un excellent outil permettant d'effectuer de manière interactive le nettoyage et la transformation de données. Votre sortie finale peut être exportée vers différents formats standard (json, csv) ou n’importe quel format personnalisé (par exemple: wiki).
Les doublons exacts peuvent être traités dans OpenRefine en triant + en utilisant la fonction "masquer". En outre, il possède une fonction de clustering approximative sous forme de chaîne (floue) où vous pouvez regrouper des doublons similaires, tels que des noms de société ou des adresses. Cette fonctionnalité seule le rend génial.
la source
Un cours entier est consacré à cela à Coursera. Vous voudrez peut-être revoir les techniques qu’ils mentionnent et l’important est de savoir quand utiliser quoi.
https://www.coursera.org/learn/data-cleaning
Il est toujours préférable de le faire manuellement plutôt que d'automatiser, car chaque jeu de données a ses propres problèmes et problèmes et toutes les étapes ne s'appliquent pas à tous les jeux de données.
la source