{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# BNB Linked Data Platform\n", "\n", "The [BNB Linked Data Platform](https://bnb.data.bl.uk/) provides access to the [British National Bibliography (BNB)](http://www.bl.uk/bibliographic/natbib.html) published as linked open data and made available through SPARQL services. \n", "\n", "This notebook explains how to query the repository and obtain places of publication (fields blt:publication and blt:projectedPublication ) to show an interactive map. Thanks that the works are linked to [GeoNames](https://www.geonames.org/), the records can be linked to external repositories. This notebook obtains information from [Wikidata](https://www.wikidata.org), showing the benefits of Linked Open Data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Global configuration\n", "\n", "In this section, you can set the author from the BNB by using its identifier. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#bnbIdAuthor = 'http://bnb.data.bl.uk/id/person/DickensCharles1812-1870'\n", "#bnbIdAuthor = 'http://bnb.data.bl.uk/id/person/BlakeWilliam1757-1827'\n", "bnbIdAuthor = 'http://bnb.data.bl.uk/id/person/WoolfVirginia1882-1941'\n", "#bnbIdAuthor = 'http://bnb.data.bl.uk/id/person/ShakespeareWilliam1564-1616'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting up things" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import folium\n", "import requests\n", "import pandas as pd\n", "import json\n", "import csv\n", "import matplotlib.pyplot as plt\n", "from pandas.io.json import json_normalize " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Let's query the repository by asking the publications related to William Shakespeare\n", "We will use the [SPARQL endpoint](https://bnb.data.bl.uk/flint-sparql) to create the query and configure the request to retrieve json as a result." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Elements retrieved!\n", "\n", "{ \"head\": { \"link\": [], \"vars\": [\"resource\", \"title\", \"date\", \"place\"] },\n", " \"results\": { \"distinct\": false, \"ordered\": true, \"bindings\": [\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/013001764\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"The years\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2004-12\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019599487\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Mrs Dalloway\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2020-01\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/017816985\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Mrs Dalloway\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2016-05\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/015711457\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Mrs Dalloway\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2011-04\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6252001/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018460540\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Orlando\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2017-10\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018460544\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"A room of one's own\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2017-10\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018460549\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Mrs Dalloway\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2017-10\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018460551\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"To the lighthouse\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2017-10\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018462175\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"The illustrated letters of Virginia Woolf\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2017-10\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018463437\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Monday or Tuesday\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2017-08\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6252001/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019345275\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"A room of one's own\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-06\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019428998\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Flush\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-08\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019701723\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Jacob's room\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2020-04\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018827821\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Mrs Dalloway\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2018-06\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018827843\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"To the lighthouse\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2018-06\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018832597\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"A room of one's own\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2018-06\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/012936730\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"A room of one's own\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2004-09\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/016530866\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Virginia Woolf : selected novels\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2014-01\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/006890884\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Night and day\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2002-06\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6252001/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/016094837\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Virginia Woolf : selected novels\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2012-09\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018519568\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Between the acts\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2017-07\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018934357\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Virginia Woolf in Richmond\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2018-09\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/018009117\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Selected diaries\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2016-10\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019242375\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"The years\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-04\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019280192\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Between the acts\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-05\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019280193\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Selected short stories\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-05\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019242373\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Mrs Dalloway\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-04\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019635379\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Mrs. Dalloway\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2020-02\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6252001/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019049782\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"A passionate apprentice : the early journals 1897-1909\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2018-11\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019394492\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Night and day\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-07\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6252001/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019201393\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Orlando\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-03\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019201394\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"A room of one's own ; and, Three guineas\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-03\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019529568\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Genius and ink : Virginia Woolf on how to read\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2019-11\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019664287\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Mrs Dalloway\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2020-03\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019664288\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"A room of one's own\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2020-03\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }},\n", " { \"resource\": { \"type\": \"uri\", \"value\": \"http://bnb.data.bl.uk/id/resource/019664289\" }\t, \"title\": { \"type\": \"literal\", \"value\": \"Orlando\" }\t, \"date\": { \"type\": \"literal\", \"value\": \"2020-03\" }\t, \"place\": { \"type\": \"uri\", \"value\": \"http://sws.geonames.org/6269131/\" }} ] } }\n" ] } ], "source": [ "url = 'https://bnb.data.bl.uk/sparql'\n", "query = \"\"\"\n", "PREFIX bibo: \n", "PREFIX bio: \n", "PREFIX blt: \n", "PREFIX dct: \n", "PREFIX event: \n", "PREFIX foaf: \n", "PREFIX geo: \n", "PREFIX isbd: \n", "PREFIX org: \n", "PREFIX owl: \n", "PREFIX rdau: \n", "PREFIX madsrdf: \n", "PREFIX rdf: \n", "PREFIX rdfs: \n", "PREFIX skos: \n", "PREFIX void: \n", "PREFIX xsd: \n", "PREFIX umbel: \n", "PREFIX schema: \n", "PREFIX c4dm: \n", "\n", "SELECT DISTINCT ?resource ?title ?date ?place WHERE {{\n", " graph {{\n", " ?resource ?p <{0}> ;\n", " dct:title ?title ;\n", " schema:datePublished ?date .\n", " OPTIONAL {{\n", " ?resource blt:projectedPublication ?publication .\n", " ?publication c4dm:place ?place .\n", " FILTER regex(?place, \"geonames\", \"i\") \n", " }}\n", " OPTIONAL {{\n", " ?resource blt:publication ?publication .\n", " ?publication c4dm:place ?place .\n", " FILTER regex(?place, \"geonames\", \"i\") \n", " }}\n", " }}\n", "}} LIMIT 500\n", "\"\"\"\n", "\n", "query = query.format(bnbIdAuthor)\n", "\n", "# use json as a result\n", "headers = {'Accept': 'application/sparql-results+json'}\n", "r = requests.get(url, params = {'format': 'application/sparql-results+json', 'query': query}, headers=headers)\n", "print('Elements retrieved!')\n", "print(r.text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Save as a CSV " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "bnbdata = json.loads(r.text)\n", "\n", "with open('bnb_records.csv', 'w', newline='') as file:\n", " csv_out = csv.writer(file, delimiter = ',', quotechar = '\"', quoting = csv.QUOTE_MINIMAL) \n", "\n", " #csv_out = csv.writer(open('bnb_records.csv', 'w'), delimiter = ',', quotechar = '\"', quoting = csv.QUOTE_MINIMAL)\n", " csv_out.writerow(['resource', 'place', 'title', 'date'])\n", "\n", " for i in bnbdata['results']['bindings']:\n", " resource = place = title = date =''\n", "\n", " resource = i['resource']['value']\n", " #if \"place\" in i:\n", " place = i['place']['value']\n", " title = i['title']['value']\n", " date = i['date']['value']\n", "\n", " csv_out.writerow([resource,place,title,date])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the data" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Load the CSV file from GitHub.\n", "# This puts the data in a Pandas DataFrame\n", "df = pd.read_csv('bnb_records.csv')" ] }, { "cell_type": "code", "execution_count": 6, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
resourceplacetitledate
0http://bnb.data.bl.uk/id/resource/013001764http://sws.geonames.org/6269131/The years2004-12
1http://bnb.data.bl.uk/id/resource/019599487http://sws.geonames.org/6269131/Mrs Dalloway2020-01
2http://bnb.data.bl.uk/id/resource/017816985http://sws.geonames.org/6269131/Mrs Dalloway2016-05
3http://bnb.data.bl.uk/id/resource/015711457http://sws.geonames.org/6252001/Mrs Dalloway2011-04
4http://bnb.data.bl.uk/id/resource/018460540http://sws.geonames.org/6269131/Orlando2017-10
5http://bnb.data.bl.uk/id/resource/018460544http://sws.geonames.org/6269131/A room of one's own2017-10
6http://bnb.data.bl.uk/id/resource/018460549http://sws.geonames.org/6269131/Mrs Dalloway2017-10
7http://bnb.data.bl.uk/id/resource/018460551http://sws.geonames.org/6269131/To the lighthouse2017-10
8http://bnb.data.bl.uk/id/resource/018462175http://sws.geonames.org/6269131/The illustrated letters of Virginia Woolf2017-10
9http://bnb.data.bl.uk/id/resource/018463437http://sws.geonames.org/6252001/Monday or Tuesday2017-08
10http://bnb.data.bl.uk/id/resource/019345275http://sws.geonames.org/6269131/A room of one's own2019-06
11http://bnb.data.bl.uk/id/resource/019428998http://sws.geonames.org/6269131/Flush2019-08
12http://bnb.data.bl.uk/id/resource/019701723http://sws.geonames.org/6269131/Jacob's room2020-04
13http://bnb.data.bl.uk/id/resource/018827821http://sws.geonames.org/6269131/Mrs Dalloway2018-06
14http://bnb.data.bl.uk/id/resource/018827843http://sws.geonames.org/6269131/To the lighthouse2018-06
15http://bnb.data.bl.uk/id/resource/018832597http://sws.geonames.org/6269131/A room of one's own2018-06
16http://bnb.data.bl.uk/id/resource/012936730http://sws.geonames.org/6269131/A room of one's own2004-09
17http://bnb.data.bl.uk/id/resource/016530866http://sws.geonames.org/6269131/Virginia Woolf : selected novels2014-01
18http://bnb.data.bl.uk/id/resource/006890884http://sws.geonames.org/6252001/Night and day2002-06
19http://bnb.data.bl.uk/id/resource/016094837http://sws.geonames.org/6269131/Virginia Woolf : selected novels2012-09
20http://bnb.data.bl.uk/id/resource/018519568http://sws.geonames.org/6269131/Between the acts2017-07
21http://bnb.data.bl.uk/id/resource/018934357http://sws.geonames.org/6269131/Virginia Woolf in Richmond2018-09
22http://bnb.data.bl.uk/id/resource/018009117http://sws.geonames.org/6269131/Selected diaries2016-10
23http://bnb.data.bl.uk/id/resource/019242375http://sws.geonames.org/6269131/The years2019-04
24http://bnb.data.bl.uk/id/resource/019280192http://sws.geonames.org/6269131/Between the acts2019-05
25http://bnb.data.bl.uk/id/resource/019280193http://sws.geonames.org/6269131/Selected short stories2019-05
26http://bnb.data.bl.uk/id/resource/019242373http://sws.geonames.org/6269131/Mrs Dalloway2019-04
27http://bnb.data.bl.uk/id/resource/019635379http://sws.geonames.org/6252001/Mrs. Dalloway2020-02
28http://bnb.data.bl.uk/id/resource/019049782http://sws.geonames.org/6269131/A passionate apprentice : the early journals 1...2018-11
29http://bnb.data.bl.uk/id/resource/019394492http://sws.geonames.org/6252001/Night and day2019-07
30http://bnb.data.bl.uk/id/resource/019201393http://sws.geonames.org/6269131/Orlando2019-03
31http://bnb.data.bl.uk/id/resource/019201394http://sws.geonames.org/6269131/A room of one's own ; and, Three guineas2019-03
32http://bnb.data.bl.uk/id/resource/019529568http://sws.geonames.org/6269131/Genius and ink : Virginia Woolf on how to read2019-11
33http://bnb.data.bl.uk/id/resource/019664287http://sws.geonames.org/6269131/Mrs Dalloway2020-03
34http://bnb.data.bl.uk/id/resource/019664288http://sws.geonames.org/6269131/A room of one's own2020-03
35http://bnb.data.bl.uk/id/resource/019664289http://sws.geonames.org/6269131/Orlando2020-03
\n", "
" ], "text/plain": [ " resource \\\n", "0 http://bnb.data.bl.uk/id/resource/013001764 \n", "1 http://bnb.data.bl.uk/id/resource/019599487 \n", "2 http://bnb.data.bl.uk/id/resource/017816985 \n", "3 http://bnb.data.bl.uk/id/resource/015711457 \n", "4 http://bnb.data.bl.uk/id/resource/018460540 \n", "5 http://bnb.data.bl.uk/id/resource/018460544 \n", "6 http://bnb.data.bl.uk/id/resource/018460549 \n", "7 http://bnb.data.bl.uk/id/resource/018460551 \n", "8 http://bnb.data.bl.uk/id/resource/018462175 \n", "9 http://bnb.data.bl.uk/id/resource/018463437 \n", "10 http://bnb.data.bl.uk/id/resource/019345275 \n", "11 http://bnb.data.bl.uk/id/resource/019428998 \n", "12 http://bnb.data.bl.uk/id/resource/019701723 \n", "13 http://bnb.data.bl.uk/id/resource/018827821 \n", "14 http://bnb.data.bl.uk/id/resource/018827843 \n", "15 http://bnb.data.bl.uk/id/resource/018832597 \n", "16 http://bnb.data.bl.uk/id/resource/012936730 \n", "17 http://bnb.data.bl.uk/id/resource/016530866 \n", "18 http://bnb.data.bl.uk/id/resource/006890884 \n", "19 http://bnb.data.bl.uk/id/resource/016094837 \n", "20 http://bnb.data.bl.uk/id/resource/018519568 \n", "21 http://bnb.data.bl.uk/id/resource/018934357 \n", "22 http://bnb.data.bl.uk/id/resource/018009117 \n", "23 http://bnb.data.bl.uk/id/resource/019242375 \n", "24 http://bnb.data.bl.uk/id/resource/019280192 \n", "25 http://bnb.data.bl.uk/id/resource/019280193 \n", "26 http://bnb.data.bl.uk/id/resource/019242373 \n", "27 http://bnb.data.bl.uk/id/resource/019635379 \n", "28 http://bnb.data.bl.uk/id/resource/019049782 \n", "29 http://bnb.data.bl.uk/id/resource/019394492 \n", "30 http://bnb.data.bl.uk/id/resource/019201393 \n", "31 http://bnb.data.bl.uk/id/resource/019201394 \n", "32 http://bnb.data.bl.uk/id/resource/019529568 \n", "33 http://bnb.data.bl.uk/id/resource/019664287 \n", "34 http://bnb.data.bl.uk/id/resource/019664288 \n", "35 http://bnb.data.bl.uk/id/resource/019664289 \n", "\n", " place \\\n", "0 http://sws.geonames.org/6269131/ \n", "1 http://sws.geonames.org/6269131/ \n", "2 http://sws.geonames.org/6269131/ \n", "3 http://sws.geonames.org/6252001/ \n", "4 http://sws.geonames.org/6269131/ \n", "5 http://sws.geonames.org/6269131/ \n", "6 http://sws.geonames.org/6269131/ \n", "7 http://sws.geonames.org/6269131/ \n", "8 http://sws.geonames.org/6269131/ \n", "9 http://sws.geonames.org/6252001/ \n", "10 http://sws.geonames.org/6269131/ \n", "11 http://sws.geonames.org/6269131/ \n", "12 http://sws.geonames.org/6269131/ \n", "13 http://sws.geonames.org/6269131/ \n", "14 http://sws.geonames.org/6269131/ \n", "15 http://sws.geonames.org/6269131/ \n", "16 http://sws.geonames.org/6269131/ \n", "17 http://sws.geonames.org/6269131/ \n", "18 http://sws.geonames.org/6252001/ \n", "19 http://sws.geonames.org/6269131/ \n", "20 http://sws.geonames.org/6269131/ \n", "21 http://sws.geonames.org/6269131/ \n", "22 http://sws.geonames.org/6269131/ \n", "23 http://sws.geonames.org/6269131/ \n", "24 http://sws.geonames.org/6269131/ \n", "25 http://sws.geonames.org/6269131/ \n", "26 http://sws.geonames.org/6269131/ \n", "27 http://sws.geonames.org/6252001/ \n", "28 http://sws.geonames.org/6269131/ \n", "29 http://sws.geonames.org/6252001/ \n", "30 http://sws.geonames.org/6269131/ \n", "31 http://sws.geonames.org/6269131/ \n", "32 http://sws.geonames.org/6269131/ \n", "33 http://sws.geonames.org/6269131/ \n", "34 http://sws.geonames.org/6269131/ \n", "35 http://sws.geonames.org/6269131/ \n", "\n", " title date \n", "0 The years 2004-12 \n", "1 Mrs Dalloway 2020-01 \n", "2 Mrs Dalloway 2016-05 \n", "3 Mrs Dalloway 2011-04 \n", "4 Orlando 2017-10 \n", "5 A room of one's own 2017-10 \n", "6 Mrs Dalloway 2017-10 \n", "7 To the lighthouse 2017-10 \n", "8 The illustrated letters of Virginia Woolf 2017-10 \n", "9 Monday or Tuesday 2017-08 \n", "10 A room of one's own 2019-06 \n", "11 Flush 2019-08 \n", "12 Jacob's room 2020-04 \n", "13 Mrs Dalloway 2018-06 \n", "14 To the lighthouse 2018-06 \n", "15 A room of one's own 2018-06 \n", "16 A room of one's own 2004-09 \n", "17 Virginia Woolf : selected novels 2014-01 \n", "18 Night and day 2002-06 \n", "19 Virginia Woolf : selected novels 2012-09 \n", "20 Between the acts 2017-07 \n", "21 Virginia Woolf in Richmond 2018-09 \n", "22 Selected diaries 2016-10 \n", "23 The years 2019-04 \n", "24 Between the acts 2019-05 \n", "25 Selected short stories 2019-05 \n", "26 Mrs Dalloway 2019-04 \n", "27 Mrs. Dalloway 2020-02 \n", "28 A passionate apprentice : the early journals 1... 2018-11 \n", "29 Night and day 2019-07 \n", "30 Orlando 2019-03 \n", "31 A room of one's own ; and, Three guineas 2019-03 \n", "32 Genius and ink : Virginia Woolf on how to read 2019-11 \n", "33 Mrs Dalloway 2020-03 \n", "34 A room of one's own 2020-03 \n", "35 Orlando 2020-03 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How many items?" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "36" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# How many items?\n", "len(df)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's count the number of resources per place" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "places_by_number = df.groupby(\"place\")[\"resource\"].count()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "place\n", "http://sws.geonames.org/6252001/ 5\n", "http://sws.geonames.org/6269131/ 31\n", "Name: resource, dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "places_by_number" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "### We can access the count of each place" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "31" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "places_by_number[['http://sws.geonames.org/6269131/']][0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create a chart to visualize the results\n", "This chart shows the number of resources by date." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = df['date'].value_counts().plot(kind='bar',\n", " figsize=(14,8),\n", " title=\"Number of resources per date\")\n", "ax.set_xlabel(\"Dates\")\n", "ax.set_ylabel(\"Resources\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's group the items by year" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# First we create a new column in pandas with the year\n", "df['year'] = pd.DatetimeIndex(df['date']).year" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 2004\n", "1 2020\n", "2 2016\n", "3 2011\n", "4 2017\n", "5 2017\n", "6 2017\n", "7 2017\n", "8 2017\n", "9 2017\n", "10 2019\n", "11 2019\n", "12 2020\n", "13 2018\n", "14 2018\n", "15 2018\n", "16 2004\n", "17 2014\n", "18 2002\n", "19 2012\n", "20 2017\n", "21 2018\n", "22 2016\n", "23 2019\n", "24 2019\n", "25 2019\n", "26 2019\n", "27 2020\n", "28 2018\n", "29 2019\n", "30 2019\n", "31 2019\n", "32 2019\n", "33 2020\n", "34 2020\n", "35 2020\n", "Name: year, dtype: int64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['year']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating the chart by year" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = df['year'].value_counts().plot(kind='bar',\n", " figsize=(14,8),\n", " title=\"Number of resources per year\")\n", "ax.set_xlabel(\"Dates\")\n", "ax.set_ylabel(\"Resources\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the places" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://sws.geonames.org/6252001/\n", "http://sws.geonames.org/6269131/\n" ] } ], "source": [ "# Get unique values\n", "places = pd.unique(df['place']).tolist()\n", "strplaces = ''\n", "for a in sorted(places):\n", " print(a)\n", " strplaces = strplaces + ' \\\"' + a.replace(\"http://sws.geonames.org/\", \"\").replace(\"/\", \"\") + '\\\"'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Getting latitude and longitude from Wikidata" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "PREFIX bibo: \n", "SELECT ?idgeonames ?lat ?lon ?x ?xLabel \n", "WHERE { \n", " values ?idgeonames { \"6252001\" \"6269131\" } \n", " ?x wdt:P1566 ?idgeonames ; \n", " p:P625 [\n", " psv:P625 [\n", " wikibase:geoLatitude ?lat ;\n", " wikibase:geoLongitude ?lon ;\n", " wikibase:geoGlobe ?globe ;\n", " ];\n", " ps:P625 ?coord\n", " ]\n", " SERVICE wikibase:label { bd:serviceParam wikibase:language \"[AUTO_LANGUAGE],en\". }\n", "}\n", "\n" ] } ], "source": [ "url = 'https://query.wikidata.org/sparql'\n", "query = \"\"\"\n", "PREFIX bibo: \n", "SELECT ?idgeonames ?lat ?lon ?x ?xLabel \n", "WHERE {{ \n", " values ?idgeonames {{ {0} }} \n", " ?x wdt:P1566 ?idgeonames ; \n", " p:P625 [\n", " psv:P625 [\n", " wikibase:geoLatitude ?lat ;\n", " wikibase:geoLongitude ?lon ;\n", " wikibase:geoGlobe ?globe ;\n", " ];\n", " ps:P625 ?coord\n", " ]\n", " SERVICE wikibase:label {{ bd:serviceParam wikibase:language \"[AUTO_LANGUAGE],en\". }}\n", "}}\n", "\"\"\"\n", "\n", "query = query.format(strplaces)\n", "print(query)\n", "\n", "# use json as a result\n", "r = requests.get(url, params = {'format': 'json', 'query': query})\n", "geopoints = r.json()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finally, we add the markers to the map" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "38.895 -77.036666666667\n", "53.0 -1.0\n" ] } ], "source": [ "map = folium.Map(location=[0,0], zoom_start=1.5)\n", "\n", "for geo in geopoints['results']['bindings']:\n", " idwikidata = geo['x']['value']\n", " lat = geo['lat']['value']\n", " lon = geo['lon']['value']\n", " idgeonames = geo['idgeonames']['value']\n", " label = geo['xLabel']['value']\n", " print(lat, lon)\n", " \n", " # adding a text to the popup\n", " count = places_by_number[['http://sws.geonames.org/' + idgeonames + '/']][0]\n", " popup = str(count) + \" records published in \" + label + \"\"\n", " \n", " folium.Marker([lat,lon], popup= popup).add_to(map)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "map" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.6.9" } }, "nbformat": 4, "nbformat_minor": 2 }