OpenRefine: Record auf einer Zeile zusammenfassen

openrefinehistHub befasst sich in einer Blogserie mit der Aufbereitung und Anreicherung von Daten in OpenRefine. Alle Beiträge der Serie werden in einer Übersicht gesammelt. Der letzte Beitrag erklärte das Erstellen von OpenRefine Projekten aus nicht tabellenförmigen Daten. Dabei wurden Records generiert. Es wäre jedoch sinnvoller, die Informationen in einer einzigen Zeile zusammen zu fassen. In diesem Beitrag zeigen wir Möglichkeiten dazu auf.

Zusammenfügen

Im Beispiel aus dem letzten Beitrag haben wir ein OpenRefine Projekt aus einem json erstellt. Dabei wurden Records erstellt, die jeweils Metadaten zu Fotografien aus der bauhistorischen Fotosammlung «Gujer» enthalten. In einer Spalte sind Geokoordinaten enthalten. Diese verteilen sich auf zwei Zeilen innerhalb eines Records:

Wollen wir nun diese Daten in einer Zelle zusammenfassen, gehen wir wie folgt vor:

Wir wählen in der entsprechenden Spalte «Edit cells» – «Join multi-valued cells…». Als Trennzeichen («separator») wählen wir «, ». OpenRefine verbindet nun die Zellen aus dem gleichen Record, und wir haben die Koordinaten in einem Feld zusammengefasst:

Transpose

Im zweiten Beispiel aus dem letzten Beitrag präsentierte sich ein ähnliches Problem. Auch hier waren Informationen innerhalb von Records auf mehrere Zeilen verteilt, die besser in einer Zeile zusammengefasst würden:

In diesem Fall wollen wir, anders als im Beispiel oben, die Inhalte nicht in einer einzigen Zelle zusammenfassen. Stattdessen möchten wir drei neue Spalten schaffen: «accessResctrictionPeriod», «usagePermission» und «usagePermissionExpiringDate». Dazu nutzen wir «Transpose» aus dem Spaltenmenü, und wählen die Option «Transpose cells in rows into columns».

 OpenRefine fragt uns nun, wie viele neue Spalten wir schaffen wollen. In diesem Beispiel sind das drei. Die Inhalte aus dieser Spalte werden in drei neue Spalten verteilt. Diesen können wir jetzt die oben genannten Überschriften geben. Die Spalte, in der die Überschriften waren, brauchen wir nicht mehr, sie kann gelöscht werden. Das Projekt sieht jetzt folgendermassen aus:

OpenRefine hat die Zeilen beibehalten, aus denen die Inhalte in die neuen Spalten umverteilt wurde. Diese Zeilen können wir nun entfernen. Entweder nutzen wir dazu «Facet by blank», oder folgenden, etwas sichereren Ansatz:

Leere Zeilen finden und löschen

Auf einer beliebigen Spalte wählen wir über das Menü «Custom text facet» und geben dort folgenden Befehl ein:

filter(row.columnNames,cn,isBlank(cells[cn].value)).length()

Dieser findet pro Zeile jeweils die Anzahl leerer Zellen. Die beiden Ergebnisse in unserem Beispiel sind 0 und 32. Das Projekt hat 32 Spalten. Folglich sind die Zeilen mit 32 Null-Werten komplett leer. Wählen wir diese Facette aus, können wir alle leeren Zeilen löschen.

Fragen, Anregungen oder Wünsche zu histHub oder zur Blogserie zu OpenRefine nehmen wir gerne per Mail entgegen.