Workshop - Daten zwischen Projekten in OpenRefine abgleichen

Daten können zwischen OpenRefine Projekten abgeglichen werden. In diesem Tutorial zeigen wir wie das funktioniert.
Einführung
cross()
in der OpenRefine Dokumentation.
cross()
im OpenRefine Wiki.
Im Artikel Gemeinsam an OpenRefine-Projekten arbeiten haben wir verschiedene Varianten, Daten zwischen OpenRefine Projekten abzugleichen, besprochen und verglichen. In diesem Tutorial fokussieren wir uns auf die Funktion cross() in OpenRefine, ohne über Alternativen und zukünftige Entwicklungen zu spekulieren.
Vorbereitung: Projekt erstellen
Die folgenden Dateien jeweils in ein OpenRefine-Projekt laden.
💾 Wir benötigen die folgenden Dateien (Rechtsklick und “Ziel speichern unter…”):
Staedte in BW
Staedte in BW - Geokoordinaten
In der Datei für das Projekt “Staedte in BW” sind Informationen aus Wikidata und der GND zu den 25 bevölkerungsreichsten Städten in Baden-Württemberg gesammelt.
In der Datei für das Projekte “Staedte in BW - Geokoordinaten” sind Geokoordinaten für Städte in Baden Württemberg gesammelt. Mit diesen beiden Projekten testen wir in den folgenden Aufgaben den Datenabgleich.
Aufgabe 1: Daten via Name abgleichen
Im Projekt “Staedte in BW” wollen wir die passenden Geokoordinaten für die einzelnen Städte aus dem Projekt “Staedte in BW - Geokoordinaten” nachladen. Dafür gehen wir im Projekt “Staedte in BW” über “Stadt" "Edit column" "Add column based on this column…” und verwenden den folgenden GREL Ausdruck.
cell.cross(
"Staedte in BW - Geokoordinaten",
"Name")
.cells["Geokoordinaten (WGS 84)"]
.value[0]
Dabei benötigen wir den exakten Projektnamen des Projektes aus dem wir die Daten nachladen wollen (“Staedte in BW - Geokoordinaten”), die Spalte in dem anderen Projekt mit der unsere Spalte “Stadt” abgeglichen werden soll (“Name”) und den Namen der Spalte in dem anderen Projekt, die wir “nachladen” wollen (“Geokoordinaten (WGS 84)”). Der Dialog ist in Abbildung 1 gezeigt.

Aufgabe: in der Vorschau in Abbildung 1 ist zu sehen, dass für “Freiburg im Breisgau” keine Daten nachgeladen werden konnten. Warum ist das so? Gibt es noch weitere “problematischen” Einträge? Was bedeutet das für einen Abgleich über “Namen”?
Lösung:
- Im Projekt “Staedte in BW - Geokoordinaten” sind die Namen der Städte “Freiburg im Breisgau” und “Esslingen am Neckar” abgekürzt.
- Ein Abgleich über Namen scheitert manchmal an unterschiedlichen Schreibweisen.
- Wenn möglich also besser eindeutige IDs verwenden.
- Siehe auch Gemeinsam an OpenRefine-Projekten arbeiten für weitere Details und mögliche Lösungsstrategien.
Aufgabe 2: Daten via ID abgleichen
Wir wiederholen die Aufgabe mit einem Abgleich über die Spalte “GND-ID”.
Aufgabe: Laden Sie im Projekt “Staedte in BW” die Spalte “Geokoordinaten (WGS 84)” aus dem Projekt “Staedte in BW - Geokoordinaten” über einen Abgleich mit der Spalte “GND-ID” nach.
Lösung:
Dafür gehen wir im Projekt “Staedte in BW” über “GND-ID” “Edit column” “Add column based on this column…” und verwenden den folgenden GREL Ausdruck.
cell.cross(
"Staedte in BW - Geokoordinaten",
"GND ID")
.cells["Geokoordinaten (WGS 84)"]
.value[0]

Fazit
Mit der Funktion cross()
können ziemlich komfortabel Daten zwischen unterschiedlichen OpenRefine Projekten abgeglichen werden.
Natürlich kann sie auch dazu verwendet werden Datenspalten innerhalb eines Projektes zu vergleichen.
Die Funktion kann jedoch nur eindeutige Werte zusammenführen.
Schon kleinste Abweichungen wie zusätzliche Leerzeichen oder Abkürzungen sorgen für einen fehlenden Abgleich der einzelnen Zeilen.
Umso wichtiger ist ein sorgfältiges Arbeiten und die Verwendung von eindeutigen Identifikatoren.
Im nächsten Teil beschäftigen wir uns weiter mit Facets in OpenRefine.