{"cells":[{"metadata":{},"cell_type":"markdown","source":"
\n
\n

BNB Linked Data Platform

\n
\n
"},{"metadata":{"colab_type":"text","id":"view-in-github"},"cell_type":"markdown","source":"\"Open"},{"metadata":{"colab_type":"text","id":"TU0Elp2wIoK_"},"cell_type":"markdown","source":"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\nThis 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."},{"metadata":{"colab_type":"text","id":"_SHPlxTyIq-n"},"cell_type":"markdown","source":"
\n\n### Copied / Forked from:\n\nhttps://github.com/hibernator11/notebook-lod-libraries \n\nhttps://github.com/hibernator11/notebook-lod-libraries/blob/master/bnb-lod-extraction-map.ipynb\n\nAuthor: Gustavo Candela (https://github.com/hibernator11), Research and Development department at The Biblioteca Virtual Miguel de Cervantes, University of Alicante, Spain\n\n \n#### :: Adapted to run on Google Colab ::\n
"},{"metadata":{"colab_type":"text","id":"rkWxy-LgIoLB"},"cell_type":"markdown","source":"
\n\n## Global configuration\n\nIn this section, you can set the author from the BNB by using its identifier. \n\n
"},{"metadata":{"colab":{},"colab_type":"code","id":"jbYUkXcXIoLC","trusted":false},"cell_type":"code","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'\nbnbIdAuthor = 'http://bnb.data.bl.uk/id/person/ShakespeareWilliam1564-1616'","execution_count":0,"outputs":[]},{"metadata":{"colab_type":"text","id":"qt0a7zDeIoLH"},"cell_type":"markdown","source":"## Setting up things"},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":343},"colab_type":"code","id":"aNua3QshJK_Y","outputId":"607d6902-bfcf-42b2-c55c-1684df4b1c91","trusted":false},"cell_type":"code","source":"# This is needed for Google Colab, first run\n!pip install --upgrade folium","execution_count":2,"outputs":[{"name":"stdout","output_type":"stream","text":"Collecting folium\n\u001b[?25l Downloading https://files.pythonhosted.org/packages/a4/f0/44e69d50519880287cc41e7c8a6acc58daa9a9acf5f6afc52bcc70f69a6d/folium-0.11.0-py2.py3-none-any.whl (93kB)\n\r\u001b[K |███▌ | 10kB 16.7MB/s eta 0:00:01\r\u001b[K |███████ | 20kB 1.7MB/s eta 0:00:01\r\u001b[K |██████████▌ | 30kB 2.3MB/s eta 0:00:01\r\u001b[K |██████████████ | 40kB 2.5MB/s eta 0:00:01\r\u001b[K |█████████████████▌ | 51kB 2.0MB/s eta 0:00:01\r\u001b[K |█████████████████████ | 61kB 2.3MB/s eta 0:00:01\r\u001b[K |████████████████████████▌ | 71kB 2.5MB/s eta 0:00:01\r\u001b[K |████████████████████████████ | 81kB 2.7MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▌| 92kB 2.9MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 102kB 2.6MB/s \n\u001b[?25hRequirement already satisfied, skipping upgrade: branca>=0.3.0 in /usr/local/lib/python3.6/dist-packages (from folium) (0.4.1)\nRequirement already satisfied, skipping upgrade: requests in /usr/local/lib/python3.6/dist-packages (from folium) (2.23.0)\nRequirement already satisfied, skipping upgrade: jinja2>=2.9 in /usr/local/lib/python3.6/dist-packages (from folium) (2.11.2)\nRequirement already satisfied, skipping upgrade: numpy in /usr/local/lib/python3.6/dist-packages (from folium) (1.18.4)\nRequirement already satisfied, skipping upgrade: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->folium) (1.24.3)\nRequirement already satisfied, skipping upgrade: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->folium) (3.0.4)\nRequirement already satisfied, skipping upgrade: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->folium) (2.9)\nRequirement already satisfied, skipping upgrade: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->folium) (2020.4.5.1)\nRequirement already satisfied, skipping upgrade: MarkupSafe>=0.23 in /usr/local/lib/python3.6/dist-packages (from jinja2>=2.9->folium) (1.1.1)\n\u001b[31mERROR: datascience 0.10.6 has requirement folium==0.2.1, but you'll have folium 0.11.0 which is incompatible.\u001b[0m\nInstalling collected packages: folium\n Found existing installation: folium 0.8.3\n Uninstalling folium-0.8.3:\n Successfully uninstalled folium-0.8.3\nSuccessfully installed folium-0.11.0\n"}]},{"metadata":{"colab":{},"colab_type":"code","id":"grVj5kG8IoLH","trusted":false},"cell_type":"code","source":"import folium\nimport requests\nimport pandas as pd\nimport json\nimport csv\nimport matplotlib.pyplot as plt\nfrom pandas.io.json import json_normalize ","execution_count":0,"outputs":[]},{"metadata":{"colab_type":"text","id":"OGC6e5K8IoLL"},"cell_type":"markdown","source":"## Let's query the repository by asking the publications related to William Shakespeare\nWe 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."},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":34},"colab_type":"code","id":"orhVTXt0IoLL","outputId":"c8eed932-70ed-4a0f-f13e-929738b5a645","trusted":false},"cell_type":"code","source":"url = 'https://bnb.data.bl.uk/sparql'\nquery = \"\"\"\nPREFIX bibo: \nPREFIX bio: \nPREFIX blt: \nPREFIX dct: \nPREFIX event: \nPREFIX foaf: \nPREFIX geo: \nPREFIX isbd: \nPREFIX org: \nPREFIX owl: \nPREFIX rdau: \nPREFIX madsrdf: \nPREFIX rdf: \nPREFIX rdfs: \nPREFIX skos: \nPREFIX void: \nPREFIX xsd: \nPREFIX umbel: \nPREFIX schema: \nPREFIX c4dm: \n\nSELECT 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\nquery = query.format(bnbIdAuthor)\n\n# use json as a result\nheaders = {'Accept': 'application/sparql-results+json'}\nr = requests.get(url, params = {'format': 'application/sparql-results+json', 'query': query}, headers=headers)\nprint('Elements retrieved!')\n#print(r.text)","execution_count":4,"outputs":[{"name":"stdout","output_type":"stream","text":"Elements retrieved!\n"}]},{"metadata":{"colab_type":"text","id":"IPV7YE5QIoLS"},"cell_type":"markdown","source":"## Save as a CSV "},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":51},"colab_type":"code","id":"0G0_FjkEIoLT","outputId":"ef049495-254b-4d88-9d3b-5deb72954bec","trusted":false},"cell_type":"code","source":"bnbdata = json.loads(r.text)\n\n# we need to delete bnb_records.csv case it exists from previous runs \n# if it doesn't exist yet, it will give an error \"rm: cannot remove 'bnb_records.csv': No such file or directory\", that's just fine! :)\n!rm bnb_records.csv\n\nwith 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])\n\nprint('Open the generated CSV to see all its contents -- Google Colab: under \"Files\" > click \"bnb_records.csv\" -- we will also explore it bellow.')","execution_count":5,"outputs":[{"name":"stdout","output_type":"stream","text":"rm: cannot remove 'bnb_records.csv': No such file or directory\nOpen the generated CSV to see all its contents -- Google Colab: under \"Files\" > click \"bnb_records.csv\" -- we will also explore it bellow.\n"}]},{"metadata":{"colab_type":"text","id":"og1n6iQxIoLX"},"cell_type":"markdown","source":"## Exploring the data"},{"metadata":{"colab":{},"colab_type":"code","id":"Ih2izFbnIoLY","trusted":false},"cell_type":"code","source":"# Load the CSV file from GitHub.\n# This puts the data in a Pandas DataFrame\ndf = pd.read_csv('bnb_records.csv')","execution_count":0,"outputs":[]},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":419},"colab_type":"code","id":"fenQ2OBoIoLc","outputId":"feefc05e-b73f-4a5b-e6fc-6b4f52331af4","trusted":false},"cell_type":"code","source":"df","execution_count":7,"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
resourceplacetitledate
0http://bnb.data.bl.uk/id/resource/013310275http://sws.geonames.org/6269131/Macbeth : teachit KS3 interactive pack2006-01
1http://bnb.data.bl.uk/id/resource/013310276http://sws.geonames.org/6269131/Much ado about nothing : teachit KS3 interacti...2006-01
2http://bnb.data.bl.uk/id/resource/013315368http://sws.geonames.org/6269131/Hamlet2006-01
3http://bnb.data.bl.uk/id/resource/019599478http://sws.geonames.org/6269131/Twelfth night2020-01
4http://bnb.data.bl.uk/id/resource/019599479http://sws.geonames.org/6269131/The tempest : the alexander text2019-11
...............
122http://bnb.data.bl.uk/id/resource/019702130http://sws.geonames.org/6269131/The tragedies2020-01
123http://bnb.data.bl.uk/id/resource/019702131http://sws.geonames.org/6269131/The tragicomedies2020-01
124http://bnb.data.bl.uk/id/resource/019755998http://sws.geonames.org/6269131/A midsummer night's dream2020-06
125http://bnb.data.bl.uk/id/resource/019736523http://sws.geonames.org/6252001/William Shakespeare comedies2020-05
126http://bnb.data.bl.uk/id/resource/019736524http://sws.geonames.org/6252001/William Shakespeare tragedies2020-05
\n

127 rows × 4 columns

\n
","text/plain":" resource ... date\n0 http://bnb.data.bl.uk/id/resource/013310275 ... 2006-01\n1 http://bnb.data.bl.uk/id/resource/013310276 ... 2006-01\n2 http://bnb.data.bl.uk/id/resource/013315368 ... 2006-01\n3 http://bnb.data.bl.uk/id/resource/019599478 ... 2020-01\n4 http://bnb.data.bl.uk/id/resource/019599479 ... 2019-11\n.. ... ... ...\n122 http://bnb.data.bl.uk/id/resource/019702130 ... 2020-01\n123 http://bnb.data.bl.uk/id/resource/019702131 ... 2020-01\n124 http://bnb.data.bl.uk/id/resource/019755998 ... 2020-06\n125 http://bnb.data.bl.uk/id/resource/019736523 ... 2020-05\n126 http://bnb.data.bl.uk/id/resource/019736524 ... 2020-05\n\n[127 rows x 4 columns]"},"execution_count":7,"metadata":{"tags":[]},"output_type":"execute_result"}]},{"metadata":{"colab_type":"text","id":"DMgoGtlyIoLj"},"cell_type":"markdown","source":"## How many items?"},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":34},"colab_type":"code","id":"bDsScd1gIoLk","outputId":"300b431e-4663-41e8-a38b-c8a310a2c6e8","trusted":false},"cell_type":"code","source":"# How many items?\nlen(df)","execution_count":8,"outputs":[{"data":{"text/plain":"127"},"execution_count":8,"metadata":{"tags":[]},"output_type":"execute_result"}]},{"metadata":{"colab_type":"text","id":"DXFWETl7IoLn"},"cell_type":"markdown","source":"### Let's count the number of resources per place"},{"metadata":{"colab":{},"colab_type":"code","id":"PjY-cqnqIoLo","trusted":false},"cell_type":"code","source":"places_by_number = df.groupby(\"place\")[\"resource\"].count()","execution_count":0,"outputs":[]},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":136},"colab_type":"code","id":"pDX6b-hjIoLs","outputId":"9fafb980-f6e6-4c90-f878-3209fcb74e69","trusted":false},"cell_type":"code","source":"places_by_number","execution_count":10,"outputs":[{"data":{"text/plain":"place\nhttp://sws.geonames.org/1269750/ 2\nhttp://sws.geonames.org/2921044/ 9\nhttp://sws.geonames.org/6251999/ 2\nhttp://sws.geonames.org/6252001/ 30\nhttp://sws.geonames.org/6269131/ 84\nName: resource, dtype: int64"},"execution_count":10,"metadata":{"tags":[]},"output_type":"execute_result"}]},{"metadata":{"colab":{},"colab_type":"code","id":"qFByrGWpIoLz","trusted":false},"cell_type":"code","source":"### We can access the count of each place","execution_count":0,"outputs":[]},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":34},"colab_type":"code","id":"ALytexj6IoL3","outputId":"310a5b53-aa01-4150-f8b3-19715daa5aa4","trusted":false},"cell_type":"code","source":"places_by_number[['http://sws.geonames.org/6269131/']][0]","execution_count":12,"outputs":[{"data":{"text/plain":"84"},"execution_count":12,"metadata":{"tags":[]},"output_type":"execute_result"}]},{"metadata":{"colab_type":"text","id":"5ty7tAEtIoL9"},"cell_type":"markdown","source":"### Create a chart to visualize the results\nThis chart shows the number of resources by date."},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":545},"colab_type":"code","id":"8MOITWYAIoL_","outputId":"1be68000-7e24-41f9-fd8c-18ee0c4b1ba6","trusted":false},"cell_type":"code","source":"ax = df['date'].value_counts().plot(kind='bar',\n figsize=(14,8),\n title=\"Number of resources per date\")\nax.set_xlabel(\"Dates\")\nax.set_ylabel(\"Resources\")\nplt.show()","execution_count":13,"outputs":[{"data":{"image/png":"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\n","text/plain":"
"},"metadata":{"needs_background":"light","tags":[]},"output_type":"display_data"}]},{"metadata":{"colab_type":"text","id":"bzuMZwCSIoMH"},"cell_type":"markdown","source":"### Let's group the items by year"},{"metadata":{"colab":{},"colab_type":"code","id":"D56P3lFPIoMJ","trusted":false},"cell_type":"code","source":"# First we create a new column in pandas with the year\ndf['year'] = pd.DatetimeIndex(df['date']).year","execution_count":0,"outputs":[]},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":221},"colab_type":"code","id":"Df-0fPFPIoMR","outputId":"c48faf14-9039-4d2b-9e6e-4d78edf88c51","trusted":false},"cell_type":"code","source":"df['year']","execution_count":15,"outputs":[{"data":{"text/plain":"0 2006\n1 2006\n2 2006\n3 2020\n4 2019\n ... \n122 2020\n123 2020\n124 2020\n125 2020\n126 2020\nName: year, Length: 127, dtype: int64"},"execution_count":15,"metadata":{"tags":[]},"output_type":"execute_result"}]},{"metadata":{"colab_type":"text","id":"kWtHX4lZIoMc"},"cell_type":"markdown","source":"### Creating the chart by year"},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":391},"colab_type":"code","id":"xgowNiOHJruE","outputId":"d56b0f02-f369-48b8-be5c-af443c8faf8d","trusted":false},"cell_type":"code","source":"df['year'].value_counts()","execution_count":16,"outputs":[{"data":{"text/plain":"2018 34\n2017 26\n2019 19\n2020 11\n2009 7\n2016 5\n2006 4\n2012 3\n2011 3\n2014 2\n2002 2\n2007 2\n2003 1\n2000 1\n2001 1\n2010 1\n2004 1\n2008 1\n2013 1\n2015 1\n1999 1\nName: year, dtype: int64"},"execution_count":16,"metadata":{"tags":[]},"output_type":"execute_result"}]},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":528},"colab_type":"code","id":"uF6xz6iFIoMd","outputId":"155b228d-b017-4159-f3e0-0137395c95cb","trusted":false},"cell_type":"code","source":"ax = df['year'].value_counts().plot(kind='bar',\n figsize=(14,8),\n title=\"Number of resources per year\")\nax.set_xlabel(\"Dates\")\nax.set_ylabel(\"Resources\")\nplt.show()","execution_count":17,"outputs":[{"data":{"image/png":"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\n","text/plain":"
"},"metadata":{"needs_background":"light","tags":[]},"output_type":"display_data"}]},{"metadata":{"colab_type":"text","id":"PX9HQzNPIoMn"},"cell_type":"markdown","source":"## Exploring the places"},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":102},"colab_type":"code","id":"UHURmHF6IoMn","outputId":"d1ef6527-c806-4589-f0b4-8d1934b18b4d","trusted":false},"cell_type":"code","source":"# Get unique values\nplaces = pd.unique(df['place']).tolist()\nstrplaces = ''\nfor a in sorted(places):\n print(a)\n strplaces = strplaces + ' \\\"' + a.replace(\"http://sws.geonames.org/\", \"\").replace(\"/\", \"\") + '\\\"'","execution_count":18,"outputs":[{"name":"stdout","output_type":"stream","text":"http://sws.geonames.org/1269750/\nhttp://sws.geonames.org/2921044/\nhttp://sws.geonames.org/6251999/\nhttp://sws.geonames.org/6252001/\nhttp://sws.geonames.org/6269131/\n"}]},{"metadata":{"colab_type":"text","id":"2Pj4P6R8IoMq"},"cell_type":"markdown","source":"### Getting latitude and longitude from Wikidata"},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":306},"colab_type":"code","id":"kbjrP8CwIoMr","outputId":"0b907eb1-8dba-4162-8817-14a320f7d76c","trusted":false},"cell_type":"code","source":"url = 'https://query.wikidata.org/sparql'\nquery = \"\"\"\nPREFIX bibo: \nSELECT ?idgeonames ?lat ?lon ?x ?xLabel \nWHERE {{ \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\nquery = query.format(strplaces)\nprint(query)\n\n# use json as a result\nr = requests.get(url, params = {'format': 'json', 'query': query})\ngeopoints = r.json()","execution_count":19,"outputs":[{"name":"stdout","output_type":"stream","text":"\nPREFIX bibo: \nSELECT ?idgeonames ?lat ?lon ?x ?xLabel \nWHERE { \n values ?idgeonames { \"1269750\" \"2921044\" \"6251999\" \"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"}]},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":850},"colab_type":"code","id":"wocNjHGDJwF5","outputId":"85faf55f-0045-4734-83b3-f432f4979915","trusted":false},"cell_type":"code","source":"geopoints","execution_count":20,"outputs":[{"data":{"text/plain":"{'head': {'vars': ['idgeonames', 'lat', 'lon', 'x', 'xLabel']},\n 'results': {'bindings': [{'idgeonames': {'type': 'literal',\n 'value': '2921044'},\n 'lat': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '51.0'},\n 'lon': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '10.0'},\n 'x': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q183'},\n 'xLabel': {'type': 'literal', 'value': 'Germany', 'xml:lang': 'en'}},\n {'idgeonames': {'type': 'literal', 'value': '1269750'},\n 'lat': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '22.8'},\n 'lon': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '83.0'},\n 'x': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q668'},\n 'xLabel': {'type': 'literal', 'value': 'India', 'xml:lang': 'en'}},\n {'idgeonames': {'type': 'literal', 'value': '6269131'},\n 'lat': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '53.0'},\n 'lon': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '-1.0'},\n 'x': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q21'},\n 'xLabel': {'type': 'literal', 'value': 'England', 'xml:lang': 'en'}},\n {'idgeonames': {'type': 'literal', 'value': '6251999'},\n 'lat': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '56.0'},\n 'lon': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '-109.0'},\n 'x': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q16'},\n 'xLabel': {'type': 'literal', 'value': 'Canada', 'xml:lang': 'en'}},\n {'idgeonames': {'type': 'literal', 'value': '6252001'},\n 'lat': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '39.828175'},\n 'lon': {'datatype': 'http://www.w3.org/2001/XMLSchema#double',\n 'type': 'literal',\n 'value': '-98.5795'},\n 'x': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q30'},\n 'xLabel': {'type': 'literal',\n 'value': 'United States of America',\n 'xml:lang': 'en'}}]}}"},"execution_count":20,"metadata":{"tags":[]},"output_type":"execute_result"}]},{"metadata":{"colab_type":"text","id":"x6Ff0INhIoMu"},"cell_type":"markdown","source":"### Finally, we add the markers to the map"},{"metadata":{"colab":{},"colab_type":"code","id":"jstA9gVvIoMv","trusted":false},"cell_type":"code","source":"map = folium.Map(location=[0,0], zoom_start=1.5)\n\nfor 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\n # Records that have that Country of Publication -- Obtain the Titles bellow, for the Map popup\n df_local = df[df['place']=='http://sws.geonames.org/' + idgeonames + '/']\n\n popuptext = str(count) + \" records published in \" + label + \"

Title(s):

* \" + '
* '.join(df_local['title'].values)\n popup = folium.Popup(popuptext, max_width=800,min_width=200)\n folium.Marker([lat,lon], popup= popup).add_to(map)","execution_count":0,"outputs":[]},{"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":763},"colab_type":"code","id":"bE4I7vHSIoM1","outputId":"526bee12-0f86-4192-b368-d8a0cbe7931b","trusted":false},"cell_type":"code","source":"map","execution_count":30,"outputs":[{"data":{"text/html":"

Make this Notebook Trusted to load map: File -> Trust Notebook
","text/plain":""},"execution_count":30,"metadata":{"tags":[]},"output_type":"execute_result"}]}],"metadata":{"colab":{"include_colab_link":true,"name":"Copy of bnb-lod-extraction-map.ipynb","provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.7.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}