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?
r
data-cleaning
Jay Godse
quelle
quelle
Antworten:
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 .
quelle
dplyr
, dass dies eine optimierte Neuformulierung bestimmterplyr
Tools ist und dassdata.table
dies ein völlig anderer Ansatz zur Manipulation von Daten ist. Beide von Hadley Wickham.dplyr
Pakets, aber nichtdata.table
derjenige.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
awk
Skript die Daten bereinigen und eine gültige Eingabedatei für die spätere Verarbeitung erstellen. Von dem magischen Satz kann man auch darauf hinweisengrep
,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.
quelle
grep
verwendet standardmäßig POSIX Basic Regex und ermöglicht erweitertes POSIX-Regex bei Ausführung alsgrep -E
und PCRE bei Ausführung alsgrep -P
.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.
quelle
Ü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.
quelle
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 .
quelle
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.
quelle
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.
quelle