Skip to content

Instantly share code, notes, and snippets.

@psychemedia
Last active October 30, 2019 11:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save psychemedia/7ce6c59199f4d7cbfd7aee0451cf074a to your computer and use it in GitHub Desktop.
Save psychemedia/7ce6c59199f4d7cbfd7aee0451cf074a to your computer and use it in GitHub Desktop.
Example of finding relationships between band genres using SPARQL queries over DBPedia Linked Data
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from linkeddataquery import *"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"#Declare the DBPedia endpoint\n",
"endpoint=\"http://dbpedia.org/sparql\"\n",
"sparql = SPARQLWrapper(endpoint)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"# Define any prefixes\n",
"prefix = '''\n",
" PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
" PREFIX dbpedia: <http://dbpedia.org/resource/>\n",
" PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n",
" PREFIX dct: <http://purl.org/dc/terms/>\n",
" PREFIX skos: <http://www.w3.org/2004/02/skos/core#>\n",
" PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n",
" PREFIX dbr: <http://dbpedia.org/resource/>\n",
" PREFIX dbo: <http://dbpedia.org/ontology/>\n",
" PREFIX dbc: <http://dbpedia.org/resource/Category:>\n",
" PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>\n",
" \n",
" PREFIX ouseful:<http://ouseful.info/>\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"q='''\n",
"prefix gephi:<http://gephi.org/>\n",
"prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>\n",
"PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n",
"\n",
"CONSTRUCT{\n",
" ?genreA gephi:label ?genreAname .\n",
" ?genreB gephi:label ?genreBname .\n",
" ?genreA gephi:related ?genreB .\n",
" ?genreB gephi:related ?genreA .\n",
" ?band foaf:name ?bandname .\n",
"} WHERE {\n",
"?band a <http://schema.org/MusicGroup>.\n",
"?band rdfs:label ?bandname .\n",
"?band foaf:name \"Black Sabbath\"@en .\n",
"?band <http://dbpedia.org/ontology/background> \"group_or_band\".\n",
"?band <http://dbpedia.org/ontology/genre> ?genreA.\n",
"?band <http://dbpedia.org/ontology/genre> ?genreB.\n",
"?genreA rdfs:label ?genreAname.\n",
"?genreB rdfs:label ?genreBname.\n",
"} limit 10 offset 0\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>s</th>\n",
" <th>p</th>\n",
" <th>o</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>http://dbpedia.org/resource/Heavy_metal_music</td>\n",
" <td>http://gephi.org/label</td>\n",
" <td>Heavy metal music</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>ブラック・サバス</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>http://dbpedia.org/resource/Heavy_metal_music</td>\n",
" <td>http://gephi.org/related</td>\n",
" <td>http://dbpedia.org/resource/Heavy_metal_music</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>Black Sabbath</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>Black Sabbath</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>Black Sabbath</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>Black Sabbath</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>Black Sabbath</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>Black Sabbath</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>http://dbpedia.org/resource/Heavy_metal_music</td>\n",
" <td>http://gephi.org/label</td>\n",
" <td>Heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>Black Sabbath</td>\n",
" </tr>\n",
" <tr>\n",
" <td>11</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>Black Sabbath</td>\n",
" </tr>\n",
" <tr>\n",
" <td>12</td>\n",
" <td>http://dbpedia.org/resource/Black_Sabbath</td>\n",
" <td>http://xmlns.com/foaf/0.1/name</td>\n",
" <td>بلاك سابث</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" s \\\n",
"0 http://dbpedia.org/resource/Heavy_metal_music \n",
"1 http://dbpedia.org/resource/Black_Sabbath \n",
"2 http://dbpedia.org/resource/Heavy_metal_music \n",
"3 http://dbpedia.org/resource/Black_Sabbath \n",
"4 http://dbpedia.org/resource/Black_Sabbath \n",
"5 http://dbpedia.org/resource/Black_Sabbath \n",
"6 http://dbpedia.org/resource/Black_Sabbath \n",
"7 http://dbpedia.org/resource/Black_Sabbath \n",
"8 http://dbpedia.org/resource/Black_Sabbath \n",
"9 http://dbpedia.org/resource/Heavy_metal_music \n",
"10 http://dbpedia.org/resource/Black_Sabbath \n",
"11 http://dbpedia.org/resource/Black_Sabbath \n",
"12 http://dbpedia.org/resource/Black_Sabbath \n",
"\n",
" p \\\n",
"0 http://gephi.org/label \n",
"1 http://xmlns.com/foaf/0.1/name \n",
"2 http://gephi.org/related \n",
"3 http://xmlns.com/foaf/0.1/name \n",
"4 http://xmlns.com/foaf/0.1/name \n",
"5 http://xmlns.com/foaf/0.1/name \n",
"6 http://xmlns.com/foaf/0.1/name \n",
"7 http://xmlns.com/foaf/0.1/name \n",
"8 http://xmlns.com/foaf/0.1/name \n",
"9 http://gephi.org/label \n",
"10 http://xmlns.com/foaf/0.1/name \n",
"11 http://xmlns.com/foaf/0.1/name \n",
"12 http://xmlns.com/foaf/0.1/name \n",
"\n",
" o \n",
"0 Heavy metal music \n",
"1 ブラック・サバス \n",
"2 http://dbpedia.org/resource/Heavy_metal_music \n",
"3 Black Sabbath \n",
"4 Black Sabbath \n",
"5 Black Sabbath \n",
"6 Black Sabbath \n",
"7 Black Sabbath \n",
"8 Black Sabbath \n",
"9 Heavy metal \n",
"10 Black Sabbath \n",
"11 Black Sabbath \n",
"12 بلاك سابث "
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = dfResults(endpoint, prefix, q)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>s</th>\n",
" <th>p</th>\n",
" <th>o</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>http://dbpedia.org/resource/Willard_Van_Orman_...</td>\n",
" <td>http://ouseful.info/label</td>\n",
" <td>Willard Van Orman Quine</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>http://dbpedia.org/resource/Alfred_North_White...</td>\n",
" <td>http://ouseful.info/label</td>\n",
" <td>Alfred North Whitehead</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>http://dbpedia.org/resource/Willard_Van_Orman_...</td>\n",
" <td>http://dbpedia.org/ontology/influencedBy</td>\n",
" <td>http://dbpedia.org/resource/Alfred_North_White...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" s \\\n",
"0 http://dbpedia.org/resource/Willard_Van_Orman_... \n",
"1 http://dbpedia.org/resource/Alfred_North_White... \n",
"2 http://dbpedia.org/resource/Willard_Van_Orman_... \n",
"\n",
" p \\\n",
"0 http://ouseful.info/label \n",
"1 http://ouseful.info/label \n",
"2 http://dbpedia.org/ontology/influencedBy \n",
"\n",
" o \n",
"0 Willard Van Orman Quine \n",
"1 Alfred North Whitehead \n",
"2 http://dbpedia.org/resource/Alfred_North_White... "
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q='''\n",
"\n",
"CONSTRUCT{\n",
" ?philosopher ouseful:label ?philosopherName .\n",
" ?influence ouseful:label ?influenceName .\n",
" ?philosopher <http://dbpedia.org/ontology/influencedBy> ?influence\n",
"} WHERE {\n",
" ?philosopher a\n",
" <http://dbpedia.org/ontology/Philosopher> .\n",
" ?philosopher <http://dbpedia.org/ontology/influencedBy> ?influence.\n",
" ?philosopher foaf:name ?philosopherName.\n",
" ?influence foaf:name ?influenceName.\n",
"} LIMIT 1\n",
"'''\n",
"\n",
"dfResults(endpoint, prefix, q)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [],
"source": [
"q='''\n",
"\n",
"CONSTRUCT{\n",
" ?genreA ouseful:label ?genreAname .\n",
" ?genreB ouseful:label ?genreBname .\n",
" ?genreA ouseful:related ?genreB .\n",
" ?genreB ouseful:related ?genreA .\n",
"} WHERE {\n",
"\n",
"?band a <http://schema.org/MusicGroup>.\n",
"?band <http://dbpedia.org/ontology/background> \"group_or_band\".\n",
"?band <http://dbpedia.org/ontology/genre> ?genreA.\n",
"?band <http://dbpedia.org/ontology/genre> ?genreB.\n",
"?genreA rdfs:label ?genreAname.\n",
"?genreB rdfs:label ?genreBname.\n",
"FILTER(?genreA != ?genreB && langMatches(lang(?genreAname), \"en\") && langMatches(lang(?genreBname), \"en\"))\n",
"} limit 100 offset 0\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>s</th>\n",
" <th>p</th>\n",
" <th>o</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>http://dbpedia.org/resource/Folk_rock</td>\n",
" <td>http://ouseful.info/related</td>\n",
" <td>http://dbpedia.org/resource/Psychedelic_pop</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>http://dbpedia.org/resource/Pop_music</td>\n",
" <td>http://ouseful.info/label</td>\n",
" <td>Pop music</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>http://dbpedia.org/resource/British_rhythm_and...</td>\n",
" <td>http://ouseful.info/related</td>\n",
" <td>http://dbpedia.org/resource/Blues_rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>http://dbpedia.org/resource/Progressive_rock</td>\n",
" <td>http://ouseful.info/related</td>\n",
" <td>http://dbpedia.org/resource/Progressive_death_...</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>http://dbpedia.org/resource/Experimental_rock</td>\n",
" <td>http://ouseful.info/related</td>\n",
" <td>http://dbpedia.org/resource/Art_rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <td>184</td>\n",
" <td>http://dbpedia.org/resource/Hard_rock</td>\n",
" <td>http://ouseful.info/related</td>\n",
" <td>http://dbpedia.org/resource/Progressive_rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>185</td>\n",
" <td>http://dbpedia.org/resource/Polka</td>\n",
" <td>http://ouseful.info/related</td>\n",
" <td>http://dbpedia.org/resource/Latin_Alternative</td>\n",
" </tr>\n",
" <tr>\n",
" <td>186</td>\n",
" <td>http://dbpedia.org/resource/Pop_rock</td>\n",
" <td>http://ouseful.info/related</td>\n",
" <td>http://dbpedia.org/resource/Progressive_rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>187</td>\n",
" <td>http://dbpedia.org/resource/Avant-garde_music</td>\n",
" <td>http://ouseful.info/label</td>\n",
" <td>Avant-garde music</td>\n",
" </tr>\n",
" <tr>\n",
" <td>188</td>\n",
" <td>http://dbpedia.org/resource/Pop_rock</td>\n",
" <td>http://ouseful.info/related</td>\n",
" <td>http://dbpedia.org/resource/Art_rock</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>189 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" s \\\n",
"0 http://dbpedia.org/resource/Folk_rock \n",
"1 http://dbpedia.org/resource/Pop_music \n",
"2 http://dbpedia.org/resource/British_rhythm_and... \n",
"3 http://dbpedia.org/resource/Progressive_rock \n",
"4 http://dbpedia.org/resource/Experimental_rock \n",
".. ... \n",
"184 http://dbpedia.org/resource/Hard_rock \n",
"185 http://dbpedia.org/resource/Polka \n",
"186 http://dbpedia.org/resource/Pop_rock \n",
"187 http://dbpedia.org/resource/Avant-garde_music \n",
"188 http://dbpedia.org/resource/Pop_rock \n",
"\n",
" p \\\n",
"0 http://ouseful.info/related \n",
"1 http://ouseful.info/label \n",
"2 http://ouseful.info/related \n",
"3 http://ouseful.info/related \n",
"4 http://ouseful.info/related \n",
".. ... \n",
"184 http://ouseful.info/related \n",
"185 http://ouseful.info/related \n",
"186 http://ouseful.info/related \n",
"187 http://ouseful.info/label \n",
"188 http://ouseful.info/related \n",
"\n",
" o \n",
"0 http://dbpedia.org/resource/Psychedelic_pop \n",
"1 Pop music \n",
"2 http://dbpedia.org/resource/Blues_rock \n",
"3 http://dbpedia.org/resource/Progressive_death_... \n",
"4 http://dbpedia.org/resource/Art_rock \n",
".. ... \n",
"184 http://dbpedia.org/resource/Progressive_rock \n",
"185 http://dbpedia.org/resource/Latin_Alternative \n",
"186 http://dbpedia.org/resource/Progressive_rock \n",
"187 Avant-garde music \n",
"188 http://dbpedia.org/resource/Art_rock \n",
"\n",
"[189 rows x 3 columns]"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfResults(endpoint, prefix, q)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>subgenre</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>Speed metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>Pagan metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>Death 'n' roll</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>Nintendocore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>Power metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>Doom metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>Funk metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>Crossover thrash</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>Thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>Visual kei</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>Industrial metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>11</td>\n",
" <td>Metalcore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>12</td>\n",
" <td>Black metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>13</td>\n",
" <td>Death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>14</td>\n",
" <td>Grindcore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>15</td>\n",
" <td>Nu metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>16</td>\n",
" <td>Sludge metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>17</td>\n",
" <td>Traditional heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>18</td>\n",
" <td>Bay Area thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>19</td>\n",
" <td>Djent</td>\n",
" </tr>\n",
" <tr>\n",
" <td>20</td>\n",
" <td>Blackgaze</td>\n",
" </tr>\n",
" <tr>\n",
" <td>21</td>\n",
" <td>Extreme metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>22</td>\n",
" <td>Deathgrind</td>\n",
" </tr>\n",
" <tr>\n",
" <td>23</td>\n",
" <td>Dark metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>24</td>\n",
" <td>Drone metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>25</td>\n",
" <td>Goregrind</td>\n",
" </tr>\n",
" <tr>\n",
" <td>26</td>\n",
" <td>Melodic death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>27</td>\n",
" <td>Neoclassical metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>28</td>\n",
" <td>Celtic metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>29</td>\n",
" <td>Folk metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>30</td>\n",
" <td>Medieval metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>31</td>\n",
" <td>Progressive metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>32</td>\n",
" <td>Viking metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>33</td>\n",
" <td>Heavy metal genres</td>\n",
" </tr>\n",
" <tr>\n",
" <td>34</td>\n",
" <td>Pornogrind</td>\n",
" </tr>\n",
" <tr>\n",
" <td>35</td>\n",
" <td>Alternative metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>36</td>\n",
" <td>Digital hardcore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>37</td>\n",
" <td>Glam metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>38</td>\n",
" <td>Latin metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>39</td>\n",
" <td>Electronicore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>40</td>\n",
" <td>Symphonic black metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>41</td>\n",
" <td>Rap metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>42</td>\n",
" <td>Unblack metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>43</td>\n",
" <td>Post-metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>44</td>\n",
" <td>Cyber metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>45</td>\n",
" <td>Nagoya kei</td>\n",
" </tr>\n",
" <tr>\n",
" <td>46</td>\n",
" <td>Groove metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>47</td>\n",
" <td>Neue Deutsche Härte</td>\n",
" </tr>\n",
" <tr>\n",
" <td>48</td>\n",
" <td>Christian metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>49</td>\n",
" <td>Avant-garde metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>50</td>\n",
" <td>Gothic metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>51</td>\n",
" <td>Symphonic metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>52</td>\n",
" <td>Melodic metalcore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>53</td>\n",
" <td>Kawaii metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>54</td>\n",
" <td>Stoner rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>55</td>\n",
" <td>Pirate metal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" subgenre\n",
"0 Speed metal\n",
"1 Pagan metal\n",
"2 Death 'n' roll\n",
"3 Nintendocore\n",
"4 Power metal\n",
"5 Doom metal\n",
"6 Funk metal\n",
"7 Crossover thrash\n",
"8 Thrash metal\n",
"9 Visual kei\n",
"10 Industrial metal\n",
"11 Metalcore\n",
"12 Black metal\n",
"13 Death metal\n",
"14 Grindcore\n",
"15 Nu metal\n",
"16 Sludge metal\n",
"17 Traditional heavy metal\n",
"18 Bay Area thrash metal\n",
"19 Djent\n",
"20 Blackgaze\n",
"21 Extreme metal\n",
"22 Deathgrind\n",
"23 Dark metal\n",
"24 Drone metal\n",
"25 Goregrind\n",
"26 Melodic death metal\n",
"27 Neoclassical metal\n",
"28 Celtic metal\n",
"29 Folk metal\n",
"30 Medieval metal\n",
"31 Progressive metal\n",
"32 Viking metal\n",
"33 Heavy metal genres\n",
"34 Pornogrind\n",
"35 Alternative metal\n",
"36 Digital hardcore\n",
"37 Glam metal\n",
"38 Latin metal\n",
"39 Electronicore\n",
"40 Symphonic black metal\n",
"41 Rap metal\n",
"42 Unblack metal\n",
"43 Post-metal\n",
"44 Cyber metal\n",
"45 Nagoya kei\n",
"46 Groove metal\n",
"47 Neue Deutsche Härte\n",
"48 Christian metal\n",
"49 Avant-garde metal\n",
"50 Gothic metal\n",
"51 Symphonic metal\n",
"52 Melodic metalcore\n",
"53 Kawaii metal\n",
"54 Stoner rock\n",
"55 Pirate metal"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#subjects \n",
" \n",
"q='''\n",
"\n",
"SELECT DISTINCT ?subgenre\n",
"\n",
"WHERE {\n",
" ?_subgenre dct:subject dbc:Heavy_metal_genres .\n",
" ?_subgenre rdfs:label ?subgenre .\n",
" FILTER(langMatches(lang(?subgenre), \"en\"))\n",
"}\n",
"\n",
"\n",
"'''\n",
"\n",
"dfResults(endpoint, prefix, q)"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>subgenre</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>Speed metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>Christian metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>Metalcore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>Progressive metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>Alternative metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>Doom metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>Heavy metal musical groups by genre</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>Post-metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>Power metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>Symphonic metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>Groove metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>11</td>\n",
" <td>Melodic death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>12</td>\n",
" <td>Glam metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>13</td>\n",
" <td>Heavy metal songs by genre</td>\n",
" </tr>\n",
" <tr>\n",
" <td>14</td>\n",
" <td>Black metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>15</td>\n",
" <td>Death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>16</td>\n",
" <td>Extreme metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>17</td>\n",
" <td>Grindcore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>18</td>\n",
" <td>Nu metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>19</td>\n",
" <td>Nintendocore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>20</td>\n",
" <td>Thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>21</td>\n",
" <td>Viking metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>22</td>\n",
" <td>Djent</td>\n",
" </tr>\n",
" <tr>\n",
" <td>23</td>\n",
" <td>Blackened death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>24</td>\n",
" <td>Funk metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>25</td>\n",
" <td>Heavy metal musicians by genre</td>\n",
" </tr>\n",
" <tr>\n",
" <td>26</td>\n",
" <td>Sludge metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>27</td>\n",
" <td>Rap metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>28</td>\n",
" <td>Folk metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>29</td>\n",
" <td>Gothic metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>30</td>\n",
" <td>Avant-garde metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>31</td>\n",
" <td>Industrial metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>32</td>\n",
" <td>Stoner rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>33</td>\n",
" <td>Heavy metal albums by genre</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" subgenre\n",
"0 Speed metal\n",
"1 Christian metal\n",
"2 Metalcore\n",
"3 Progressive metal\n",
"4 Alternative metal\n",
"5 Doom metal\n",
"6 Heavy metal musical groups by genre\n",
"7 Post-metal\n",
"8 Power metal\n",
"9 Symphonic metal\n",
"10 Groove metal\n",
"11 Melodic death metal\n",
"12 Glam metal\n",
"13 Heavy metal songs by genre\n",
"14 Black metal\n",
"15 Death metal\n",
"16 Extreme metal\n",
"17 Grindcore\n",
"18 Nu metal\n",
"19 Nintendocore\n",
"20 Thrash metal\n",
"21 Viking metal\n",
"22 Djent\n",
"23 Blackened death metal\n",
"24 Funk metal\n",
"25 Heavy metal musicians by genre\n",
"26 Sludge metal\n",
"27 Rap metal\n",
"28 Folk metal\n",
"29 Gothic metal\n",
"30 Avant-garde metal\n",
"31 Industrial metal\n",
"32 Stoner rock\n",
"33 Heavy metal albums by genre"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Concepts\n",
"q='''\n",
"\n",
"SELECT DISTINCT ?subgenre\n",
"\n",
"WHERE {\n",
" ?_subgenre skos:broader dbc:Heavy_metal_genres .\n",
" ?_subgenre rdfs:label ?subgenre .\n",
"}\n",
"'''\n",
"df1 = dfResults(endpoint, prefix, q)\n",
"df1"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>subgenre</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>Speed metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>Christian metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>Metalcore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>Progressive metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>Alternative metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>Doom metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>Heavy metal musical groups by genre</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>Post-metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>Power metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>Symphonic metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>Groove metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>11</td>\n",
" <td>Melodic death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>12</td>\n",
" <td>Glam metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>13</td>\n",
" <td>Heavy metal songs by genre</td>\n",
" </tr>\n",
" <tr>\n",
" <td>14</td>\n",
" <td>Black metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>15</td>\n",
" <td>Death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>16</td>\n",
" <td>Extreme metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>17</td>\n",
" <td>Grindcore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>18</td>\n",
" <td>Nu metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>19</td>\n",
" <td>Nintendocore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>20</td>\n",
" <td>Thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>21</td>\n",
" <td>Viking metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>22</td>\n",
" <td>Djent</td>\n",
" </tr>\n",
" <tr>\n",
" <td>23</td>\n",
" <td>Blackened death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>24</td>\n",
" <td>Funk metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>25</td>\n",
" <td>Heavy metal musicians by genre</td>\n",
" </tr>\n",
" <tr>\n",
" <td>26</td>\n",
" <td>Sludge metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>27</td>\n",
" <td>Rap metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>28</td>\n",
" <td>Folk metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>29</td>\n",
" <td>Gothic metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>30</td>\n",
" <td>Avant-garde metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>31</td>\n",
" <td>Industrial metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>32</td>\n",
" <td>Stoner rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>33</td>\n",
" <td>Heavy metal albums by genre</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" subgenre\n",
"0 Speed metal\n",
"1 Christian metal\n",
"2 Metalcore\n",
"3 Progressive metal\n",
"4 Alternative metal\n",
"5 Doom metal\n",
"6 Heavy metal musical groups by genre\n",
"7 Post-metal\n",
"8 Power metal\n",
"9 Symphonic metal\n",
"10 Groove metal\n",
"11 Melodic death metal\n",
"12 Glam metal\n",
"13 Heavy metal songs by genre\n",
"14 Black metal\n",
"15 Death metal\n",
"16 Extreme metal\n",
"17 Grindcore\n",
"18 Nu metal\n",
"19 Nintendocore\n",
"20 Thrash metal\n",
"21 Viking metal\n",
"22 Djent\n",
"23 Blackened death metal\n",
"24 Funk metal\n",
"25 Heavy metal musicians by genre\n",
"26 Sludge metal\n",
"27 Rap metal\n",
"28 Folk metal\n",
"29 Gothic metal\n",
"30 Avant-garde metal\n",
"31 Industrial metal\n",
"32 Stoner rock\n",
"33 Heavy metal albums by genre"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Concepts\n",
"q='''\n",
"\n",
"SELECT DISTINCT ?subgenre\n",
"\n",
"WHERE {\n",
" ?_subgenre skos:broader dbc:Heavy_metal_genres .\n",
" ?_subgenre rdfs:label ?subgenre .\n",
"}\n",
"'''\n",
"dfResults(endpoint, prefix, q)"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>subgenre</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>Speed metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>Power metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>Doom metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>Thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>Black metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>Death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>Traditional heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>Extreme metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>Glam metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>Groove metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>Avant-garde metal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" subgenre\n",
"0 Speed metal\n",
"1 Power metal\n",
"2 Doom metal\n",
"3 Thrash metal\n",
"4 Black metal\n",
"5 Death metal\n",
"6 Traditional heavy metal\n",
"7 Extreme metal\n",
"8 Glam metal\n",
"9 Groove metal\n",
"10 Avant-garde metal"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfResults(endpoint, prefix, q)"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"q='''\n",
"\n",
"SELECT DISTINCT ?subgenre ?styled\n",
"\n",
"WHERE {\n",
" dbr:Heavy_metal_music dbo:musicSubgenre ?_subgenre .\n",
" ?_subgenre foaf:name ?subgenre .\n",
" OPTIONAL { \n",
" ?_subgenre dbo:stylisticOrigin ?_styled .\n",
" ?_styled foaf:name ?styled\n",
" }\n",
"}\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>subgenre</th>\n",
" <th>styled</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>Avant-garde metal</td>\n",
" <td>Progressive rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>Thrash metal</td>\n",
" <td>Speed metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>Power metal</td>\n",
" <td>Speed metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>Traditional heavy metal</td>\n",
" <td>Blues rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>Black metal</td>\n",
" <td>Thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>Groove metal</td>\n",
" <td>Thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>Death metal</td>\n",
" <td>Thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>Glam metal</td>\n",
" <td>Hard rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>Death metal</td>\n",
" <td>Black metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>Groove metal</td>\n",
" <td>Death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>Black metal</td>\n",
" <td>Death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>11</td>\n",
" <td>Avant-garde metal</td>\n",
" <td>Heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>12</td>\n",
" <td>Doom metal</td>\n",
" <td>Heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>13</td>\n",
" <td>Speed metal</td>\n",
" <td>Heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>14</td>\n",
" <td>Glam metal</td>\n",
" <td>Heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>15</td>\n",
" <td>Groove metal</td>\n",
" <td>Heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>16</td>\n",
" <td>Extreme metal</td>\n",
" <td>Heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>17</td>\n",
" <td>Glam metal</td>\n",
" <td>Pop music</td>\n",
" </tr>\n",
" <tr>\n",
" <td>18</td>\n",
" <td>Traditional heavy metal</td>\n",
" <td>Psychedelic rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>19</td>\n",
" <td>Glam metal</td>\n",
" <td>Punk rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>20</td>\n",
" <td>Avant-garde metal</td>\n",
" <td>Extreme metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>21</td>\n",
" <td>Power metal</td>\n",
" <td>Neoclassical metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>22</td>\n",
" <td>Glam metal</td>\n",
" <td>Glam rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>23</td>\n",
" <td>Death metal</td>\n",
" <td>Hardcore punk</td>\n",
" </tr>\n",
" <tr>\n",
" <td>24</td>\n",
" <td>Groove metal</td>\n",
" <td>Hardcore punk</td>\n",
" </tr>\n",
" <tr>\n",
" <td>25</td>\n",
" <td>Speed metal</td>\n",
" <td>Hardcore punk</td>\n",
" </tr>\n",
" <tr>\n",
" <td>26</td>\n",
" <td>Black metal</td>\n",
" <td>Hardcore punk</td>\n",
" </tr>\n",
" <tr>\n",
" <td>27</td>\n",
" <td>Thrash metal</td>\n",
" <td>Hardcore punk</td>\n",
" </tr>\n",
" <tr>\n",
" <td>28</td>\n",
" <td>Power metal</td>\n",
" <td>New wave of British heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>29</td>\n",
" <td>Thrash metal</td>\n",
" <td>New wave of British heavy metal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" subgenre styled\n",
"0 Avant-garde metal Progressive rock\n",
"1 Thrash metal Speed metal\n",
"2 Power metal Speed metal\n",
"3 Traditional heavy metal Blues rock\n",
"4 Black metal Thrash metal\n",
"5 Groove metal Thrash metal\n",
"6 Death metal Thrash metal\n",
"7 Glam metal Hard rock\n",
"8 Death metal Black metal\n",
"9 Groove metal Death metal\n",
"10 Black metal Death metal\n",
"11 Avant-garde metal Heavy metal\n",
"12 Doom metal Heavy metal\n",
"13 Speed metal Heavy metal\n",
"14 Glam metal Heavy metal\n",
"15 Groove metal Heavy metal\n",
"16 Extreme metal Heavy metal\n",
"17 Glam metal Pop music\n",
"18 Traditional heavy metal Psychedelic rock\n",
"19 Glam metal Punk rock\n",
"20 Avant-garde metal Extreme metal\n",
"21 Power metal Neoclassical metal\n",
"22 Glam metal Glam rock\n",
"23 Death metal Hardcore punk\n",
"24 Groove metal Hardcore punk\n",
"25 Speed metal Hardcore punk\n",
"26 Black metal Hardcore punk\n",
"27 Thrash metal Hardcore punk\n",
"28 Power metal New wave of British heavy metal\n",
"29 Thrash metal New wave of British heavy metal"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfResults(endpoint, prefix, q)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"#style\n",
"q='''\n",
"\n",
"SELECT DISTINCT ?styled\n",
"\n",
"WHERE {\n",
" ?_styled dbo:stylisticOrigin dbr:Heavy_metal_music .\n",
" ?_styled foaf:name ?styled .\n",
"}\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>styled</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>Grunge</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>Speed metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>Death 'n' roll</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>Nintendocore</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>Doom metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>Funk metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>Visual kei</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>Industrial metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>8</td>\n",
" <td>Nu metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>9</td>\n",
" <td>Armenian Rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>10</td>\n",
" <td>African heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>11</td>\n",
" <td>Ukrainian metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>12</td>\n",
" <td>Extreme metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>13</td>\n",
" <td>Manguebeat</td>\n",
" </tr>\n",
" <tr>\n",
" <td>14</td>\n",
" <td>Folk metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>15</td>\n",
" <td>Progressive metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>16</td>\n",
" <td>Horror punk</td>\n",
" </tr>\n",
" <tr>\n",
" <td>17</td>\n",
" <td>Desert rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>18</td>\n",
" <td>Dark rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>19</td>\n",
" <td>Alternative metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>20</td>\n",
" <td>Glam metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>21</td>\n",
" <td>New wave of British heavy metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>22</td>\n",
" <td>Latin metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>23</td>\n",
" <td>Rap metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>24</td>\n",
" <td>Post-metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>25</td>\n",
" <td>Groove metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>26</td>\n",
" <td>Christian metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>27</td>\n",
" <td>Avant-garde metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>28</td>\n",
" <td>Gothic metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>29</td>\n",
" <td>Kawaii Metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>30</td>\n",
" <td>Shock rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>31</td>\n",
" <td>Stoner rock</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" styled\n",
"0 Grunge\n",
"1 Speed metal\n",
"2 Death 'n' roll\n",
"3 Nintendocore\n",
"4 Doom metal\n",
"5 Funk metal\n",
"6 Visual kei\n",
"7 Industrial metal\n",
"8 Nu metal\n",
"9 Armenian Rock\n",
"10 African heavy metal\n",
"11 Ukrainian metal\n",
"12 Extreme metal\n",
"13 Manguebeat\n",
"14 Folk metal\n",
"15 Progressive metal\n",
"16 Horror punk\n",
"17 Desert rock\n",
"18 Dark rock\n",
"19 Alternative metal\n",
"20 Glam metal\n",
"21 New wave of British heavy metal\n",
"22 Latin metal\n",
"23 Rap metal\n",
"24 Post-metal\n",
"25 Groove metal\n",
"26 Christian metal\n",
"27 Avant-garde metal\n",
"28 Gothic metal\n",
"29 Kawaii Metal\n",
"30 Shock rock\n",
"31 Stoner rock"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfResults(endpoint, prefix, q)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"q='''\n",
"SELECT DISTINCT ?subgenre\n",
"\n",
"WHERE {\n",
"\n",
" {\n",
" \n",
" dbr:Heavy_metal_music dbo:musicSubgenre ?_subgenre .\n",
" ?_subgenre foaf:name ?subgenre\n",
" \n",
" } UNION {\n",
" \n",
" dbr:Heavy_metal_music dbo:musicSubgenre ?_subgenre .\n",
" ?_subgenre foaf:name ?subgenre\n",
" \n",
" }\n",
" \n",
" UNION {\n",
" \n",
" dbr:Heavy_metal_music dbo:musicSubgenre ?_subgenre .\n",
" ?_subgenre dbo:musicSubgenre ?__subgenre .\n",
" ?__subgenre foaf:name ?subgenre\n",
" FILTER (?__subgenre != ?_subgenre )\n",
" \n",
" }\n",
" \n",
" FILTER ( (?__subgenre != ?_subgenre) )\n",
"}\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>subgenre</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>Speed metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>Doom metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>Thrash metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>Black metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>Death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td>\n",
" <td>Technical death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>6</td>\n",
" <td>Melodic death metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>7</td>\n",
" <td>Symphonic black metal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" subgenre\n",
"0 Speed metal\n",
"1 Doom metal\n",
"2 Thrash metal\n",
"3 Black metal\n",
"4 Death metal\n",
"5 Technical death metal\n",
"6 Melodic death metal\n",
"7 Symphonic black metal"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfResults(endpoint, prefix, q)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'musicFusionGenre' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-54-5692fa57dc44>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdbo\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mmusicFusionGenre\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'musicFusionGenre' is not defined"
]
}
],
"source": [
"dbo:musicFusionGenre"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>bandname</th>\n",
" <th>genrename</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>Tang Dynasty (band)</td>\n",
" <td>Art rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>Alice in Chains</td>\n",
" <td>Grunge</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>Soundgarden</td>\n",
" <td>Grunge</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3</td>\n",
" <td>Wolfgang (band)</td>\n",
" <td>Grunge</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td>\n",
" <td>Deep Purple</td>\n",
" <td>Progressive rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2583</td>\n",
" <td>Vista Chino</td>\n",
" <td>Stoner rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2584</td>\n",
" <td>Thumlock</td>\n",
" <td>Stoner rock</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2585</td>\n",
" <td>Dia de los Muertos (band)</td>\n",
" <td>Death Metal</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2586</td>\n",
" <td>Claim the Throne</td>\n",
" <td>Melodic Death</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2587</td>\n",
" <td>Signum Regis</td>\n",
" <td>Melodic metal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2588 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" bandname genrename\n",
"0 Tang Dynasty (band) Art rock\n",
"1 Alice in Chains Grunge\n",
"2 Soundgarden Grunge\n",
"3 Wolfgang (band) Grunge\n",
"4 Deep Purple Progressive rock\n",
"... ... ...\n",
"2583 Vista Chino Stoner rock\n",
"2584 Thumlock Stoner rock\n",
"2585 Dia de los Muertos (band) Death Metal\n",
"2586 Claim the Throne Melodic Death\n",
"2587 Signum Regis Melodic metal\n",
"\n",
"[2588 rows x 2 columns]"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Bands - simple in genre\n",
"\n",
"#dbr:Heavy_metal_music\n",
" \n",
"q='''\n",
"SELECT ?bandname ?genrename\n",
"WHERE {\n",
" ?band dbo:genre dbr:Heavy_metal_music .\n",
" ?band dbo:genre ?genre.\n",
" ?band dbo:background \"group_or_band\" .\n",
" ?band rdfs:label ?bandname .\n",
" \n",
" ?genre rdfs:label ?genrename .\n",
" \n",
" FILTER (langMatches(lang(?bandname), \"en\") && ?genre != dbr:Heavy_metal_music &&\n",
" langMatches(lang(?genrename), \"en\") )\n",
" }\n",
"'''\n",
"df = dfResults(endpoint, prefix, q)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [],
"source": [
"df.to_csv('bands.csv', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Art rock', 'Grunge', 'Progressive rock', 'Speed metal',\n",
" 'Symphonic rock', 'Blues rock', 'Power metal', 'Psychobilly',\n",
" 'Southern rock', 'Doom metal', 'Folk rock', 'Funk metal',\n",
" 'Klezmer', 'Surf rock', 'Post-hardcore', 'Thrash Metal',\n",
" 'Bossa nova', 'Crossover thrash', 'Thrash metal', 'Thrashcore',\n",
" 'Hard rock', 'Deathrock', 'Gothic rock', 'Industrial rock',\n",
" 'Noise rock', 'Boogie rock', 'Industrial metal', 'Metalcore',\n",
" 'Sludge Metal', 'Hard Rock', 'Black metal', 'Blues', 'Death metal',\n",
" 'Electronic music', 'Folk music', 'Instrumental', 'Jazz',\n",
" 'Nu metal', 'Pop music', 'Psychedelic rock', 'Punk rock', 'Reggae',\n",
" 'Rock and roll', 'Rock music', 'Satire', 'Ska', 'Crust punk',\n",
" 'Sludge metal', 'Dubstep', 'Experimental rock', 'Post-punk',\n",
" 'Mathcore', 'Electropunk', 'Gothic Metal', 'Progressive Metal',\n",
" 'Hardcore Punk', 'Rock Music', 'Classic rock', 'Classical music',\n",
" 'Melodic death metal', 'Neoclassical metal', 'Surf music',\n",
" 'Christian rock', 'Folk metal', 'Industrial music', 'Post-rock',\n",
" 'Progressive metal', 'Horror punk', 'Alternative Rock',\n",
" 'Speed Metal', 'Mizrahi music', 'Groove Metal',\n",
" 'Alternative metal', 'Alternative rock', 'Ambient music',\n",
" 'Breakbeat hardcore', 'Dub music', 'Electronica', 'Glam metal',\n",
" 'Glam punk', 'Glam rock', 'Hardcore punk', 'Indie rock',\n",
" 'New wave of British heavy metal', 'Hard rock music',\n",
" 'Christian Metal', 'Instrumental rock', 'Rap metal', 'Queercore',\n",
" 'Post-metal', 'Groove metal', 'Garage rock', 'Drum and Bass',\n",
" 'Rapcore', 'Post-Rock', 'Rock (music)', 'Pinoy rock',\n",
" 'Christian metal', 'Math rock', 'Hip hop music', 'Pop rock',\n",
" 'Gothic metal', 'Symphonic metal', 'Comedy rock', 'Deathcore',\n",
" 'Alternative Metal', 'Punk Rock', 'Melodic metalcore',\n",
" 'Arena rock', 'Post-grunge', 'Shock rock', 'Stoner rock',\n",
" 'Death Metal', 'Post-Metal', 'Anison', 'American Rock',\n",
" 'Stoner metal', 'Electronic rock', 'Neo-classical metal',\n",
" 'Cowpunk', 'Space rock', 'Power pop', 'Acid rock', 'Parody music',\n",
" 'Drum and bass', 'Pub rock (Australia)', 'Album-oriented rock',\n",
" 'Outsider music', 'Viking metal', 'Digital hardcore', 'Funk rock',\n",
" 'Neue Deutsche Härte', 'Glam Metal', 'Blues-rock',\n",
" 'Post-progressive', 'Polka', 'Vaudeville', 'Waltz', 'Cajun music',\n",
" 'Electroacoustic music', 'New-age music', \"Death 'n' roll\",\n",
" 'Dance metal', 'Show tunes', 'Oom-pah', 'Crustcore',\n",
" 'Dominican rock', 'Southern metal', 'Bhangra (music)',\n",
" 'Country music', 'Grindcore', 'House music', 'Orchestra',\n",
" 'Ragtime', 'Samba', 'Steampunk', 'Chanson', 'Folk punk',\n",
" 'Music and politics', \"Children's music\", 'Middle Eastern music',\n",
" 'Extreme metal', 'Technical death metal', 'Riot grrrl',\n",
" 'Music in Japanese animation', 'Rock music of West Bengal',\n",
" 'Cello metal', 'Drone metal', 'Power Metal', 'Anarcho-punk',\n",
" 'Chiptune', 'Noise music', 'Soul music', 'J-pop', 'Roots rock',\n",
" 'Swamp rock', 'Holiday music', 'Metal Core', 'Calypso music',\n",
" 'Melodic hardcore', \"Rock 'n' roll\", 'Modern rock', 'Dark cabaret',\n",
" 'Glitch (music)', 'Tribute act', 'Experimental music',\n",
" 'Industrial Metal', 'Darkwave', 'Ska punk', 'Melodic Death Metal',\n",
" 'Kawaii metal', 'Traditional music', 'Comedy', \"Black 'n' roll\",\n",
" 'Melodic rock', 'Grunge music', 'Punk metal', 'Melodic metal',\n",
" 'Experimental metal', 'Rock en Español', 'Americana (music)',\n",
" 'Pop Rock', 'Shoegazing', 'Jazz rock', 'Dance music', 'Screamo',\n",
" 'Emo', 'Folk Rock', 'Jam rock', 'Celtic metal', 'Acoustic rock',\n",
" 'Hardcore metal', 'Latin metal', 'Alternative pop',\n",
" 'Symphonic Metal', 'D-beat', 'Pop punk', 'Skate punk',\n",
" 'Heavy Metal music', 'Symphonic power metal', 'NWOAHM',\n",
" 'Anarcho punk', 'Post metal', 'New wave music',\n",
" 'Original Pilipino Music', 'Jazz fusion', 'Pirate metal',\n",
" 'Comedy Rock', 'Post punk', 'Straight edge hardcore',\n",
" 'Christian alternative rock', 'Traditional heavy metal',\n",
" 'Metal music', 'Palm Desert Scene', 'Metallic hardcore',\n",
" 'Stoner Rock', 'Lo-fi music', 'Neo-psychedelia', 'Jewish rock',\n",
" 'Christian hardcore', 'Cock rock', 'Soundtrack', 'World music',\n",
" 'Indie Pop', 'Industrial Rock', 'Funk', 'Hip Hop music',\n",
" 'Mongolian music', 'Electronic body music', 'Indie Rock',\n",
" 'Cybergrind', 'Rautalanka', 'Krautrock', 'Unblack metal',\n",
" 'Crossover Music', 'Classical Music', 'Avant-garde metal',\n",
" 'Pop Music', 'Avant rock', 'Trad metal', 'Straight Edge',\n",
" 'Coldwave', 'Fusion (music)', 'Slow rock', 'Indie metal',\n",
" 'Japanese noise rock', 'Parody', 'Nu Metal', 'Dark metal',\n",
" 'Avante garde', 'Post grunge', 'Video game music',\n",
" 'Avant-Garde metal', 'Electronic dance music',\n",
" 'Traditional Irish music', 'Celtic Metal', 'Ska-core',\n",
" 'Melodic heavy metal', 'Folk Metal', 'Adult-oriented rock',\n",
" 'Crossover Thrash', 'Celtic rock', 'Death metal music',\n",
" 'Sleaze rock', 'Christian punk', 'Melodic Death'], dtype=object)"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['genrename'].unique()"
]
},
{
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
# Import the necessary packages
from SPARQLWrapper import SPARQLWrapper, JSON
# Add some helper functions
# A function that will return the results of running a SPARQL query with
# a defined set of prefixes over a specified endpoint.
# It follows the same five-step process apart from creating the query, which
# is provided as an argument to the function.
def runQuery(endpoint, prefix, q):
''' Run a SPARQL query with a declared prefix over a specified endpoint '''
sparql = SPARQLWrapper(endpoint)
sparql.setQuery(prefix+q) # concatenate the strings representing the prefixes and the query
sparql.setReturnFormat(JSON)
return sparql.query().convert()
# Import pandas to provide facilities for creating a DataFrame to hold results
import pandas as pd
# Function to convert query results into a DataFrame
# The results are assumed to be in JSON format and therefore the Python dictionary will have
# the results indexed by 'results' and then 'bindings'.
def dict2df(results):
''' A function to flatten the SPARQL query results and return the column values '''
data = []
for result in results["results"]["bindings"]:
tmp = {}
for el in result:
tmp[el] = result[el]['value']
data.append(tmp)
df = pd.DataFrame(data)
return df
# Function to run a query and return results in a DataFrame
def dfResults(endpoint, prefix, q):
''' Generate a data frame containing the results of running
a SPARQL query with a declared prefix over a specified endpoint '''
return dict2df(runQuery(endpoint, prefix, q))
# Print a limited number of results of a query
def printQuery(results, limit=''):
''' Print the results from the SPARQL query '''
resdata = results["results"]["bindings"]
if limit != '':
resdata = results["results"]["bindings"][:limit]
for result in resdata:
for ans in result:
print('{0}: {1}'.format(ans, result[ans]['value']))
print()
# Run a query and print out a limited number of results
def printRunQuery(endpoint, prefix, q, limit=''):
''' Print the results from the SPARQL query '''
results = runQuery(endpoint, prefix, q)
printQuery(results, limit)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment