{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "569a0682", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "try:\n", " import IPython\n", "except:\n", " !pip install IPython\n", " import IPython \n", "from IPython.core.display import HTML\n", "# add stylesheet for notebook\n", "HTML(\"\"\"\"\"\")" ] }, { "cell_type": "markdown", "id": "302c49d7", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "

Enriching Collections Data with Linked Art

\n", "\n", "The Linked Art reconciliation exemplar provides a step through the process of reconciling geographical place names that occur in the title of artworks by the artist, John Ruskin, to enrich collections data with an additional representation of the geographical coordinates of the place depicted in the artworks. \n", "\n", "From Wikipedia:\n", "\n", "
\"John Ruskin (8 February 1819 – 20 January 1900) was an English writer, philosopher, art critic and polymath of the Victorian era. He wrote on subjects as varied as geology, architecture, myth, ornithology, literature, education, botany and political economy.\"
\n", "\n", "John Ruskin travelled extensively in Europe and was a prolific artist, creating drawings of paintings whose titles often included place names for the locations depicted. \n", "\n", "#### Artwork Title contains Place Name\n", "The title of the artworks has been recorded in the title field in many of the collection data records , and this has been used as the basis for the reconciliation process shown here.\n", "\n", "#### OpenRefine Tool to Reconcile Data\n", "The place names are reconciled with the Getty Thesaurus of Geographic Names (TGN), using the Open Refine tool.\n", "\n", "#### The Getty Thesaurus of Geographic Names (TGN)\n", "Reconciliation with the Getty Thesaurus of Geographic Names (TGN) has allowed additional information to be associated with the artwork: \n", "- an authoritative global identifier for the geographical location depicted \n", "- geographical coordinates\n", "\n", "#### Input Data Files\n", "\n", "The input files are Linked Art files created with the `01-06-Transform-John-Ruskin` Jupyter notebook.\n", "\n", "\n", "### Further Reading\n", "\n", "- The Getty Thesaurus of Geographic Names® Online (TGN) http://www.getty.edu/research/tools/vocabularies/tgn\n", "- John Ruskin Wikipedia entry https://en.wikipedia.org/wiki/John_Ruskin\n", "\n" ] }, { "cell_type": "markdown", "id": "348d9614", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Reconciliation Process\n", "\n", "1. Create CSV file from Linked Art JSON-LD\n", "2. Identify place name in title\n", "3. Use OpenRefine to reconcile place names\n", "4. Define geolocation representation in Linked Art\n", "5. Add place name and coordinates into Linked Art JSON-LD files" ] }, { "cell_type": "markdown", "id": "aec2095c", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 1. Create CSV file from Linked Art JSON-LD\n", "\n", "To reconcile the place names in the artwork titles\n", "- create a CSV file from the JSON-LD Linked Art files\n", "- CSV contains `id` and `_label` properties\n", "\n", "The script gets a list of all files in a selected directory using `os.listdir()` and iterates over them.\n", "\n", "- `json.load` is used to deserialize the Linked Art JSONLD file to a Python dictionary object. \n", " - json.loads uses the following conversion table https://docs.python.org/3/library/json.html#json-to-py-table \n", "\n", "Finally, the script uses `csv.DictWriter` \n", "- to create an object that maps the Python dictionary onto output rows. \n", "- `Dictwriter.writeheader()` writes a row with the field names (as specified in the constructor) to the writer’s file object. \n", "- `Dictwriter.writerows()` writes all elements in rows to the writer’s file object.\n", "\n", "\n", "#### Further Reading\n", "- os Python library https://docs.python.org/3/library/os.html\n", "- os.listdir() tutorial https://www.tutorialspoint.com/python/os_listdir.htm\n", "- json Python library https://docs.python.org/3/library/json.html\n", "- csv Python library https://docs.python.org/3/library/csv.html" ] }, { "cell_type": "code", "execution_count": 2, "id": "81e0aaea", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "# import relevant Python libraries\n", "\n", "try:\n", " import os\n", "except:\n", " %pip install os\n", " import os\n", "\n", "try:\n", " import json\n", "except:\n", " %pip install json\n", " import json \n", " \n", "import csv\n", "\n", "# list holding a\n", "artworkCSV = []\n", "\n", "# Linked Art JSON-LD file location\n", "artworkFileDir = \"./data/ruskin/output/json/\"\n", "artworkFileList =os.listdir(artworkFileDir)\n", "\n", "# iterate over Linked Art JSON-LD files\n", "for artworkFile in artworkFileList:\n", " # read file and append to \n", " with open( artworkFileDir + artworkFile) as artworkFileContents: \n", " \n", " # create json object `artwork` from file\n", " artworkObjJSON = json.load(artworkFileContents)\n", " \n", " # check for \"_label\" property \n", " if \"_label\" not in artworkObjJSON:\n", " continue\n", " \n", " # append artwork properties to artwork JSON object\n", " artworkCSV.append( { \n", " \"id\": artworkObjJSON[\"id\"], \n", " \"place\" : artworkObjJSON[\"_label\"], \n", " \"place_modified\": \" \", \n", " \"coords\": \" \"\n", " })\n", "\n", "# end loop\n", " \n", " \n", "# create CSV file\n", "artworkCsvFile = \"./data/ruskin/ruskin-places.csv\" # file location\n", "\n", "with open(artworkCsvFile, 'w') as f: \n", " # write column headings\n", " w = csv.DictWriter(f, [\"id\",\"place\",\"place_modified\",\"coords\"])\n", " w.writeheader()\n", " # write rows with artwork properties\n", " w.writerows(artworkCSV)" ] }, { "cell_type": "markdown", "id": "5825b0e1", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Result - CSV File with Place Names\n", "\n", "The contents of the resulting CSV file are shown below for illustration.\n", "\n", "The CSV file is read into a `pandas` dataframe. \n", "
`Pandas` is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language.
\n", " \n", " \n", "A `pandas dataframe` is a pandas data structure containing \n", "
two-dimensional, size-mutable, potentially heterogeneous tabular data.
\n", "\n", "The pandas dataframe allows easy manipulation of two-dimensional tabular data. \n", "\n", "The `IPython` library is also used to display the contents of the CSV file \n", " \n", "#### Further Reading \n", "- pandas https://pandas.pydata.org/\n", "- pandas dataframe https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html\n", "- IPython use in Jupyter notebooks https://coderzcolumn.com/tutorials/python/how-to-display-contents-of-different-types-in-jupyter-notebook-lab" ] }, { "cell_type": "code", "execution_count": 3, "id": "85365962", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idplaceplace_modifiedcoords
0https://collections.ashmolean.org/collection/1...Engraving of Ruskin's Drawing of the Petal Vau...
1https://collections.ashmolean.org/collection/1...Enlarged Study of a Prawn's Rostrum
2https://www.harvardartmuseums.org/collections/...Study of a Venetian Capital
3https://collections.ashmolean.org/collection/1...Autumnal Cloud filling the Valley of Geneva, t...
4https://collections.ashmolean.org/collection/1...Axmouth Landslip from Dolands Farm
...............
274https://collections.ashmolean.org/collection/1...The Head of a Kite, from Life
275https://www.harvardartmuseums.org/collections/...Part of a Sketch of the Northwest Porch of St....
276http://www.rijksmuseum.nl/nl/collectie/nl-RP-T...Gezicht op S. Anastasia te Verona, over de Adige
277https://collections.ashmolean.org/collection/2...Architectural detail: stone bracket
278https://collections.ashmolean.org/collection/1...Study of the Marble Inlaying on the Front of t...
\n", "

279 rows × 4 columns

\n", "
" ], "text/plain": [ " id \\\n", "0 https://collections.ashmolean.org/collection/1... \n", "1 https://collections.ashmolean.org/collection/1... \n", "2 https://www.harvardartmuseums.org/collections/... \n", "3 https://collections.ashmolean.org/collection/1... \n", "4 https://collections.ashmolean.org/collection/1... \n", ".. ... \n", "274 https://collections.ashmolean.org/collection/1... \n", "275 https://www.harvardartmuseums.org/collections/... \n", "276 http://www.rijksmuseum.nl/nl/collectie/nl-RP-T... \n", "277 https://collections.ashmolean.org/collection/2... \n", "278 https://collections.ashmolean.org/collection/1... \n", "\n", " place place_modified coords \n", "0 Engraving of Ruskin's Drawing of the Petal Vau... \n", "1 Enlarged Study of a Prawn's Rostrum \n", "2 Study of a Venetian Capital \n", "3 Autumnal Cloud filling the Valley of Geneva, t... \n", "4 Axmouth Landslip from Dolands Farm \n", ".. ... ... ... \n", "274 The Head of a Kite, from Life \n", "275 Part of a Sketch of the Northwest Porch of St.... \n", "276 Gezicht op S. Anastasia te Verona, over de Adige \n", "277 Architectural detail: stone bracket \n", "278 Study of the Marble Inlaying on the Front of t... \n", "\n", "[279 rows x 4 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "try:\n", " import pandas as pd\n", "except:\n", " %pip install pandas\n", " import pandas as pd\n", "\n", "try:\n", " import IPython\n", "except:\n", " %pip install IPython\n", " import IPython \n", " \n", "from IPython.display import display, HTML, Javascript\n", "\n", " # CSV file location\n", "artworkCsvFile = \"./data/ruskin/ruskin-places.csv\"\n", "\n", "# read CSV file into pandas dataframe \n", "dataFrame = pd.read_csv(artworkCsvFile,low_memory=False)\n", "\n", "# define how many columns and rows to display == all\n", "pd.options.display.max_columns = len(dataFrame.columns)\n", "#pd.options.display.max_rows = len(dataFrame.index)\n", "\n", "# use IPython display to display the contents of CSV file\n", "display(dataFrame)" ] }, { "cell_type": "markdown", "id": "931ce294", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 2. Identify Place Names in Title\n", "\n", "Next, get place name from artwork title\n", "- extract possible place names from the artwork title field, to help with the reconciliation process. \n", "- a list of possible place names is used to help identify place names in the field. \n", "- add extracted place names to `place_modified` column \n", "- update CSV file\n", "\n", "A list of place names `placeNames` is created to help with extracting place names from the artwork title. This was produced further to a review of the values in the place column.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "bdcc6a8f", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "artworkCsvFile = \"./data/ruskin/ruskin-places.csv\" # file location\n", "\n", "\n", "# read CSV file into pandas dataframe\n", "dataFrame = pd.read_csv(artworkCsvFile,low_memory=False)\n", "\n", "\n", "# A list of place names `placeNames` is created to help with extracting place names from the artwork title.\n", "placeNames = [\n", "\"Florence\",\"Bologna\",\"Lucca\",\"Alps\",\"Oxford\",\"Rome\", \"Venice\",\"Fribourg\",\"Neuchâtel\",\"Sestri\",\"Visp\",\"Chamonix\",\n", "\"Abbeville\",\"Schaffhausen\",\"Verona\",\"Vorarlberg\",\"Baden\",\"Schaffhausen\",\"Faido\",\"Normandy\",\"Genève\",\"Geneva\",\n", "\"Gloucester\",\"Basel\",\"Luzern\",\"Padua\",\"Habsburg\",\"Rhine\",\"Zug\",\"Aix-la-Chapelle\",\"Siena\",\"Mont Blanc\",\"Lago di Como\",\n", "\"Bellinzona\",\"Lake of Lecco\"\n", "]\n", "\n", "places = {\"Venezia\":[\"Venice\",\"Venetian\",\"St Mark\",\"St. Mark\"]}\n", "\n", "\n", "# iterate over dataframe\n", "for index,row in dataFrame.iterrows():\n", " \n", " # iterate over place names\n", " # check if any place name in placesNames is present in row\n", " for place in placeNames:\n", " # if place name found, add to place_modified column\n", " if place in row[\"place\"]:\n", " dataFrame.at[index,\"place_modified\"] = place\n", " \n", " # iterate over place names for Venice\n", " for place in places[\"Venezia\"]:\n", " # if place found add `Venezia` to place_modified column\n", " if place in row[\"place\"]:\n", " dataFrame.at[index,\"place_modified\"] = \"Venezia\"\n", "\n", " \n", "# remove records where place_modified is blank\n", "dataFrame = dataFrame[dataFrame.place_modified != \" \"]\n", "dataFrame.to_csv(artworkCsvFile, index=False) \n" ] }, { "cell_type": "markdown", "id": "d0814adc", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Result - CSV File containing Place Name for use in OpenRefine\n", "\n", "The result of this process is a CSV file with the column `place_modified` containing a place name string that will be used for reconciliation in the OpenRefine tool.\n", "\n", "Records where a place name has not be identified have been removed from the CSV file." ] }, { "cell_type": "code", "execution_count": 5, "id": "5dfbd5dd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idplaceplace_modifiedcoords
0https://www.harvardartmuseums.org/collections/...Study of a Venetian CapitalVenezia
1https://collections.ashmolean.org/collection/1...Autumnal Cloud filling the Valley of Geneva, t...Geneva
2https://www.harvardartmuseums.org/collections/...Tom Tower, Christ Church, OxfordOxford
3https://www.harvardartmuseums.org/collections/...Study of a Venetian CapitalVenezia
4https://www.tate.org.uk/art/artworks/13033View of BolognaBologna
...............
102https://collections.ashmolean.org/collection/1...Sketch of the Oak Spray in Mantegna's Fresco o...Padua
103https://www.nga.gov/collection/72870The Garden of San Miniato near FlorenceFlorence
104https://www.harvardartmuseums.org/collections/...Part of a Sketch of the Northwest Porch of St....Venezia
105http://www.rijksmuseum.nl/nl/collectie/nl-RP-T...Gezicht op S. Anastasia te Verona, over de AdigeVerona
106https://collections.ashmolean.org/collection/1...Study of the Marble Inlaying on the Front of t...Venezia
\n", "

107 rows × 4 columns

\n", "
" ], "text/plain": [ " id \\\n", "0 https://www.harvardartmuseums.org/collections/... \n", "1 https://collections.ashmolean.org/collection/1... \n", "2 https://www.harvardartmuseums.org/collections/... \n", "3 https://www.harvardartmuseums.org/collections/... \n", "4 https://www.tate.org.uk/art/artworks/13033 \n", ".. ... \n", "102 https://collections.ashmolean.org/collection/1... \n", "103 https://www.nga.gov/collection/72870 \n", "104 https://www.harvardartmuseums.org/collections/... \n", "105 http://www.rijksmuseum.nl/nl/collectie/nl-RP-T... \n", "106 https://collections.ashmolean.org/collection/1... \n", "\n", " place place_modified coords \n", "0 Study of a Venetian Capital Venezia \n", "1 Autumnal Cloud filling the Valley of Geneva, t... Geneva \n", "2 Tom Tower, Christ Church, Oxford Oxford \n", "3 Study of a Venetian Capital Venezia \n", "4 View of Bologna Bologna \n", ".. ... ... ... \n", "102 Sketch of the Oak Spray in Mantegna's Fresco o... Padua \n", "103 The Garden of San Miniato near Florence Florence \n", "104 Part of a Sketch of the Northwest Porch of St.... Venezia \n", "105 Gezicht op S. Anastasia te Verona, over de Adige Verona \n", "106 Study of the Marble Inlaying on the Front of t... Venezia \n", "\n", "[107 rows x 4 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "artworkCsvFile = \"./data/ruskin/ruskin-places.csv\" # file location\n", "\n", "dataFrame = pd.read_csv(artworkCsvFile,low_memory=False)\n", "\n", "# display table for illustration\n", "display(dataFrame)" ] }, { "cell_type": "markdown", "id": "a10d8ccc", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 3. Use OpenRefine to Reconcile Place Names\n", "\n", "Next\n", "- use OpenRefine to match the values in the place_modified field, with place names in the name authority, The Getty Thesaurus of Geographic Names® Online (TGN).\n", "\n", "`OpenRefine` is a tool for working with messy data, and includes support for reconciliation with external data such as name authorities.\n", "\n", "`The Getty Thesaurus of Geographic Names® Online (TGN)` is one of several Getty Vocabularies that provide a structured resource that can be used to improve access to information about art, architecture, and material culture. From the website:\n", "\n", "
Through rich metadata and links, the Getty Vocabularies provide powerful conduits for knowledge creation, research, and discovery for digital art history and related disciplines.\n", "\n", "TGN is a thesaurus. TGN is not a geographic information system (GIS), although it may be linked to existing major, general-purpose, geographic databases and maps. While most records in TGN include coordinates, these coordinates are approximate and are intended for reference (\"finding purposes\") only (as is true of coordinates in most atlases and other resources, including NGA (formerly NIMA) databases).\n", "\n", "
\n", "\n", "\n", "#### Further Reading\n", "\n", "- OpenRefine https://openrefine.org/\n", "- The Getty Thesaurus of Geographic Names® Online (TGN) http://www.getty.edu/research/tools/vocabularies/tgn" ] }, { "cell_type": "code", "execution_count": 6, "id": "fce5be0d", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "

Open Refine Website

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import IFrame, HTML\n", "\n", "display(HTML(\"

Open Refine Website

\"))\n", "\n", "display(IFrame('https://openrefine.org/documentation.html', '100%', '600px'))" ] }, { "cell_type": "markdown", "id": "1ad62f9a", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Method\n", " \n", "The method used to reconcile the place names:\n", "- Download and install OpenRefine https://openrefine.org/download.html\n", "- Open OpenRefine and create a project\n", "- Upload the places CSV file\n", "- Reconcile place names in `place_modified`\n", "- Choose the TGN service to reconcile data with\n", "- Review Reconciliation Search Results\n", "- Add a Column Containing Entity TGN Identifiers further to Reconciliation Process\n", "- Manual Reconciliation\n", "\n", "#### Further Reading\n", "- OpenRefine https://openrefine.org\n" ] }, { "cell_type": "markdown", "id": "0b6973cb", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Download and Install OpenRefine\n", "\n", "- Download OpenRefine at https://openrefine.org/download.html\n", "- Installation instructions at https://docs.openrefine.org/manual/installing" ] }, { "cell_type": "markdown", "id": "f8f3537a", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Open OpenRefine and Create a Project\n", "\n", "The following video illustrates how to create a project in OpenRefine using a CSV file on the local drive." ] }, { "cell_type": "code", "execution_count": 7, "id": "0b70b3c9", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "

Video - OpenRefine - Create Project

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/jpeg": "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BERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREH//Z", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo, HTML\n", "\n", "display(HTML(\"

Video - OpenRefine - Create Project

\"))\n", "\n", "\n", "# video of project creation in OpenRefine\n", "\n", "YouTubeVideo('h1aLc5uvdck', width=1024, height=576)" ] }, { "cell_type": "markdown", "id": "955da136", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Reconcile Place Names in `place_modified`\n", "\n", "- Right-click on `place_modified` column header\n", "- Select `Start reconciling`\n", "\n", "" ] }, { "cell_type": "markdown", "id": "4a068754", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Choose the TGN Service to Reconcile Data With\n", "\n", "- Choose the Getty Voculabary Reconciliation Service that includes the TGN \n", "\n", "The video shows the following process:\n", "- select a column to reconcile \n", "- select a service to reconcile with\n", "- review options\n", "- start reconciliation\n", "\n", "#### Further Reading \n", "- Reconciliation services known to Wikidata - https://reconciliation-api.github.io/testbench/\n", "- TGN https://www.getty.edu/research/tools/vocabularies/tgn/" ] }, { "cell_type": "code", "execution_count": 8, "id": "d7e1102b", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "

Video - OpenRefine - Start Reconciliation

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/jpeg": "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afed2rwLc+aN1ndq8CK6AOfz5o3Wd2rwHPmjdZ3avADoA5/PmjdZ3avAc+aN1ndq8AOgDn8+aN1ndq8Bz5o3Wd2rwA6AOfz5o3Wd2rwHPmjdZ3avADoA5/PmjdZ3avAc+aN1ndq8AOgDn8+aN1ndq8Bz5o3Wd2rwA6AOfz5o3Wd2rwHPmjdZ3avADoA5/PmjdZ3avAc+aN1ndq8AOgDn8+aN1ndq8Bz5o3Wd2rwA6AOfz5o3Wd2rwHPmjdZ3avADoA5/PmjdZ3avAc+aN1ndq8AOgDn8+aN1ndq8Bz5o3Wd2rwA6AOfz5o3Wd2rwHPmjdZ3avADoA5/PmjdZ3avAc+aN1ndq8AOgDn8+aN1ndq8Bz5o3Wd2rwA6AOfz5o3Wd2rwHPmjdZ3avADoA5/PmjdZ3avAc+aN1ndq8AOgDn8+aN1ndq8Bz5o3Wd2rwA6AOfz5o3Wd2rwHPmjdZ3avADoA5/PmjdZ3avAc+aN1ndq8AOgDn8+aN1ndq8Bz5o3Wd2rwA6AOfz5o3Wd2rwHPmjdZ3avADoA5/PmjdZ3avAc+aN1ndq8APHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//Z", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo, HTML\n", "\n", "display(HTML(\"

Video - OpenRefine - Start Reconciliation

\"))\n", "\n", "\n", "YouTubeVideo('Zm0woMobjpI', width=1024, height=576)\n", "\n" ] }, { "cell_type": "markdown", "id": "8cc9e363", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Review Reconciliation Search Results\n", "\n", "Once the reconciliation process has completed it is necessary to review the results. Using the TGN it is noticeable that there are many places in the United States of America that have the same names as locations in Italy. \n", "\n", "A review of each match is necessary. Once a correct match has been identified, this match can be applied to all cells with the same place name. " ] }, { "cell_type": "code", "execution_count": 9, "id": "ab8d959a", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "

Video - OpenRefine - Review Reconciliation Results

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/jpeg": "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", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo, HTML\n", "\n", "display(HTML(\"

Video - OpenRefine - Review Reconciliation Results

\"))\n", "\n", "YouTubeVideo('pT0b0vsPRJ0', width=1024, height=576)\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "bb324586", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Add a Column Containing Entity TGN Identifiers further to Reconciliation Process\n", "\n", "- Create new column to hold the TGN identifiers\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 10, "id": "81b01078", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "

Video - OpenRefine - Add Entity Identifier Column

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/jpeg": "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", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo, HTML\n", "\n", "display(HTML(\"

Video - OpenRefine - Add Entity Identifier Column

\"))\n", "\n", "YouTubeVideo('PNPhs_7MQ6o', width=1024, height=576)\n" ] }, { "cell_type": "markdown", "id": "2bc1b729", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Manual Reconciliation\n", "\n", "Some additional manual reconciliation was required using the TGN search form.\n", " \n", "\n", "\n", "#### Further Reading\n", "- TGN search form http://www.getty.edu/research/tools/vocabularies/tgn\n", " " ] }, { "cell_type": "markdown", "id": "cf10d529", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Result - CSV file with TGN Identifiers\n", "\n", "The result of the reconciliation process is a new column with TGN name authority identifiers for place names identified in the artwork title. \n", "\n", "A CSV file is created with the following steps:\n", "- export CSV file from OpenRefine\n", "- save as [data/ruskin/ruskin-places-rec.csv](data/ruskin/ruskin-places-rec.csv) `" ] }, { "cell_type": "code", "execution_count": null, "id": "b8e984f7", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "from IPython.display import YouTubeVideo, HTML\n", "\n", "display(HTML(\"

Video - OpenRefine - Export Results as CSV

\"))\n", "\n", "YouTubeVideo('0tBjqr5AEmA', width=1024, height=576)" ] }, { "cell_type": "markdown", "id": "bbd90fbb", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Remove rows without TGN identifier\n", "\n", "- A final step removes rows that do not have a TGN identifier.\n", "- The resulting dataset is shown in tabular format below." ] }, { "cell_type": "code", "execution_count": null, "id": "419bea9c", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "reconciledRuskinPlaces = \"data/ruskin/ruskin-places-rec.csv\" \n", "\n", "# read file into pandas dataframe\n", "df = pd.read_csv(reconciledRuskinPlaces,low_memory=False)\n", "\n", "# remove rows that have an empty tgn field value\n", "df = df[df.tgn != \"\"]\n", "\n", "# write dataframe to file \n", "df.to_csv(reconciledRuskinPlaces, index=False) \n", "\n", "# for illustration display dataframe\n", "\n", "display(df)" ] }, { "cell_type": "markdown", "id": "25a0c234", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Add Geographical Coordinates to CSV file\n", "The next step is to associate geographical coordinates with the Linked Art artwork representations, using the TGN identifiers to query the TGN web service and return geographical coordinates.\n", "\n", "Steps:\n", "- request JSON file from http://vocab.getty.edu/tgn/ using TGN identifier\n", "- extract geocoordinates from response\n", "- add geocoordinates to CSV file" ] }, { "cell_type": "code", "execution_count": null, "id": "cce77b47", "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "import requests\n", "\n", "latprop = \"http://www.w3.org/2003/01/geo/wgs84_pos#lat\"\n", "lngprop = \"http://www.w3.org/2003/01/geo/wgs84_pos#long\"\n", "\n", "\n", "display(HTML(\"

Geographical coordinates retrieved from TGN web service

\")) \n", "\n", "reconciledRuskinPlaces = \"./data/ruskin/ruskin-places-rec.csv\" \n", "reconciledRuskinPlacesCoords = \"./data/ruskin/ruskin-places-rec-coords.csv\" \n", "\n", "# create dataframe from CSV file containing reconciled data including TGN identifiers\n", "dataFrameRuskinPlaces = pd.read_csv(reconciledRuskinPlaces,low_memory=False)\n", "\n", "# set type for column 'coords' as string in dataframe\n", "dataFrameRuskinPlaces['coords'] = dataFrameRuskinPlaces['coords'].astype(str)\n", "\n", "\n", "display(HTML(\"

Retrieving geocoordinates from vocab.getty.edu TGN API. Please wait for task to complete.

\"))\n", "\n", "# create dataframe to hold geographical coordinates with columns tng and latlng\n", "dataFrameGeo = pd.DataFrame({}, columns=['tgn', 'latlng'])\n", "\n", "# iterate through reconciled data containing place names and TGN identifiers\n", "for identifier_tgn in dataFrameRuskinPlaces['tgn'].unique():\n", " \n", " # print . to indicate progress\n", " print(\".\", end='')\n", " \n", " #create query string for web service - get tgn id using .split()\n", " query = \"http://vocab.getty.edu/tgn/\" + identifier_tgn.split(\"tgn/\",1)[1] +\"-place.json\"\n", " \n", " # use requests.get() to query TGN web service using TGN identifier to return geo coordinates \n", " resultsJSON = requests.get(query).json()\n", " \n", " # get lat lng from web service query results\n", " for record in resultsJSON:\n", " lat = resultsJSON[record][latprop][0][\"value\"]\n", " lng = resultsJSON[record][lngprop][0][\"value\"]\n", " \n", " # create string for lat lng\n", " latlng = str(lat) + \",\" + str(lng)\n", " \n", " \n", " # append TGN identifier and lat lng to the dataFrameGeo \n", " dataFrameGeo = dataFrameGeo.append(\n", " {\n", " 'tgn': identifier_tgn, \n", " 'latlng': latlng\n", " }, \n", " ignore_index=True)\n", " \n", "\n", "# for illustration display dataFrameGeo with addition of geo coords\n", "display(dataFrameGeo)" ] }, { "cell_type": "markdown", "id": "15c96dc7", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Update CSV File with Geographical Coordinates \n", "\n", "The following code \n", "- merges `dataFrameRuskinPlaces` with `dataFrameGeo` containing the geocoordinates.\n", "- removes `coords` from `dataFrameRuskinPlaces` \n", "- renames `latlng` to `coords` in `dataFrameRuskinPlaces` \n", "- writes `dataFrameRuskinPlaces` to a CSV file" ] }, { "cell_type": "code", "execution_count": null, "id": "107a351d", "metadata": {}, "outputs": [], "source": [ "reconciledRuskinPlacesCoords = \"./data/ruskin/ruskin-places-rec-coords.csv\" \n", "\n", "\n", "# merge dataframe with coords with dataframe from csv\n", "dataFrameRuskinPlaces = dataFrameRuskinPlaces.merge(dataFrameGeo, on='tgn') \n", "\n", "# drop column coords\n", "dataFrameRuskinPlaces = dataFrameRuskinPlaces.drop('coords', 1) # drop column coords\n", "\n", "# rename column latlng to coords\n", "dataFrameRuskinPlaces.rename(columns={'latlng': 'coords'}, inplace=True) # rename column tgn to coords\n", "\n", "# drop rows that have na value in coords column\n", "dataFrameRuskinPlaces.dropna(subset=['coords']) \n", "\n", "# write to CSV file\n", "dataFrameRuskinPlaces.to_csv(reconciledRuskinPlacesCoords, index=False)\n", "\n", "display(HTML(\"

CSV file with Geographical Coordinates

\"))\n", "# display dataframe\n", "display(dataFrameRuskinPlaces)\n" ] }, { "cell_type": "markdown", "id": "1ce006eb", "metadata": {}, "source": [ "## 4. Define Geolocation Representation in Linked Art\n", "\n", "The next step is to define a representation in Linked Art for geographical coordinates of place depicted in artwork. The relevant parts of the Linked Art model are: \n", " - Depiction\n", " - Geospatial approximation\n", " - Depiction of place with approximate location\n", "\n", "\n", "### Linked Art Data Model - Depiction\n", "\n", "From https://linked.art/model/object/aboutness/#depiction\n", "\n", "
Many sorts of artwork depict things that can be pointed out in the artwork. These could be identifiable entities, such as a known Person or Object with a name or identifier, or unidentifiable (perhaps fictional) instances of a class of entity, such as a depiction of a battle but not any particular battle. For example a portrait depicts the person sitting for it, or a sketch of a generic landscape depicts a place even if it's not a particular, known location. The depiction pattern describes what is in the artwork's image.
\n", "\n", "
This is modeled using the `represents` property on the VisualItem, which refers to the entity that is being depicted.
\n", "\n", "\n", "The following representation will be used for place depicted in Ruskin's artworks:\n", "\n", "\n", "`{\n", " \"@context\": \"https://linked.art/ns/v1/linked-art.json\",\n", " \"id\": \"https://linked.art/example/object/34\",\n", " \"type\": \"HumanMadeObject\",\n", " \"_label\": \"artwork title including place name\",\n", " \"shows\": [\n", " {\n", " \"type\": \"VisualItem\",\n", " \"represents\": [\n", " {\n", " \"type\": \"Place\",\n", " \"_label\": \"place name\"\n", " }\n", " ]\n", " }\n", " ]}`\n" ] }, { "cell_type": "markdown", "id": "1b781b3c", "metadata": {}, "source": [ "### Linked Art Data Model - Geospatial Approximation\n", "\n", "The Linked Art data model describes how to represent geospatial approximation.\n", "\n", "From https://linked.art/model/place/#geospatial-approximation\n", "\n", "
All recorded locations are approximate to some degree. It may be desirable to capture this approximation separately from the actual place, especially when that approximation is very uncertain. Especially if the place is the exact location of several events, and perhaps an address or other information is known, but not the exact geospatial coordinates.
\n", " \n", "\n", "
Secondly, as a place is defined by exactly one definition, but there might be multiple approximations such as a polygon as well as the central point, the real place that an activity occured at can be related to multiple approximate places to capture these different approximations.
\n", "\n", "\n", "Example Linked Art representation of geospatial approximation:\n", "\n", "`{\n", " \"@context\": \"https://linked.art/ns/v1/linked-art.json\",\n", " \"id\": \"https://linked.art/example/place/4\",\n", " \"type\": \"Place\",\n", " \"_label\": \"True Auction House Location\",\n", " \"approximated_by\": [\n", " {\n", " \"type\": \"Place\",\n", " \"_label\": \"Auction House Location Approximation\",\n", " \"defined_by\": \"POINT(-0.0032937526703165 51.515107154846)\"\n", " }\n", " ]\n", "}`\n", "\n", "\n", "### Linked Art Data Model - Depiction of Place with Approximate Location\n", "\n", "Relating the Linked Art model for geospatial approximation to the depiction of places in Ruskin's works, the following representation has been created:\n", "\n", "\n", "`{\n", " \"@context\": \"https://linked.art/ns/v1/linked-art.json\",\n", " \"id\": \"https://linked.art/example/object/34\",\n", " \"type\": \"HumanMadeObject\",\n", " \"_label\": \"artwork title including place name\",\n", " \"shows\": [\n", " {\n", " \"type\": \"VisualItem\",\n", " \"represents\": [\n", " {\n", " \"type\": \"Place\",\n", " \"_label\": \"Lucca\",\n", " \"approximated_by\": [\n", " {\n", " \"type\": \"Place\",\n", " \"_label\": \"Lucca - Location Approximation\",\n", " \"defined_by\": \"POINT(-0.0032937526703165 51.515107154846)\"\n", " }\n", " ]\n", " }\n", " ]\n", " }\n", " ]}`\n", "\n", "\n", "\n", "\n", "#### Further reading\n", "\n", "- Depiction https://linked.art/model/object/aboutness/#depiction\n", "\n", "- Geospatial approximation https://linked.art/model/place/#geospatial-approximation" ] }, { "cell_type": "markdown", "id": "c292ee0c", "metadata": {}, "source": [ "

Visualisation - Geographical Coordinates of Place Depicted in Artwork

\n", "

Below is a visualisation of the Linked Art JSON-LD representation of geographical coordinates of a place depicted in an artwork. \n", " \n", "Further information\n", "- explore the representation by clicking on nodes\n", "- SVG representation \n", "- uses \n", " - D3.js\n", " - is a modified version of code available in the JSON-LD Playground codebase\n", "\n", "\n", "#### Further Reading\n", "\n", "- d3.js https://d3js.org/\n", "- jsonld-vis https://github.com/science-periodicals/jsonld-vis\n", "- jsonld playground https://json-ld.org/playground and https://json-ld.org/playground/jsonld-vis.js \n" ] }, { "cell_type": "markdown", "id": "687ef899", "metadata": {}, "source": [ "

" ] }, { "cell_type": "code", "execution_count": null, "id": "d1ccb958", "metadata": {}, "outputs": [], "source": [ "from IPython.core.display import Javascript\n", "\n", "code2 = \"var file = './data/examples/geolocation.json';\"\\\n", " \"var selector = '#vis';\" \\\n", " \"visjsonld(file, selector); \" \n", "\n", "with open('./src/js/visld.js', 'r') as _jscript:\n", " code = _jscript.read() + code2\n", "\n", "Javascript(code)" ] }, { "cell_type": "markdown", "id": "1dfa884a", "metadata": {}, "source": [ "## 5. Add Place Name and Coordinates into Linked Art JSON-LD Files\n", "\n", "The final step is to add place names and geocoordinates to the original Linked Art files. \n", "\n", "The updated Linked Art files, including the geocoordinates, will later be used in a storymap visualisation of the artworks of John Ruskin, mapping the artworks to the locations that they depict, using the geocoordinates.\n", "\n", "The `cromulent` Python library is used to create the JSON-LD representation." ] }, { "cell_type": "code", "execution_count": null, "id": "d37dd072", "metadata": {}, "outputs": [], "source": [ "try:\n", " import cromulent \n", "except:\n", " %pip install cromulent\n", " import cromulent\n", " \n", "from cromulent.model import factory\n", "\n", "from cromulent.model import factory, Actor, Production, BeginningOfExistence, EndOfExistence, TimeSpan, Place\n", "from cromulent.model import InformationObject, Phase, VisualItem \n", "from cromulent.vocab import Painting, Drawing,Miniature,add_art_setter, PrimaryName, Name, CollectionSet, instances, Sculpture \n", "from cromulent.vocab import aat_culture_mapping, AccessionNumber, Height, Width, SupportPart, Gallery, MuseumPlace \n", "from cromulent.vocab import BottomPart, Description, RightsStatement, MuseumOrg, Purchase\n", "from cromulent.vocab import Furniture, Mosaic, Photograph, Coin, Vessel, Graphic, Enamel, Embroidery, PhotographPrint\n", "from cromulent.vocab import PhotographAlbum, PhotographBook, PhotographColor, PhotographBW, Negative, Map, Clothing, Furniture\n", "from cromulent.vocab import Sample, Architecture, Armor, Book, DecArts, Implement, Jewelry, Manuscript, SiteInstallation, Text, Print\n", "from cromulent.vocab import TimeBasedMedia, Page, Folio, Folder, Box, Envelope, Binder, Case, FlatfileCabinet\n", "from cromulent.vocab import HumanMadeObject,Tapestry,LocalNumber\n", "from cromulent.vocab import Type,Set\n", "from cromulent.vocab import TimeSpan, Actor, Group, Acquisition, Place\n", "from cromulent.vocab import Production, TimeSpan, Actor\n", "from cromulent.vocab import LinguisticObject,DigitalObject, DigitalService\n", "from cromulent import reader\n", "\n", "try:\n", " import pandas as pd\n", "except:\n", " %pip install pandas\n", " import pandas as pd\n", " \n", "try:\n", " import os\n", "except:\n", " %pip install os\n", " import os\n", " \n", "try:\n", " import json\n", "except:\n", " %pip install json\n", " import json \n", " \n", "artwork = {}\n", "cnt=1\n", "\n", "# directory that will contain updated Ruskin artwork representations including geo coords\n", "storyvisdir = \"data/ruskin/storyvis/json\"\n", "\n", "# file containing reconciled data with coordinates\n", "filecoord = \"./data/ruskin/ruskin-places-rec-coords.csv\" \n", "# open file containing reconciled data with geo coordinates\n", "dataframeGeo = pd.read_csv(filecoord,low_memory=False)\n", "\n", "\n", "# directory containing Rusking artworks represented in Linked Art JSON-LD\n", "ruskindir = \"data/ruskin/output/json\"\n", "file_list=os.listdir(ruskindir)\n", "\n", "# for each linked art json file\n", "for file in file_list:\n", " # open file\n", " with open( ruskindir + \"/\" + file) as json_file:\n", " \n", " # get json object from file object with json.load() https://www.geeksforgeeks.org/json-load-in-python/\n", " artwork = json.load(json_file)\n", " \n", " # if id field is in the id field of data file containing geographical coordinates, add update the file\n", " if artwork[\"id\"] in dataframeGeo[\"id\"].tolist():\n", " \n", " display(HTML(\"

\" + artwork[\"_label\"] + \"

\"))\n", " # get rows in dataframeGeo where id == artwork id from JSON-LD file\n", " # Access a group of rows and columns by label(s) or a boolean array\n", " # https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html\n", " rows = dataframeGeo.loc[dataframeGeo['id'] == artwork[\"id\"]]\n", " \n", " print(\"Matching row in geographical coordinates file for artwork\")\n", " display(rows)\n", " \n", " # get first row https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html\n", " row=rows.iloc[0]\n", " \n", " \n", " \n", " # get place name and coords from geocoords file \n", " placeName = row[\"place\"]\n", " coords = row[\"coords\"]\n", " # replace comma in coords with space\n", " coords = coords.replace(\",\", \" \")\n", " \n", " # increment counter\n", " cnt = cnt+1\n", " \n", " # use cromulent to create Linked Art representation of place depicted\n", " # https://github.com/thegetty/crom\n", " \n", " approx_place = Place()\n", " approx_place._label = placeName\n", " approx_place.defined_by = \"POINT(\" + coords + \")\"\n", " \n", " place = Place()\n", " place._label = placeName\n", " place.approximated_by = approx_place\n", " \n", " visualItem = VisualItem()\n", " visualItem.represents = place\n", " \n", " # append new representation to artwork json object\n", " artwork[\"shows\"] = factory.toJSON(visualItem)\n", " \n", " print(\"Geographical coordinates representation to be added:\")\n", " print(json.dumps(factory.toJSON(visualItem), indent=2))\n", " \n", " # open output file \n", " text_file = open(storyvisdir + \"/\" + str(cnt) + \".json\", \"wt\")\n", " \n", " # write to file and close\n", " n = text_file.write(json.dumps(artwork,indent=2))\n", " text_file.close()\n", " print(\"File updated\" )\n", "\n", "HTML(\"

Files updated

\")" ] }, { "cell_type": "markdown", "id": "3b0c6139", "metadata": {}, "source": [ "## Example Linked Art JSON-LD including Geographical Identifier and Coordinates \n", "\n", "The following is an example JSON-LD Linked Art representation, updated to include geographical coordinates.\n", " \n", "### Image Title: Study of the Marble Inlaying on the Front of the Casa Loredan, Venice\n", "\n", "\n", "\n", "\n", "\n", "Ashmolean Museum artwork page\n", "\n", "\n", "### JSON-LD Representation" ] }, { "cell_type": "code", "execution_count": null, "id": "09c99833", "metadata": {}, "outputs": [], "source": [ "print(json.dumps(artwork,indent=2))" ] }, { "cell_type": "markdown", "id": "9b5abb3e", "metadata": {}, "source": [ "

Visualisation - Artwork Description with Geographical Coordinates of Place Depicted

\n", "\n", "If you'd like to view a different file change the value of `file` filepath in the code below (examples: 1.json .. 89.json)" ] }, { "cell_type": "code", "execution_count": null, "id": "a89ebe43", "metadata": {}, "outputs": [], "source": [ "from IPython.core.display import Javascript\n", "\n", "code2 = \"var file = './data/ruskin/storyvis/json/3.json';\"\\\n", " \"var selector = '#vis2';\" \\\n", " \"visjsonld(file, selector); \" \n", "\n", "with open('./src/js/visld.js', 'r') as _jscript:\n", " code = _jscript.read() + code2\n", "\n", "Javascript(code)" ] }, { "cell_type": "markdown", "id": "815637d1", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "id": "9d3dcc2a", "metadata": {}, "source": [ "## Next Steps\n", "\n", "### Jupyter Notebooks\n", "\n", "Look at the Jupyter notebook that:\n", "- creates the input files\n", " - `01-06-Transform-John-Ruskin`\n", "- creates a StoryMap data visualisation from the updated JSON-LD files\n", " - `03-04-Visualise-John-Ruskin-Story-Map.ipynb`\n" ] }, { "cell_type": "markdown", "id": "d3fc4dc6", "metadata": {}, "source": [ "## View other Linked Art JSON-LD files from Ruskin dataset" ] }, { "cell_type": "code", "execution_count": null, "id": "2474c801", "metadata": {}, "outputs": [], "source": [ "import ipywidgets\n", "\n", "from ipywidgets import Layout, FileUpload \n", "from IPython.display import display, IFrame, HTML, Image\n", "import os\n", "import json\n", "\n", "\n", "\n", "# directory that will contain updated Ruskin artwork representations including geo coords\n", "dir = \"data/ruskin/storyvis/json\"\n", "\n", "file_list=os.listdir(dir)\n", "\n", "selectOptions = []\n", "selectOptions.append((\"Please select an artwork\", \"\"))\n", "\n", "\n", "# for each linked art json file\n", "for file in file_list:\n", " # open file\n", " with open( dir + \"/\" + file) as json_file:\n", " artwork = json.load(json_file)\n", " title = artwork[\"_label\"] + \" (\" + file + \")\"\n", " \n", " selectOptions.append((title,file))\n", " \n", "from IPython.core.display import Javascript \n", " \n", "def dropdown_eventhandler(change):\n", " with open('./src/js/visld.js', 'r') as _jscript:\n", " code = _jscript.read() + \"var file = './data/ruskin/storyvis/json/\" + change.new + \"';var selector = '#vis3';visjsonld(file, selector); \"\n", " display(Javascript(code))\n", " \n", " with open( dir + \"/\" + change.new) as json_file:\n", " \n", " artwork = json.load(json_file)\n", " if (\"representation\" in artwork):\n", " image = artwork[\"representation\"][0][\"id\"]\n", " display(Javascript(\"document.getElementById('artwork').src = '\" + image + \"';\"))\n", " else:\n", " display(Javascript(\"document.getElementById('artwork').src = '';\"))\n", " \n", " " ] }, { "cell_type": "code", "execution_count": null, "id": "ae6f10d3", "metadata": {}, "outputs": [], "source": [ "selectObject = ipywidgets.Dropdown(options=selectOptions)\n", "selectObject.observe(dropdown_eventhandler, names='value')\n", "\n", "display(selectObject)" ] }, { "cell_type": "markdown", "id": "bdfe0f81", "metadata": {}, "source": [ "
\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "id": "8adc43a8", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Slideshow", "finalized": { "timestamp": 1650979482926, "trusted": true }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" }, "require": { "paths": { "d3": "https://d3js.org/d3.v7.min" }, "shim": {} } }, "nbformat": 4, "nbformat_minor": 5 }