Workshop - Die Welt der Facets in OpenRefine

Folie - Die Welt der Facets in OpenRefine Folie - Die Welt der Facets in OpenRefine

Nachdem wir uns im Workshops für Einsteiger hauptsächlich mit den Text Facets in OpenRefine beschäftigt haben, betrachten wir in diesem Tutorial weitere nützliche Facets.

Einführung

Facets in der OpenRefine Dokumentation.
Reconciliation Facets in der OpenRefine Dokumentation.

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

Vorbereitung: Projekt erstellen

Wir verwenden das im Tutorial 12 Daten zwischen Projekten abgleichen erstellte Projekt “Staedte in BW”.

Aufgabe 1: Datentypen anpassen

Der Grundzustand des Projektes ist in Abbildung 1 gezeigt.

Bildschirmfoto des Projektes 'Staedte in BW' ohne Anpassungen.
Bildschirmfoto des Projektes ‘Staedte in BW’ ohne Anpassungen.

An der schwarzen Farbe der Spalteninhalte erkennen wir, dass wir es hier ausschließlich mit Textspalten zu tun haben. Da wir in diesem Tutorial Facets für verschiedene Datentypen kennen lernen wollen, passen wir die Datentypen der einzelnen Spalten an.

Hierfür gibt es in OpenRefine schon Befehle, die wir im Spaltenmenü finden “…“ "Edit cells" "Common Transforms" ”…”

Aufgabe: Wir passen die Datentypen in den folgenden Spalten an:

  • Urkundlich erwaehnt: Datum (toDate)
  • Flaeche (km2): Zahl (toNumber)
  • Bevoelkerung (2021): Zahl (toNumber)
  • Weibliche Bevoelkerung (2021): Zahl (toNumber)
  • Maennliche Bevoelkerung (2021): Zahl (toNumber)

Das Ergebnis sollte dann aussehen wie in Abbildung 2.

Bildschirmfoto des Projektes 'Staedte in BW' nach Typanpassungen.
Bildschirmfoto des Projektes ‘Staedte in BW’ nach Typanpassungen.

Aufgabe 2: All Facets

In der “All” Spalte gibt es Facets, die auf den ganzen Datensatz angewendet werden können. Neben den schon bekannten Facets zum Filtern von mit Sternen oder Flaggen markierten Zeilen sowie komplett leeren Zeilen gibt es auch Facets zum Filtern von leeren Einträgen in Spalten oder Records. In Abbildung 3 sind die beiden Facets für “Blank value per column” und “Non-blank value per column” gezeigt. Mit diesen Facets lassen sich schnell und übersichtlich Zeilen filtern, ohne das “Facet by blank” für jede Spalte separat aufzurufen.

Bildschirmfoto der Facets zur Identifikation von leeren Feldern.
Bildschirmfoto der Facets zur Identifikation von leeren Feldern.

Aufgabe: Überprüfen Sie die folgende Aussage.

“Alle Orte in diesem Datensatz ohne Angabe zum männlichen Bevölkerungsanteil haben auch keine Angabe zum weiblichen Bevölkerungsanteil.”

Aufgabe 3: Null oder Leer

Bei den einzelnen Spalten gibt es drei Facets zur Identifikation von leeren Zeilen. Das Äquivalent zu den in Aufgabe 2 vorgestellten Facets ist das “Facet by blank (null or empty string)”, welches in Abbildung 4 abgebildet ist. Das Facet wurde geöffnet mit “Urkundlich erwaehnt" "Facet" "Customized facets" "Facet by blank (null or empty string)”.

Bildschirmfoto des 'Facet by blank (null or empty string)'.
Bildschirmfoto des ‘Facet by blank (null or empty string)’.

Aufgabe: Öffnen Sie auf der Spalte “Urkundlich erwaehnt” zusätzlich die Facets “Facet by null” und “Facet by empty string”. Worin unterscheiden sich die drei Facets?

Lösung:

OpenRefine unterscheidet zwischen nichts (null) und einem leeren Text (""), der ja zumindest vom Typ Text ist. Da wir aber häufig null und "" gemeinsam behandeln wollen, gibt es zusätzlich blank, was null und "" zusammenfasst.

Aufgabe 4: Numeric Facets

OpenRefine bietet unterschiedliche visuelle Darstellungen für Zahlen in Facets an. In Abbildung 5 ist die Histogrammansicht gezeigt. Auf der X-Achse ist der Wertebereich abgebildet und auf der Y-Achse die Häufigkeit des entsprechenden Wertes. Der angezeigte Bereich lässt sich mit Schiebern an den Seiten einschränken.

Zusätzlich zu dem normalen “Numeric Facet” gibt es bei den “Customized Facets” noch eine logarithmische Darstellung (“Numeric log facet”) und eine begrenzte logarithmische Darstellung (“1-boundet numeric log facet”).

Bildschirmfoto der Facets für Zahlen.
Bildschirmfoto der Facets für Zahlen.

Eine andere Darstellung ist das “Scatterplot facet”, welches zuerst ein Streudiagramm über alle numerischen Spalten anzeigt (Abbildung 6) und durch Auswahl eines Streudiagramms dieses in die Facet Ansicht übernimmt (Abbildung 7).

Bildschirmfoto des Scatterplots über alle numerischen Spalten.
Bildschirmfoto des Scatterplots über alle numerischen Spalten.

In dem Streudiagramm in Abbildung 7 lassen sich auch Werte und Bereiche mit der Maus auswählen und danach filtern.

Bildschirmfoto eines Scatterplots in der Facet Ansicht.
Bildschirmfoto eines Scatterplots in der Facet Ansicht.

Aufgabe: In dem Datensatz gibt es laut Streudiagramm eine Stadt mit einem leichten “Männerüberschuss”. Um welche Stadt handelt es sich dabei?

Lösung:

Bei der Stadt handelt es sich um Karlsruhe.

Aufgabe 5: Timeline (und Custom) Facets

Es gibt ein separates Timeline Facet, welches auf eine Spalte vom Typ Datum (“date”) angewendet werden kann. Wie in Abbildung 8 zu sehen, ist das ähnlich wie beim “Numeric facet” ein Histogramm, nur dass die Daten auf der X-Achse nach Datum geordnet sind.

Bildschirmfoto des 'Timeline facet'.
Bildschirmfoto des ‘Timeline facet’.

Da das bei Jahreszahlen auch recht schnell unübersichtlich wird, können wir so ein Facet auch selbst erstellen. Wir gehen dazu auf “Urkundlich erwaehnt" "Facet" "Custome Numeric Facet…” und verwenden den folgenden GREL-Ausdruck um das in Abbildung 9 gezeigte Facet zu erstellen.

value.datePart("year")
Bildschirmfoto eines 'Custom Numeric Facet'.
Bildschirmfoto eines ‘Custom Numeric Facet’.

Aufgabe: Erstellen Sie ein Facet mit den Differenzen für “weibliche - männliche” Bevölkerung.

Lösung:

Dafür benötigen wir ein “Custom Numeric Facet” mit dem folgenden GREL-Ausdruck:

row.cells["Weibliche Bevoelkerung (2021)"].value -
row.cells["Maennliche Bevoelkerung (2021)"].value

Da wir in dem GREL Ausdruck die Spalten direkt aufrufen, ist es egal von welcher Spalte aus wir das Facet erstellen.

Aufgabe 6: Text Facets

Es gibt neben dem “normalen” Text Facet auch noch weitere Facets zum Umgang mit Text. In Abbildung 10 sind untereinander das “Text length facet”, das “Log of text length facet” und das “Unicode char-code facet” gezeigt.

Bildschirmfoto der Facets zu Textlängen und dem Unicode Zeichenbereich.
Bildschirmfoto der Facets zu Textlängen und dem Unicode Zeichenbereich.

Ziemlich hilfreich bei Texten ist auch das in Abbildung 11 gezeigte “Word Facet”, welches alle in der Spalte vorkommenden Worte aufzählt.

Bildschirmfoto des 'Word facet'.
Bildschirmfoto des ‘Word facet’.

In Abbildung 11 ist zum Beispiel bei “erwähnt,” zu sehen, dass das normale Wort Facet auch Satzzeichen berücksichtigt. Möchte man das vermeiden, so kann dies durch einen Klick auf das blaue “change” im Kopfbereich des Facets angepasst werden. Wir passen den GREL-Ausdruck wie folgt an und erhalten das in Abbildung 12 gezeigte Facet.

value.replace(/(?<=[a-z])[,.-]/, " ").split(' ')
Bildschirmfoto des angepassten 'Word facet'.
Bildschirmfoto des angepassten ‘Word facet’.

Aufgabe: Erstellen Sie auf der Spalte “Kurzbiographie” ein Facet, welches alle darin vorkommenden Jahreszahlen darstellt.

Lösung:

Dafür benötigen wir ein “Custom Text Facet” mit dem folgenden GREL-Ausdruck:

value.find(/\d{3,4}/)

Aufgabe 7: Facets für Reconciliation

Es gibt spezielle Facets zur Unterstützung von Reconciliation Vorgängen. Zwei davon (“Jugment action type” und “Best candidate’s score”) werden automatisch geladen.

Es können weitere Facets nachgeladen werden. Dafür starten wir einen Reconciliation Vorgang über “Stadt" "Reconcile" "Start Reconciling” und verwenden als “Service” den “GND reconciliation for OpenRefine” Service von lobid (siehe 06 Reconciling mit OpenRefine und der GND für die grundlegende Einrichtung und Benutzung des Dienstes).

Wir suchen nach einem “Geografikum” und lassen gut passende Treffer automatisch auswählen. Die Einstellungen sind in Abbildung 13 abgebildet.

Bildschirmfoto der Einstellungen für den Reconciling Dialog.
Bildschirmfoto der Einstellungen für den Reconciling Dialog.

Über “Stadt" "Reconcile" "Facets" ”…" können wir dann die restlichen Facets nachladen.

Gruppe 1: Entscheidung

  • By judgment (default)
  • Jugment action type
  • Jugment action timestamp
Bildschirmfoto der ersten Facet Gruppe.
Bildschirmfoto der ersten Facet Gruppe.

In der Gruppe 1 sind Facets zu den getroffenen Entscheidungen zu finden. Hier kann danach gefiltert werden, ob für eine Zeile schon eine Entscheidung getroffen wurde, ob die Entscheidung automatisch oder manuell getroffen wurde und sogar zu welchem Zeitpunkt (Zeitstempel) die Entscheidung getroffen wurde.

Gruppe 2: Treffer

  • Best candidate’s score (default)
  • Best candidate’s type match
  • Best candidate’s name match
Bildschirmfoto der zweiten Facet Gruppe.
Bildschirmfoto der zweiten Facet Gruppe.

Die zweite Gruppe bezieht sich auf die Treffer und zwar immer nur auf den “besten” Treffer. Hier gibt es das Standard Facet mit der Bewertung des Treffers durch den Reconciliation Service. Außerdem gibt es noch zwei Facets, welche nützlich sind, wenn man iterativ mehrere Reconciliation Versuche auf einer Spalte durchführt und dabei mit und ohne Typisierung sucht.

Gruppe 3: Treffer Ähnlichkeit

  • Best candidate’s name edit distance
  • Best candidate’s name work similarity
Bildschirmfoto der dritten Facet Gruppe.
Bildschirmfoto der dritten Facet Gruppe.

Der Algorithmus zur Auswahl von Treffern durch den Reconciliation Service ist häufig nicht transparent oder direkt nachvollziehbar. Daher lassen sich in OpenRefine zusätzliche Facets laden, die die Ähnlichkeit des Spalteninhalts mit dem jeweils besten Treffer anzeigen.

Die Editierdistanz basiert auf der Levenshtein Distanz, die wir schon in 05 Daten mit OpenRefine clustern kennen gelernt haben. Die Wortähnlichkeit hingegen wird berechnet, indem die Anzahl der übereinstimmenden Wörter ohne Stoppwörter zwischen Zellinhalt und bestem Treffer gezählt und normalisiert wird. Der Wertebereich geht dabei von 0 für keine Ähnlichkeit bis 1 für vollkommene Übereinstimmung.

Gruppe 4: Treffer Typ

  • Best candidate’s types
Bildschirmfoto der vierten Facet Gruppe.
Bildschirmfoto der vierten Facet Gruppe.

Die Liste der Typen, die sich aus dem jeweils besten Treffer für die einzelnen Zeilen ergeben.

Aufgabe: Beim Erstellen des Tutorials sind vier Städte automatisch mit einem Treffer gematcht worden. Ein Treffer ist jedoch falsch. Überlegen Sie, mit welcher Facet Kombination Sie diesen falschen Treffer schnell isolieren können.

Lösung:

Eine mögliche Kombination wäre im Facet “Jugment action type” den Wert auto auszuwählen und im Facet “Best candidate’s name edit distance” auf eine Distanz größer 1 zu filtern.

Der falsch zugeordnete Treffer ist dann “Freiburg im Breisgau”.

Da sich die Implementierung der Suchstrategie im lobid Reconciliation Server ändern kann, ist es möglich, dass Sie andere Ergebnisse erhalten.

Aufgabe 8: Duplikate

Das Duplikate Facet haben wir bewusst übersprungen und an das Ende verschoben.

Über “Urkundlich erwaehnt" "Facet" "Customized facets" "Duplicates facet” können wir uns Zeilen anzeigen lassen, deren Werte mehr als einmal vorkommen. Wir können hier aber keine Duplikate auswählen, markieren oder wie beim Clustern mit Ungenauigkeiten arbeiten.

Aufgabe: Überlegen Sie sich, wo das Duplikate Facet sinnvoll eingesetzt werden kann.

Mögliche Lösung:

Im FDMLab nutzen wir das Facet zur schnellen Überprüfung, ob zum Beispiel eine ID-Spalte nur eindeutige Werte beinhaltet.

Fazit

Mit Facets können wir uns durch die Daten filtern, sie für die explorative Datenanalyse verwenden oder beim Data Cleaning zu bearbeitende Gruppen identifizieren und diese gesammelt korrigieren. Mit einem Grundverständnis von GREL können wir uns selbst Facets programmieren oder den Code der voreingestellten Facets anpassen. In Kombination mit regulären Ausdrücken können wir auf spezifischen Mustern basierende Facets erstellen.

Da die Facets nicht selbst benannt werden können, gibt es jedoch das Risiko, sich in seinen eigenen Filtern zu verlaufen.


Im nächsten Teil beschäftigen wir uns mit dem Import und Export von XML in OpenRefine.

Benjamin Rosemann
Benjamin Rosemann
Data Scientist

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

Ähnliches