Workshop - Daten mit OpenRefine Transponieren

Folie - Daten mit OpenRefine Transponieren Folie - Daten mit OpenRefine Transponieren

OpenRefine kann Zeilen und Spalten tauschen. Diese Transposition kann sowohl auf dem kompletten Datensatz, als auch nur auf einer Auswahl an Spalten durchgeführt werden. In diesem Tutorial besprechen wir zwei Varianten des Transponierens.

Einführung

Transponieren in der OpenRefine Dokumentation.

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

In der Praxis kommt es vor, dass wir Daten in Spalten organisiert bekommen, die wir eigentlich zeilenweise benötigen, oder umgekehrt. In der nächsten Tabelle ist ein Ausschnitt von Daten zu Politikern im Kabinett Kretschmann III gezeigt, mit dem wir im Laufe dieser Aufgabe arbeiten werden. Die Daten sind in Spalten gespeichert.

GND-IDNameGeschlechtGeburtsdatumGeburtsort
143926683Kretschmann, WinfriedMännlich1948-05-17Spaichingen
122189930Hermann, WinfriedMännlich1952Rottenburg am Neckar

In der nächsten Tabelle sind die gleichen Daten zeilenweise gespeichert. Mit der zusätzlichen “GND-ID” Spalte, die wir nicht mittransponiert haben, ergibt sich dadurch eine Record-Struktur, wie wir sie im letzten Teil des Workshops kennen gelernt und besprochen haben.

GND-IDSchlüsselWert
143926683Name
Geschlecht
Geburtsdatum
Geburtsort
Kretschmann, Winfried
Männlich
1948-05-17
Spaichingen
122189930Name
Geschlecht
Geburtsdatum
Geburtsort
Hermann, Winfried
Männlich
1952
Rottenburg am Neckar
Name
Geschlecht
Geburtsdatum
Geburtsort

Mit der Option Daten in OpenRefine zu transponieren, können wir Daten in den oben gezeigten Formaten ineinander umwandeln.

Vorbereitung: Projekt erstellen

Die folgende Datei in ein OpenRefine-Projekt laden.

💾 Wir benötigen die folgende Datei (Rechtsklick und “Ziel speichern unter…”):

Kretschmann III als CSV

Die importierten Daten sind in Abbildung 1 gezeigt.

Bildschirmfoto der Daten nach dem Import.
Bildschirmfoto der Daten nach dem Import.

Aufgabe 1: Transponieren ohne Schlüsselspalte

Wir transponieren in dieser Aufgabe die in Abbildung 1 abgebildeten Daten in ein zeilenweises Datenformat. Dabei lassen wir die Spalte “GND-ID” stehen um anschließend eine Record-Struktur zu erzeugen.

Zum Transponieren gehen wir in den zugehörigen Dialog via “Name" "Transpose" "Transpose cells across columns into rows…” und wählen dort die zu transponierenden Spalten aus. Wie in Abbildung 2 geben wir als Zielformat an, dass wir die Daten in einer Spalte (One column) zusammengefasst bekommen möchten.

Bildschirmfoto des Dialoges zum Transponieren in eine Spalte.
Bildschirmfoto des Dialoges zum Transponieren in eine Spalte.

Das Ergebnis ist in Abbildung 3 gezeigt. Wir haben nun eine Record-Struktur mit der GND-ID als Identifikator und allen zugehörigen Daten in einem Record-Feld.

Bildschirmfoto der Daten nach dem Transponieren in eine Spalte.
Bildschirmfoto der Daten nach dem Transponieren in eine Spalte.

Der Schritt von einer zeilenweiser Speicherung zurück zu Spalten geht über “Daten" "Transpose" "Transpose cells in rows into columns…”. In dem Dialog geben wir 4 Zeilen zum Transponieren an. Das Ergebnis ist in Abbildung 4 gezeigt.

Bildschirmfoto der Daten nach dem Transponieren von einer Spalte.
Bildschirmfoto der Daten nach dem Transponieren von einer Spalte.

Hier sind auch schon zwei Nachteile beim Transponieren ohne Schlüssel zu sehen:

  1. Die Spalten müssen nachgearbeitet werden (Name ändern, Präfix entfernen).
  2. Die Daten müssen einheitlich sein, also gleiche Anzahl an Elementen und gleiche Sortierung, da die Umwandlung sonst “verrutscht”.

Aufgabe 2: Transponieren mit Schlüsselspalte

Wir machen die Änderungen rückgängig und stellen den in Abbildung 1 gezeigten Ursprungszustand des Projektes wieder her.

Diesmal transponieren wir die Daten in zwei Spalten, indem wir eine separate Schlüsselspalte erzeugen lassen. Dies funktioniert über den gleichen Dialog wie in Aufgabe 1 über “Name" "Transpose" "Transpose cells across columns into rows…”. Die Einstellungen sind in Abbildung 5 gezeigt.

Bildschirmfoto des Dialoges zum Transponieren in zwei Spalten.
Bildschirmfoto des Dialoges zum Transponieren in zwei Spalten.

Das Ergebnis der Umwandlung ist in Abbildung 6 gezeigt. Wir haben eine Record-Struktur mit der GND-ID als Identifikator und allen zugehörigen Daten in einem Record-Feld.

Bildschirmfoto der Daten nach dem Transponieren in zwei Spalten.
Bildschirmfoto der Daten nach dem Transponieren in zwei Spalten.

Bevor wir von diesem Format zu einem Spaltenformat kommen, müssen wir zuerst die Records auflösen. Wir haben in diesem Datensatz nur eine Spalte (“GND-ID”) mit leeren Feldern, also genügt es diese über “GND-ID" "Edit cells" "Fill down” aufzufüllen.

Anschließend können wir diesmal über “Schluessel" "Transpose" "Columnize by key/value columns…” mit den in Abbildung 7 gezeigten Einstellungen wieder zum Ursprungsformat zurückgelangen.

Bildschirmfoto des Dialoges zum Transponieren von Schlüssel/Werte Spalten.
Bildschirmfoto des Dialoges zum Transponieren von Schlüssel/Werte Spalten.

Diesmal benötigen wir anschließend keine Anpassungen oder im Vorfeld schon sortierte Daten. Lediglich die Schlüssel in der Spalte “Schluessel” sollten einheitlich geschrieben sein.

Fazit

Transponieren in OpenRefine hat noch weitere Features, wie zum Beispiel die Berücksichtigung von extra Spalten, mehreren Werten und separaten Spalten für Notizen. Dabei ist OpenRefine gerade beim Unwandeln von zeilenweisen Daten in spaltenweise sehr sensibel gegenüber der Sortierung der Werte in der Schlüsselspalte und ggf. weiteren Spalten, die nicht mit umgewandelt werden sollen.

Ein typischer Fehler ist zum Beispiel die Umwandlung von “Records” mit “Columnize by key/value columns” ohne die “Records” vorher mit “Fill down” aufzulösen. Das führt dazu, dass “Leer” als eigener Wert berücksichtigt wird und OpenRefine die Daten dadurch wie in Abbildung 8 sehr unerwartet sortiert.

Bildschirmfoto des Ergebnisses von Aufgabe 2 ohne 'Fill down'.
Bildschirmfoto des Ergebnisses von Aufgabe 2 ohne ‘Fill down’.

Im nächsten Teil ergänzen wir mit OpenRefine ein Projekt mit Daten aus anderen Projekten.

Benjamin Rosemann
Benjamin Rosemann
Data Scientist

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

Ähnliches