Datenbereinigung an der Befehlszeile für unerfahrene Datenwissenschaftler
Bild vom Autor

# Einführung

Wenn Sie an die Datenbereinigung denken, denken Sie wahrscheinlich an die Inbetriebnahme eines Jupyter-Notizbuch. Aber hier ist etwas, das Sie vielleicht überraschen wird: Einige der leistungsstärksten Datenbereinigungen können direkt in Ihrem Terminal erfolgen, mit Instruments, die bereits auf Ihrem System installiert sind.

In diesem Artikel erfahren Sie, wie Sie grundlegende Befehlszeilen-Dienstprogramme zum Bereinigen, Transformieren und Durchsuchen von Datendateien verwenden. Es sind keine Installationen erforderlich; nur Ihr Terminal und einige CSV-Dateien.

Bevor wir mit der Datenbereinigung über die Befehlszeile beginnen, sprechen wir darüber, warum dies wichtig ist:

  • Befehlszeilentools sind einfach zu verwenden, schnell und effizient, insbesondere bei großen Dateien.
  • Diese Instruments sind in Linux/macOS integriert und unter Home windows verfügbar.
  • Sie eignen sich hervorragend, um einen ersten Blick auf Daten zu werfen, bevor sie mit Python geladen und analysiert werden.
  • Es ist einfach, Befehle in Skripten miteinander zu verketten und diese Skripte zur Automatisierung zu verwenden.

Jetzt fangen wir mit dem Codieren an!

Notiz: Hier finden Sie alle Befehle in diesem Bash-Skript auf GitHub. Um das Beste aus diesem Artikel herauszuholen, empfehle ich Ihnen, Ihr Terminal zu öffnen und mitzucoden.

# Beispieldaten einrichten

Lassen Sie uns eine unordentliche CSV-Datei erstellen, mit der wir arbeiten können. Dies simuliert reale Datenprobleme, auf die Sie wahrscheinlich stoßen werden.

cat > messy_data.csv << 'EOF'
identify,age,wage,division,e mail
John Lee,32,50000,Engineering,john@instance.com
Jane Smith,28,55000,Advertising,jane@instance.com
   Bob Davis    ,35,60000,Engineering,bob@instance.com
Alice Williams,29,,Advertising,alice@instance.com
Charlie Brown,45,70000,Gross sales,charlie@instance.com
Dave Wilson,31,52000,Engineering,
Emma Davis,,58000,Advertising,emma@instance.com
Frank Miller,38,65000,Gross sales,frank@instance.com
John Lee,32,50000,Engineering,john@instance.com
Grace Lee,27,51000,Engineering,grace@instance.com
EOF

Dieser Datensatz weist mehrere häufige Probleme auf: führende und nachfolgende Leerzeichen, fehlende Werte und doppelte Zeilen. Es eignet sich hervorragend zum Lernen!

# 1. Erkunden Sie Ihre Daten mit head, tailUnd wc

Bevor Sie Ihre Daten bereinigen, müssen Sie verstehen, womit Sie arbeiten. Beginnen wir mit den Grundlagen.

# See the primary 5 rows (together with header)
head -n 5 messy_data.csv

# See the final 3 rows
tail -n 3 messy_data.csv

# Rely complete rows (together with header)
wc -l messy_data.csv

Folgendes passiert:

  • head -n 5 zeigt die ersten 5 Zeilen an und gibt Ihnen eine schnelle Vorschau.
  • tail -n 3 zeigt die letzten 3 Zeilen an (nützlich zur Überprüfung, ob die Daten vollständig sind).
  • wc -l zählt Zeilen – subtrahieren Sie 1 für die Kopfzeile, um die Anzahl Ihrer Datensätze zu erhalten.

Ausgabe:

identify,age,wage,division,e mail
John Lee,32,50000,Engineering,john@instance.com
Jane Smith,28,55000,Advertising,jane@instance.com
   Bob Davis    ,35,60000,Engineering,bob@instance.com
Alice Williams,29,,Advertising,alice@instance.com
Frank Miller,38,65000,Gross sales,frank@instance.com
John Lee,32,50000,Engineering,john@instance.com
Grace Lee,27,51000,Engineering,grace@instance.com
11 messy_data.csv

# 2. Anzeigen bestimmter Spalten mit minimize

Es müssen nicht immer alle Spalten angezeigt werden. Extrahieren wir nur die Namen und Abteilungen.

minimize -d',' -f1,4 messy_data.csv

Aufschlüsselung:

  • minimize ist ein Werkzeug zum Extrahieren von Abschnitten aus jeder Zeile.
  • -d',' setzt das Trennzeichen auf ein Komma (für CSV-Dateien).
  • -f1,4 wählt die Felder (Spalten) 1 und 4 aus.
  • Sie können auch Bereiche verwenden: -f1-3 für die Spalten 1 bis 3.

Hier ist die Ausgabe:

identify,division
John Lee,Engineering
Jane Smith,Advertising
   Bob Davis    ,Engineering
Alice Williams,Advertising
Charlie Brown,Gross sales
Dave Wilson,Engineering
Emma Davis,Advertising
Frank Miller,Gross sales
John Lee,Engineering
Grace Lee,Engineering

# 3. Doppelte Zeilen entfernen mit kind Und uniq

Beachten Sie, dass „John Lee“ in unserem Datensatz zweimal vorkommt. Lasst uns das beheben.

# Save the header first
head -n 1 messy_data.csv > cleaned_data.csv

# Take away duplicates from the info (excluding header)
tail -n +2 messy_data.csv | kind | uniq >> cleaned_data.csv

Hier ist, was jeder Befehl bewirkt: head -n 1 erfasst nur die Kopfzeile. tail -n +2 Ruft alles ab Zeile 2 ab (überspringt den Header). Dann, kind sortiert die Zeilen. Bitte beachten Sie das uniq Funktioniert nur mit sortierten Daten und uniq Entfernt benachbarte doppelte Zeilen. Endlich, >> wird an die Datei angehängt (im Gegensatz zu > was überschreibt).

# 4. Suchen und Filtern mit grep

Lassen Sie uns nun einige Such- und Filtervorgänge durchführen. Möchten Sie alle Ingenieure finden oder Zeilen mit fehlenden Daten herausfiltern? grep ist für alle derartigen Aufgaben praktisch.

# Discover all engineers
grep "Engineering" messy_data.csv

# Discover rows with empty fields (two consecutive commas)
grep ",," messy_data.csv

# Exclude rows with lacking information
grep -v ",," messy_data.csv > no_missing.csv

Hier, grep "sample" sucht nach Zeilen, die dieses Muster enthalten. grep -v kehrt die Übereinstimmung um (zeigt Zeilen an, die NICHT übereinstimmen). Dies ist eine schnelle Möglichkeit, unvollständige Datensätze herauszufiltern, sofern der fehlende Wert zu einem Doppelkomma (,,) führt.

# 5. Leerzeichen mit entfernen sed

Sehen Sie, dass die Platte von „Bob Davis“ zusätzliche Leerzeichen enthält? Lasst uns das aufräumen.

sed 's/^( t)*//; s/( t)*$//' messy_data.csv > trimmed_data.csv

Lassen Sie uns nun den Befehl verstehen: sed ist ein Stream-Editor zur Texttransformation. s/sample/alternative/ ist die Substitutionssyntax. ^( t)* Entspricht Leerzeichen/Tabulatoren am Anfang einer Zeile. ( t)*$ Entspricht Leerzeichen/Tabulatoren am Ende einer Zeile. Das Semikolon trennt zwei Vorgänge (Zeilenanfang kürzen, dann Zeilenende kürzen).

# 6. Werte ersetzen durch sed

Manchmal müssen Sie Werte standardisieren oder Tippfehler korrigieren. Versuchen wir, alle Vorkommen von „Engineering“ durch „Tech“ zu ersetzen.

# Change all "Engineering" with "Tech"
sed 's/Engineering/Tech/g' messy_data.csv

Als Nächstes füllen wir leere E-Mail-Felder (gekennzeichnet durch ein Komma am Ende der Zeile) mit einem Normal-E-Mail-Wert.

# Change empty e mail fields with "no-email@instance.com"
sed 's/,$/,no-email@instance.com/' messy_data.csv

Führen Sie die obigen Befehle aus und beobachten Sie die Ausgabe. Ich habe die Ausgabe hier ausgeschlossen, um Wiederholungen zu vermeiden.

Aufschlüsselung:

  • Der g Flag bedeutet „world“ – ersetzt alle Vorkommen in jeder Zeile.
  • ,$ Entspricht einem Komma am Ende einer Zeile (was auf ein leeres letztes Feld hinweist).
  • Sie können mehrere Ersetzungen mit verketten ; zwischen ihnen.

# 7. Zählen und Zusammenfassen mit awk

awk ist sehr nützlich für Einsätze vor Ort. Lassen Sie uns eine grundlegende Analyse durchführen.

# Rely data by division
tail -n +2 messy_data.csv | minimize -d',' -f4 | kind | uniq -c

# Calculate common age (excluding header and empty values)
tail -n +2 messy_data.csv | awk -F',' '{if($2) sum+=$2; if($2) rely++} END {print "Common age:", sum/rely}'

Dabei awk Befehl, -F',' setzt das Feldtrennzeichen auf ein Komma und $2 bezieht sich auf das zweite Feld (Alter). Der Zustand if($2) stellt sicher, dass nur nicht leere Werte verarbeitet werden sum += $2 summiert die Summe. Schließlich ist die END Der Block wird ausgeführt, nachdem alle Zeilen gelesen wurden, um das Durchschnittsalter zu berechnen und auszudrucken.

Ausgabe:

      5 Engineering
      3 Advertising
      2 Gross sales
Common age: 33

# 8. Befehle mit Pipes kombinieren

Sie erhalten eine nützlichere Verarbeitung, wenn Sie diese Befehlszeilentools miteinander verketten.

# Get distinctive departments, sorted alphabetically
tail -n +2 messy_data.csv | minimize -d',' -f4 | kind | uniq

# Discover engineers with wage > 55000
tail -n +2 messy_data.csv | grep "Engineering" | awk -F',' '$3 > 55000' | minimize -d',' -f1,3

# Rely workers per division with counts
tail -n +2 messy_data.csv | minimize -d',' -f4 | kind | uniq -c | kind -rn

Hier, jeder | übergibt die Ausgabe eines Befehls als Eingabe an den nächsten. Dadurch können Sie Schritt für Schritt komplexe Datentransformationen erstellen. Der letzte Schritt sortiert nach Anzahl in umgekehrter numerischer Reihenfolge (-rn).

Dies gibt aus:

Engineering
Advertising
Gross sales
   Bob Davis    ,60000
      5 Engineering
      3 Advertising
      2 Gross sales

# 9. Konvertieren von Datenformaten

Manchmal müssen Sie mit unterschiedlichen Trennzeichen arbeiten. Hier versuchen wir, anstelle eines Kommas einen Tabulator als Trennzeichen zu verwenden.

# Convert CSV to TSV (tab-separated)
sed 's/,/t/g' messy_data.csv > information.tsv

# Add a brand new column with a hard and fast worth
awk -F',' 'BEGIN{OFS=","} {print $0, "2024"}' messy_data.csv > data_with_year.csv

Dabei awk Befehl, BEGIN{OFS=","} Setzt das Ausgabefeldtrennzeichen auf ein Komma. $0 stellt die gesamte Eingabezeile dar und print $0, "2024" Hängt „2024“ als neue Spalte an jede Ausgabezeile an.

# 10. Eine vollständige Reinigungspipeline

Fassen wir alles in einem nützlichen Befehl zusammen, der unsere unordentlichen Daten bereinigt:

# Save header
head -n 1 messy_data.csv > final_clean.csv

# Clear the info: take away duplicates, trim whitespace, exclude lacking values
tail -n +2 messy_data.csv | 
  sed 's/^( t)*//; s/( t)*$//' | 
  grep -v ",," | 
  kind | 
  uniq >> final_clean.csv

echo "Cleansing full! Examine final_clean.csv"

Diese Pipeline speichert zunächst den Header, um die Spaltennamen beizubehalten, und überspringt ihn dann bei der Verarbeitung der Datenzeilen. Es entfernt führende und nachfolgende Leerzeichen aus jeder Zeile, entfernt alle Zeilen, die leere Felder (insbesondere Doppelkommas) enthalten, sortiert die Daten und eliminiert doppelte Einträge. Schließlich werden die bereinigten Daten an die Ausgabedatei angehängt.

# Abschluss

Die Datenbereinigung über die Befehlszeile ist eine leistungsstarke, aber unterschätzte Fähigkeit für Datenwissenschaftler. Diese Instruments sind schnell und zuverlässig. Während Sie Python weiterhin für komplexe Analysen verwenden, werden Sie durch die Beherrschung dieser Grundlagen effizienter und haben Optionen, wenn Python nicht ultimate ist.

Das Beste daran ist, dass diese Fähigkeiten auf Datentechnik-, DevOps- und Systemadministrationsfunktionen übertragen werden können. Wenn Sie lernen, Daten über die Befehlszeile zu manipulieren, werden Sie zu einem vielseitigeren Entwickler.

Beginnen Sie mit dem Üben mit Ihren eigenen Datensätzen und Sie werden überrascht sein, wie oft Sie zu diesen Instruments greifen, anstatt Python-Notizbücher zu erstellen. Viel Spaß beim Bereinigen Ihrer Daten!

Bala Priya C ist ein Entwickler und technischer Redakteur aus Indien. Sie arbeitet gerne an der Schnittstelle von Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Zu ihren Interessen- und Fachgebieten gehören DevOps, Datenwissenschaft und Verarbeitung natürlicher Sprache. Sie liebt es zu lesen, zu schreiben, zu programmieren und Kaffee zu trinken! Derzeit arbeitet sie daran, zu lernen und ihr Wissen mit der Entwickler-Neighborhood zu teilen, indem sie Tutorials, Anleitungen, Meinungsbeiträge und mehr verfasst. Bala erstellt außerdem ansprechende Ressourcenübersichten und Programmier-Tutorials.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert