From 790c3d11600996333b59a37538ae2aa9a8a25e19 Mon Sep 17 00:00:00 2001 From: Felix Lohmeier Date: Mon, 14 Nov 2016 12:01:08 +0100 Subject: [PATCH] Seminar 14.11.2016 --- 07_0_datentransformation_mit_openrefine.md | 1 + 07_1_facetten_und_text_filter.md | 6 ++- 07_2_records_bilden.md | 28 ++++++++-- 07_3_fuer_jedes_marc-feld_eine_spalte.md | 52 +++++++++++++++++-- 07_4_transformationen_anwenden.md | 26 ++++++++++ 07_5_alle_daten_in_ein_projekt_laden.md | 59 ++++++++++++++++++++++ 07_9_automatisierung.md | 1 + SUMMARY.md | 1 + 8 files changed, 165 insertions(+), 9 deletions(-) create mode 100644 07_9_automatisierung.md diff --git a/07_0_datentransformation_mit_openrefine.md b/07_0_datentransformation_mit_openrefine.md index 7d6202e..e739b36 100644 --- a/07_0_datentransformation_mit_openrefine.md +++ b/07_0_datentransformation_mit_openrefine.md @@ -12,6 +12,7 @@ Inhalte: 6. Daten bereinigen 7. Felder definieren 8. Daten exportieren +9. Automatisierung Beiträge der Studierenden in den Lerntagebüchern: diff --git a/07_1_facetten_und_text_filter.md b/07_1_facetten_und_text_filter.md index 7a8c30b..c07b298 100644 --- a/07_1_facetten_und_text_filter.md +++ b/07_1_facetten_und_text_filter.md @@ -2,12 +2,14 @@ Alle folgenden Übungen in den Kapiteln 7.1 bis 7.3 führen wir zunächst mit einer einzigen Datei aus dem Download durch. Diese Datei beinhaltet "nur" 100 Datensätze, mit denen wir beispielhaft arbeiten. In Kapitel 7.4 werden wir dann die gelernten Transformationen auf alle 450.000 Datensätze anwenden. -OpenRefine "versteht" das MARC-Format nicht. Es interpretiert die Daten daher genauso wie jede andere XML-Datei. In den Daten stehen daher die üblichen Nummern und Codes für die jeweiligen MARC-Felder. Der GBV bietet meines Wissens nach keine Beschreibung der Feldbelegungen an. Zur Orientierung können Sie die [Arbeitstabelle der Deutschen Nationalbibliothek](http://www.dnb.de/SharedDocs/Downloads/DE/DNB/standardisierung/marc21FeldbeschreibungTitelExcel032016.zip) in der [Dokumentation des MARC21-Formats](http://www.dnb.de/DE/Standardisierung/Formate/MARC21/marc21_node.html) verwenden. +OpenRefine "versteht" das MARC-Format nicht. Es interpretiert die Daten daher genauso wie jede andere XML-Datei. Wenn Sie die Daten erstmalig in OpenRefine öffnen, sehen Sie daher die üblichen Nummern und Codes für die jeweiligen MARC-Felder in der Baumstruktur der XML-Datei. Die Bedeutung der MARC-Nummern und Codes müssen Sie nachschlagen. Der GBV bietet meines Wissens nach keine Beschreibung der Feldbelegungen an. Zur Orientierung können Sie die [Arbeitstabelle der Deutschen Nationalbibliothek](http://www.dnb.de/SharedDocs/Downloads/DE/DNB/standardisierung/marc21FeldbeschreibungTitelExcel032016.zip) in der [Dokumentation des MARC21-Formats](http://www.dnb.de/DE/Standardisierung/Formate/MARC21/marc21_node.html) verwenden. ## Aufgabe 1: Analysieren Sie die Daten mit Hilfe von Facetten und Text Filtern siehe [Seite zur Facettierung in der Dokumentation von OpenRefine](https://github.com/OpenRefine/OpenRefine/wiki/Faceting) -## Aufgabe 2: Laden Sie die Arbeitstabelle der DNB in OpenRefine +## Bonusaufgabe: Laden Sie die Arbeitstabelle der DNB in OpenRefine + +Die Dokumentation der DNB steht auch als Tabellendokument zur Verfügung. Da OpenRefine auf die Bearbeitung von tabellarischen Daten ausgelegt ist, können Sie die Arbeitstabelle anstatt in Excel/LibreOffice auch gleich in OpenRefine als neues Projekt anlegen. [Arbeitstabelle der Deutschen Nationalbibliothek](http://www.dnb.de/SharedDocs/Downloads/DE/DNB/standardisierung/marc21FeldbeschreibungTitelExcel032016.zip) \ No newline at end of file diff --git a/07_2_records_bilden.md b/07_2_records_bilden.md index 6865ab2..d50f9d3 100644 --- a/07_2_records_bilden.md +++ b/07_2_records_bilden.md @@ -2,10 +2,32 @@ ## Aufgabe: Editieren Sie die Daten so, dass OpenRefine die 100 Datensätze jeweils als "Records" erkennt. -Hinweis: -* OpenRefine erkennt Records (Datensätze) anhand der ersten Spalte. Versuchen Sie in alle 100 Zeilen, in denen ein Datensatz beginnt, eine eindeutige Kennung in die erste Spalte zu bekommen. Die übrigen Felder in der ersten Spalte sollten leer sein. +Hinweise: + +* OpenRefine erkennt Records (Datensätze) anhand der ersten Spalte. Versuchen Sie in alle 100 Zeilen, in denen ein Datensatz beginnt, eine eindeutige Kennung in die erste Spalte zu bekommen. Die übrigen Zellen in der ersten Spalte sollten leer sein. * Wechseln Sie die Ansicht oben zwischen "Rows" und "Records" und prüfen Sie die Änderung der Darstellung. +* Den Wert einer anderen Spalte kopieren Sie über die Transformationsregel: ```cells["NAME-DER-SPALTE"].value``` Literatur: + * [Difference between a record and a row](http://kb.refinepro.com/2012/03/difference-between-record-and-row.html) -* [Create records in Google Refine](http://kb.refinepro.com/2012/06/create-records-in-google-refine.html) \ No newline at end of file +* [Create records in Google Refine](http://kb.refinepro.com/2012/06/create-records-in-google-refine.html) + +## Lösung + +1) Spalten ordnen + +* {%s%}All / Edit columns / Re-order / remove columns...{%ends%} +* {%s%}Spalte "record - leader" ganz nach oben schieben{%ends%} + +2) Angabe in Spalte record-leader durch PPN aus Spalte "record - controlfield" ersetzen + +* {%s%}Spalte record - controlfield - tag / Facet / Text Facet / Wert 001 auswählen{%ends%} +* {%s%}Spalte "record - leader" / Edit cells / Transform... und folgenden Wert eingeben: {%s%}cells["record - controlfield"].value{%ends%} + +3) Leere Zeilen löschen + +* {%s%}Spalte "record - datafield - subfield" / Facet / Customized facets / Facet by blank / Wert true anklicken (Achtung: im Modus "rows" und vorige Facette wieder schließen){%ends%} +* {%s%}All / Edit rows / Remove all matching rows{%ends%} + +4) Records anklicken \ No newline at end of file diff --git a/07_3_fuer_jedes_marc-feld_eine_spalte.md b/07_3_fuer_jedes_marc-feld_eine_spalte.md index 37eb5af..3bbf970 100644 --- a/07_3_fuer_jedes_marc-feld_eine_spalte.md +++ b/07_3_fuer_jedes_marc-feld_eine_spalte.md @@ -3,13 +3,57 @@ ## Aufgabe: Transformieren Sie die Daten so, dass jeder Datensatz nur über eine Zeile geht Aktuell sind die Inhalte eines Datensatzes über viele Zeilen verteilt. Die MARC-Felder stehen untereinander in Zeilen. Versuchen Sie, die Daten in eine übliche Tabellenstruktur zu bringen: + * Die MARC-Felder in den Spaltenüberschriften. * Jeder Datensatz nur über eine Zeile. -Hinweis: -* Experimentieren Sie mit den Funktionen im Menü "Transpose" -* Vor dem Transpose sollten Sie die Daten in wenige Spalten zusammenführen. +Hinweise: + +* Experimentieren Sie mit den Funktionen im Menü "Transpose". +* Vor dem Transpose sollten Sie die Daten in wenige Spalten zusammenführen. Nutzen Sie dazu die folgende Transformationsregel: ```value + " : " + cells["NAME-DER-SPALTE"].value``` +* Für manche zeilenbasierte Operationen müssen Sie wieder auf den Modus "Rows" (statt "Records") wechseln. Literatur: + * [How can I join two datasets using a key in OpenRefine, with the secondary table having more than one value?](http://www.devsplanet.com/question/35776263) und [Cells to columns in OpenRefine](http://stackoverflow.com/questions/15187543/cells-to-columns-in-openrefine) -* [Zellen zusammenführen](http://kb.refinepro.com/2011/07/merge-2-columns-that-have-both-blank.html) \ No newline at end of file +* [Zellen zusammenführen](http://kb.refinepro.com/2011/07/merge-2-columns-that-have-both-blank.html) +* [Trick, um neue Zeilen einzufügen](http://kb.refinepro.com/2011/12/add-extra-rows-records-in-google-refine.html) + +## Lösung + +1) Alle Schritte aus [Übung 7.2](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/07_2_records_bilden.html) + +2) Vorerst nicht benötigte Spalten löschen + +* {%s%}All / Edit columns / Re-order / remove columns...{%ends%} +* {%s%}Spalten "record", "record - datafield", "record - datafield - ind1", "record - datafield - ind2" "record-controlfield" und "record-controlfield-tag" nach rechts schieben{%ends%} + +3) MARC-Felder durchgängig belegen + +* {%s%}Spalte "record - datafield - tag" / Edit cells / Fill down{%ends%} + +4) PPN aus Spalte record-leader in Spalte mit MARC-Feldern verschieben (und dafür eine neue Zeile einfügen) + +* {%s%}Spalte "record - leader" / Add Column based on this column...; Name für neue Spalte: NEU{%ends%} +* {%s%}Spalte "record - leader" / Transpose / Transpose cells across columns into Rows; In der zweiten Feldliste Spalte "NEU" ganz oben auswählen, rechts "One column" auswählen und Name "PPN" eingeben{%ends%} +* {%s%}Spalte "record - datafield - tag" / Facet / Customized facets / Facet by blank / Wert true auswählen und in Modus "rows" wechseln{%ends%} +* {%s%}Spalte "record - datafield - tag" / Edit cells / Transform... / Wert "001" (also mit Anführungszeichen) eingeben und Facette schließen{%ends%} +* {%s%}Spalte "record - datafield - tag" / Facet / Text facet / Wert 001 auswählen{%ends%} +* {%s%}Spalte "record - datafield - subfield" / Edit cells / Transform... / Wert cells["PPN"].value eingeben und Facette schließen{%ends%} + +5) Sortieren und Aufräumen + +* {%s%}Spalte "PPN" / Edit cells / Fill down{%ends%} +* {%s%}Spalte "PPN" / Sort...{%ends%} +* {%s%}Spalte "record - datafield - tag" / Sort...{%ends%} +* {%s%}Im neu verfügbaren Menü "Sort" den Menüpunkt "Reorder rows permanently" auswählen +* {%s%}Spalte "PPN" / Edit column / Remove this column{%ends%} + +6) MARC-Feld mit Feld MARC-Code zusammenfassen + +* {%s%}Spalte "record - datafield - tag" / Edit cells / Transform... den Wert value + " : " + cells["record - datafield - subfield - code"].value eingeben{%ends%} +* {%s%}Spalte "record - datafield - subfield - code" / Edit column / Remove this column{%ends%} + +7) Transpose + +* Spalte "record - datafield - tag" / Transpose / Columnize by key/value columns... \ No newline at end of file diff --git a/07_4_transformationen_anwenden.md b/07_4_transformationen_anwenden.md index 4e62a0e..8db95e1 100644 --- a/07_4_transformationen_anwenden.md +++ b/07_4_transformationen_anwenden.md @@ -1,2 +1,28 @@ # 7.4 Transformationen anwenden +## Aufgabe: Speichern Sie die bisher durchgeführten Transformationsregeln und wenden Sie diese auf eine andere MARCXML-Datei an + +OpenRefine verfügt über hilfreiche Undo/Redo-Funktionen, mit denen Sie auch alle bisher in einem Projekt durchgeführten Transformationsregeln speichern und auf ein anderes Projekt anwenden können. + +Hinweise: + +* Nutzen Sie die Funktion "Extract" im Bereich Undo/Redo und speichern Sie die Regeln in einer Textdatei zwischen (z.B. mit Windows Editor) + +Literatur: + +* [...](http://www.) +* [...](http://www.) + +## Lösung + +1) ... + +* {%s%}...{%ends%} + +2) ... + +* {%s%}...{%ends%} + +3) ... + +* {%s%}...{%ends%} \ No newline at end of file diff --git a/07_5_alle_daten_in_ein_projekt_laden.md b/07_5_alle_daten_in_ein_projekt_laden.md index 85cb529..f90a183 100644 --- a/07_5_alle_daten_in_ein_projekt_laden.md +++ b/07_5_alle_daten_in_ein_projekt_laden.md @@ -1,2 +1,61 @@ # 7.5 Alle Daten in ein Projekt laden +## Aufgabe 1: Laden Sie 100 MARCXML-Dateien in ein neues Projekt und beobachten Sie den Speicherbedarf + +Hinweise: + +* Auf dem Webserver können mit Sie mit dem Befehl ```top``` die aktuellen Prozesse und deren Speicherbedarf sehen. +* Vermeiden Sie es, die Dateinamen von OpenRefine in den Daten speichern zu lassen. Dafür gibt es eine Checkbox beim Import. + +## Lösung + +1) ... + +* {%s%}...{%ends%} + +2) ... + +* {%s%}...{%ends%} + +3) ... + +* {%s%}...{%ends%} + +## Aufgabe 2: Wenden Sie die Transformationsregeln aus Kapitel 7.3 auf das neue Projekt an + +Hinweise: +* Beobachten Sie auch hier den Speicherbedarf und notieren Sie sich die Laufzeit. + +## Lösung + +1) ... + +* {%s%}...{%ends%} + +2) ... + +* {%s%}...{%ends%} + +3) ... + +* {%s%}...{%ends%} + +## Aufgabe 3: Wenden Sie die Transformationsregeln aus Kapitel 7.3 auf alle 4500 Datensätze an + +Hinweise: +* Am wenigsten klicken müssen Sie, wenn Sie alle 4500 Dateien auf einmal laden. Dann wird OpenRefine jedoch nicht genug Arbeitsspeicher zur Verfügung haben, um alle Transformationen durchzuführen. +* Machen Sie eine kleine Hochrechnung auf Basis des Speicherbedarfs aus Aufgabe 2, planen Sie mindestens 25% Reserve ein und wählen Sie auf dieser Basis die Größe ihrer "Pakete". + +## Lösung + +1) ... + +* {%s%}...{%ends%} + +2) ... + +* {%s%}...{%ends%} + +3) ... + +* {%s%}...{%ends%} \ No newline at end of file diff --git a/07_9_automatisierung.md b/07_9_automatisierung.md new file mode 100644 index 0000000..6b7eb9b --- /dev/null +++ b/07_9_automatisierung.md @@ -0,0 +1 @@ +# 7.9 Automatisierung \ No newline at end of file diff --git a/SUMMARY.md b/SUMMARY.md index e07f9d1..6d8d1c4 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -38,6 +38,7 @@ * [7.6 Daten bereinigen](07_6_daten_bereinigen.md) * [7.7 Felder definieren](07_7_felder_definieren.md) * [7.8 Daten exportieren](07_8_daten_exportieren.md) + * [7.9 Automatisierung](07_9_automatisierung.md) * [Lerntagebücher](lerntagebucher.md) * [Prüfungsleistungen](pruefungsleistungen.md)