Fill down und Blank down

HistHub befasst sich in einer Blogserie mit der Aufbereitung und Anreicherung von Daten in OpenRefine. Alle Beiträge der Serie werden in einer Übersicht gesammelt. Im letzten Beitrag haben wir uns mit dem Unterschied zwischen «rows» und «records» befasst. Ein Vorteil des «Record»-Modus ist die Möglichkeit, «Fill Down» und «Blank down» zu kontrollieren.

«Fill down» und «Blank down» werden in OpenRefine recht häufig verwendet, beispielsweise beim Deduplizieren. Beide Funktionen sind «gierig». Das heisst, sie bearbeiten alle leeren Zellen bis zum nächsten Inhalt. Dies sowohl im «Row»- als auch im «Record»-Modus.

Zur Veranschaulichung hier ein kleines Beispiel, wieder mit den Metadaten zu den Fotografien von Annemarie Schwarzenbach:

Dazu verschieben wir zuerst die Spalte mit den Ortsangaben an den Anfang, damit wir anhand dieser Spalte «records» erstellen können (Spaltenmenü -> «Edit column» -> «Move column to beginning»).

Als nächstes wenden wir «Blank down» auf die erste Spalte an. Einmal im «Row»-Modus, dann machen wir den Schritt rückgängig und führen denselben Befehl im «Record»-Modus aus.

Beide Male werden dieselben Zellen entfernt. Der «Record»-Modus schützt also nicht vor den manchmal zu gierigen «Blank»- oder «Fill Down»-Funktionen.

Sicheres Blank Down und Fill Down

Angenommen wir wollen alle Zellen füllen, die zu einem Record gehören. Dazu wenden wir folgenden Trick an. Voraussetzung ist, dass das Projekt im «Record»-Modus geöffnet ist. Auf die gewünschte Spalte wenden wir eine Transformation an («Edit cells» –> «Transform»):

row.record.cells["Spalte"].value[0]

Zwischen [„“] wird der Name der entsprechenden Spalte eingefügt. Hier darf es keine Tippfehler geben, ansonsten meldet OpenRefine «Error: cannot retrieve field from null». Dieser Befehl bringt OpenRefine dazu, nur innerhalb des Records aufzufüllen. Dies verhindert, dass falsch aufgefüllt wird und Informationen in Zeilen landen, die dort nicht hingehören.

Zu beachten ist dabei immer, dass dies nur im «Record»-Modus funktioniert. Das heisst, «records» müssen erstellt und soweit bereinigt sein, dass die entsprechende Spalte aufgefüllt werden kann, ohne falsche Daten zu produzieren. Die zweite Einschränkung ist, dass OpenRefine den «Record»-Modus anhand der ersten Spalte erstellt. Diese erste Spalte darf deshalb erst dann aufgefüllt werden, wenn es den «Record»-Modus danach nicht mehr braucht. Ansonsten müsste entweder über den «Undo/Redo» Tab rückgängig gemacht werden, oder die im letzten Beitrag beschriebenen Arbeitsschritte müssten wiederholt werden, um die «records» wiederherzustellen. Oder es werden nach neuen Kriterien neue «records» geschaffen.

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