Workshop - Daten mit OpenRefine umwandeln

Folie - Daten mit OpenRefine umwandeln Folie - Daten mit OpenRefine umwandeln

Wir lernen verschiedene Methoden kennen um Daten aufzuräumen und umzuwandeln.

Daten transformieren in der OpenRefine Dokumentation.

Dieser Workshop wurde erstellt mit OpenRefine Version 3.5.0.
Dieser Workshop wurde zuletzt getestet mit OpenRefine Version 3.8.5.

Hintergrund

OpenRefine bietet unterschiedliche Arten an Daten umzuwandeln. Dies kann manuell auf Zellebene passieren, in einem “Facet”, auf Spaltenebene oder für bestimmte Aktionen auf dem kompletten Datensatz.

In den folgenden Aufgaben werden wir nun aktiv Daten filtern, umwandeln und zusammenführen.

Aufgabe 1: Leere Zeilen identifizieren und löschen

Wie in Aufgabe 3 in 02 Filtern und Sortieren verwenden wir das “Facet by blank (null or empty string)” um Leerzeilen zu identifizieren. Denn in den 4.000 Einträgen (rows) sollte es 5 Leerzeilen geben. Diese werden jedoch nicht angezeigt, da sie nicht leer sind, sondern Leerzeichen beinhalten.

Die Leerzeichen können wir global über “All" "Edit all columns" "Trim leading and trailing whitespace” entfernen.

Bildschirmfoto von OpenRefine mit Blank Facet.
Bildschirmfoto von OpenRefine mit Blank Facet.

Anschließend können wir, wie in Abbildung 1, mit dem “Facet by blank (null or empty string)” die Leerzeilen auswählen und via “All" "Edit rows" "Remove matching rows” entfernen.

Gehen Sie noch einmal zurück zu den Bildschirmfotos der Importeinstellungen in Projekte in OpenRefine laden und verwalten und vergleichen diese für Aufgabe 1 und 2.

Wir können Probleme mit Leerzeilen schon beim Importieren lösen, indem wir, wie bei Aufgabe 2, das Kontrollkästchen bei “Trim leading & trailing whitespace from strings” aktivieren und das Kontrollkästchen bei “Store blank rows” abwählen. Das ist jedoch nicht immer möglich, oder manchmal wird es vergessen.

Aufgabe 2: Geschlechter vereinheitlichen

Die Geschlechtsbezeichnungen in der Spalte “Geschlecht (m/w)” sind sehr uneinheitlich. Wir wollen dies vereinheitlichen, so dass überall nur noch die Werte “m” und “w” stehen.

Dafür testen wir mehrere Methoden.

1. Einzeln bearbeiten

Wenn wir mit der Maus über eine Zelle gehen, dann erscheint wie in Abbildung 2 eine blaue Bedienfläche mit der Bezeichnung “edit”. Darüber können wir einzelne Zellen bearbeiten.

Bildschirmfoto von Edit Bedienfläche in Zelle.
Bildschirmfoto von Edit Bedienfläche in Zelle.
Hinweise:

  • Die Bearbeitung auf diesem Weg kann zwar rückgängig gemacht, aber nicht als Aktion exportiert werden!

2. Im Facet bearbeiten

Wenn wir mit der Maus über einen Wert im Facet gehen, dann erscheint wie in Abbildung 3 ein blauer “edit” Link. Darüber können wir alle Zellen mit diesem Wert in der Spalte gleichzeitig bearbeiten.

Bildschirmfoto von Edit Bedienfläche in Facet.
Bildschirmfoto von Edit Bedienfläche in Facet.

3. Ersetzen in der Spalte

Im Spaltenmenü findet sich unter “Geschlecht (m/w)“ "Edit cells" "Replace” ein Dialog, mit dem in dieser Spalte Ersetzungen durchgeführt werden können.

4. Textfilter und Transform

Eine andere Methode ist eine Kombination aus Textfilter und “Transform”. Im Spaltenmenü wählen wir “Geschlecht (m/w)“ "Textfilter” und geben im Eingabefeld des Filters nur den Buchstaben “w” ein, der praktischerweise in “männlich” nicht vorkommt.

Im “Text Facet” für die Spalte Geschlecht, sehen wir analog zu Abbildung 4 die gefilterten Werte.

Bildschirmfoto mit Kombination aus Facet und Textfilter.
Bildschirmfoto mit Kombination aus Facet und Textfilter.

Anschließend rufen wir den Dialog zum Transformieren über das Spaltenmenü via “Geschlecht (m/w)“ "Edit cells" "Transform…” auf.

In dem Dialog könnte komplexer Code geschrieben werden, wir wollen den Inhalt jeder Zelle jedoch einfach mit dem Wert "w" ersetzen. Die Anführungszeichen sind wichtig, da wir dadurch OpenRefine mitteilen, dass wir den Wert w meinen, und keinen Programmcode.

Aufgabe 3: Spalte akad. Grad/Titel vereinheitlichen

In der Spalte “akad. Grad/Titel” sind die akademischen Grade uneinheitlich geschrieben (siehe auch Abbildung 5). Überlegen Sie, welche der in Aufgabe 2 gelernten Methoden hier geeignet wäre und vereinheitlichen Sie die Titel.

Bildschirmfoto mit Text Facet auf Spalte Titel.
Bildschirmfoto mit Text Facet auf Spalte Titel.

Aufgabe 4: Spalten auftrennen

Bei den Ortsangaben sind der Ortsname und die GND-ID des Ortes mit | getrennt in einer Zelle. Wir wollen die Spalte “Geburtsort” auftrennen, so dass wir jeweils eine Spalte mit dem Ortsnamen und eine mit der zugehörigen GND-ID haben.

Dafür verwenden wir im Spaltenmenü den Dialog “Geburtsort" "Edit column" "Split into several columns…” mit den in Abbildung 6 gezeigten Einstellungen.

Bildschirmfoto vom Dialog zum Auftrennen von Spalten.
Bildschirmfoto vom Dialog zum Auftrennen von Spalten.

Anschließend entfernen wir überflüssige Leerzeichen via “Geburtsort" "Edit cells" "Common transforms" "Trim leading and trailing whitespace” und benennen die neuen Spalten entsprechend in “Geburtsort” und “Geburtsort (GND-ID)” um.

Hinweise:

  • Mit Hilfe des regulären Ausdrucks \s*\|\s* hätten wir die Leerzeichen beim Aufsplitten auch direkt entfernen können.
  • Vielleicht sind Ihnen Zeilen aufgefallen, wo anstelle des Ortes nur die GND-ID steht. Um diese kümmern wir uns später.

Aufgabe 5: Spalten zusammenführen

Beim Sterbedatum haben wir das umgekehrte Problem. Hier ist das Datum in drei Spalten aufgeteilt, wir wollen jedoch eine Spalte haben. Bevor wir die Spalten zusammenführen, prüfen wir, ob die Werte in den einzelnen Spalten sinnvoll sind, und korrigieren die Werte bei Bedarf.

Anschließend rufen wir im Spaltenmenü den Dialog zum Zusammenführen von Spalten auf “Todesdatum (Tag)“ "Edit column" "Join columns…” mit den in Abbildung 7 gezeigten Einstellungen.

Bildschirmfoto vom Dialog zum Zusammenführen von Spalten.
Bildschirmfoto vom Dialog zum Zusammenführen von Spalten.

Aufgabe 6: Datum vereinheitlichen

In der Spalte “Geburtsdatum (exakt)” gibt es mehrere Formate für das Geburtsdatum:

  • “31.03.1920”
  • “31-03-1920”
  • “31. März 1920”

OpenRefine bietet verschiedene Funktionen an, um mit Daten zu arbeiten.

Datumsfunktionen in der OpenRefine Dokumentation.

Um die Daten in ein einheitliches Format zu bringen, wandeln wir sie zuerst in ein Datumsobjekt um und schreiben sie anschließend als Text wieder raus.

Dafür müssen wir OpenRefine noch mitteilen, wie die Eingabe- und Zielformate aussehen:

  • “dd.MM.yyyy”
  • “dd-MM-yyyy”
  • “dd. MMMM yyyy”

Um die Daten umzuwandeln öffnen wir den Dialog zum Transformieren über das Spaltenmenü von “Geburtsdatum (exakt)“ "Edit cells" "Transform” und verwenden den Ausdruck:

value.toDate("dd.MM.yyyy", "dd-MM-yyyy", "dd. MMMM yyyy").toString("dd.MM.yyyy")
Hinweise:

  • OpenRefine bietet die Möglichkeit Programmcode zu nutzen um Transformationen durchzuführen. Dazu gehören Clojure/Python und die General Refine Expression Language (GREL).
  • Die Datumsumwandlung gehört zu den Funktionen von GREL, die wir auf Grund ihrer Relevanz in diesen Einführungsworkshop mit aufgenommen haben.

Aufgabe 7: Daten mit Filter auf eine andere Spalte übertragen

In der Spalte “Geburtsort” ist bei einem Ort die GND-ID verrutscht und der Ortsname verloren gegangen. Bei dem Ort handelt es sich um “Breslau (Polen)” mit der GND-ID “4008216-7”.

Um dies zu beheben erstellen wir ein “Text Facet” für die Spalte “Geburtsort” und filtern nur die Einträge mit “4008216-7”. Es gibt nun verschiedene Möglichkeiten die Daten in die Spalte “Geburtsort (GND-ID)” zu übertragen.

  1. Zellen einzeln bearbeiten
  2. Ein weiteres “Text Facet” für die Spalte “Geburtsort (GND-ID)” erstellen und in beiden die Werte gesammelt bearbeiten.
  3. Die Werte via Textfilter oder “Text Facet” filtern und die Spalten zusammenführen ( “Geburtsort" "Edit column" "Join columns…”), ohne die Original Spalte zu löschen.
  4. Im Spaltenmenü via “Geburtsort (GND-ID)“ "Edit cells" "Transform” die Daten aus der anderen Spalte mit dem Ausdruck row.cells["Geburtsort"].value kopieren.

Alle Varianten haben ihre Berechtigung und je nach Kontext oder Anwendungsfall eignet sich die ein oder andere eher.

Fazit

Die Kombination aus Facets/Filtern und den Bearbeitungsmöglichkeiten machen OpenRefine zu unserem Liebling beim Aufräumen von Daten (Data Cleaning). Manchmal vermissen wir es jedoch größere Bereiche manuell auszuwählen und in eine andere Spalte zu Verschieben.


Im nächsten Teil lernen wir verschiedene Exportmöglichkeiten in OpenRefine kennen.

Benjamin Rosemann
Benjamin Rosemann
Data Scientist

Ich evaluiere KI- und Software-Lösungen und integriere sie in den Archivalltag.

Ähnliches