Organisierte Prozesse zur Datenbereinigung

34

Durch meine eingeschränkte Beschäftigung mit Data Science mit R wurde mir klar, dass die Bereinigung fehlerhafter Daten ein sehr wichtiger Teil der Vorbereitung von Daten für die Analyse ist.

Gibt es Best Practices oder Verfahren zum Bereinigen von Daten vor deren Verarbeitung? Wenn ja, gibt es automatisierte oder halbautomatisierte Tools, die einige dieser Best Practices implementieren?

Jay Godse
quelle
1
wahrscheinlich ist es eine gute Idee, ein bisschen zu klären, was Sie unter Datenbereinigung meinen , sieht meiner Meinung nach ein bisschen verwirrend aus
MolbOrg
2
Es wäre hilfreich, weiter zu erklären, was Bereinigungsdaten bedeuten. In dem Kontext, in dem ich arbeite, hat die Bereinigung nichts mit Formatierung zu tun - ich würde das nur Parsen / Importieren nennen -, sondern es würde bedeuten, verrauschte Benutzerdaten zu sprechen und sie auf Kohärenz zu überprüfen. Die verwendeten Techniken sind datensatzspezifisch, von einfachen statistischen Regeln bis hin zu Fuzzy-Algorithmen, insbesondere wenn die Daten dünn sind.
AdrianBR

Antworten:

21

R enthält einige Standardfunktionen für die Datenmanipulation, die für die Daten Reinigung verwendet werden kann, in seiner Basispaket ( gsub, transform, etc.) sowie in verschiedenen Fremdpaketen, wie stringr , reshape / reshape2 und plyr / dplyr . Beispiele und Best Practices für die Verwendung dieser Pakete und deren Funktionen sind in folgendem Dokument beschrieben: http://vita.had.co.nz/papers/tidy-data.pdf .

Zusätzlich R bietet einige Pakete speziell fokussiert auf Daten Reinigung und Transformation:

Ein umfassender und kohärenter Ansatz für die Datenbereinigung in R, einschließlich Beispielen und der Verwendung von Bearbeitungsregeln und deduzierten Paketen sowie eine Beschreibung des Workflows ( Frameworks ) für die Datenbereinigung in R, wird in folgendem Papier vorgestellt, das ich wärmstens empfehle: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .

Aleksandr Blekh
quelle
2
Ich möchte auch hinzufügen dplyr, dass dies eine optimierte Neuformulierung bestimmter plyrTools ist und dass data.tabledies ein völlig anderer Ansatz zur Manipulation von Daten ist. Beide von Hadley Wickham.
Shadowtalker
@ssdecontrol: Ich stimme zu - die Antwort wurde aktualisiert. Hadley ist der Autor des dplyrPakets, aber nicht data.tablederjenige.
Aleksandr Blekh
16

Aus meiner Sicht ist diese Frage für eine zweistufige Beantwortung geeignet. Der erste Teil, nennen wir ihn " weiche Vorverarbeitung" , könnte als die Verwendung verschiedener Data Mining-Algorithmen verstanden werden, um Daten so vorzuverarbeiten, dass sie für weitere Analysen geeignet sind. Beachten Sie, dass dies die Analyse selbst sein kann, falls das Ziel einfach genug ist, um in einem einzigen Schuss angegangen zu werden.

Der zweite Teil, die harte Vorverarbeitung , steht tatsächlich vor jedem anderen Prozess und kann als Verwendung einfacher Tools oder Skripte zum Bereinigen von Daten und zum Auswählen bestimmter zu verarbeitender Inhalte verstanden werden. Für dieses Problem bietet POSIX eine wunderbare Reihe magischer Werkzeuge, mit denen sich prägnante und sehr leistungsfähige Vorverarbeitungsskripten erstellen lassen.

Beispielsweise liefert der Datenabruf für Personen, die mit Daten von sozialen Websites (Twitter, Facebook, ...) zu tun haben, in der Regel Dateien mit einem sehr spezifischen Format - auch wenn dies nicht immer eine gute Struktur aufweist, da sie möglicherweise fehlende Felder enthalten . In diesen Fällen könnte ein einfaches awkSkript die Daten bereinigen und eine gültige Eingabedatei für die spätere Verarbeitung erstellen. Von dem magischen Satz kann man auch darauf hinweisen grep, sed, cut, join, paste, sort, und eine ganze Menge anderer Werkzeuge.

Falls die Quelldatei einfach zu viele Fehler enthält, muss möglicherweise auch ein Methodenpaket zum Bereinigen von Daten erstellt werden. In solchen Fällen ist es normalerweise besser, Skriptsprachen (außer Shell-Sprachen) wie Python, Ruby und Perl zu verwenden. Auf diese Weise können APIs erstellt werden , mit denen bestimmte Daten sehr einfach und wiederverwendbar ausgewählt werden können. Solche APIs werden manchmal von ihren Autoren veröffentlicht, z. B. IMDbPY , Stack Exchange API und viele andere.

Beantwortung der Frage: Gibt es Best Practices? Es hängt normalerweise von Ihrer Aufgabe ab. Wenn Sie immer mit demselben Datenformat arbeiten, ist es normalerweise am besten, ein organisiertes Skript zu schreiben, um es vorab zu verarbeiten. Wenn Sie nur eine einfache und schnelle Bereinigung eines bestimmten Datensatzes benötigen, können Sie sich auf POSIX-Tools für kurze Shell-Skripte verlassen, die den gesamten Vorgang viel schneller erledigen als etwa ein Python-Skript. Da die Bereinigung sowohl vom Datensatz als auch von Ihren Zwecken abhängt, ist es schwierig, alles bereits erledigt zu haben. Es gibt jedoch viele APIs, mit denen Sie das Problem auf halbem Wege lösen können.

Rubens
quelle
hm - Daten abrufen, Daten formatieren (awk sed grep stuff), Rauschen als ersten Schritt entfernen, dann tiefer gehen. Es ist also nicht schwer, die Vorverarbeitung zu starten, wenn Sie Ihre Thermos verwenden
MolbOrg
@MolbOrg Ja, das habe ich gemeint. Ich habe die Skriptseite als Hard Preprocessing und die Verwendung von Data Mining-Algorithmen als Soft Preprocessing bezeichnet, die im Allgemeinen die Größe des Problems reduzieren (dh die Datenbank bereinigen). Ich habe auch bemerkt, dass der zweite Teil, die harte Vorverarbeitung, tatsächlich vor jedem anderen Prozess stattfindet . Wenn es mit solchen Begriffen nicht ganz klar ist, würde ich gerne weitere Vorschläge zur Verbesserung der Antwort berücksichtigen.
Rubens
1
ah ja, nicht genug beachtet, Rohdatenvorverarbeitung . Getesteter atm - yes Perl-Oneliner ist 3-mal langsamer als grep) für 3.5kk-Strings in 300MB, für Perl dauerte es 1.1 Sekunden, für grep 0.31 Sekunden. Ich sah Artikel , in dem Punkte , die Perl - regexp langsam, viel langsamer , dann kann es in der Praxis sein, (i vermuten , dass auch für grep auch) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg
@MolbOrg Schöne Referenz! AFAIK grepverwendet standardmäßig POSIX Basic Regex und ermöglicht erweitertes POSIX-Regex bei Ausführung als grep -Eund PCRE bei Ausführung als grep -P.
Rubens
1
Dies ist ein sehr guter Beitrag. R ist für die Daten ausgezeichnete Manipulation kann aber ziemlich umständlich mit Daten sein Reinigung wegen seiner ausführliche Syntax für String - Manipulation und ziemlich starre Festhalten an Listen und Matrizen für Datenstrukturen.
Shadowtalker
11

Ein Grund dafür, dass die Datenbereinigung selten vollständig automatisiert ist, ist, dass so viel Urteilsvermögen erforderlich ist, um zu definieren, was "bereinigen" angesichts Ihres speziellen Problems, Ihrer Methoden und Ziele bedeutet.

Dies kann so einfach sein wie das Eingeben von Werten für fehlende Daten oder so komplex wie das Diagnostizieren von Dateneingabefehlern oder Datentransformationsfehlern aus früheren automatisierten Prozessen (z. B. Codieren, Zensieren, Transformieren). In den letzten beiden Fällen sehen die Daten nach außen hin gut aus, sind aber wirklich fehlerhaft. Eine solche Diagnose erfordert häufig eine manuelle Analyse und Inspektion sowie bandexterne Informationen, z. B. Informationen zu den von ihnen verwendeten Datenquellen und -methoden.

Einige Datenanalysemethoden funktionieren auch besser, wenn fehlerhafte oder fehlende Daten leer bleiben (oder nicht zutreffend sind), als dass sie unterstellt oder mit einem Standardwert versehen werden. Dies trifft zu, wenn es explizite Darstellungen von Unsicherheit und Unwissenheit gibt, wie zum Beispiel Dempster-Shafer-Glaubensfunktionen.

Schließlich ist es nützlich, spezifische Diagnosen und Messdaten für den Reinigungsprozess zu haben. Fehlen oder sind fehlerhafte Werte zufällig verteilt oder sind sie in irgendeiner Weise konzentriert, die das Ergebnis der Analyse beeinflussen könnte. Es ist nützlich, die Auswirkungen alternativer Reinigungsstrategien oder -algorithmen zu testen, um festzustellen, ob sie sich auf die Endergebnisse auswirken.

Angesichts dieser Bedenken bin ich sehr misstrauisch gegenüber Methoden oder Prozessen, die die Datenbereinigung oberflächlich, unbekümmert oder vollautomatisch behandeln. In diesen Details stecken viele Teufel, und es lohnt sich, ihnen ernsthafte Aufmerksamkeit zu schenken.

MrMeritology
quelle
1
Als Nebenbemerkung: Ich denke, dass das Erkennen fehlerhafter Daten, die durch ein Problem weiter oben in der Pipeline verursacht wurden, eine Gold-Fähigkeit ist. Oft habe ich mich gefragt, warum meine Analyse seltsame Ergebnisse erbrachte und als ich mir die Pipeline ansah, fand ich eine Art Fehler. ZB: Ich habe mich gefragt, warum alle meine Daten stark in Richtung hoher Preise verschoben waren - KEIN WEG aus meinem mentalen Modell. Als ich herum fragte, stellte ich fest, dass ein Subunternehmer das Briefing missverstanden und Daten für Gruppen mit hohem Einkommen geliefert hatte, während wir gemischte Daten wünschten ...
Christian Sauer,
Ja! Datenfehler sind häufig Anzeichen für Prozessprobleme. Wenn Sie wissen, wo im Prozess die Fehler und auch der Mechanismus aufgetreten sind, können Sie den Reinigungsprozess erheblich vereinfachen. Besser ist es jedoch, die Prozessprobleme so zu beheben, dass saubere (oder sauberere) Daten erzeugt werden.
MrMeritology
5

Über die automatische Bereinigung: Sie können Daten wirklich nicht automatisch bereinigen, da die Anzahl der Fehler und die Definition eines Fehlers häufig von den Daten abhängt. ZB: Ihre Spalte "Einkommen" kann negative Werte enthalten, die einen Fehler darstellen. Sie müssen etwas gegen die Fälle unternehmen. Andererseits könnte eine Spalte "monatliche Einsparungen" vernünftigerweise negative Werte enthalten.

Solche Fehler sind stark domänenabhängig. Um sie zu finden, müssen Sie über Domänenkenntnisse verfügen, mit denen sich Menschen auszeichnen. Automatisierte Prozesse sind weniger wichtig.

Wo Sie automatisieren können und sollten, ist wiederholte Projekte. ZB ein Bericht, der monatlich erstellt werden muss. Wenn Sie Fehler entdecken, sollten Sie einen automatisierten Prozess einrichten, der diese Fehler in den folgenden Monaten erkennen kann, um Zeit zu sparen.

Christian Sauer
quelle
5

Ich denke, dass es keine universelle Technik gibt, um Daten vor der eigentlichen Recherche zu "bereinigen". Andererseits strebe ich an, so viel reproduzierbare Forschung wie möglich zu betreiben. Wenn Sie reproduzierbare Nachforschungen anstellen und Reinigungstechniken mit Fehlern oder mit schlechten Parametern / Annahmen verwenden, kann dies von anderen erkannt werden.

Es ist schön , R Paket knitr , die eine Menge in reproduzierbarer Forschung hilft.

Natürlich könnten nicht alle Forschungsergebnisse vollständig reproduziert werden (zum Beispiel Live-Twitter-Daten), aber zumindest können Sie Reinigungs-, Formatierungs- und Vorverarbeitungsschritte einfach dokumentieren.

Sie können meine Einschätzung für den Kurs Reproducible Research bei Coursera überprüfen .

Damian Melniczuk
quelle
3

OpenRefine (ehemals Google Refine) ist ein großartiges Tool, mit dem Sie interaktiv Daten bereinigen und transformieren können. Ihre endgültige Ausgabe kann in eine Vielzahl von Standardformaten (json, csv) oder in ein beliebiges benutzerdefiniertes Format (zB: wiki) exportiert werden.

Genaue Duplikate können in OpenRefine durch Sortieren + mit der Funktion "Ausblenden" bearbeitet werden. Es hat auch eine ungefähre String-Cluster-Funktion (Fuzzy), mit der Sie ähnlich aussehende Duplikate wie Firmennamen oder Adressen gruppieren können. Allein diese Funktion macht es großartig.

Thyag
quelle
1
Dies ist ein fantastisches, wenig bekanntes Tool.
Thanks_in_advance
2

In Coursera gibt es einen ganzen Kurs, der sich diesem Thema widmet. Vielleicht möchten Sie die Techniken, die sie erwähnen, durchgehen und wissen, wann was zu verwenden ist.

https://www.coursera.org/learn/data-cleaning

Es ist immer besser, es manuell zu tun, als es zu automatisieren, da jedes Dataset seine eigenen Probleme und Probleme hat und nicht alle Schritte auf alle Datasets anwendbar sind.

RAM
quelle