Nachtrag zum Seminar 14.11.
This commit is contained in:
parent
ac8a409a49
commit
623fda70a0
|
@ -1,59 +1,62 @@
|
|||
# 7.3 Für jedes MARC-Feld eine Spalte
|
||||
|
||||
## 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:
|
||||
Aktuell sind die Inhalte eines Datensatzes über viele Zeilen verteilt. Die MARC-Felder stehen untereinander in Zeilen. Wir transformieren die Daten nun so, dass die Daten wie in einer üblichen Tabelle strukturiert sind, d.h.:
|
||||
|
||||
* Die MARC-Felder in den Spaltenüberschriften.
|
||||
* Jeder Datensatz nur über eine Zeile.
|
||||
|
||||
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```
|
||||
* Wir nutzen dazu die Funktion "Transpose / Columnize by key/value columns". In der Version 2.6rc2 von OpenRefine ist ein Bug in dieser Funktion, daher müssen wir die Version 2.6rc1 nutzen.
|
||||
* Vor dem Transpose müssen die Daten in zwei Spalten zusammengeführt werden
|
||||
* Für manche zeilenbasierte Operationen müssen Sie wieder auf den Modus "Rows" (statt "Records") wechseln.
|
||||
|
||||
Literatur:
|
||||
## Vorgehen
|
||||
|
||||
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
|
||||
|
||||
* All / Edit columns / Re-order / remove columns...
|
||||
* Spalten "record", "record - datafield", "record - datafield - ind1", "record - datafield - ind2" "record-controlfield" und "record-controlfield-tag" nach rechts schieben
|
||||
|
||||
3. MARC-Felder durchgängig belegen
|
||||
|
||||
* Spalte "record - datafield - tag" / Edit cells / Fill down
|
||||
|
||||
4. PPN aus Spalte record-leader in Spalte mit MARC-Feldern verschieben (und dafür eine neue Zeile einfügen)
|
||||
|
||||
* Spalte "record - leader" / Add Column based on this column...; Name für neue Spalte: NEU
|
||||
* 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
|
||||
* Spalte "record - datafield - tag" / Facet / Customized facets / Facet by blank / Wert true auswählen und in Modus "rows" wechseln
|
||||
* Spalte "record - datafield - tag" / Edit cells / Transform... / Wert "001" (also mit Anführungszeichen) eingeben und Facette schließen
|
||||
* Spalte "record - datafield - tag" / Facet / Text facet / Wert 001 auswählen
|
||||
* Spalte "record - datafield - subfield" / Edit cells / Transform... / Wert cells["PPN"].value eingeben und Facette schließen
|
||||
|
||||
5. MARC-Feld mit Feld MARC-Code zusammenfassen
|
||||
|
||||
* Spalte "record - datafield - tag" / Edit cells / Transform... den Wert value + " : " + cells["record - datafield - subfield - code"].value eingeben
|
||||
* Spalte "record - datafield - subfield - code" / Edit column / Remove this column
|
||||
|
||||
6. Sortieren und Aufräumen
|
||||
|
||||
* Spalte "PPN" / Edit cells / Fill down
|
||||
* Spalte "PPN" / Sort...
|
||||
* Spalte "record - datafield - tag" / Sort...
|
||||
* Im neu verfügbaren Menü "Sort" den Menüpunkt "Reorder rows permanently" auswählen
|
||||
* Spalte "PPN" / Edit column / Remove this column
|
||||
|
||||
7. Felder mit Mehrfachbelegungen zusammenführen
|
||||
|
||||
* Spalte "record - datafield - tag" / Edit cells / Blank down
|
||||
* Spalte "record - datafield - subfield" / Join multi-valued cells und als Trennzeichen ␟ angeben (das Trennzeichen [Unit Separator ␟](http://unicode-table.com/en/241F/) aus dem Unicode-Zeichensatz kommt mit Sicherheit nicht in den Daten vor, daher ist dieses gut geeignet. Das Zeichen ist am einfachsten per copy & paste einzufügen).
|
||||
|
||||
8. Transpose
|
||||
|
||||
* Spalte "record - datafield - tag" / Transpose / Columnize by key/value columns...
|
||||
|
||||
## 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)
|
||||
* [Trick, um neue Zeilen einzufügen](http://kb.refinepro.com/2011/12/add-extra-rows-records-in-google-refine.html)
|
||||
|
||||
## Lösung
|
||||
|
||||
Alle Schritte aus [Übung 7.2](https://felixlohmeier.gitbooks.io/seminar-wir-bauen-uns-einen-bibliothekskatalog/content/07_2_records_bilden.html)
|
||||
|
||||
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%}
|
||||
|
||||
MARC-Felder durchgängig belegen
|
||||
|
||||
* {%s%}Spalte "record - datafield - tag" / Edit cells / Fill down{%ends%}
|
||||
|
||||
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%}
|
||||
|
||||
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{%ends%}
|
||||
* {%s%}Spalte "PPN" / Edit column / Remove this column{%ends%}
|
||||
|
||||
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%}
|
||||
|
||||
Transpose
|
||||
|
||||
* {%s%}Spalte "record - datafield - tag" / Transpose / Columnize by key/value columns...{%ends%}
|
|
@ -6,23 +6,9 @@ OpenRefine verfügt über hilfreiche Undo/Redo-Funktionen, mit denen Sie auch al
|
|||
|
||||
Hinweise:
|
||||
|
||||
* Nutzen Sie die Funktion "Extract" im Bereich Undo/Redo und speichern Sie die Regeln in einer Textdatei zwischen (z.B. mit Windows Editor)
|
||||
* Nutzen Sie die Funktion "Extract" im Bereich Undo/Redo und speichern Sie die Regeln in einer Textdatei zwischen (z.B. mit Windows Editor). Wenden Sie diese anschließend über die Funktion "Apply" in einem neuen Projekt an.
|
||||
|
||||
Literatur:
|
||||
|
||||
* [History-Funktionen in OpenRefine Dokumentation](https://github.com/OpenRefine/OpenRefine/wiki/History)
|
||||
* [JSON and my notepad or how to write script in google refine](http://kb.refinepro.com/2012/06/google-refine-json-and-my-notepad-or.html)
|
||||
|
||||
## Lösung
|
||||
|
||||
1) ...
|
||||
|
||||
* {%s%}...{%ends%}
|
||||
|
||||
2) ...
|
||||
|
||||
* {%s%}...{%ends%}
|
||||
|
||||
3) ...
|
||||
|
||||
* {%s%}...{%ends%}
|
||||
* [JSON and my notepad or how to write script in google refine](http://kb.refinepro.com/2012/06/google-refine-json-and-my-notepad-or.html)
|
|
@ -7,55 +7,14 @@ 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%}
|
||||
* Nutzen Sie Ihre gespeicherten Transformationsregeln oder die aus der Datei [7-3.json](json-history/7-3.json)
|
||||
|
||||
## 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%}
|
||||
* 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".
|
|
@ -0,0 +1,268 @@
|
|||
[
|
||||
{
|
||||
"op": "core/column-reorder",
|
||||
"description": "Reorder columns",
|
||||
"columnNames": [
|
||||
"record - leader",
|
||||
"record",
|
||||
"record - datafield",
|
||||
"record - datafield - tag",
|
||||
"record - datafield - ind1",
|
||||
"record - datafield - ind2",
|
||||
"record - datafield - subfield",
|
||||
"record - datafield - subfield - code",
|
||||
"record - controlfield",
|
||||
"record - controlfield - tag"
|
||||
]
|
||||
},
|
||||
{
|
||||
"op": "core/text-transform",
|
||||
"description": "Text transform on cells in column record - leader using expression grel:cells[\"record - controlfield\"].value",
|
||||
"engineConfig": {
|
||||
"facets": [
|
||||
{
|
||||
"expression": "value",
|
||||
"invert": false,
|
||||
"selectError": false,
|
||||
"omitError": false,
|
||||
"name": "record - controlfield - tag",
|
||||
"selectBlank": false,
|
||||
"columnName": "record - controlfield - tag",
|
||||
"omitBlank": false,
|
||||
"type": "list",
|
||||
"selection": [
|
||||
{
|
||||
"v": {
|
||||
"v": "001",
|
||||
"l": "001"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"mode": "row-based"
|
||||
},
|
||||
"columnName": "record - leader",
|
||||
"expression": "grel:cells[\"record - controlfield\"].value",
|
||||
"onError": "keep-original",
|
||||
"repeat": false,
|
||||
"repeatCount": 10
|
||||
},
|
||||
{
|
||||
"op": "core/row-removal",
|
||||
"description": "Remove rows",
|
||||
"engineConfig": {
|
||||
"facets": [
|
||||
{
|
||||
"expression": "isBlank(value)",
|
||||
"invert": false,
|
||||
"selectError": false,
|
||||
"omitError": false,
|
||||
"name": "record - datafield - subfield",
|
||||
"selectBlank": false,
|
||||
"columnName": "record - datafield - subfield",
|
||||
"omitBlank": false,
|
||||
"type": "list",
|
||||
"selection": [
|
||||
{
|
||||
"v": {
|
||||
"v": true,
|
||||
"l": "true"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"mode": "row-based"
|
||||
}
|
||||
},
|
||||
{
|
||||
"op": "core/column-reorder",
|
||||
"description": "Reorder columns",
|
||||
"columnNames": [
|
||||
"record - leader",
|
||||
"record - datafield - tag",
|
||||
"record - datafield - subfield",
|
||||
"record - datafield - subfield - code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"op": "core/fill-down",
|
||||
"description": "Fill down cells in column record - datafield - tag",
|
||||
"engineConfig": {
|
||||
"facets": [],
|
||||
"mode": "row-based"
|
||||
},
|
||||
"columnName": "record - datafield - tag"
|
||||
},
|
||||
{
|
||||
"op": "core/column-addition",
|
||||
"description": "Create column NEU at index 1 based on column record - leader using expression grel:value",
|
||||
"engineConfig": {
|
||||
"facets": [],
|
||||
"mode": "row-based"
|
||||
},
|
||||
"newColumnName": "NEU",
|
||||
"columnInsertIndex": 1,
|
||||
"baseColumnName": "record - leader",
|
||||
"expression": "grel:value",
|
||||
"onError": "set-to-blank"
|
||||
},
|
||||
{
|
||||
"op": "core/transpose-columns-into-rows",
|
||||
"description": "Transpose cells in 2 column(s) starting with record - leader into rows in one new column named PPN",
|
||||
"startColumnName": "record - leader",
|
||||
"columnCount": 2,
|
||||
"ignoreBlankCells": true,
|
||||
"fillDown": false,
|
||||
"combinedColumnName": "PPN",
|
||||
"prependColumnName": false,
|
||||
"separator": ":"
|
||||
},
|
||||
{
|
||||
"op": "core/text-transform",
|
||||
"description": "Text transform on cells in column record - datafield - tag using expression grel:\"001\"",
|
||||
"engineConfig": {
|
||||
"facets": [
|
||||
{
|
||||
"expression": "isBlank(value)",
|
||||
"invert": false,
|
||||
"selectError": false,
|
||||
"omitError": false,
|
||||
"name": "record - datafield - tag",
|
||||
"selectBlank": false,
|
||||
"columnName": "record - datafield - tag",
|
||||
"omitBlank": false,
|
||||
"type": "list",
|
||||
"selection": [
|
||||
{
|
||||
"v": {
|
||||
"v": true,
|
||||
"l": "true"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"mode": "row-based"
|
||||
},
|
||||
"columnName": "record - datafield - tag",
|
||||
"expression": "grel:\"001\"",
|
||||
"onError": "keep-original",
|
||||
"repeat": false,
|
||||
"repeatCount": 10
|
||||
},
|
||||
{
|
||||
"op": "core/text-transform",
|
||||
"description": "Text transform on cells in column record - datafield - subfield using expression grel:cells[\"PPN\"].value",
|
||||
"engineConfig": {
|
||||
"facets": [
|
||||
{
|
||||
"expression": "value",
|
||||
"invert": false,
|
||||
"selectError": false,
|
||||
"omitError": false,
|
||||
"name": "record - datafield - tag",
|
||||
"selectBlank": false,
|
||||
"columnName": "record - datafield - tag",
|
||||
"omitBlank": false,
|
||||
"type": "list",
|
||||
"selection": [
|
||||
{
|
||||
"v": {
|
||||
"v": "001",
|
||||
"l": "001"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"mode": "row-based"
|
||||
},
|
||||
"columnName": "record - datafield - subfield",
|
||||
"expression": "grel:cells[\"PPN\"].value",
|
||||
"onError": "keep-original",
|
||||
"repeat": false,
|
||||
"repeatCount": 10
|
||||
},
|
||||
{
|
||||
"op": "core/fill-down",
|
||||
"description": "Fill down cells in column PPN",
|
||||
"engineConfig": {
|
||||
"facets": [],
|
||||
"mode": "row-based"
|
||||
},
|
||||
"columnName": "PPN"
|
||||
},
|
||||
{
|
||||
"op": "core/text-transform",
|
||||
"description": "Text transform on cells in column record - datafield - tag using expression grel:value + \" : \" + cells[\"record - datafield - subfield - code\"].value",
|
||||
"engineConfig": {
|
||||
"facets": [],
|
||||
"mode": "row-based"
|
||||
},
|
||||
"columnName": "record - datafield - tag",
|
||||
"expression": "grel:value + \" : \" + cells[\"record - datafield - subfield - code\"].value",
|
||||
"onError": "keep-original",
|
||||
"repeat": false,
|
||||
"repeatCount": 10
|
||||
},
|
||||
{
|
||||
"op": "core/column-removal",
|
||||
"description": "Remove column record - datafield - subfield - code",
|
||||
"columnName": "record - datafield - subfield - code"
|
||||
},
|
||||
{
|
||||
"op": "core/row-reorder",
|
||||
"description": "Reorder rows",
|
||||
"mode": "record-based",
|
||||
"sorting": {
|
||||
"criteria": [
|
||||
{
|
||||
"reverse": false,
|
||||
"caseSensitive": false,
|
||||
"column": "PPN",
|
||||
"valueType": "string",
|
||||
"blankPosition": 2,
|
||||
"errorPosition": 1
|
||||
},
|
||||
{
|
||||
"reverse": false,
|
||||
"caseSensitive": false,
|
||||
"column": "record - datafield - tag",
|
||||
"valueType": "string",
|
||||
"blankPosition": 2,
|
||||
"errorPosition": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"op": "core/column-removal",
|
||||
"description": "Remove column PPN",
|
||||
"columnName": "PPN"
|
||||
},
|
||||
{
|
||||
"op": "core/blank-down",
|
||||
"description": "Blank down cells in column record - datafield - tag",
|
||||
"engineConfig": {
|
||||
"facets": [],
|
||||
"mode": "row-based"
|
||||
},
|
||||
"columnName": "record - datafield - tag"
|
||||
},
|
||||
{
|
||||
"op": "core/multivalued-cell-join",
|
||||
"description": "Join multi-valued cells in column record - datafield - subfield",
|
||||
"columnName": "record - datafield - subfield",
|
||||
"keyColumnName": "record - datafield - tag",
|
||||
"separator": "␟"
|
||||
},
|
||||
{
|
||||
"op": "core/key-value-columnize",
|
||||
"description": "Columnize by key column record - datafield - tag and value column record - datafield - subfield with note column ",
|
||||
"keyColumnName": "record - datafield - tag",
|
||||
"valueColumnName": "record - datafield - subfield",
|
||||
"noteColumnName": ""
|
||||
}
|
||||
]
|
Loading…
Reference in New Issue