{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "13333b22", "metadata": {}, "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.display import display, IFrame, HTML, Javascript\n", "HTML(\"\"\"\"\"\")" ] }, { "cell_type": "markdown", "id": "11e94730", "metadata": {}, "source": [ "# Transforming Collections Data to Linked Art \n", "# National Gallery of Art" ] }, { "cell_type": "markdown", "id": "c0e616a9", "metadata": {}, "source": [ "## Input Data\n", "\n", "The collection data exists into two files:\n", "- CSV data file containing artwork description [data file](./data/nga/input/nga_ruskin.csv)\n", "- CSV data file containing detailed digital image information for artworks https://raw.githubusercontent.com/NationalGalleryOfArt/opendata/main/data/published_images.csv\n", "\n", "\n", " #### Further Reading \n", " \n", "- National Gallery of Art https://www.nga.gov/\n", "- NGA GitHub https://github.com/NationalGalleryOfArt\n", "- The input data file is from https://github.com/NationalGalleryOfArt/opendata/tree/main/data" ] }, { "cell_type": "code", "execution_count": 2, "id": "080042a7", "metadata": {}, "outputs": [], "source": [ "### Load NGA Collection Data into DataFrame" ] }, { "cell_type": "code", "execution_count": 3, "id": "91007598", "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", " \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", "
objectidaccessionedaccessionnumlocationidtitledisplaydatebeginyearendyearvisualbrowsertimespanmedium...visualbrowserclassificationparentidisvirtualdepartmentabbrportfolioseriesvolumewatermarkslastdetectedmodificationcustomprinturl
011326012000.127.20.1-193NaNLithographs, Volume 9NaN1804.01866.01801 to 1825book of lithographs...volumeNaN0CG-ENaNNaNNaNNaN2020-05-06 22:01:32.06-04NaN
111383312000.127.3.1-172NaNLithographs, Volume 12NaN1804.01866.01801 to 1825book of lithographs...volumeNaN0CG-ENaNNaNNaNNaN2020-05-06 22:01:32.06-04NaN
211464012000.127.8.1-110NaNLithographs, Volume 17NaN1804.01866.01801 to 1825book of lithographs...volumeNaN0CG-ENaNNaNNaNNaN2020-05-06 22:01:32.06-04NaN
311485512000.127.10.1-28NaNLithographs, Volume 19NaN1804.01866.01801 to 1825book of lithographs...volumeNaN0CG-ENaNNaNNaNNaN2020-05-06 22:01:32.06-04NaN
411919112001.100.2.bNaNStudies of Lago Maggiore and and the Entrance ...c. 17001700.01700.01651 to 1700brown ink over graphite on laid paper...drawing119190.00CG-ENaNNaNNaNNaN2019-10-28 22:01:34.883-04NaN
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " objectid accessioned accessionnum locationid \\\n", "0 113260 1 2000.127.20.1-193 NaN \n", "1 113833 1 2000.127.3.1-172 NaN \n", "2 114640 1 2000.127.8.1-110 NaN \n", "3 114855 1 2000.127.10.1-28 NaN \n", "4 119191 1 2001.100.2.b NaN \n", "\n", " title displaydate beginyear \\\n", "0 Lithographs, Volume 9 NaN 1804.0 \n", "1 Lithographs, Volume 12 NaN 1804.0 \n", "2 Lithographs, Volume 17 NaN 1804.0 \n", "3 Lithographs, Volume 19 NaN 1804.0 \n", "4 Studies of Lago Maggiore and and the Entrance ... c. 1700 1700.0 \n", "\n", " endyear visualbrowsertimespan medium ... \\\n", "0 1866.0 1801 to 1825 book of lithographs ... \n", "1 1866.0 1801 to 1825 book of lithographs ... \n", "2 1866.0 1801 to 1825 book of lithographs ... \n", "3 1866.0 1801 to 1825 book of lithographs ... \n", "4 1700.0 1651 to 1700 brown ink over graphite on laid paper ... \n", "\n", " visualbrowserclassification parentid isvirtual departmentabbr portfolio \\\n", "0 volume NaN 0 CG-E NaN \n", "1 volume NaN 0 CG-E NaN \n", "2 volume NaN 0 CG-E NaN \n", "3 volume NaN 0 CG-E NaN \n", "4 drawing 119190.0 0 CG-E NaN \n", "\n", " series volume watermarks lastdetectedmodification customprinturl \n", "0 NaN NaN NaN 2020-05-06 22:01:32.06-04 NaN \n", "1 NaN NaN NaN 2020-05-06 22:01:32.06-04 NaN \n", "2 NaN NaN NaN 2020-05-06 22:01:32.06-04 NaN \n", "3 NaN NaN NaN 2020-05-06 22:01:32.06-04 NaN \n", "4 NaN NaN NaN 2019-10-28 22:01:34.883-04 NaN \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "file = './data/nga/input/objects.csv'\n", "\n", "try:\n", " import pandas as pd\n", "except:\n", " !pip install pandas\n", " import pandas as pd\n", " \n", "mpg = pd.read_csv(file,low_memory=False)\n", "mpg.head()" ] }, { "cell_type": "markdown", "id": "c28a6ede", "metadata": {}, "source": [ "### Load NGA Digital Image File into DataFrame\n", "\n", "The data file containing detailed digital image data is loaded into a pandas dataframe `dataFrameNGAImages`" ] }, { "cell_type": "code", "execution_count": 4, "id": "04e4061f", "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", " \n", " \n", " \n", " \n", " \n", " \n", "
uuidiiifurliiifthumburlviewtypesequencewidthheightmaxpixelscreatedmodifieddepictstmsobjectidassistivetext
000004dec-8300-4487-8d89-562d0126b6a1https://api.nga.gov/iiif/00004dec-8300-4487-8d...https://api.nga.gov/iiif/00004dec-8300-4487-8d...primary0.026234000640.02010-09-07 15:08:48-042022-04-21 12:57:43.657-0411975NaN
100007f61-4922-417b-8f27-893ea328206chttps://api.nga.gov/iiif/00007f61-4922-417b-8f...https://api.nga.gov/iiif/00007f61-4922-417b-8f...primary0.033654332NaN2013-07-05 15:41:08-042022-05-23 14:59:28-0417387NaN
20000bd8c-39de-4453-b55d-5e28a9beed38https://api.nga.gov/iiif/0000bd8c-39de-4453-b5...https://api.nga.gov/iiif/0000bd8c-39de-4453-b5...primary0.035004688NaN2013-08-05 14:31:59-042022-05-23 15:05:58-0419245NaN
30000e5a4-7d32-4c2a-97c6-a6b571c9fd71https://api.nga.gov/iiif/0000e5a4-7d32-4c2a-97...https://api.nga.gov/iiif/0000e5a4-7d32-4c2a-97...primary0.022523000NaN2013-03-18 14:39:55-042022-05-17 18:19:25-04153987NaN
40001668a-dd1c-48e8-9267-b6d1697d43c8https://api.nga.gov/iiif/0001668a-dd1c-48e8-92...https://api.nga.gov/iiif/0001668a-dd1c-48e8-92...primary0.034464448NaN2014-01-02 14:50:50-052022-05-23 15:39:38-0423830NaN
\n", "
" ], "text/plain": [ " uuid \\\n", "0 00004dec-8300-4487-8d89-562d0126b6a1 \n", "1 00007f61-4922-417b-8f27-893ea328206c \n", "2 0000bd8c-39de-4453-b55d-5e28a9beed38 \n", "3 0000e5a4-7d32-4c2a-97c6-a6b571c9fd71 \n", "4 0001668a-dd1c-48e8-9267-b6d1697d43c8 \n", "\n", " iiifurl \\\n", "0 https://api.nga.gov/iiif/00004dec-8300-4487-8d... \n", "1 https://api.nga.gov/iiif/00007f61-4922-417b-8f... \n", "2 https://api.nga.gov/iiif/0000bd8c-39de-4453-b5... \n", "3 https://api.nga.gov/iiif/0000e5a4-7d32-4c2a-97... \n", "4 https://api.nga.gov/iiif/0001668a-dd1c-48e8-92... \n", "\n", " iiifthumburl viewtype sequence \\\n", "0 https://api.nga.gov/iiif/00004dec-8300-4487-8d... primary 0.0 \n", "1 https://api.nga.gov/iiif/00007f61-4922-417b-8f... primary 0.0 \n", "2 https://api.nga.gov/iiif/0000bd8c-39de-4453-b5... primary 0.0 \n", "3 https://api.nga.gov/iiif/0000e5a4-7d32-4c2a-97... primary 0.0 \n", "4 https://api.nga.gov/iiif/0001668a-dd1c-48e8-92... primary 0.0 \n", "\n", " width height maxpixels created \\\n", "0 2623 4000 640.0 2010-09-07 15:08:48-04 \n", "1 3365 4332 NaN 2013-07-05 15:41:08-04 \n", "2 3500 4688 NaN 2013-08-05 14:31:59-04 \n", "3 2252 3000 NaN 2013-03-18 14:39:55-04 \n", "4 3446 4448 NaN 2014-01-02 14:50:50-05 \n", "\n", " modified depictstmsobjectid assistivetext \n", "0 2022-04-21 12:57:43.657-04 11975 NaN \n", "1 2022-05-23 14:59:28-04 17387 NaN \n", "2 2022-05-23 15:05:58-04 19245 NaN \n", "3 2022-05-17 18:19:25-04 153987 NaN \n", "4 2022-05-23 15:39:38-04 23830 NaN " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "file_images = \"https://raw.githubusercontent.com/NationalGalleryOfArt/opendata/main/data/published_images.csv\"\n", "df_images = pd.read_csv(file_images)\n", "df_images.head()" ] }, { "cell_type": "markdown", "id": "a27b3c3f", "metadata": {}, "source": [ "### Remove Byte Order Marks and Define Data Mapping\n", "\n", "Remove Byte Order Marks and create Python dictionary containing data mapping for each input file." ] }, { "cell_type": "code", "execution_count": 5, "id": "c876bd23", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\n", " \"objectid\": \"113260\",\n", " \"accessioned\": \"1\",\n", " \"accessionnum\": \"2000.127.20.1-193\",\n", " \"locationid\": \"\",\n", " \"title\": \"Lithographs, Volume 9\",\n", " \"displaydate\": \"\",\n", " \"beginyear\": \"1804\",\n", " \"endyear\": \"1866\",\n", " \"visualbrowsertimespan\": \"1801 to 1825\",\n", " \"medium\": \"book of lithographs\",\n", " \"dimensions\": \"\",\n", " \"inscription\": \"\",\n", " \"markings\": \"\",\n", " \"attributioninverted\": \"Gavarni, Paul\",\n", " \"attribution\": \"Paul Gavarni\",\n", " \"creditline\": \"Ailsa Mellon Bruce Fund\",\n", " \"classification\": \"Volume\",\n", " \"subclassification\": \"\",\n", " \"visualbrowserclassification\": \"volume\",\n", " \"parentid\": \"\",\n", " \"isvirtual\": \"0\",\n", " \"departmentabbr\": \"CG-E\",\n", " \"portfolio\": \"\",\n", " \"series\": \"\",\n", " \"volume\": \"\",\n", " \"watermarks\": \"\",\n", " \"lastdetectedmodification\": \"2020-05-06 22:01:32.06-04\",\n", " \"customprinturl\": \"\"\n", "}\n" ] } ], "source": [ "import csv\n", "try:\n", " import json\n", "except:\n", " !pip install json\n", " import json \n", " \n", " \n", "#remove BOM\n", "s = open(file, mode='r', encoding='utf-8-sig').read()\n", "open(file, mode='w', encoding='utf-8').write(s)\n", "\n", "allObjects = csv.DictReader(open(file, mode='r',encoding='utf-8'))\n", "\n", "for obj in allObjects:\n", " print(json.dumps(obj,indent=2))\n", " break " ] }, { "cell_type": "markdown", "id": "91b86264", "metadata": {}, "source": [ "### Transform to JSON-LD \n", "\n", "This next step uses the following to transform the collections data to Linked Art JSON-LD\n", "- the data mapping\n", "- custom coding in createObjProp()\n", "- cromulant Python library\n", "- custom coding in la including createObjDescription()\n", "\n", "The URLs for the artwork digital images are in a separate file. With custom coding in `createObjProp()` the rows in the two collection data files are mapped to extract the digital image url.\n", "\n", "
\n",
    "    matchImages = dataFrameNGAImages.query('depictstmsobjectid == ' + objProp[\"id\"] )\n",
    "    objProp[\"image_url\"] = matchImages[\"iiifurl\"].iloc[0]  + \"/full/!500,500/0/default.jpg\"\n",
    "
\n", "\n", "\n", "Additional custom code creates a web page URL for the artwork:\n", "\n", "
\n",
    "objProp[\"homepage\"] = \"https://www.nga.gov/collection/art-object-page.\" + id + \".html\"   \n",
    "
" ] }, { "cell_type": "code", "execution_count": 6, "id": "f271df6c", "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", " \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", "
0
idobjectid
accession_numberaccessionnum
accession_date
classificationclassification
titletitle
alt_title
notes
date_createddisplaydate
date_created_earliestbeginyear
date_created_latestendyear
created_period
created_dynasty
created_inscriptions
created_notes
creatorattribution
physical_mediummedium
physical_style
physical_technique
physical_description
physical_dimensionsdimensions
created_provenance
credit_linecreditline
collectiondepartmentabbr
current_status
current_owner
image_url
homepage
\n", "
" ], "text/plain": [ " 0\n", "id objectid\n", "accession_number accessionnum\n", "accession_date \n", "classification classification\n", "title title\n", "alt_title \n", "notes \n", "date_created displaydate\n", "date_created_earliest beginyear\n", "date_created_latest endyear\n", "created_period \n", "created_dynasty \n", "created_inscriptions \n", "created_notes \n", "creator attribution\n", "physical_medium medium\n", "physical_style \n", "physical_technique \n", "physical_description \n", "physical_dimensions dimensions\n", "created_provenance \n", "credit_line creditline\n", "collection departmentabbr\n", "current_status \n", "current_owner \n", "image_url \n", "homepage " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ " \n", " mapp = {\n", " \"id\":\"objectid\",\n", " \"accession_number\":\"accessionnum\",\n", " \"accession_date\": \"\",\n", " \"classification\" : \"classification\",\n", " \"title\": \"title\",\n", " \"alt_title\": \"\",\n", " \"notes\": \"\",\n", " \"date_created\":\"displaydate\",\n", " \"date_created_earliest\": \"beginyear\",\n", " \"date_created_latest\": \"endyear\",\n", " \"created_period\":\"\",\n", " \"created_dynasty\":\"\",\n", " \"created_inscriptions\":\"\",\n", " \"created_notes\": \"\",\n", " \"creator\":\"attribution\",\n", " \"physical_medium\": \"medium\",\n", " \"physical_style\": \"\",\n", " \"physical_technique\": \"\",\n", " \"physical_description\": \"\",\n", " \"physical_dimensions\": \"dimensions\",\n", " \"created_provenance\": \"\" ,\n", " \"credit_line\": \"creditline\",\n", " \"collection\" : \"departmentabbr\",\n", " \"current_status\" : \"\",\n", " \"current_owner\" : \"\",\n", " \"image_url\": \"\",\n", " \"homepage\": \"\"\n", "}\n", "\n", "# display transposed dataframe of data mapping\n", "display(pd.DataFrame(mapp, index=[0]).T)" ] }, { "cell_type": "code", "execution_count": 7, "id": "b1e37226", "metadata": {}, "outputs": [], "source": [ "# baseURI for JSON-LD document\n", "baseURI = \"https://www.nga.gov/collection/\"\n", "\n", "\n", "def createObjProp(obj,mapp,baseURI):\n", " objProp = {}\n", " csv_keys = list(obj.keys())\n", " for key in csv_keys:\n", " for prop in mapp:\n", " if key == mapp[prop]:\n", " if prop == \"creator\":\n", " objProp[prop] = [{\"id\": baseURI +\"creatorid/\" + obj[mapp[\"id\"]] ,\"name\": obj[key],\"role\":\"Artist\"}]\n", " else:\n", " objProp[prop] = obj[key]\n", " objProp[\"homepage\"] = \"\"\n", " objProp[\"current_owner\"] = {\"name\":\"National Gallery of Art\",\n", " \"location\":\"Washington, D.C., United States\",\n", " \"type\": \"http://vocab.getty.edu/aat/300312281\" ,\n", " \"type_label\": \"\"}\n", " return objProp " ] }, { "cell_type": "code", "execution_count": 8, "id": "99c797ab", "metadata": {}, "outputs": [], "source": [ "from lib import linkedart as la\n", "\n", "\n", "try:\n", " import cromulent\n", "except:\n", " !pip install cromulent\n", " import cromulent\n", "from cromulent.model import factory\n", "\n", "\n", "outputdir = \"./data/nga/output/json/all/\"\n", "\n", "# list to hold file names for use with jsonld visualisation dropdown\n", "selectOptions = []\n", "selectOptions = [('Please select an artwork', '')]\n", "\n", "\n", "\n", "dfimg_list = df_images['depictstmsobjectid'].tolist()\n", "dfimgurl_list = df_images['iiifurl'].tolist()\n", "\n", "counter = 1\n", "\n", "for obj in allObjects:\n", " if counter > 100:\n", " break\n", " # create object property dictionary\n", " objProp = createObjProp(obj,mapp,baseURI)\n", " \n", " id = objProp[\"id\"]\n", " object_uri = baseURI + id\n", " \n", " if int(id) in dfimg_list:\n", " df_images_match = df_images.loc[df_images['depictstmsobjectid'] == int(id)]\n", " objProp[\"image_url\"] = df_images_match.iloc[0][\"iiifurl\"] + \"/full/!500,500/0/default.jpg\"\n", " \n", " filename = objProp[\"id\"] + \".json\"\n", " selectOptions.append( ( objProp[\"title\"] + \" (\" + filename + \")\" , filename))\n", " # create obj description\n", " objLA = la.createObjDesc(objProp,la.objTypes,object_uri)\n", " \n", " \n", " # write to file \n", " text_file = open(outputdir + filename, \"wt\")\n", " n = text_file.write(factory.toString(objLA, compact=False))\n", " \n", " text_file.close()\n", " counter = counter + 1\n", " " ] }, { "cell_type": "markdown", "id": "41f94451", "metadata": {}, "source": [ "### Explore the Linked Art JSON-LD files\n", "\n", "Select an artwork from the dropdown to view \n", "- the artwork image\n", "- a visualisation of the Linked Art JSON-LD representation created above" ] }, { "cell_type": "code", "execution_count": 9, "id": "98ffd126", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f14fbc7f35d34a5aa2f33e58576a237b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Dropdown(options=(('Please select an artwork', ''), ('Studies of Lago Maggiore and and the Entrance to a Palaz…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "try:\n", " import ipywidgets\n", "except:\n", " %pip install ipywidgets\n", " import ipywidgets\n", "\n", "from ipywidgets import Layout, FileUpload \n", "from IPython.display import display, IFrame, HTML, Image\n", "from IPython.core.display import Javascript \n", " \n", "import os\n", "\n", "try:\n", " import json\n", "except:\n", " %pip install json\n", " import json \n", " \n", " \n", "def dropdown_eventhandler(change):\n", " with open('./src/js/visld.js', 'r') as _jscript:\n", " code = _jscript.read() + \"var file = '\" + outputdir + change.new + \"';var selector = '#visnga';visjsonld(file, selector); \"\n", " display(Javascript(code))\n", " \n", " with open( outputdir + \"/\" + 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('artworknga').src = '\" + image + \"';\"))\n", " else:\n", " display(Javascript(\"document.getElementById('artworknga').src = '';\"))\n", " \n", "\n", "selectObject = ipywidgets.Dropdown(options=selectOptions)\n", "selectObject.observe(dropdown_eventhandler, names='value')\n", "\n", "display(selectObject)" ] }, { "cell_type": "markdown", "id": "bcd7bcde", "metadata": {}, "source": [ "
\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": null, "id": "f564e70f", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "interpreter": { "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "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" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "ab1da6666f854b44b3422dcc26f64b92": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "b03f696300384f4892ca03cab711c7fb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "f14fbc7f35d34a5aa2f33e58576a237b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DropdownModel", "state": { "_options_labels": [ "Please select an artwork", "Studies of Lago Maggiore and and the Entrance to a Palazzo (119191.json)", "(Image 2) (124460.json)", "Budapest (124472.json)", "Letter to the Mother [center] (125317.json)", "Letter to the Mother [right] (125318.json)", "Pikeman (129852.json)", "Baroque Centaur (Barocker Kentaur) (130830.json)", "Crinolines on the Beach (131025.json)", "Great Caterpillar (Grosse Raupe) (131273.json)", "Family Values [obverse] (131275.json)", "Minerva (131894.json)", "Funkturm Berlin (Radio Tower Berlin) (132226.json)", "The Rape of Deianira (134227.json)", "Celline in a Hat (134524.json)", "Funeral March (134526.json)", "Heartfields (139453.json)", "Ixion Deceived by Juno (142019.json)", "Egyptian Sibyl (144271.json)", "An Evening Landscape with a Hay Wagon (144272.json)", "Untitled [studies of a female figure and head] [verso] (144500.json)", "Untitled (Auction) (145769.json)", "Construction IX (152795.json)", "Turning Forms (154203.json)", "Every...Bernd and Hilla Becher Spherical Type Gasholder (157908.json)", "Water Dock and Brambles at a Sluice (158580.json)", "Stains: Cinnamon Oil (Magnus, Mabee & Reynard) (161579.json)", "Untitled (Self-Portrait) (163227.json)", "The Regattas at Henley (164917.json)", "The Sailing Ship (164920.json)", "Man Pruning a Tree (164916.json)", "Still Life with Mustard Pot (164918.json)", "Brad (165297.json)", "Obama (165298.json)", "Obama 2 (165299.json)", "A Pastoral Visit (166432.json)", "The Longshoremen's Noon (166433.json)", "Leisure and Labor (166461.json)", "Examinant le nouveau plafond ... (170147.json)", "The Valley of the Seine, from the Hills of Giverny (166468.json)", "Ce monsieur Courbet... (172013.json)", "Le chapeau qu'on rapporte de Paris (179348.json)", "Ne craignez rien ... (180297.json)", "Gemini (178261.json)", "Voyons ... admirez au moins ce Courbet! ... (179937.json)", "Une petite séance a la buvette (183285.json)", "La fourmi (195305.json)", "La plainte en adultère (195326.json)", "Mr. Pot de Noz. (195857.json)", "Quittant le valachie (198269.json)", "5:25 pm, Thursday (202748.json)", "Aspect que commencent dèja a avoir ... (204186.json)", "Pigeon Holes (205416.json)", "A Gutach Peasant Girl (205684.json)", "Condensation Wall (205890.json)", "V-X (206164.json)", "Two Still Life Studies (206442.json)", "Fort Snelling (206590.json)", "Self-Portrait (207848.json)", "Au Théâtre Antoine (218593.json)", "Castle Entrance (219042.json)", "Andrew W. Mellon (219336.json)", "Saints Peter and Paul (220503.json)", "The Madonna of Humility (9.json)", "The Adoration of the Magi (12.json)", "The Adoration of the Magi (15.json)", "Profile Portrait of a Young Man (16.json)", "The Crucifixion with the Virgin, Saint John, Saint Jerome, and Saint Mary Magdalene [left panel] (29.json)", "The Crucifixion with the Virgin, Saint John, Saint Jerome, and Saint Mary Magdalene [middle panel] (30.json)", "Christ Blessing (33.json)", "Saint Peter (34.json)", "Madonna and Child with Saint Jerome and Saint John the Baptist (40.json)", "Portrait of a Gentleman (59.json)", "Portrait of a Lady (44.json)", "The Baptism of Christ (272.json)", "The Rest on the Flight into Egypt (50.json)", "Portrait of Diego de Guevara (?) (53.json)", "Isabella Brant (54.json)", "The Lacemaker (61.json)", "The Smiling Girl (62.json)", "William Vans Murray (560.json)", "Portrait of a Young Man (78.json)", "An Old Lady with a Book (80.json)", "A Woman Holding a Pink (82.json)", "A Young Man Seated at a Table (possibly Govaert Flinck) (84.json)", "Pope Innocent X (87.json)", "Portrait of a Young Man (89.json)", "Saint Ildefonso (90.json)", "Miss Juliana Willoughby (111.json)", "Apostle Judas Thaddeus (676.json)", "Miss Catherine Tatton (106.json)", "Mrs. Davies Davenport (112.json)", "The Washington Family (561.json)", "Quintilia Fischieri (306.json)", "The Annunciation (359.json)", "Giovanni II Bentivoglio (360.json)", "Susanna (372.json)", "Antoine Barillon (922.json)", "Scene from Ancient History (509.json)", "The Apparition of the Virgin (526.json)", "Cherubs Playing with a Lyre (575.json)" ], "index": 0, "layout": "IPY_MODEL_ab1da6666f854b44b3422dcc26f64b92", "style": "IPY_MODEL_b03f696300384f4892ca03cab711c7fb" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }