Workshop - 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 zuletzt getestet mit OpenRefine Version 3.8.2.
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-ID | Name | Geschlecht | Geburtsdatum | Geburtsort |
---|---|---|---|---|
143926683 | Kretschmann, Winfried | Männlich | 1948-05-17 | Spaichingen |
122189930 | Hermann, Winfried | Männlich | 1952 | Rottenburg 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-ID | Schlüssel | Wert |
---|---|---|
143926683 | Name Geschlecht Geburtsdatum Geburtsort | Kretschmann, Winfried Männlich 1948-05-17 Spaichingen |
122189930 | Name 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.
Kretschmann III als CSV💾 Wir benötigen die folgende Datei (Rechtsklick und “Ziel speichern unter…”):
Die importierten Daten sind in Abbildung 1 gezeigt.
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.
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.
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.
Hier sind auch schon zwei Nachteile beim Transponieren ohne Schlüssel zu sehen:
- Die Spalten müssen nachgearbeitet werden (Name ändern, Präfix entfernen).
- 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.
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.
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.
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.
Im nächsten Teil ergänzen wir mit OpenRefine ein Projekt mit Daten aus anderen Projekten.