Processus organisés pour nettoyer les données


34

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?


1
C'est probablement une bonne idée de clarifier un peu ce que vous voulez dire par nettoyage de données , cela me semble un peu déroutant
MolbOrg

2
Expliquer davantage ce que signifie le nettoyage des données serait utile. Dans le contexte où je travaille, le nettoyage n'a rien à voir avec le formatage. J'appellerais simplement cela l'analyse / l'importation. Mais cela signifierait plutôt parler de données utilisateur bruyantes et en vérifier la cohérence. Les techniques utilisées sont spécifiques à un ensemble de données, des règles statistiques simples aux algorithmes flous, en particulier lorsque les données sont rares.
AdrianBR

Réponses:


21

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 .


2
J'ajouterais également dplyrune nouvelle formulation optimisée de certains plyroutils et data.tableune approche complètement différente de la manipulation des données. Les deux par Hadley Wickham.
shadowtalker

@ssdecontrol: Je suis d'accord - a mis à jour la réponse. Hadley est l'auteur du dplyrpaquet, mais pas data.tablecelui-là.
Aleksandr Blekh

16

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 awkscript 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 remarquer grep, sed, cut, join, paste, sortet 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.


hm - récupère les données, les met en forme (awk sed grep stuff), supprime le bruit comme première étape, puis approfondit. si is't dur pré - traitement est d'abord, si l'on utilise vos thermies
MolbOrg

@MolbOrg Oui, c'est ce que je voulais dire. J'ai appelé le prétraitement dur du côté des scripts et le prétraitement doux de l'utilisation d'algorithmes d'exploration de données qui réduisent généralement la taille du problème (nettoie la base de données). J'ai également noté que la deuxième partie, le prétraitement difficile, venait en fait avant tout autre processus . Si ce n'est pas très clair avec ces termes, je considérerais volontiers toute autre suggestion pour améliorer la réponse.
Rubens

1
ah oui, je n'ai pas fait assez attention, prétraitement des données brutes . Testé atm - oui perl oneliner est 3 fois plus lent que grep) pour des chaînes de 3,5kk sur 300 Mo. Pour perl, il a fallu 1,1 s, pour grep, 0,31 s. J'ai vu un article où il est écrit que perl regexp est lent, beaucoup plus lent que dans la pratique (je suppose que c'est aussi pour grep aussi) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg

@MolbOrg Belle référence! Autant que je sache, greputilise par défaut une expression rationnelle de base POSIX et autorise les expressions rationnelles POSIX étendues lorsqu’elles sont exécutées grep -E, et pour PCRE lorsqu’elles sont exécutées sous grep -P.
Rubens

1
C'est un très bon post. R est excellent pour la manipulation de données, mais peut être assez fastidieux avec le nettoyage des données en raison de sa syntaxe détaillée pour la manipulation des chaînes et de l’adhésion assez rigide aux listes et matrices des structures de données.
shadowtalker

11

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.


1
En guise de commentaire: Je pense que détecter des données erronées causées par un problème plus loin dans le pipeline est un atout. Plusieurs fois, je me suis demandé pourquoi mon analyse produisait des résultats étranges et lorsque j'ai examiné le pipeline, j'ai trouvé une sorte d'erreur. Ex.: Je me demandais pourquoi toutes mes données étaient fortement biaisées en faveur de prix élevés, ce qui sortait de mon modèle mental. Quand j'ai demandé autour de moi, j'ai découvert que certains sous-traitants avaient mal compris le briefing et fourni des données pour les groupes à revenu élevé, alors que nous souhaitions des données mixtes ...
Christian Sauer

Oui! Les erreurs de données sont souvent des signes de problèmes de processus. Savoir où les erreurs ont été introduites dans le processus et le mécanisme, aidera grandement au processus de nettoyage. Mais il est préférable de résoudre les problèmes de processus afin qu’ils produisent des données propres (ou plus propres).
MrMeritology

5

À 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.


5

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 .


3

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.


1
C'est un outil fantastique, sous-déclaré.
thanks_in_advance

2

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.