Bearbeiten von Spalten und Zellen

openrefineHistHub befasst sich in einer Blogserie mit der Aufbereitung und Anreicherung von Daten in Openrefine. Dieser Beitrag zeigt häufig angewandte Transformationen.

Als Grundlage dienen weiterhin die Metadaten zu den Fotografien von Annemarie Schwarzenbach, die im Beitrag über das Erstellen eines OpenRefine Projekts vorgestellt wurden.

Häufige Transformationen

Die Spalte «Titel_Name» enthält Informationen über die Fotografie, die meist aus einem Land, einem Ortsnamen und einer genaueren Bezeichnung bestehen. Diese wollen wir extrahieren. Es gibt in der Tabelle zwar eine Spalte «Ort», mit einer Facette lässt sich aber schnell herausfinden, dass diese nur Orte in der Schweiz enthält. Um eine Spalte mit Ortsangaben weltweit zu erstellen, wollen wir aus der Spalte «Titel_Name» Ortsangaben extrahieren. Davor putzen wir die Einträge.

Whitespace entfernen

Ein häufiges Phänomen sind überzählige Leerzeichen am Anfang oder Ende einer Zelle. OpenRefine stellt eine Funktion zur Verfügung, die mit einem Klick solche Zeichen entfernt. Über das Spaltenmenü -> «Edit cells» -> «Common transforms» -> «Trim leading and trailing whitespace» wird diese aufgerufen. In diesem Beispiel gibt es keine Leerzeichen am Anfang oder Ende eines Eintrags, OpenRefine bearbeitet also 0 Zeilen.

Auch die Funktion «Collapse consecutive whitespace» sollte vor weiteren Transformationen ausgeführt werden. Mit dieser Funktion werden 10 Zeilen bearbeitet, in denen es offenbar aufeinander folgende Leerzeichen gab.

Spalten trennen

Die meisten Einträge in der Spalte «Titel_Name» sind so aufgebaut, dass zuerst das Land, nach einem Komma die Ortschaft und danach eine genauere Bezeichnung für das Bild angegeben ist.

OpenRefine

Dies machen wir uns zunutze.

Über das Menü der Spalte «Titel_Name» wird «Edit column» -> «Split into several columns…» aufgerufen.

Darauf können die Parameter der Trennung der Spalte eingestellt werden. Zuerst trennen wir die genauere Bezeichnung hinter der Ortsbezeichnung ab.

OpenRefine bietet zwei Möglichkeit zur Trennung von Spalten an:

  • Bei einem bestimmten Trennzeichen, oder
  • bei einer bestimmten Anzahl von Zeichen.

Für unser Problem bietet sich einer Trennung nach dem «: » an. Der Leerschlag ist notwendig, sonst beginnt die zweite Spalte mit einem solchen. Reguläre Ausdrücke sind möglich. Eine Einführung inklusive Übungen  zu Regulären Ausdrücken bietet der Regexr. In OpenRefine kann bei der Trennung von Spalten eine maximale Anzahl neu zu bildender Spalten angegeben werden.

Rechts im Bearbeitungsfenster können weitere Optionen angewählt werden, die OpenRefine nach der Trennung der Spalten ausführt. «Guess cell type» bestimmt automatisch den Inhaltstyp der Zelle, also ob es sich um einen String (Text), eine Zahl oder ein Datum handelt. «Remove this column» entfernt die ursprüngliche Spalte. Diese Option soll jetzt nicht gewählt werden, wir wollen die ursprüngliche «Titel_Name» Spalte beibehalten.

Ein Klick auf «OK» trennt die Spalten. Neben der Spalte «Titel_Name» befinden sich jetzt die Spalte «Titel_Name 1» und die Spalte «Titel_Name 2» mit der genaueren Bezeichnung des Inhalts der Fotografie, und «Titel_Name 3».

Diese letzte Spalte wurde so nicht erwartet. Eine Facette zeigt, dass lediglich zwei Zeilen in dieser Spalte einen Inhalt haben.

OpenRefine Facet

Offensichtlich befand sich in diesen Zellen mehr als ein «: », so dass sie mehr als einmal geteilt wurden. Dies hätte sich mit einer «2» bei «Split into _ columns at most (leave blank for no limit)» verhindern lassen. Beheben lässt sich der Fehler, indem der letzte Schritt rückgängig gemacht (siehe unten) und mit dieser Einstellung nochmal wiederholt wird.

Die Spalte «Titel_Name 1» wird nun erneut aufgeteilt, diesmal beim «, ». Der Prozess ist derselbe wie vorhin. Diesmal setzen wir aber ein Häkchen bei «Remove this column», und legen die maximale Anzahl der Spalten auf 2 fest. Daraus entstehen die Spalten «Titel_Name 1 1» und «Titel_Name 1 2».

Umbenennen von Spalten

Diese Namen sind etwas unhandlich, wir werden deshalb sinnvollere Spaltenüberschriften vergeben.

Dies wird im Spaltenmenü unter «Edit column» -> «Rename this column» gemacht. Aussagekräftigere Titel sind z.B. «Land» für «Titel_Name 1 1», «Ort_weltweit» für «Titel_Name 1 2» und «Kurztitel» für «Titel_Name 2». Aus einer Spalte, die Ortsnamen und andere Inhalte enthielt, haben wir jetzt übersichtliche Informationen extrahiert.

OpenRefine lässt Leerzeichen in Spaltenüberschriften zu. Da andere Anwendungen damit Probleme haben ist es dennoch sinnvoll, von Anfang an auf Leerzeichen oder Sonderzeichen wie Umlaute zu verzichten.

Undo/Redo

Verschiedentlich wurde schon auf die Möglichkeit verwiesen, Arbeitsschritte rückgängig zu machen.

Schnell und einfach geht das mit der Tastenkombination Ctrl + Z. OpenRefine bietet aber mehr.

Im Tab «Undo/Redo» in der linken Seitenspalte können einzelne oder mehrere Schritte rückgängig gemacht oder wiederholt werden. Der aktuelle Stand des Schwarzenbach-Metadaten-Projekts sieht so aus:

Alle Arbeitsschritte sind aufgelistet, jeweils mit den umgesetzten Befehlen. Auch über das Menü ausgeführte Befehle sind hier als Text dargestellt.

Ein Klick auf einen Arbeitsschritt setzt das ganze Projekt wieder auf diesen Stand zurück.

Ausserdem kann der Code aller oder einiger der bisherigen Arbeitsschritte kopiert werden. Danach können sie in einem anderen oder auch im selben Projekt angewendet werden. Dazu auf «Extract» klicken. Hier können die gewünschten Arbeitsschritte ausgewählt werden.

Auf der rechten Seite wird das JSON angezeigt. Sind die gewünschten Arbeitsschritte ausgewählt, kann der Code mit Ctrl + A markiert und mit Ctrl + C kopiert werden.

Zur Übung kopieren wir den Code aller Arbeitsschritte. Dann setzen wir das Projekt im Tab Undo/Redo auf den Schritt 0 zurück, indem wir auf «0. Create Project» klicken. Danach «Apply» wählen, den zuvor kopierten Code mit Ctrl + V in das Textfeld einfügen, und mit «Perform Operations» anwenden. Das Projekt ist jetzt wieder auf dem gleichen Stand wie zuvor.

Auf diese Weise Arbeitsschritte zu kopieren funktioniert auch über Projekte hinweg, wenn die Spaltenüberschriften dieselben sind.

Fragen, Anregungen oder Wünsche nehmen wir gerne per Mail entgegen.

Facetten und Filter

openrefine

In einer Blogserie befasst sich histHub mit der Aufbereitung und Anreicherung von Daten in OpenRefine. Alle Beiträge der Serie werden in einer Übersicht gesammelt.

Im letzten Beitrag haben wir ein Projekt mit den Metadaten zu den Fotografien von Annemarie Schwarzenbach erstellt, heute befassen wir uns mit Facetten und Filtern. Die Erklärungen beziehen sich auf die Metadaten der Fotografien von Annemarie Schwarzenbach, können aber natürlich auch mit einem anderen Datansatz nachvollzogen werden.

Filter und Facetten werden jeweils für eine Tabellenpalte über deren Menü aufgerufen und angewandt. Bei einem geöffneten Projekt gibt es in der linken Seitenspalte zwei Tabs, mit denen man zwischen den Ansichten «Facet/Filter» und «Undo/Redo» wechseln kann. Für den Moment interessiert uns nur der «Facet/Filter» Tab.

Facetten

Wenn wir in der Spalte Orientierung_Form das Menü mit einem Klick auf den Pfeil neben der Spaltenüberschrift öffnen, dann «Facet» und «Text facet» wählen, wird in der linken Seitenleiste folgendes Fenster dargestellt:

Hier sind alle in dieser Spalte vorkommenden Werte mit Anzahl des Vorkommens aufgelistet. Es kann alphabetisch oder nach Anzahl sortiert werden. Ein Klick auf einen  der Werte wählt alle Zeilen mit diesem Wert aus und zeigt sie an.

Facetten sind hilfreich, um beispielsweise Schreibfehler oder Inkonsistenzen schnell zu finden und gegebenenfalls zu korrigieren. Die Einträge «QuadratHorizontal» und «HorizontalQuadrat» im obigen Beispiel könnten das gleiche meinen, zumal einer davon nur ein einziges Mal auftaucht.

Zeigen wir nun die Zeilen zu diesen beiden Ausprägungen an. Bei Mousevoer wird der aktive Eintrag im Facettenfenster grau hinterlegt, und rechts erscheinen die Schaltflächen «edit» und «include». Mit einem Klick auf «include» bei den beiden Zeilen werden nur noch die entsprechenden Beiträge in der Tabelle angezeigt. In der blau hinterlegten Kopfzeile ist «28 matching rows (3486 total)» zu sehen. Diese Information ist besonders wichtig für weitere Transformationen. Werden jetzt Transformationen auf eine Spalte oder auf Zellen einer Spalte gemacht, geschieht dies nur in diesen gematchten Zeilen.

Zur Vereinheitlichung dieser 28 Zeilen bieten sich verschiedene Möglichkeiten an:

  • Im Facetten-Fenster in der linken Seitenleiste kann «edit» gewählt werden. Das ändert alle Vorkommen dieses Eintrags. Bei einer überschaubaren Anzahl Werte wie in diesem Beispiel ist das oft die schnellere Variante.
  • Der zweite Weg ist etwas komplexer. Hier ist wichtig, dass nur die Zeilen gematched sind, also angezeigt werden, die auch bearbeitet werden sollen.
    Über das Spalten-Menü zuerst auf «Edit cells», dann «Transform…». Hier öffner sich ein Bearbeitungsfenster. In Openrefine wird üblicherweise mit der General Refine Expression Language GREL gearbeitet, es sind aber auch andere Sprachen möglich. GREL wird in einem späteren Beitrag in dieser Blogserie vertieft behandelt werden.
    Zu Beginn ist im Eingabefenster immer «value» angegeben. Wollen wir nun alle aktiven (also gematchten) Zeilen mit einem einzigen Wert befüllen, können wir diesen in Anführungszeichen eingeben. «value» benötigen wir dazu nicht:

    Nach dem Klick auf «OK» wird oben vor gelbem Hintergrund angezeigt, wie viele Zellen bearbeitet wurden. Bei diesem Beispiel ist dies eine einzige Zeile.

Filter

Ein anderer Ansatz, nur bestimmte Zeilen anzuzeigen und gegebenenfalls zu bearbeiten sind Filter. Diese betreffen nicht den gesamten Inhalt der Zelle wie die Facetten.

Im Spaltenmenü kann unter «Text filter» ein Filter aufgerufen und angewandt werden. Es ist möglich, hier Reguläre Ausdrücke zu verwenden.

In der Spalte «Orientierung_Form» kann z.B. nach «Quadrat» gefiltert werden. Gematched werden dann nicht nur die Zeilen mit dem exakten Inhalt «Quadrat», sondern beispielsweise auch «QuadratHorizontal».

Ist ein Filter aktiv, werden wie bei Facetten weitere Transformationen nur über die sichtbaren Zeilen ausgeführt. Umgekehrt kann mit Filter eine über Facetten getroffene Auswahl weiter eingeschränkt werden. Die Anzahl der gematchten, also sichtbaren Zeilen ist jeweils oberhalb der Tabelle in der blau hinterlegten Zeile zu sehen.

Kennenlernen der Daten

Facetten helfen, sich einen Überblick über die Daten zu verschaffen. Tippfehler lassen sich hier schnell beheben, wenn die Anzahl der Werte überschaubar ist. Bei grösseren Datenmengen oder wenn viele unterschiedliche Werte in einer Spalte vorhanden sind, eignet sich dafür das Clustern besser. Das Clustern wird in einem späteren Beitrag behandelt.

Mit Filtern kann gezielt nach einem bestimmten Begriff in einer Spalte gesucht werden.

Filter und Facetten helfen, die eigenen Daten kennenzulernen. Fehler in den Daten lassen sich so schnell aufspüren und korrigieren. Ausserdem ermöglichen es Filter und Facetten, nur eine bestimmte Auswahl an Zeilen zu transformieren. Dazu gibt es mehr im nächsten Beitrag.

Wünsche oder Anregungen für weitere Beiträge in dieser Blogserie nehmen wir gerne per Mail entgegen.

Erste Schritte mit OpenRefine: ein erstes Projekt

openrefineIn einer Blogserie befasst sich histHub mit der Aufbereitung und Anreicherung von Daten in OpenRefine. Alle Beiträge der Serie werden in einer Übersicht gesammelt.

OpenRefine starten

HistHub arbeitet an einer Webinstanz, in die künftig neben OpenRefine weitere Tools zur Bearbeitung historischer Daten integriert werden. Eine Alpha-Version ist bereits verfügbar. Wer schon jetzt die Online-Version testen will, kann unter net@histhub.ch einen Zugang beantragen.

Prinzipiell kann OpenRefine aber auch auf dem eigenen Computer installiert werden. Der Download und Anleitungen zur Installation für verschiedene Betriebssysteme sind auf der Website von OpenRefine verfügbar.

Beispieldatensatz – Fotosammlung Annemarie Schwarzenbach (Schweizerische Nationalbibliothek)

Für die ersten Übungen verwenden wir die Metadaten zu den Fotografien von Annemarie Schwarzenbach. Die Daten werden von der Nationalbibliothek zur Verfügung gestellt und sind auf dem Portal opendata.swiss abrufbar. Die Metadaten sind im csv-Format vorhanden.

Die Digitalisate der Fotos sind auf Wikimedia Commons verfügbar, Links auf die Digitalisate sind in der Tabelle vorhanden.

Hier geht es direkt zum Download.

Upload der Daten

In dieser ersten Übung verwenden wir den simplen Upload einer Datei vom eigenen Computer aus. Nach dem Start von OpenRefine in der Navigation links «Create Project» wählen, dann unter «Get data from» «This Computer» aussuchen. Mit einem Klick auf «Durchsuchen» kann zur zuvor gespeicherten csv-Datei navigiert werden.


Mit einem Klick auf «Next» werden die Daten geladen. Der Upload kann ein paar wenige Minuten dauern.

Konfiguration der Tabelle

Danach zeigt sich folgender Bildschirm:

Hier werden die Textdateien für den eigentlichen Import vorbereitet.

Wichtige Parameter, die häufig benötigt werden sind:

  • Zeichencodierung (Character encoding)
    In unserem Fall ist die Codierung UTF-8.
    Einen ersten Überblick über die unterschiedlichen Codierungsmäglichkeiten für westeuropäische Alphabete bietet dieser Wikipedia-Artikel.
  • Zeichen, die die Spaltengrenzen markieren (Columns are separated by)
    Die Spalten sind in unserem Beispiel mit «;» voneinander getrennt, dementspchend muss unter «custom» ein ; eingetragen werden. Neben Komma und Tab, die Standard sind, können im Customfeld alle beliebigen Zeichen eingetragen werden, an denen eine neue Spalte beginnen soll.
  • Im rechten unteren Bildschirmbereich kann man die Bearbeitung der Zeilen auswählen.
    Hierbei ist es möglich, den Import erst ab einer bestimmten Zeile zu beginnen. Hier kann unter anderem angegeben werden, ob die Spalte eine Kopfzeile hat oder nicht. («Parse next _ line(s) as column header»).

Sobald die Vorschau wie gewünscht aussieht, kann oben rechts noch ein aussagekräftiger Name gewählt werden, bevor mit einem Klick auf «Create Project» das OpenRefine Projekt angelegt wird.

Orientierung in OpenRefine

Bevor wir im nächsten Blogbeitrag mit den ersten Bearbeitungen loslegen, wollen wir uns zuerst etwas orientieren.

Oben erscheint direkt neben dem OpenRefine-Logo der Name des aktuell offenen Projekts. Mit einem Doppelklick kann der geändert werden. Das Logo führt zurück auf die Startseite von OpenRefine, wo ein neues Projekt gestartet oder ein bereits vorhandenes Projekt geöffnet werden kann. Oben rechts sind Buttons für das Öffnen eines neuen OpenRefine-Fensters, den Export des aktuell offenen Projekts und zur Hilfe.

In der linken Seitenspalte gibt es zwei Tabs. Der Facet/Filter Tab zeigt Facetten und Filter an, wenn solche ausgewählt wurden. Der Tab Undo/Redo ermöglicht es, Schritte rückgängig zu machen oder zu wiederholen. Dort ist es ausserdem möglich, Schritte zu exportieren oder zu importieren. Die Undo/Redo Funktion sowie Filter und Facetten werden in anderen Blogbeiträgen ausführlich behandelt.

In der blauen Zeile oben wird die Anzahl Zeilen angezeigt. Darunter lässt sich einstellen, wie viele Zeilen sichtbar sein sollen. In der Zeile mit den Titeln der Spalten ist bei jeder Spalte ein Pfeilsymbol. Damit lässt sich ein Menü öffnen. Fast alle Funktionen von OpenRefine verbergen sich hier. Die Spalte ganz links («All») wird von OpenRefine für jedes Projekt automatisch erstellt. Dort lassen sich Zeilen mit Stern oder Fähnchen markieren, ausserdem vergibt OpenRefine selbständig eindeutige IDs.

Soviel zum Erstellen eines Projekts und zur Orientierung in OpenRefine. Fragen, Wünsche und Anregungen können jederzeit per Mail an uns gerichtet werden.

Über OpenRefine

openrefineWer oft mit automatisch generierten oder übernommenen historischen Daten arbeitet, kennt das Problem von sogenannten «Messy Data»: Daten, die in Form und Aufbereitung noch nicht den Bedürfnissen einer historischen Fragestellung entsprechend oder in dieser Form noch nicht mit anderen Tools weiterverwendet werden können. Es kann einiges an Aufwand erfordern, diese Daten aufzubereiten und für die weitere Verarbeitung, zum Beispiel in einer Visualisierung, aufzuwerten.

Ausserdem besteht immer öfter der Wunsch, den bestehenden Grundstock an Daten mit anderen existierenden Informationen im Netz anzureichern. Derzeit bietet beispielsweise Wikidata eine einfach zu nutzende Schnittstelle an und in der Zukunft wird auch histHub seine Daten maschinenlesbar zur Verfügung stellen.

Wir werden uns in den nächsten Monaten ganz tief in unseren Daten vergraben und uns sehr intensiv mit den Möglichkeiten zur Vernetzung von historischen Forschungsdaten beschäftigen. Um die Community an unseren Erkenntnissen teilhaben zu lassen und Lösungshilfen bei ähnlichen Problemen leisten zu können, lancieren wir eine Blogserie, die sich mit den vielfältigen Möglichkeiten zur Datenaufbereitung und -anreicherung mit Hilfe von OpenRefine beschäftigen wird. OpenRefine ist ein Tool zur Bearbeitung von Messy Data. Die Beiträge zielen darauf ab, Schritt für Schritt in die Arbeit mit OpenRefine einzuführen, grundlegende Funktionsweisen und Abfragen zu erklären und einen Dialog mit der Community in Gang zu setzen.

Fragen, Wünsche und Anregungen können jederzeit per Mail an uns gerichtet werden.