{ "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": 216, "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": 217, "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": 218, "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": 219, "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": 220, "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": 226, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential_27\"\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": 227, "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": 228, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoQAAAG/CAYAAADB4sa8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAABJ0AAASdAHeZh94AABaA0lEQVR4nO3deXxU1f3/8dcnAcISNtlXQVSkiuKGgiKL2lZFbRXccLd1q+JS/dqitlat/rRad6u21h2r4L60KgruGjdEVNwAAdnXQAgBks/vjzOTTIbJOplkwryfj8d9zMxdz+Qkmfecc++55u6IiIiISObKaugCiIiIiEjDUiAUERERyXAKhCIiIiIZToFQREREJMMpEIqIiIhkOAVCERERkQynQCgiIiKS4RQIRURERDKcAqGIiIhIhlMgFBEREclwCoQiIiIiGU6BUERERCTDpXUgNLNcM/uLmf3PzFaamZvZqTXYvp2Z3Wdmy8yswMymmtkeKSyyiIiISKOT1oEQ6Aj8CRgAfF6TDc0sC3gJOAG4E/g/oDMwzcx2qONyioiIiDRaTRq6AFVYBHRz98VmthfwUQ22HQMMBca6+2QAM3sS+Bb4CyEoioiIiGS8tG4hdPcid19cy83HAEuAp2P2twx4EjjSzHLqoIgiIiIijV66txAmY3fgU3cviZufB5wJ7Ah8kWhDM+sMdIqbnRvZZiawsW6LKiIiIlKnmgG9gDfdfU1VK2/NgbAb8FaC+Ysij92pIBAC5wJ/TkWhREREROrRkcDzVa20NQfCFkBRgvkbYpZX5G5gUty8nYDJEydOZLvttquD4m2psLCQL774goEDB9KiRWXFk4ag+klfqpv0pvpJX6qb9JZM/cyePZsTTjgBYH511t+aA2EhkOg8weYxyxNy96XA0th5ZgbArrvuys4771xHRSwvPz+fNWvWsMcee9CmTZuUHENqT/WTvlQ36U31k75UN+ktmfrJzc2NPq3WaW5pfVFJkhYRuo3jRectrMeyiIiIiKStrTkQTgf2iIxHGGsfYD1h+BkRERGRjLdVBEIz62ZmO5lZ05jZk4EuwFEx63UExgIvuHui8wtFREREMk7an0NoZucB7QhXBQMcbmY9I8/viFxKfT1wCtAXmBtZNhn4AHjAzH4GLCdcPZyNriAWERERKZX2gRC4BNg25vVRlLX6PQokHFvH3YvN7FDgb8B4wlXFHwGnuvs3qSuuiIiISOOS9oHQ3ftUY51TgVMTzF8F/CYyiYiIpKWSkhKWLFlCUVERJSXx91NInU2bNrHNNtuwaNEili9fXm/HleqJr5+srCxycnLo0qULWVl1e9Zf2gdCERGRrVlJSQnz5s2jsLCQ7OxssrOzS4c6S7UmTZrQqVMnmjRRHEhHsfXj7mzcuJHCwkKKioro3bt3nYZC/QaIiIg0oCVLllBYWMg222xD586d6y0MAhQXF7N27Vpat25NdnZ2vR1Xqie+ftydpUuXsnLlSpYsWUK3bolG16udreIqYxERkcaqqKiI7Ozseg+D0viYGZ07dyY7O5uiorodLEWBUEREpAGVlJTUazexNG5mRnZ2dp2fa6pAKCIi0sAUBqUmUvH7okAoIiIikuEUCEVEREQynAKhiIiINFqnnnoqffr0aehiNHoKhCIiIlLnzKxa07Rp0xq6qILGIRQREZEUeOSRR8q9fvjhh3nttde2mD9gwICkjvPPf/6zXu/usrVSIBQREZE6d+KJJ5Z7/cEHH/Daa69tMT/e+vXradmyZbWP07Rp01qVT8pTl7GIiIg0iBEjRrDLLrvwySefcMABB9CyZUsmTJgAwHPPPcdhhx1G9+7dycnJoV+/flxzzTUUFxeX20f8OYRz587FzLjpppu477776NevHzk5Oey999589NFH9fn2GhW1EIqIiEiDWbFiBYcccgjHHXccJ554Il26dAHgwQcfJDc3l4svvpjc3FzeeOMN/vSnP5Gfn8/f/va3Kvc7ceJE1q5dy1lnnYWZceONN3LUUUcxe/ZstSomoEAoIiKShi68EKZPT+0x3LMoLs4lOzuLqsY6HjQIbr217suwePFi7rnnHs4666xy8ydOnEiLFi1KX5999tmcffbZ3H333Vx77bXk5ORUut958+bx3Xff0b59ewD69+/PkUceySuvvMLo0aPr/o00cgqEIiIiaWj6dHjzzVQfxWjoKJCTk8Npp522xfzYMLh27VqKiooYNmwY9957L7NmzWK33XardL/HHntsaRgEGDZsGACzZ8+uo5JvXRQIRURE0tCgQak/hrtTXFxcrXspp6o8PXr0oFmzZlvM//LLL7niiit44403yM/PL7dszZo1Ve63d+/e5V5Hw+GqVauSKO3WS4FQREQkDaWiezZecXEJa9euo3Xr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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": 229, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10/10 [==============================] - 0s 857us/step - loss: 0.6952 - accuracy: 0.7792\n" ] }, { "data": { "text/plain": [ "[0.6951839327812195, 0.7791798114776611]" ] }, "execution_count": 229, "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": 230, "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": 60, "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 }