{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "2b0d2c03", "metadata": {}, "outputs": [], "source": [ "# Load data\n", "from kgextension.sparql_helper import LocalEndpoint\n", "\n", "MyGraph = LocalEndpoint(file_path = \"./artists_graph.nt\")\n", "\n", "MyGraph.initialize()" ] }, { "cell_type": "code", "execution_count": 2, "id": "6de2519f", "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", "
BandGenre
170http://dbpedia.org/resource/Silk_SonicSoul
171http://dbpedia.org/resource/PlejbojSoul
172http://dbpedia.org/resource/The_MarvelettesSoul
173http://dbpedia.org/resource/Inner_LifeSoul
174http://dbpedia.org/resource/CeraadiSoul
175http://dbpedia.org/resource/The_Ad_LibsSoul
176http://dbpedia.org/resource/SouliveSoul
177http://dbpedia.org/resource/GlashausSoul
178http://dbpedia.org/resource/The_SuffersSoul
179http://dbpedia.org/resource/The_Sweet_Inspirat...Soul
180http://dbpedia.org/resource/Dusty_Rhodes_and_t...Soul
181http://dbpedia.org/resource/The_NightowlsSoul
182http://dbpedia.org/resource/HobexSoul
183http://dbpedia.org/resource/The_VelvelettesSoul
184http://dbpedia.org/resource/Soul_II_SoulSoul
185http://dbpedia.org/resource/BreakestraSoul
186http://dbpedia.org/resource/Friends_of_the_BrideSoul
187http://dbpedia.org/resource/Hannah_Gill_and_Th...Soul
188http://dbpedia.org/resource/The_ArtisticsSoul
189http://dbpedia.org/resource/The_ReddingsSoul
190http://dbpedia.org/resource/Perpetuum_JazzileSoul
191http://dbpedia.org/resource/Secret_AffairSoul
192http://dbpedia.org/resource/The_Ramong_SoundSoul
193http://dbpedia.org/resource/Con_Funk_ShunSoul
194http://dbpedia.org/resource/Maxine_NightingaleSoul
195http://dbpedia.org/resource/Carl_CarltonSoul
196http://dbpedia.org/resource/Salsoul_OrchestraSoul
197http://dbpedia.org/resource/The_NextmenSoul
198http://dbpedia.org/resource/The_Jackson_SistersSoul
199http://dbpedia.org/resource/Orelha_NegraSoul
\n", "
" ], "text/plain": [ " Band Genre\n", "170 http://dbpedia.org/resource/Silk_Sonic Soul\n", "171 http://dbpedia.org/resource/Plejboj Soul\n", "172 http://dbpedia.org/resource/The_Marvelettes Soul\n", "173 http://dbpedia.org/resource/Inner_Life Soul\n", "174 http://dbpedia.org/resource/Ceraadi Soul\n", "175 http://dbpedia.org/resource/The_Ad_Libs Soul\n", "176 http://dbpedia.org/resource/Soulive Soul\n", "177 http://dbpedia.org/resource/Glashaus Soul\n", "178 http://dbpedia.org/resource/The_Suffers Soul\n", "179 http://dbpedia.org/resource/The_Sweet_Inspirat... Soul\n", "180 http://dbpedia.org/resource/Dusty_Rhodes_and_t... Soul\n", "181 http://dbpedia.org/resource/The_Nightowls Soul\n", "182 http://dbpedia.org/resource/Hobex Soul\n", "183 http://dbpedia.org/resource/The_Velvelettes Soul\n", "184 http://dbpedia.org/resource/Soul_II_Soul Soul\n", "185 http://dbpedia.org/resource/Breakestra Soul\n", "186 http://dbpedia.org/resource/Friends_of_the_Bride Soul\n", "187 http://dbpedia.org/resource/Hannah_Gill_and_Th... Soul\n", "188 http://dbpedia.org/resource/The_Artistics Soul\n", "189 http://dbpedia.org/resource/The_Reddings Soul\n", "190 http://dbpedia.org/resource/Perpetuum_Jazzile Soul\n", "191 http://dbpedia.org/resource/Secret_Affair Soul\n", "192 http://dbpedia.org/resource/The_Ramong_Sound Soul\n", "193 http://dbpedia.org/resource/Con_Funk_Shun Soul\n", "194 http://dbpedia.org/resource/Maxine_Nightingale Soul\n", "195 http://dbpedia.org/resource/Carl_Carlton Soul\n", "196 http://dbpedia.org/resource/Salsoul_Orchestra Soul\n", "197 http://dbpedia.org/resource/The_Nextmen Soul\n", "198 http://dbpedia.org/resource/The_Jackson_Sisters Soul\n", "199 http://dbpedia.org/resource/Orelha_Negra Soul" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create data frame\n", "import pandas as pd\n", "\n", "df = pd.read_csv ('./bands_labels.csv',sep=\"\\t\")\n", "dfX = df[['Band']]\n", "dfY = df[['Genre']]\n", "df.tail(30)" ] }, { "cell_type": "code", "execution_count": 3, "id": "55be45a8", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d6d9fd04494d48d5b1aebf60bcc2e032", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Column: 0%| | 0/1 [00:00" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# build and plot a decision tree\n", "from sklearn import tree\n", "from matplotlib import pyplot as plt\n", "\n", "# beautify feature names for decision tree for visualization\n", "features=dfX.columns\n", "features = [f.replace('Band_type_http://dbpedia.org/ontology/', '') for f in features]\n", "features = [f.replace('Link_Out_count_http://dbpedia.org/ontology/', '') for f in features]\n", "features = [f.replace('Link_Out_count_http://www.w3.org/1999/02/22-rdf-syntax-ns#', '') for f in features]\n", "features = [f.replace('http://dbpedia.org/ontology/', '') for f in features]\n", "\n", "# learn and plot tree\n", "clf = tree.DecisionTreeClassifier(min_samples_leaf=25)\n", "clf = clf.fit(dfX, dfY)\n", "fig = plt.figure(figsize=(25,20))\n", "_ = tree.plot_tree(clf, \n", " feature_names=features,\n", " class_names=dfY['Genre'].unique(),\n", " filled=True)" ] }, { "cell_type": "code", "execution_count": 47, "id": "69fbc935", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.decomposition import PCA\n", "pca = PCA(n_components=2)\n", "pca_result = pca.fit_transform(dfX)\n", "principalDf = pd.DataFrame(data = pca_result\n", " , columns = ['principal component 1', 'principal component 2'])\n", "\n", "finalDf = pd.concat([principalDf, dfY], axis = 1)\n", "fig = plt.figure(figsize = (8,8))\n", "ax = fig.add_subplot(1,1,1) \n", "ax.set_xlabel('Principal Component 1', fontsize = 15)\n", "ax.set_ylabel('Principal Component 2', fontsize = 15)\n", "\n", "targets = ['Soul','Rock']\n", "colors = ['r', 'b']\n", "for target, color in zip(targets,colors):\n", " indicesToKeep = finalDf['Genre'] == target\n", " ax.scatter(finalDf.loc[indicesToKeep, 'principal component 1']\n", " , finalDf.loc[indicesToKeep, 'principal component 2']\n", " , c = color)\n", "ax.legend(targets)\n", "ax.grid()" ] }, { "cell_type": "code", "execution_count": null, "id": "5b6423e3", "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.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }