{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Playlist Neural Network\n", "\n", "Given a list of playlists, can unknown tracks be correctly classified?" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# playlist_names = [\"RAP\", \"EDM\", \"ROCK\", \"METAL\", \"JAZZ\", \"POP\"] # super-genres\n", "# playlist_names = [\"ALL RAP\", \"EDM\", \"ROCK\", \"METAL\", \"JAZZ\", \"POP\"] # super-genres\n", "# playlist_names = [\"RAP\", \"EDM\", \"ROCK\", \"METAL\", \"JAZZ\"] # super-genres without POP\n", "playlist_names = [\"ALL RAP\", \"EDM\", \"ROCK\", \"METAL\", \"JAZZ\"] # super-genres without POP\n", "# playlist_names = [\"DNB\", \"HOUSE\", \"TECHNO\", \"GARAGE\", \"DUBSTEP\", \"BASS\"] # EDM playlists\n", "# playlist_names = [\"20s rap\", \"10s rap\", \"00s rap\", \"90s rap\", \"80s rap\"] # rap decades\n", "# playlist_names = [\"UK RAP\", \"US RAP\"] # UK/US split\n", "# playlist_names = [\"uk rap\", \"grime\", \"drill\", \"afro bash\"] # british rap playlists\n", "# playlist_names = [\"20s rap\", \"10s rap\", \"00s rap\", \"90s rap\", \"80s rap\", \"trap\", \"gangsta rap\", \"industrial rap\", \"weird rap\", \"jazz rap\", \"boom bap\", \"trap metal\"] # american rap playlists\n", "# playlist_names = [\"rock\", \"indie\", \"punk\", \"pop rock\", \"bluesy rock\", \"hard rock\", \"chilled rock\", \"emo\", \"pop punk\", \"stoner rock/metal\", \"post-hardcore\", \"melodic hardcore\", \"art rock\", \"post-rock\", \"classic pop punk\", \"90s rock & grunge\", \"90s indie & britpop\", \"psych\"] # rock playlists\n", "# playlist_names = [\"metal\", \"metalcore\", \"mathcore\", \"hardcore\", \"black metal\", \"death metal\", \"doom metal\", \"sludge metal\", \"classic metal\", \"industrial\", \"nu metal\", \"calm metal\", \"thrash metal\"] # metal playlists\n", "\n", "# headers = float_headers + [\"duration_ms\", \"mode\", \"loudness\", \"tempo\"]\n", "headers = float_headers\n", "\n", "BALANCED_WEIGHTS = True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pull and process playlist information.\n", "\n", "1. Get live playlist track information from spotify\n", "2. Filter listening history for these tracks\n", "\n", "Filter out tracks without features and drop duplicates before taking only the descriptor parameters" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "playlists = [get_playlist(i, spotnet) for i in playlist_names] # 1)\n", "\n", "# filter playlists by join with playlist track/artist names\n", "filtered_playlists = [pd.merge(track_frame(i.tracks), scrobbles, on=['track', 'artist']) for i in playlists] # 2)\n", "\n", "filtered_playlists = [i[pd.notnull(i[\"uri\"])] for i in filtered_playlists]\n", "# distinct on uri\n", "filtered_playlists = [i.drop_duplicates(['uri']) for i in filtered_playlists]\n", "# select only descriptor float columns\n", "filtered_playlists = [i.loc[:, headers] for i in filtered_playlists]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Construct the dataset with associated labels before splitting into a train and test set." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "dataset = pd.concat(filtered_playlists)\n", "labels = [np.full(len(plst), idx) for idx, plst in enumerate(filtered_playlists)]\n", "labels = np.concatenate(labels)\n", "\n", "# stratify: maintains class proportions in test and train set\n", "data_train, data_test, labels_train, labels_test = train_test_split(dataset, labels, \n", " test_size=0.1, \n", "# random_state=70, \n", " stratify=labels\n", " )\n", "\n", "class_weights = class_weight.compute_class_weight('balanced',\n", " classes=np.unique(labels_train),\n", " y=labels_train)\n", "class_weights = {i: j for i, j in zip(range(len(filtered_playlists)), class_weights)}\n", "\n", "labels_train = tf.one_hot(labels_train, len(filtered_playlists))\n", "labels_test = tf.one_hot(labels_test, len(filtered_playlists))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def tensorboard_callback(path='tensorboard-logs', prefix=''):\n", " return tf.keras.callbacks.TensorBoard(\n", " log_dir=os.path.normpath(os.path.join(path, prefix + datetime.now().strftime(\"%Y%m%d-%H%M%S\"))), histogram_freq=1\n", " )" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def get_model(hidden_nodes=9,\n", " layers=1,\n", " classes=len(filtered_playlists),\n", " activation=lambda: 'sigmoid', \n", " weight_init=lambda: 'glorot_uniform'):\n", " l = [tf.keras.layers.InputLayer(input_shape=data_train.to_numpy()[0].shape, name='Input')]\n", " \n", " for i in range(layers):\n", " l.append(\n", " tf.keras.layers.Dense(hidden_nodes, \n", " activation=activation(), \n", " kernel_initializer=weight_init(), \n", " name=f'Hidden{i+1}')\n", " )\n", " \n", " l.append(tf.keras.layers.Dense(classes, \n", " activation='softmax', \n", " kernel_initializer=weight_init(), \n", " name='Output'))\n", " \n", " model = tf.keras.models.Sequential(l)\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Single Model" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "Hidden1 (Dense) (None, 64) 512 \n", "_________________________________________________________________\n", "Hidden2 (Dense) (None, 64) 4160 \n", "_________________________________________________________________\n", "Output (Dense) (None, 5) 325 \n", "=================================================================\n", "Total params: 4,997\n", "Trainable params: 4,997\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model = get_model(hidden_nodes=64, layers=2)\n", "\n", "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.01), \n", "# optimizer=tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.9),\n", " loss='categorical_crossentropy', \n", " metrics=['accuracy'])\n", "model.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "if BALANCED_WEIGHTS:\n", " cw = class_weights\n", "else:\n", " cw = None\n", "history = model.fit(data_train.to_numpy(), labels_train, \n", " callbacks=[tensorboard_callback()], \n", " validation_split=0.11,\n", " verbose=0,\n", " class_weight=cw,\n", " epochs=50)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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t46BAwfy3XffcdFFF9GzZ0/GjBnDWWedxYoVK7jkkkuS9h89ejSrVq3ivPPOw8y4/fbbOfHEE5kxYwaNGzeu0vPOlAJCERERqRWHHHIInTt3ZvTo0UkB4ZgxY9i4cSNDhgxh11135ZtvviEvL95oecYZZ7DTTjvx8MMPc+2116Z9vc8//5wnn3ySCy64gPvvvx+ACy+8kCFDhjBlypSkfY855hgGDx6clHbsscey//778+9//5szzjiD7bbbjgMPPJB77rmHww8/vNIRxQ899BDTpk3jySef3NwUfv755zNgwACuueYazjnnHFq2bLl5/9mzZ/Ptt9/Stm1bAHr37s3xxx/Pa6+9xqBBg9J+3jVBAaGIiEg2Gj4cJk+u1UvkuVNYUkJefj5UNn1L375w111VOn9+fj6nnHIKd955J7NmzaJHjx5AqBnr2LEjhx56KPn5+Zv3LykpYcWKFRQWFtK7d28+/fTTKl3v5ZdfBmDYsGFJ6cOHDy/Tl7FZs2ab1zdu3EhRURHbb789bdq04dNPP+WMM86o0rVj1+/UqROnnnrq5rTGjRszbNgwTj31VN5+++2kQO/kk0/eHAwCHHjggQDMmDGjytfOlAJCERGRbDR5Mrz9dq1ewqj9QGDIkCHceeedjB49mhEjRvDjjz/y7rvvMmzYMPLz84lEItx999088MADzJw5k5KSks3HVnX08Q8//EBeXh69evVKSu/du3eZfdetW8ett97KI488wty5c3H3zdtWrlxZxWcZv/4OO+yQVNsJ8SbmH374ISm9e/fuSY9jweHy5curdf1MKCAUERHJRn371vol3J2SkhLy8/Mrn+C5mvnZa6+92GmnnXjqqacYMWIETz31FO6+uUn1j3/8I9deey3nnHMON998M+3atSMvL4/hw4cTiUSqdc10XHzxxTzyyCMMHz6c/fffn9atW2NmnHLKKbV63USJtaOJEoPTuqKAUEREJBtVsXm2OiIlJaxetYqWLVuWG5zUhCFDhnDttdcyZcoURo8ezQ477MA+++wDwNixYzn44IN5+OGHk45ZsWIF7du3r9J1tt12WyKRCN9//31SreD06dPL7Dt27FjOPPNM/vKXv2xOW79+PStWrEjaL907ocSuP2XKFCKRSFIt4ddff715e7bStDMiIiJSq2K1gddddx2TJ09OmnswPz+/TI3YmDFj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jNeAefPiM/goIBQREZHalrUBYdSvgJuBM4C2wBRgkLtv0cNu582L1xDqtnUiIiJS27I6IIxOV3NFdClvn4FpnqumJ86uNaohFBERkbpUa4NKpPpifQjbtIHmzes3LyIiIrLlU0CYhebPDzWEqh0UERGRuqCAMAvNnRuKRf0HRUREpC4oIMxCqiEUERGRuqSAMMts3GgsXqyAUEREROqOAsIss3x5U2IDotVkLCIiInVBAWGWWbas6eZ11RCKiIhIXVBAmGWWLm22eV0BoYiIiNQFBYRZZulS1RCKiIhI3VJAmGViNYRNmkD79vWcGREREckJCgizTKwPYdeuYA3mZnsiIiLSkCkgzDKxJmM1F4uIiEhdUUCYZWJNxppyRkREROqKAsIs4p7cZCwiIiJSFxQQZpFly4yNG/MBBYQiIiJSdxQQZpF58+KjSBQQioiISF1RQJhF5s2LF4f6EIqIiEhdUUCYRVRDKCIiIvVBAWEWmT8/XhydO9djRkRERCSnKCDMIrEawg4dIjRpUs+ZERERkZyhgDCLxPoQdu7s9ZwTERERySUKCLPI/PmhhrBLl0g950RERERyiQLCLKIaQhEREakPCgizxNq1sGKFaghFRESk7ikgzBJz58bXu3RRDaGIiIjUHQWEWSIxIOzcWTWEIiIiUnca1XcGJPjpT2HKlFW89NJk9tpr9/rOjoiIiOQQ1RBmicaNYdttnT59ltG6dX3nRkRERHKJAkIRERGRHKeAUERERCTHKSAUERERyXEKCEVERERynAJCERERkRyngFBEREQkxykgFBEREclxCghFREREcpwCQhEREZEcp4BQREREJMcpIBQRERHJcQoIRURERHKcAkIRERGRHKeAUERERCTHKSAUERERyXEKCEVERERynAJCERERkRyngFBEREQkxykgFBEREclxCghFREREcpwCQhEREZEcp4BQREREJMcpIBQRERHJcQoIRURERHKcAkIRERGRHKeAUERERCTHKSAUERERyXEKCEVERERynAJCERERkRyngFBEREQkxykgFBEREclxWR0QmlmBmd1mZvPMbJ2ZTTSzw9M47kQze9rMZpjZWjObbmZ/MbM2dZBtERERkQYlqwNC4FHgMmAUcAlQArxsZgdUctxDQB/gSWAY8CpwEfChmTWrtdyKiIiINECN6jsD5TGzfsApwBXu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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "history.history\n", "plt.plot(range(len(history.history[\"accuracy\"])), history.history[\"accuracy\"], label=\"Train\", c=(0, 0, 1))\n", "plt.plot(range(len(history.history[\"val_accuracy\"])), history.history[\"val_accuracy\"], label=\"Validation\", c=(1, 0, 0))\n", "\n", "plt.xlabel(\"Epochs\")\n", "plt.ylabel(\"Accuracy\")\n", "plt.ylim(0, 1)\n", "\n", "plt.grid()\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Test\n", "\n", "Single number below from the evaluate function" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10/10 [==============================] - 0s 2ms/step - loss: 0.6832 - accuracy: 0.7634\n" ] }, { "data": { "text/plain": [ "[0.6831779479980469, 0.7634069323539734]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(data_test.to_numpy(), labels_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get raw predictions from test data to generate a confusion matrix" ] }, { "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": [ "predictions = model(data_test.to_numpy())\n", "\n", "conf = tf.math.confusion_matrix([tf.math.argmax(i) for i in labels_test], \n", " [tf.math.argmax(i) for i in predictions], \n", " num_classes=len(filtered_playlists))\n", "\n", "normalised_conf = np.ndarray((len(filtered_playlists), len(filtered_playlists)))\n", "for idx, row in enumerate(conf):\n", " normalised_conf[idx, :] = row / np.sum(row)\n", "\n", "sns.heatmap(normalised_conf, \n", " annot=True, \n", " xticklabels=playlist_names, yticklabels=playlist_names, \n", " cmap='inferno')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Imports & Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from datetime import datetime\n", "import os\n", "\n", "from google.cloud import bigquery\n", "import matplotlib.pyplot as plt\n", "import matplotlib as mpl\n", "mpl.rcParams['figure.dpi'] = 120\n", "import seaborn as sns\n", "\n", "from analysis.net import get_spotnet, get_playlist, track_frame\n", "from analysis.query import *\n", "from analysis import spotify_descriptor_headers, float_headers, days_since\n", "\n", "import numpy as np\n", "import pandas as pd\n", "\n", "from sklearn import svm\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import plot_confusion_matrix\n", "from sklearn.utils import class_weight\n", "\n", "import tensorflow as tf\n", "\n", "client = bigquery.Client()\n", "spotnet = get_spotnet()\n", "cache = 'query.csv'\n", "first_day = datetime(year=2017, month=11, day=3)\n", "sig_max, c_max = 0.5, 20" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Read Scrobble Frame" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "scrobbles = get_query(cache=cache)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Write Scrobble Frame" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "scrobbles.reset_index().to_csv(cache, sep='\\t')" ] } ], "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.9" } }, "nbformat": 4, "nbformat_minor": 4 }