├── 01-spotify-api-calls.ipynb ├── 02-gracenote-api-calls.ipynb ├── 03-exploratory-data-analysis.ipynb ├── 04-feature-engineering-and-modeling.ipynb ├── 05-production.ipynb ├── README.md ├── app ├── .cache-neo.kaiting ├── app.py ├── static │ └── photo-1468164016595-6108e4c60c8b.jpg └── templates │ └── index.html ├── neokt-audio-music-mood-classification-102816.pdf └── screenshots ├── example00-input_example.png ├── example00-landing_page.png ├── example01-indie_electronics_mood_map.png ├── example01-indie_electronics_playlist.png ├── example02-mood_booster_mood_map.png ├── example02-mood_booster_playlist.png ├── example03-state_of_mind_mood_map.png ├── example03-state_of_mind_playlist.png ├── example04-90s_baby_makers_mood_map.png └── example04-90s_baby_makers_playlist.png /01-spotify-api-calls.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import sys\n", 12 | "\n", 13 | "import numpy as np\n", 14 | "import pandas as pd\n", 15 | "import datetime\n", 16 | "import time\n", 17 | "\n", 18 | "# music api imports\n", 19 | "import spotipy\n", 20 | "import spotipy.util as util\n", 21 | "import billboard\n", 22 | "import pygn\n", 23 | "import pylast\n", 24 | "\n", 25 | "import requests\n", 26 | "import re\n", 27 | "from bs4 import BeautifulSoup\n", 28 | "from time import sleep\n", 29 | "import pickle" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 4, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "# timing function\n", 41 | "def timefunc(f):\n", 42 | " def f_timer(*args, **kwargs):\n", 43 | " start = time.time()\n", 44 | " result = f(*args, **kwargs)\n", 45 | " end = time.time()\n", 46 | " print f.__name__, 'took', end - start, 'seconds'\n", 47 | " return result\n", 48 | " return f_timer" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 5, 54 | "metadata": { 55 | "collapsed": false 56 | }, 57 | "outputs": [], 58 | "source": [ 59 | "# Setting up tokens and authorization - hidden for github, use own tokens\n", 60 | "\n", 61 | "# Spotify\n", 62 | "token = util.prompt_for_user_token(,\n", 63 | " client_id=,\n", 64 | " client_secret=,\n", 65 | " redirect_uri=)\n", 66 | "\n", 67 | "spotify = spotipy.Spotify(auth=token)\n", 68 | "\n", 69 | "# Gracenote\n", 70 | "clientid=\n", 71 | "userid = pygn.register(clientid)\n", 72 | "\n", 73 | "# last.fm\n", 74 | "apikey = \n", 75 | "apisecret = \n", 76 | "username = \n", 77 | "password_hash = pylast.md5()\n", 78 | "\n", 79 | "lastfm = pylast.LastFMNetwork(api_key = apikey, api_secret = apisecret,\n", 80 | " username = username, password_hash = password_hash)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 4, 86 | "metadata": { 87 | "collapsed": false 88 | }, 89 | "outputs": [], 90 | "source": [ 91 | "# not used - script to tie billboard charting info with spotify audio features\n", 92 | "@timefunc\n", 93 | "def scrape_song_info(chart,start_date,end_date):\n", 94 | " \n", 95 | " '''Scrape weekly chart data and spotify information for each track between specified dates. \n", 96 | " Returns a dataframe with chart contents for each week and audio features for each track'''\n", 97 | "\n", 98 | " dates = [datetime.datetime.strptime(end_date, '%Y-%m-%d')-datetime.timedelta(7)]\n", 99 | " while min(dates)-datetime.timedelta(7)>=datetime.datetime.strptime(start_date, '%Y-%m-%d'):\n", 100 | " dates.append(dates[-1]-datetime.timedelta(7))\n", 101 | "\n", 102 | " charts_data = {}\n", 103 | " for i in dates:\n", 104 | " search_date = i.strftime(format='%Y-%m-%d')\n", 105 | " week = billboard.ChartData(chart, date=search_date, fetch=True, quantize=True).date\n", 106 | " charts = billboard.ChartData(chart, date=search_date, fetch=True, quantize=True)\n", 107 | " charts_data[week] = charts\n", 108 | "\n", 109 | " charts_df_data = []\n", 110 | "\n", 111 | " for k,v in charts_data.iteritems():\n", 112 | " for i in v:\n", 113 | " df_data = {}\n", 114 | " df_data['week'] = k\n", 115 | " df_data['rank'] = i.rank\n", 116 | " df_data['title'] = i.title\n", 117 | " df_data['artist'] = i.artist\n", 118 | " df_data['chart'] = chart \n", 119 | " charts_df_data.append(df_data)\n", 120 | "\n", 121 | " charts_df = pd.DataFrame(charts_df_data)\n", 122 | "\n", 123 | " charting_songs = {}\n", 124 | " ID_set = []\n", 125 | "\n", 126 | " for v in charts_data.values():\n", 127 | " for i in v:\n", 128 | " title = i.title\n", 129 | " artist = i.artist\n", 130 | " ID = i.spotifyID\n", 131 | " if ID not in ID_set:\n", 132 | " ID_set.append(ID)\n", 133 | " charting_songs[(title,artist)] = ID\n", 134 | "\n", 135 | " spotify = spotipy.Spotify(auth=token)\n", 136 | " spotify_info = {k: spotify.audio_features(tracks=[v]) for k,v in charting_songs.iteritems()}\n", 137 | "\n", 138 | " spot_info = []\n", 139 | "\n", 140 | " for k,v in spotify_info.iteritems():\n", 141 | " try:\n", 142 | " spot_dict = {}\n", 143 | " spot_dict = v[0]\n", 144 | " spot_dict['title'] = k[0]\n", 145 | " spot_dict['artist'] = k[1]\n", 146 | " spot_info.append(spot_dict)\n", 147 | " except:\n", 148 | " pass\n", 149 | "\n", 150 | " spotify_info = pd.DataFrame(spot_info)\n", 151 | " spotify_info = spotify_info.drop(['analysis_url','track_href','type','uri'],axis=1)\n", 152 | "\n", 153 | " return charts_df,spotify_info" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": 5, 159 | "metadata": { 160 | "collapsed": false 161 | }, 162 | "outputs": [ 163 | { 164 | "name": "stdout", 165 | "output_type": "stream", 166 | "text": [ 167 | "scrape_song_info took 9.31413388252 seconds\n" 168 | ] 169 | } 170 | ], 171 | "source": [ 172 | "charts_df, spotify_info = scrape_song_info('hot-100', '2016-08-30', '2016-09-01')" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 10, 178 | "metadata": { 179 | "collapsed": false 180 | }, 181 | "outputs": [ 182 | { 183 | "data": { 184 | "text/plain": [ 185 | "{'album_art_url': 'http://akamai-b.cdn.cddbp.net/cds/2.0/cover/2F8A/B566/9458/E56D_medium_front.jpg?cid=1157132724',\n", 186 | " 'album_artist_name': 'Zara Larsson',\n", 187 | " 'album_gnid': '528962250-88888A804C41AA5C7598C43C29F47FF0',\n", 188 | " 'album_title': 'Lush Life [Single]',\n", 189 | " 'album_year': '2015',\n", 190 | " 'artist_bio_url': '',\n", 191 | " 'artist_era': {'1': {'ID': '29483', 'TEXT': '2000s'},\n", 192 | " '2': {'ID': '29493', 'TEXT': 'Late 2000s'}},\n", 193 | " 'artist_image_url': '',\n", 194 | " 'artist_origin': {'1': {'ID': '29896', 'TEXT': 'Scandinavia'},\n", 195 | " '2': {'ID': '29991', 'TEXT': 'Sweden'},\n", 196 | " '4': {'ID': '30894', 'TEXT': 'Stockholm'}},\n", 197 | " 'artist_type': {'1': {'ID': '29423', 'TEXT': 'Female'},\n", 198 | " '2': {'ID': '29443', 'TEXT': 'Female'}},\n", 199 | " 'genre': {'1': {'ID': '35469', 'TEXT': 'Pop'},\n", 200 | " '2': {'ID': '35493', 'TEXT': 'Western Pop'},\n", 201 | " '3': {'ID': '25637', 'TEXT': 'Dance Pop'}},\n", 202 | " 'mood': {'1': {'ID': '65330', 'TEXT': 'Rowdy'},\n", 203 | " '2': {'ID': '43035', 'TEXT': 'Driving Dark Groove'}},\n", 204 | " 'radio_id': '',\n", 205 | " 'review_url': '',\n", 206 | " 'tempo': {'1': {'ID': '34283', 'TEXT': 'Medium Tempo'},\n", 207 | " '2': {'ID': '34291', 'TEXT': 'Medium Fast'},\n", 208 | " '3': {'ID': '34318', 'TEXT': '90s'}},\n", 209 | " 'track_artist_name': '',\n", 210 | " 'track_gnid': '528962251-F8405A3296172ABA9479341AAD6464AD',\n", 211 | " 'track_number': '1',\n", 212 | " 'track_title': 'Lush Life',\n", 213 | " 'tracks': [{'mood': {'1': {'ID': '65330', 'TEXT': 'Rowdy'},\n", 214 | " '2': {'ID': '43035', 'TEXT': 'Driving Dark Groove'}},\n", 215 | " 'tempo': {'1': {'ID': '34283', 'TEXT': 'Medium Tempo'},\n", 216 | " '2': {'ID': '34291', 'TEXT': 'Medium Fast'},\n", 217 | " '3': {'ID': '34318', 'TEXT': '90s'}},\n", 218 | " 'track_artist_name': '',\n", 219 | " 'track_gnid': '528962251-F8405A3296172ABA9479341AAD6464AD',\n", 220 | " 'track_number': '1',\n", 221 | " 'track_title': 'Lush Life'}],\n", 222 | " 'xid': ''}" 223 | ] 224 | }, 225 | "execution_count": 10, 226 | "metadata": {}, 227 | "output_type": "execute_result" 228 | } 229 | ], 230 | "source": [ 231 | "# Examples of gracenote fuzzy match & full records\n", 232 | "song1 = pygn.search(clientid, userid, artist='Zara', track='Lush')\n", 233 | "song2 = pygn.search(clientid, userid, artist='The Chainsmokers', track='Closer')\n", 234 | "\n", 235 | "song1" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": 6, 241 | "metadata": { 242 | "collapsed": true 243 | }, 244 | "outputs": [], 245 | "source": [ 246 | "moods = {'Pastoral / Serene':[0,0], 'Delicate / Tranquil':[0,1], 'Hopeful / Breezy':[0,2], 'Cheerful / Playful':[0,3], 'Carefree Pop':[0,4], 'Party / Fun':[0,5], 'Showy / Rousing':[0,6], 'Lusty / Jaunty':[0,7], 'Loud Celebratory':[0,8], 'Euphoric Energy':[0,9], \n", 247 | " 'Reverent / Healing':[1,0], 'Quiet / Introspective':[1,1], 'Friendly':[1,2], 'Charming / Easygoing':[1,3], 'Soulful / Easygoing':[1,4], 'Happy / Soulful':[1,5], 'Playful / Swingin':[1,6], 'Exuberant / Festive':[1,7], 'Upbeat Pop Groove':[1,8], 'Happy Excitement':[1,9], \n", 248 | " 'Refined / Mannered':[2,0], 'Awakening / Stately':[2,1], 'Sweet / Sincere':[2,2], 'Heartfelt Passion':[2,3], 'Strong / Stable':[2,4], 'Powerful / Heroic':[2,5], 'Invigorating / Joyous':[2,6], 'Jubilant / Soulful':[2,7], 'Ramshackle / Rollicking':[2,8], 'Wild / Rowdy':[2,9], \n", 249 | " 'Romantic / Lyrical':[3,0], 'Light Groovy':[3,1], 'Dramatic / Romantic':[3,2], 'Lush / Romantic':[3,3], 'Dramatic Emotion':[3,4], 'Idealistic / Stirring':[3,5], 'Focused Sparkling':[3,6], 'Triumphant / Rousing':[3,7], 'Confident / Tough':[3,8], 'Driving Dark Groove':[3,9],\n", 250 | " 'Tender / Sincere':[4,0], 'Gentle Bittersweet':[4,1], 'Suave / Sultry':[4,2], 'Dark Playful':[4,3], 'Soft Soulful':[4,4], 'Sensual Groove':[4,5], 'Dark Sparkling Lyrical':[4,6], 'Fiery Groove':[4,7], 'Arousing Groove':[4,8], 'Heavy Beat':[4,9], \n", 251 | " 'Lyrical Sentimental':[5,0], 'Cool Melancholy':[5,1], 'Intimate Bittersweet':[5,2], 'Smoky / Romantic':[5,3], 'Dreamy Pulse':[5,4], 'Intimate Passionate':[5,5], 'Rhythm Energetic': [5,6], 'Abstract Groove':[5,7], 'Edgy / Sexy':[5,8], 'Abstract Beat':[5,9], \n", 252 | " 'Mysterious / Dreamy':[6,0], 'Light Melancholy':[6,1], 'Casual Groove':[6,2], 'Wary / Defiant':[6,3], 'Bittersweet Pop':[6,4], 'Energetic Yearning':[6,5], 'Dark Pop':[6,6], 'Dark Pop Intensity':[6,7], 'Heavy Brooding':[6,8], 'Hard Positive Excitement':[6,9], \n", 253 | " 'Wistful / Forlorn':[7,0], 'Sad / Soulful':[7,1], 'Cool Confidence':[7,2], 'Dark Groovy':[7,3], 'Sensitive / Exploring':[7,4], 'Energetic Dreamy':[7,5], 'Dark Urgent':[7,6], 'Energetic Anxious':[7,7], 'Attitude / Defiant':[7,8], 'Hard Dark Excitement':[7,9], \n", 254 | " 'Solemn / Spiritual':[8,0], 'Enigmatic / Mysterious':[8,1], 'Sober / Determined':[8,2], 'Strumming Yearning':[8,3], 'Melodramatic':[8,4], 'Hypnotic Rhythm':[8,5], 'Evocative / Intriguing':[8,6], 'Energetic Melancholy':[8,7], 'Dark Hard Beat':[8,8], 'Heavy Triumphant':[8,9], \n", 255 | " 'Dark Cosmic':[9,0], 'Creepy / Ominous':[9,1], 'Depressed / Lonely':[9,2], 'Gritty / Soulful':[9,3], 'Serious / Cerebral':[9,4], 'Thrilling':[9,5], 'Dreamy Brooding':[9,6], 'Alienated / Brooding':[9,7], 'Chaotic / Intense':[9,8], 'Aggressive Power':[9,9]}" 256 | ] 257 | }, 258 | { 259 | "cell_type": "markdown", 260 | "metadata": {}, 261 | "source": [ 262 | "## Get Spotify Song Information" 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 23, 268 | "metadata": { 269 | "collapsed": false 270 | }, 271 | "outputs": [], 272 | "source": [ 273 | "@timefunc\n", 274 | "# get categories \n", 275 | "def get_categories():\n", 276 | " category_ids = []\n", 277 | " for i in spotify.categories(limit = 50)['categories']['items']:\n", 278 | " category_ids.append(i.get('id'))\n", 279 | " return category_ids\n", 280 | "\n", 281 | "@timefunc\n", 282 | "# get playlists from list of categories\n", 283 | "def get_playlists(categories):\n", 284 | " playlist_ids = []\n", 285 | " for i in categories:\n", 286 | " for j in spotify.category_playlists(i, limit = 50)['playlists']['items']:\n", 287 | " playlist_ids.append(j.get('id'))\n", 288 | " return playlist_ids\n", 289 | "\n", 290 | "# get song ids from list of playlist ids\n", 291 | "@timefunc\n", 292 | "def get_songs(playlists):\n", 293 | " song_ids = []\n", 294 | " for i in playlists:\n", 295 | " try:\n", 296 | " for j in spotify.user_playlist('spotify', i)['tracks']['items']:\n", 297 | " song_ids.append(j['track']['id'])\n", 298 | " except:\n", 299 | " pass\n", 300 | " time.sleep(.1)\n", 301 | " return song_ids" 302 | ] 303 | }, 304 | { 305 | "cell_type": "code", 306 | "execution_count": 16, 307 | "metadata": { 308 | "collapsed": false 309 | }, 310 | "outputs": [ 311 | { 312 | "name": "stdout", 313 | "output_type": "stream", 314 | "text": [ 315 | "get_categories took 0.0767250061035 seconds\n", 316 | "get_playlists took 7.64370298386 seconds\n", 317 | "get_songs took 2210.98003101 seconds\n" 318 | ] 319 | } 320 | ], 321 | "source": [ 322 | "categories = get_categories()\n", 323 | "playlists = get_playlists(categories)\n", 324 | "songs = get_songs(playlists)" 325 | ] 326 | }, 327 | { 328 | "cell_type": "code", 329 | "execution_count": 29, 330 | "metadata": { 331 | "collapsed": false 332 | }, 333 | "outputs": [], 334 | "source": [ 335 | "songs_df = pd.DataFrame(list(set(songs)))" 336 | ] 337 | }, 338 | { 339 | "cell_type": "code", 340 | "execution_count": 67, 341 | "metadata": { 342 | "collapsed": false 343 | }, 344 | "outputs": [ 345 | { 346 | "name": "stdout", 347 | "output_type": "stream", 348 | "text": [ 349 | "764\n", 350 | "26079\n" 351 | ] 352 | } 353 | ], 354 | "source": [ 355 | "print len(playlists)\n", 356 | "print len(songs_df)" 357 | ] 358 | }, 359 | { 360 | "cell_type": "code", 361 | "execution_count": 8, 362 | "metadata": { 363 | "collapsed": false 364 | }, 365 | "outputs": [ 366 | { 367 | "data": { 368 | "text/html": [ 369 | "
\n", 370 | "\n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | "
artistexplicitidpopularitytitle
0NirvanaFalse3FUsMXBxA4V7eUwQ7B0HQO48Love Buzz
1The Presidents Of The United States Of AmericaFalse2JdzB67NvIa90K4gEZPLeX58Lump
2Stanton WarriorsFalse0zXLMZUCYZCx8Bq4jCr17430So Sweet
3Natalie MarchenkoFalse14w7n7gi635VCb5f7t2OQ537License To Chill - Pacha Sax Lounge RMX
4RobynFalse01NJd6s7Kyn6NSsPp503sh28Be Mine! - Live At The Cherrytree House
\n", 424 | "
" 425 | ], 426 | "text/plain": [ 427 | " artist explicit \\\n", 428 | "0 Nirvana False \n", 429 | "1 The Presidents Of The United States Of America False \n", 430 | "2 Stanton Warriors False \n", 431 | "3 Natalie Marchenko False \n", 432 | "4 Robyn False \n", 433 | "\n", 434 | " id popularity title \n", 435 | "0 3FUsMXBxA4V7eUwQ7B0HQO 48 Love Buzz \n", 436 | "1 2JdzB67NvIa90K4gEZPLeX 58 Lump \n", 437 | "2 0zXLMZUCYZCx8Bq4jCr174 30 So Sweet \n", 438 | "3 14w7n7gi635VCb5f7t2OQ5 37 License To Chill - Pacha Sax Lounge RMX \n", 439 | "4 01NJd6s7Kyn6NSsPp503sh 28 Be Mine! - Live At The Cherrytree House " 440 | ] 441 | }, 442 | "execution_count": 8, 443 | "metadata": {}, 444 | "output_type": "execute_result" 445 | } 446 | ], 447 | "source": [ 448 | "songs_df.head()" 449 | ] 450 | }, 451 | { 452 | "cell_type": "markdown", 453 | "metadata": {}, 454 | "source": [ 455 | "## Load Pickle Point" 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "execution_count": 32, 461 | "metadata": { 462 | "collapsed": false 463 | }, 464 | "outputs": [], 465 | "source": [ 466 | "songs_df.to_pickle('songs_df.pkl')" 467 | ] 468 | }, 469 | { 470 | "cell_type": "code", 471 | "execution_count": 7, 472 | "metadata": { 473 | "collapsed": true 474 | }, 475 | "outputs": [], 476 | "source": [ 477 | "songs_df = pd.read_pickle('data/songs_df.pkl')" 478 | ] 479 | }, 480 | { 481 | "cell_type": "code", 482 | "execution_count": 60, 483 | "metadata": { 484 | "collapsed": false 485 | }, 486 | "outputs": [], 487 | "source": [ 488 | "songs_df.columns = ['id']" 489 | ] 490 | }, 491 | { 492 | "cell_type": "code", 493 | "execution_count": 69, 494 | "metadata": { 495 | "collapsed": false 496 | }, 497 | "outputs": [], 498 | "source": [ 499 | "def chunks(l, n):\n", 500 | " n = max(1, n)\n", 501 | " return [l[i:i+n] for i in range(0, len(l), n)]" 502 | ] 503 | }, 504 | { 505 | "cell_type": "code", 506 | "execution_count": 191, 507 | "metadata": { 508 | "collapsed": false 509 | }, 510 | "outputs": [], 511 | "source": [ 512 | "@timefunc\n", 513 | "def complete_songs_df(df):\n", 514 | " spotify_title_artists = []\n", 515 | "\n", 516 | " for j in chunks(list(df.id),50):\n", 517 | " try:\n", 518 | " for i in spotify.tracks(j)['tracks']:\n", 519 | " try:\n", 520 | " title_artist = {}\n", 521 | " primary_artist = i['artists'][0]['name'].encode('ascii', 'ignore')\n", 522 | " name = i['name'].encode('ascii', 'ignore')\n", 523 | " popularity = i['popularity']\n", 524 | " explicit = i['explicit']\n", 525 | " ID = i['id']\n", 526 | " \n", 527 | " title_artist['id'] = ID\n", 528 | " title_artist['title'] = name\n", 529 | " title_artist['artist'] = primary_artist\n", 530 | " title_artist['popularity'] = popularity\n", 531 | " title_artist['explicit'] = explicit\n", 532 | " spotify_title_artists.append(title_artist)\n", 533 | " except:\n", 534 | " pass\n", 535 | " except:\n", 536 | " pass\n", 537 | " \n", 538 | " return spotify_title_artists" 539 | ] 540 | }, 541 | { 542 | "cell_type": "code", 543 | "execution_count": 192, 544 | "metadata": { 545 | "collapsed": false 546 | }, 547 | "outputs": [ 548 | { 549 | "name": "stdout", 550 | "output_type": "stream", 551 | "text": [ 552 | "complete_songs_df took 144.593239069 seconds\n" 553 | ] 554 | } 555 | ], 556 | "source": [ 557 | "songs_plus = complete_songs_df(songs_df)" 558 | ] 559 | }, 560 | { 561 | "cell_type": "code", 562 | "execution_count": 194, 563 | "metadata": { 564 | "collapsed": false 565 | }, 566 | "outputs": [], 567 | "source": [ 568 | "songs_df_plus = pd.DataFrame(songs_plus)" 569 | ] 570 | }, 571 | { 572 | "cell_type": "code", 573 | "execution_count": 204, 574 | "metadata": { 575 | "collapsed": false 576 | }, 577 | "outputs": [ 578 | { 579 | "data": { 580 | "text/plain": [ 581 | "26029" 582 | ] 583 | }, 584 | "execution_count": 204, 585 | "metadata": {}, 586 | "output_type": "execute_result" 587 | } 588 | ], 589 | "source": [ 590 | "len(songs_df_plus)" 591 | ] 592 | }, 593 | { 594 | "cell_type": "markdown", 595 | "metadata": {}, 596 | "source": [ 597 | "### Load Pickle Point" 598 | ] 599 | }, 600 | { 601 | "cell_type": "code", 602 | "execution_count": 196, 603 | "metadata": { 604 | "collapsed": true 605 | }, 606 | "outputs": [], 607 | "source": [ 608 | "songs_df_plus.to_pickle('data/songs_df.pkl')" 609 | ] 610 | }, 611 | { 612 | "cell_type": "code", 613 | "execution_count": 12, 614 | "metadata": { 615 | "collapsed": true 616 | }, 617 | "outputs": [], 618 | "source": [ 619 | "songs_df_plus = pd.read_pickle('data/songs_df.pkl')" 620 | ] 621 | }, 622 | { 623 | "cell_type": "markdown", 624 | "metadata": {}, 625 | "source": [ 626 | "## Get Audio Features" 627 | ] 628 | }, 629 | { 630 | "cell_type": "code", 631 | "execution_count": 103, 632 | "metadata": { 633 | "collapsed": false 634 | }, 635 | "outputs": [], 636 | "source": [ 637 | "@timefunc\n", 638 | "def complete_audio_features(df):\n", 639 | " features_list = []\n", 640 | " for j in chunks(list(df.id),50):\n", 641 | " features_add = spotify.audio_features(tracks=j)\n", 642 | " features_list.extend(features_add)\n", 643 | " return features_list" 644 | ] 645 | }, 646 | { 647 | "cell_type": "code", 648 | "execution_count": 104, 649 | "metadata": { 650 | "collapsed": false 651 | }, 652 | "outputs": [ 653 | { 654 | "name": "stdout", 655 | "output_type": "stream", 656 | "text": [ 657 | "retrying ...1secs\n", 658 | "complete_audio_features took 171.850511074 seconds\n" 659 | ] 660 | } 661 | ], 662 | "source": [ 663 | "audio_features = complete_audio_features(songs_df_plus)" 664 | ] 665 | }, 666 | { 667 | "cell_type": "code", 668 | "execution_count": 145, 669 | "metadata": { 670 | "collapsed": false 671 | }, 672 | "outputs": [], 673 | "source": [ 674 | "def make_audio_features_df(audio_features):\n", 675 | " audio_features_df = pd.DataFrame(columns = audio_features[0])\n", 676 | " for i in audio_features:\n", 677 | " audio_features_df = audio_features_df.append(i, ignore_index=True)\n", 678 | " return audio_features_df" 679 | ] 680 | }, 681 | { 682 | "cell_type": "code", 683 | "execution_count": null, 684 | "metadata": { 685 | "collapsed": true 686 | }, 687 | "outputs": [], 688 | "source": [ 689 | "audio_features_df = make_audio_features(audio_features)" 690 | ] 691 | }, 692 | { 693 | "cell_type": "markdown", 694 | "metadata": {}, 695 | "source": [ 696 | "### Load Pickle Point" 697 | ] 698 | }, 699 | { 700 | "cell_type": "code", 701 | "execution_count": 147, 702 | "metadata": { 703 | "collapsed": false 704 | }, 705 | "outputs": [], 706 | "source": [ 707 | "audio_features_df.to_pickle('data/audio_features.pkl')" 708 | ] 709 | }, 710 | { 711 | "cell_type": "code", 712 | "execution_count": 11, 713 | "metadata": { 714 | "collapsed": true 715 | }, 716 | "outputs": [], 717 | "source": [ 718 | "audio_features_df = pd.read_pickle('data/audio_features.pkl')" 719 | ] 720 | }, 721 | { 722 | "cell_type": "markdown", 723 | "metadata": {}, 724 | "source": [ 725 | "## Merge Song and Audio Feature Dataframes" 726 | ] 727 | }, 728 | { 729 | "cell_type": "code", 730 | "execution_count": 197, 731 | "metadata": { 732 | "collapsed": false 733 | }, 734 | "outputs": [], 735 | "source": [ 736 | "songs = pd.merge(songs_df_plus, audio_features_df, on='id')" 737 | ] 738 | }, 739 | { 740 | "cell_type": "code", 741 | "execution_count": null, 742 | "metadata": { 743 | "collapsed": false 744 | }, 745 | "outputs": [], 746 | "source": [ 747 | "songs.drop(['track_href', 'analysis_url', 'uri', 'type'], axis=1, inplace=True)" 748 | ] 749 | }, 750 | { 751 | "cell_type": "code", 752 | "execution_count": 10, 753 | "metadata": { 754 | "collapsed": false 755 | }, 756 | "outputs": [ 757 | { 758 | "data": { 759 | "text/html": [ 760 | "
\n", 761 | "\n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | "
artistexplicitidpopularitytitleenergylivenesstempospeechinessacousticnessinstrumentalnesstime_signaturedanceabilitykeyduration_msloudnessvalencemode
0NirvanaFalse3FUsMXBxA4V7eUwQ7B0HQO48Love Buzz0.8850.169138.1530.03540.0000320.19640.473.0215120.0-7.2240.781.0
1The Presidents Of The United States Of AmericaFalse2JdzB67NvIa90K4gEZPLeX58Lump0.8730.165142.7260.03860.004680040.4996.0134200.0-3.9020.8691.0
2Stanton WarriorsFalse0zXLMZUCYZCx8Bq4jCr17430So Sweet0.9360.118127.9970.04250.0005310.59440.7154.0201337.0-6.1270.1060.0
3Natalie MarchenkoFalse14w7n7gi635VCb5f7t2OQ537License To Chill - Pacha Sax Lounge RMX0.5110.24171.9630.03020.2620000.83740.5815.0317811.0-8.1990.3990.0
4RobynFalse01NJd6s7Kyn6NSsPp503sh28Be Mine! - Live At The Cherrytree House0.2490.114116.5990.04510.955000040.5330.0272053.0-8.5320.5130.0
5Pearl JamFalse6qgpO647NPBUvBkm56vV7d5Black0.5480.17976.0200.02870.294000040.3764.0343667.0-10.5800.2330.0
6Sam HuntFalse3wx2kQWPn9p5UppQbNhPAk67Leave The Night On0.9530.349171.9710.06240.099600040.5169.0192160.0-3.8280.8491.0
7George CarlinFalse5DuxYjcuebFPontojL1NEE0War Pictures0.5460.14772.9400.9610.921000030.6117.0222200.0-10.4440.4911.0
8Kaya MayFalse4eg3wsiTrPa7KpwVai2VY756Hands to Myself, Love Yourself, Perfect (Acous...0.4450.113110.0560.050.057500040.7029.0226893.0-9.6930.3260.0
9NotakerFalse341ShRaeysVdxLetlI391K56Infinite0.6690.10899.9870.04830.0937000.8240.6331.0355200.0-8.1240.03840.0
\n", 998 | "
" 999 | ], 1000 | "text/plain": [ 1001 | " artist explicit \\\n", 1002 | "0 Nirvana False \n", 1003 | "1 The Presidents Of The United States Of America False \n", 1004 | "2 Stanton Warriors False \n", 1005 | "3 Natalie Marchenko False \n", 1006 | "4 Robyn False \n", 1007 | "5 Pearl Jam False \n", 1008 | "6 Sam Hunt False \n", 1009 | "7 George Carlin False \n", 1010 | "8 Kaya May False \n", 1011 | "9 Notaker False \n", 1012 | "\n", 1013 | " id popularity \\\n", 1014 | "0 3FUsMXBxA4V7eUwQ7B0HQO 48 \n", 1015 | "1 2JdzB67NvIa90K4gEZPLeX 58 \n", 1016 | "2 0zXLMZUCYZCx8Bq4jCr174 30 \n", 1017 | "3 14w7n7gi635VCb5f7t2OQ5 37 \n", 1018 | "4 01NJd6s7Kyn6NSsPp503sh 28 \n", 1019 | "5 6qgpO647NPBUvBkm56vV7d 5 \n", 1020 | "6 3wx2kQWPn9p5UppQbNhPAk 67 \n", 1021 | "7 5DuxYjcuebFPontojL1NEE 0 \n", 1022 | "8 4eg3wsiTrPa7KpwVai2VY7 56 \n", 1023 | "9 341ShRaeysVdxLetlI391K 56 \n", 1024 | "\n", 1025 | " title energy liveness \\\n", 1026 | "0 Love Buzz 0.885 0.169 \n", 1027 | "1 Lump 0.873 0.165 \n", 1028 | "2 So Sweet 0.936 0.118 \n", 1029 | "3 License To Chill - Pacha Sax Lounge RMX 0.511 0.24 \n", 1030 | "4 Be Mine! - Live At The Cherrytree House 0.249 0.114 \n", 1031 | "5 Black 0.548 0.179 \n", 1032 | "6 Leave The Night On 0.953 0.349 \n", 1033 | "7 War Pictures 0.546 0.147 \n", 1034 | "8 Hands to Myself, Love Yourself, Perfect (Acous... 0.445 0.113 \n", 1035 | "9 Infinite 0.669 0.108 \n", 1036 | "\n", 1037 | " tempo speechiness acousticness instrumentalness time_signature \\\n", 1038 | "0 138.153 0.0354 0.000032 0.196 4 \n", 1039 | "1 142.726 0.0386 0.004680 0 4 \n", 1040 | "2 127.997 0.0425 0.000531 0.594 4 \n", 1041 | "3 171.963 0.0302 0.262000 0.837 4 \n", 1042 | "4 116.599 0.0451 0.955000 0 4 \n", 1043 | "5 76.020 0.0287 0.294000 0 4 \n", 1044 | "6 171.971 0.0624 0.099600 0 4 \n", 1045 | "7 72.940 0.961 0.921000 0 3 \n", 1046 | "8 110.056 0.05 0.057500 0 4 \n", 1047 | "9 99.987 0.0483 0.093700 0.82 4 \n", 1048 | "\n", 1049 | " danceability key duration_ms loudness valence mode \n", 1050 | "0 0.47 3.0 215120.0 -7.224 0.78 1.0 \n", 1051 | "1 0.499 6.0 134200.0 -3.902 0.869 1.0 \n", 1052 | "2 0.715 4.0 201337.0 -6.127 0.106 0.0 \n", 1053 | "3 0.581 5.0 317811.0 -8.199 0.399 0.0 \n", 1054 | "4 0.533 0.0 272053.0 -8.532 0.513 0.0 \n", 1055 | "5 0.376 4.0 343667.0 -10.580 0.233 0.0 \n", 1056 | "6 0.516 9.0 192160.0 -3.828 0.849 1.0 \n", 1057 | "7 0.611 7.0 222200.0 -10.444 0.491 1.0 \n", 1058 | "8 0.702 9.0 226893.0 -9.693 0.326 0.0 \n", 1059 | "9 0.633 1.0 355200.0 -8.124 0.0384 0.0 " 1060 | ] 1061 | }, 1062 | "execution_count": 10, 1063 | "metadata": {}, 1064 | "output_type": "execute_result" 1065 | } 1066 | ], 1067 | "source": [ 1068 | "songs.head(10)" 1069 | ] 1070 | }, 1071 | { 1072 | "cell_type": "markdown", 1073 | "metadata": { 1074 | "collapsed": true 1075 | }, 1076 | "source": [ 1077 | "### Load Pickle Point" 1078 | ] 1079 | }, 1080 | { 1081 | "cell_type": "code", 1082 | "execution_count": 234, 1083 | "metadata": { 1084 | "collapsed": false 1085 | }, 1086 | "outputs": [], 1087 | "source": [ 1088 | "songs.to_pickle('spotify_songs.pkl')" 1089 | ] 1090 | }, 1091 | { 1092 | "cell_type": "code", 1093 | "execution_count": 9, 1094 | "metadata": { 1095 | "collapsed": false 1096 | }, 1097 | "outputs": [], 1098 | "source": [ 1099 | "songs = pd.read_pickle('data/spotify_songs.pkl')" 1100 | ] 1101 | } 1102 | ], 1103 | "metadata": { 1104 | "anaconda-cloud": {}, 1105 | "kernelspec": { 1106 | "display_name": "Python [default]", 1107 | "language": "python", 1108 | "name": "python2" 1109 | }, 1110 | "language_info": { 1111 | "codemirror_mode": { 1112 | "name": "ipython", 1113 | "version": 2 1114 | }, 1115 | "file_extension": ".py", 1116 | "mimetype": "text/x-python", 1117 | "name": "python", 1118 | "nbconvert_exporter": "python", 1119 | "pygments_lexer": "ipython2", 1120 | "version": "2.7.12" 1121 | } 1122 | }, 1123 | "nbformat": 4, 1124 | "nbformat_minor": 0 1125 | } 1126 | -------------------------------------------------------------------------------- /02-gracenote-api-calls.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import sys\n", 12 | "\n", 13 | "import numpy as np\n", 14 | "import pandas as pd\n", 15 | "import datetime\n", 16 | "import time\n", 17 | "\n", 18 | "# music api imports\n", 19 | "import spotipy\n", 20 | "import spotipy.util as util\n", 21 | "import billboard\n", 22 | "import pygn\n", 23 | "import pylast\n", 24 | "\n", 25 | "import requests\n", 26 | "import re\n", 27 | "from bs4 import BeautifulSoup\n", 28 | "from time import sleep\n", 29 | "import pickle\n", 30 | "\n", 31 | "import matplotlib.pyplot as plt\n", 32 | "import seaborn as sns\n", 33 | "%matplotlib inline" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 2, 39 | "metadata": { 40 | "collapsed": true 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "# timing function\n", 45 | "def timefunc(f):\n", 46 | " def f_timer(*args, **kwargs):\n", 47 | " start = time.time()\n", 48 | " result = f(*args, **kwargs)\n", 49 | " end = time.time()\n", 50 | " print f.__name__, 'took', end - start, 'seconds'\n", 51 | " return result\n", 52 | " return f_timer" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 3, 58 | "metadata": { 59 | "collapsed": true 60 | }, 61 | "outputs": [], 62 | "source": [ 63 | "# Setting up tokens and authorization - hidden for github, use own tokens\n", 64 | "\n", 65 | "# Spotify\n", 66 | "token = util.prompt_for_user_token(,\n", 67 | " client_id=,\n", 68 | " client_secret=,\n", 69 | " redirect_uri=)\n", 70 | "\n", 71 | "spotify = spotipy.Spotify(auth=token)\n", 72 | "\n", 73 | "# Gracenote\n", 74 | "clientid=\n", 75 | "userid = pygn.register(clientid)\n", 76 | "\n", 77 | "# last.fm\n", 78 | "apikey = \n", 79 | "apisecret = \n", 80 | "username = \n", 81 | "password_hash = pylast.md5()\n", 82 | "\n", 83 | "lastfm = pylast.LastFMNetwork(api_key = apikey, api_secret = apisecret,\n", 84 | " username = username, password_hash = password_hash)" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 4, 90 | "metadata": { 91 | "collapsed": true 92 | }, 93 | "outputs": [], 94 | "source": [ 95 | "songs = pd.read_pickle('data/spotify_songs.pkl')" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 5, 101 | "metadata": { 102 | "collapsed": false 103 | }, 104 | "outputs": [ 105 | { 106 | "data": { 107 | "text/html": [ 108 | "
\n", 109 | "\n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | " \n", 1080 | " \n", 1081 | " \n", 1082 | " \n", 1083 | " \n", 1084 | " \n", 1085 | " \n", 1086 | " \n", 1087 | " \n", 1088 | " \n", 1089 | " \n", 1090 | " \n", 1091 | " \n", 1092 | " \n", 1093 | " \n", 1094 | " \n", 1095 | " \n", 1096 | " \n", 1097 | " \n", 1098 | " \n", 1099 | " \n", 1100 | " \n", 1101 | " \n", 1102 | " \n", 1103 | " \n", 1104 | " \n", 1105 | " \n", 1106 | " \n", 1107 | " \n", 1108 | " \n", 1109 | " \n", 1110 | " \n", 1111 | " \n", 1112 | " \n", 1113 | " \n", 1114 | " \n", 1115 | " \n", 1116 | " \n", 1117 | " \n", 1118 | " \n", 1119 | " \n", 1120 | " \n", 1121 | " \n", 1122 | " \n", 1123 | " \n", 1124 | " \n", 1125 | " \n", 1126 | " \n", 1127 | " \n", 1128 | " \n", 1129 | " \n", 1130 | " \n", 1131 | " \n", 1132 | " \n", 1133 | " \n", 1134 | " \n", 1135 | " \n", 1136 | " \n", 1137 | " \n", 1138 | " \n", 1139 | " \n", 1140 | " \n", 1141 | " \n", 1142 | " \n", 1143 | " \n", 1144 | " \n", 1145 | " \n", 1146 | " \n", 1147 | " \n", 1148 | " \n", 1149 | " \n", 1150 | " \n", 1151 | " \n", 1152 | " \n", 1153 | " \n", 1154 | " \n", 1155 | " \n", 1156 | " \n", 1157 | " \n", 1158 | " \n", 1159 | " \n", 1160 | " \n", 1161 | " \n", 1162 | " \n", 1163 | " \n", 1164 | " \n", 1165 | " \n", 1166 | " \n", 1167 | " \n", 1168 | " \n", 1169 | " \n", 1170 | " \n", 1171 | " \n", 1172 | " \n", 1173 | " \n", 1174 | " \n", 1175 | " \n", 1176 | " \n", 1177 | " \n", 1178 | " \n", 1179 | " \n", 1180 | " \n", 1181 | " \n", 1182 | " \n", 1183 | " \n", 1184 | " \n", 1185 | " \n", 1186 | " \n", 1187 | " \n", 1188 | " \n", 1189 | " \n", 1190 | " \n", 1191 | " \n", 1192 | " \n", 1193 | " \n", 1194 | " \n", 1195 | " \n", 1196 | " \n", 1197 | " \n", 1198 | " \n", 1199 | " \n", 1200 | " \n", 1201 | " \n", 1202 | " \n", 1203 | " \n", 1204 | " \n", 1205 | " \n", 1206 | " \n", 1207 | " \n", 1208 | " \n", 1209 | " \n", 1210 | " \n", 1211 | " \n", 1212 | " \n", 1213 | " \n", 1214 | " \n", 1215 | " \n", 1216 | " \n", 1217 | " \n", 1218 | " \n", 1219 | " \n", 1220 | " \n", 1221 | " \n", 1222 | " \n", 1223 | " \n", 1224 | " \n", 1225 | " \n", 1226 | " \n", 1227 | " \n", 1228 | " \n", 1229 | " \n", 1230 | " \n", 1231 | " \n", 1232 | " \n", 1233 | " \n", 1234 | " \n", 1235 | " \n", 1236 | " \n", 1237 | " \n", 1238 | " \n", 1239 | " \n", 1240 | " \n", 1241 | " \n", 1242 | " \n", 1243 | " \n", 1244 | " \n", 1245 | " \n", 1246 | " \n", 1247 | " \n", 1248 | " \n", 1249 | " \n", 1250 | " \n", 1251 | " \n", 1252 | " \n", 1253 | " \n", 1254 | " \n", 1255 | " \n", 1256 | " \n", 1257 | " \n", 1258 | " \n", 1259 | " \n", 1260 | " \n", 1261 | " \n", 1262 | " \n", 1263 | " \n", 1264 | " \n", 1265 | " \n", 1266 | " \n", 1267 | " \n", 1268 | " \n", 1269 | " \n", 1270 | " \n", 1271 | " \n", 1272 | " \n", 1273 | " \n", 1274 | " \n", 1275 | " \n", 1276 | " \n", 1277 | " \n", 1278 | " \n", 1279 | " \n", 1280 | " \n", 1281 | " \n", 1282 | " \n", 1283 | " \n", 1284 | " \n", 1285 | " \n", 1286 | " \n", 1287 | " \n", 1288 | " \n", 1289 | " \n", 1290 | " \n", 1291 | " \n", 1292 | " \n", 1293 | " \n", 1294 | " \n", 1295 | " \n", 1296 | " \n", 1297 | " \n", 1298 | " \n", 1299 | " \n", 1300 | " \n", 1301 | " \n", 1302 | " \n", 1303 | " \n", 1304 | " \n", 1305 | " \n", 1306 | " \n", 1307 | " \n", 1308 | " \n", 1309 | " \n", 1310 | " \n", 1311 | " \n", 1312 | " \n", 1313 | " \n", 1314 | " \n", 1315 | " \n", 1316 | " \n", 1317 | " \n", 1318 | " \n", 1319 | " \n", 1320 | " \n", 1321 | " \n", 1322 | " \n", 1323 | " \n", 1324 | " \n", 1325 | " \n", 1326 | " \n", 1327 | " \n", 1328 | " \n", 1329 | " \n", 1330 | " \n", 1331 | " \n", 1332 | " \n", 1333 | " \n", 1334 | " \n", 1335 | " \n", 1336 | " \n", 1337 | " \n", 1338 | " \n", 1339 | " \n", 1340 | " \n", 1341 | " \n", 1342 | " \n", 1343 | " \n", 1344 | " \n", 1345 | " \n", 1346 | " \n", 1347 | " \n", 1348 | " \n", 1349 | " \n", 1350 | " \n", 1351 | " \n", 1352 | " \n", 1353 | " \n", 1354 | " \n", 1355 | " \n", 1356 | " \n", 1357 | " \n", 1358 | " \n", 1359 | " \n", 1360 | " \n", 1361 | " \n", 1362 | " \n", 1363 | " \n", 1364 | " \n", 1365 | " \n", 1366 | " \n", 1367 | " \n", 1368 | " \n", 1369 | " \n", 1370 | " \n", 1371 | " \n", 1372 | " \n", 1373 | " \n", 1374 | " \n", 1375 | " \n", 1376 | " \n", 1377 | " \n", 1378 | " \n", 1379 | " \n", 1380 | " \n", 1381 | " \n", 1382 | " \n", 1383 | " \n", 1384 | " \n", 1385 | " \n", 1386 | " \n", 1387 | " \n", 1388 | " \n", 1389 | " \n", 1390 | " \n", 1391 | " \n", 1392 | " \n", 1393 | " \n", 1394 | " \n", 1395 | " \n", 1396 | " \n", 1397 | " \n", 1398 | " \n", 1399 | " \n", 1400 | " \n", 1401 | " \n", 1402 | " \n", 1403 | " \n", 1404 | " \n", 1405 | " \n", 1406 | " \n", 1407 | " \n", 1408 | " \n", 1409 | " \n", 1410 | " \n", 1411 | " \n", 1412 | " \n", 1413 | " \n", 1414 | " \n", 1415 | " \n", 1416 | "
artistexplicitidpopularitytitleenergylivenesstempospeechinessacousticnessinstrumentalnesstime_signaturedanceabilitykeyduration_msloudnessvalencemode
0NirvanaFalse3FUsMXBxA4V7eUwQ7B0HQO48Love Buzz0.8850000.169138.1530.03540.0000320.19640.473.0215120.0-7.2240.781.0
1The Presidents Of The United States Of AmericaFalse2JdzB67NvIa90K4gEZPLeX58Lump0.8730000.165142.7260.03860.004680040.4996.0134200.0-3.9020.8691.0
2Stanton WarriorsFalse0zXLMZUCYZCx8Bq4jCr17430So Sweet0.9360000.118127.9970.04250.0005310.59440.7154.0201337.0-6.1270.1060.0
3Natalie MarchenkoFalse14w7n7gi635VCb5f7t2OQ537License To Chill - Pacha Sax Lounge RMX0.5110000.24171.9630.03020.2620000.83740.5815.0317811.0-8.1990.3990.0
4RobynFalse01NJd6s7Kyn6NSsPp503sh28Be Mine! - Live At The Cherrytree House0.2490000.114116.5990.04510.955000040.5330.0272053.0-8.5320.5130.0
5Pearl JamFalse6qgpO647NPBUvBkm56vV7d5Black0.5480000.17976.0200.02870.294000040.3764.0343667.0-10.5800.2330.0
6Sam HuntFalse3wx2kQWPn9p5UppQbNhPAk67Leave The Night On0.9530000.349171.9710.06240.099600040.5169.0192160.0-3.8280.8491.0
7George CarlinFalse5DuxYjcuebFPontojL1NEE0War Pictures0.5460000.14772.9400.9610.921000030.6117.0222200.0-10.4440.4911.0
8Kaya MayFalse4eg3wsiTrPa7KpwVai2VY756Hands to Myself, Love Yourself, Perfect (Acous...0.4450000.113110.0560.050.057500040.7029.0226893.0-9.6930.3260.0
9NotakerFalse341ShRaeysVdxLetlI391K56Infinite0.6690000.10899.9870.04830.0937000.8240.6331.0355200.0-8.1240.03840.0
10Thomas RhettFalse4vLRCGOBz4zIS8nEHk5v9j54I Feel Good0.5840000.0677106.9670.03660.006580040.8343.0195427.0-7.2380.9640.0
11KaftanFalse7fRr8M0BGE3mmf9rjKcjd042Romance In Dubai0.1940000.723123.9940.03430.8460000.91340.44710.0459133.0-14.4450.2490.0
12Kail BaxleyFalse3zkdaLqbeTXcIyJnMAwA3532Better Feeln' Better Days0.4010000.0943149.9200.04230.1100000.83340.7641.0223000.0-8.6120.07221.0
13Dirty MacFalse1mT4MwmdVPHvcqAkYyFg9C34Yer Blues - Live0.8740000.686110.9500.1320.0046900.12740.4088.0266600.0-8.2660.7291.0
14Fat JonFalse5o6WCwKNByv0py1w1zuKw048Feel The Void0.2280000.152176.0370.06820.3120000.8340.5936.0199877.0-15.8240.6420.0
15Tchavolo SchmittFalse3jkI4pBId7ZC0b9QOCLPd140L'indien0.4200000.108112.9120.04630.8940000.76740.6325.0222747.0-8.3400.5251.0
16Sofia's ChoiceFalse3AV3RLthCdEtkAUgL41yzp34Isoldes World0.1610000.12780.0140.03210.1710000.90830.6117.0261312.0-13.6740.1541.0
17Aoife O'DonovanFalse0SWNotmLvAsYVMQSDJsRk853Stanley Park0.5560000.104145.0810.03370.7010000.0086730.4661.0170213.0-10.8290.3511.0
18A Day To RememberFalse6J7cSyvSCnPwv3vqHchEfL65If It Means a Lot to You0.5360000.456126.9960.02790.112000040.58410.0243227.0-8.1580.4551.0
19Matt NathansonFalse38YgZVHPWOWsKrsCXz6JyP65Come On Get Higher0.6230000.084892.0180.02970.241000040.6729.0215173.0-5.6990.6211.0
20Winhill/LosehillFalse2PldymZqtssieF3hecUxp837Aifos0.2310000.10899.0330.02990.9900000.63140.4516.0277835.0-13.7640.1791.0
21Sound DreamerFalse2ehTj8yNcjClESRnkkXEws32Blue Noise - 1 Hour0.0005130.7920.000None0.1120000.879NoneNone6.03720046.0-22.258None0.0
22Antoine BrumelFalse6ZLjh6Os8Wh0A5sRXnwPvz23Missa Et ecce terrae motus (The Earthquake Mas...0.2490000.0499130.3210.04090.9820000.051630.1741.0348200.0-20.4520.09251.0
23Gustav HolstFalse39NWMAVXWhAlqfGGJb273W35The Planets, Op. 32: II. Venus, the Bringer of...0.0119000.132138.6310.04010.9580000.8640.1478.0429933.0-30.6880.03261.0
24Half Moon RunFalse7soAS9Ksc9H6TdRSBlJlKV50Turn Your Love0.7210000.0814172.0220.05890.2150000.11840.6395.0241920.0-7.6250.6210.0
25ApinkFalse6YXA3DQuSE1aKAMvbSKFiz38Oh Yes0.8150000.087115.9650.04760.143000040.8197.0203510.0-3.2430.6691.0
26The Chain Gang Of 1974False1hApLa0ZE1mv2Gm6pPg4z946I Still Wonder0.7350000.105100.0380.030.0241000.00037340.5556.0277040.0-5.3010.2111.0
27John DebneyFalse1ZRXjiUrYkXLmOBatgpXDE36The Man Village0.0177000.072293.5920.03820.9570000.96940.1716.0177893.0-31.7300.0361.0
28Jacques Loussier TrioFalse2RJQk9M2tXk8HntW9lus5t30Bach: Goldberg Variations: Aria0.2310000.0713131.0750.04410.9270000.64640.4287.0148200.0-18.8500.311.0
29Kilfenora Fiddle Ceili BandFalse0760mgHmuy6RoYgEYgEaki25Kilfenora Reels: Connemara Stocking - The West...0.8610000.196115.4500.0760.7020000.011540.4932.0171683.0-7.9560.9421.0
.........................................................
25945Nuclear AssaultTrue0dGBtPj5aSXIkYKmCVcYgl2Rise from the Ashes0.9470000.0866133.0670.0620.0000470.87440.2436.0188067.0-12.7700.1270.0
25946Thelonious Monk QuartetFalse7zzFNNxVD0h0ctAT08H0pa20Crepescule With Nellie - Live At Carnegie Hall0.1440000.359135.6400.05690.9730000.17730.5388.0266933.0-17.7110.1021.0
25947GazzoFalse5zaWOwIvbf8z8zAEpnbEHL51What You Waiting For0.9160000.484130.0440.06830.0168003.31e-0640.62611.0231173.0-2.5540.5821.0
25948Johann Sebastian BachFalse21Lig0KA3GHOQiT2KITjau6Die Gitarrenprobe (Arr. After Jesus bleibet me...0.3270000.199.2480.04860.9280000.9410.6417.0197933.0-16.8480.8991.0
25949Big BubFalse3OWjkfq3mlexSVFAGamhhr33Zoom0.3830000.021282.0490.03470.1410000.00015840.7156.0355800.0-6.8530.5381.0
25950Paula AbdulFalse015qd1I4v00JIoK7yOUgKC51Rush, Rush0.4400000.095890.0120.04930.763000040.7064.0292933.0-11.5770.3961.0
25951Frank MccombFalse0AZTkbO9umWmABq28mfkle28Love Natural0.6780000.12886.7180.0650.6630000.024440.6411.0415827.0-7.9450.4630.0
25952Library TapesFalse3hyPgPDqCvJh5Y4jvAn5Bo41Running by the roads, running by the fields (s...0.0641000.1121.9440.04510.8670000.91140.4462.0122384.0-28.8170.1420.0
25953Joe BonamassaFalse1I32D5O8mjfQEglezN4bY043Slow Train0.6940000.277165.2720.03330.0009320.049230.3721.0409720.0-6.7630.6250.0
25954Phillip PhillipsFalse2ZQyksYO4zzhyHNcueL0CP58Home0.7920000.159121.0010.03350.021500040.5920.0209227.0-5.8840.2711.0
25955Lydia LovelessFalse0hUVB9hUuH6qVSzyyT9hQ231To Love Somebody0.8720000.0837126.9690.03420.0000630.053440.5643.0278827.0-4.5600.6140.0
25956Reel Big FishFalse7IfckgnBsIdP4XE4tfWEDN51Take On Me - Best Of0.9400000.13397.8760.1180.019200040.5769.0199253.0-3.0030.8411.0
25957MortuusFalse1bXyL07fkV4rpu0LsLcRZF25Disobedience0.8190000.354179.9150.0530.0000130.90440.1532.0466880.0-4.8160.1491.0
25958Italian Restaurant Music of ItalyFalse7AUe6MpDNTPf7Knw4bYf2X25Sunrise In Rome0.2180000.105205.1110.06330.9930000.93240.3427.0120400.0-13.7550.4241.0
25959Bonnie \"Prince\" BillyFalse3kSw1KWcgHLtJH4PmF4xvh42Gloria0.0878000.111101.4090.04730.9680000.036940.439.0189355.0-12.6230.1880.0
25960BlondieFalse5N4EONedI3jGNyI5ac4JFK4Heart Of Glass (12\" Version)0.6290000.0459114.9760.0430.0066200.016440.6619.0350867.0-7.7970.6791.0
25961MobyFalse6m97Mu089F0rYcvggzwS2W41Go (Radio Edit)0.8480000.0943125.8810.050.0000520.93140.6694.0218000.0-9.4120.5120.0
25962The CarsFalse4alHo6RGd0D3OUbTPExTHN57Just What I Needed0.5790000.0858127.2240.04730.0152006.4e-0540.6194.0225627.0-9.3070.6991.0
25963Rabbi Elkhanan KirchenFalse4ER7E5A3hQvA6BW0p22olh25Zing dash Gzang: An Shabbes tzu ous Gang0.1130000.10699.3550.04850.971000040.4252.0182778.0-14.9540.3851.0
25964Wolfgang Amadeus MozartFalse7JvzXZDVLUWAQAy43TmYKF33Symphony No.35 In D, K.385 \"Haffner\": 2. Andan...0.0307000.083985.3610.03930.9610000.26340.2117.0493827.0-25.8700.0791.0
25965LOCASHFalse5Toaot8f2kE2kmCSEPuiSn71I Know Somebody0.9030000.12788.9860.0370.035600040.5051.0197830.0-3.6990.4981.0
25966The Lovin' SpoonfulFalse1udKn1oNKYQSQ9OmiIWCMu52Do You Believe in Magic0.7420000.339138.5910.04540.218000040.5520.0125827.0-7.9630.7451.0
25967Gavin JamesFalse1bpAGufvAgqEIob4V1k7mP58Nervous0.6730000.12783.1020.03840.3750007.65e-0540.5437.0216200.0-10.0460.1591.0
25968Sum 41False5dcHKKPLXJJVE4HcVefdOI55Fake My Own Death0.9550000.181109.6230.1180.0001950.0034340.3040.0194590.0-3.7010.1921.0
25969The JacksonsFalse70RnDnl6ctOyXHICnWOnMb34Blame It On The Boogie0.7250000.108113.3170.090.069400040.778.0210333.0-7.9270.8911.0
25970Bhi BhimanFalse2hIAa70njvLuzClmw5If0Z40Guttersnipe0.6230000.085377.2270.02710.0185002.21e-0540.5330.0412373.0-7.1360.351.0
25971Avenged SevenfoldFalse0KXvDdOjzSdFijlDcxdDmj58The Stage0.9190000.106134.9340.08470.0004590.25640.4539.0512840.0-8.9710.2160.0
25972Henry JamisonFalse5Wvf91821sBE8aErRtpfRN53The Rains0.3990000.0704117.0270.0280.6480000.016740.6896.0211795.0-10.9060.4311.0
25973Field ReportFalse6PCf10OiKJyah7OkiIzrEF35I Am Not Waiting Anymore0.2620000.12280.5900.0360.7850000.00013530.4475.0208187.0-9.2180.1661.0
25974Milt JacksonFalse6TSTb6Cj4oVFJmPnxUeVZV12Bags & Trane0.1920000.105121.6060.04580.8380000.03740.4791.0440667.0-17.1900.2210.0
\n", 1417 | "

25975 rows × 18 columns

\n", 1418 | "
" 1419 | ], 1420 | "text/plain": [ 1421 | " artist explicit \\\n", 1422 | "0 Nirvana False \n", 1423 | "1 The Presidents Of The United States Of America False \n", 1424 | "2 Stanton Warriors False \n", 1425 | "3 Natalie Marchenko False \n", 1426 | "4 Robyn False \n", 1427 | "5 Pearl Jam False \n", 1428 | "6 Sam Hunt False \n", 1429 | "7 George Carlin False \n", 1430 | "8 Kaya May False \n", 1431 | "9 Notaker False \n", 1432 | "10 Thomas Rhett False \n", 1433 | "11 Kaftan False \n", 1434 | "12 Kail Baxley False \n", 1435 | "13 Dirty Mac False \n", 1436 | "14 Fat Jon False \n", 1437 | "15 Tchavolo Schmitt False \n", 1438 | "16 Sofia's Choice False \n", 1439 | "17 Aoife O'Donovan False \n", 1440 | "18 A Day To Remember False \n", 1441 | "19 Matt Nathanson False \n", 1442 | "20 Winhill/Losehill False \n", 1443 | "21 Sound Dreamer False \n", 1444 | "22 Antoine Brumel False \n", 1445 | "23 Gustav Holst False \n", 1446 | "24 Half Moon Run False \n", 1447 | "25 Apink False \n", 1448 | "26 The Chain Gang Of 1974 False \n", 1449 | "27 John Debney False \n", 1450 | "28 Jacques Loussier Trio False \n", 1451 | "29 Kilfenora Fiddle Ceili Band False \n", 1452 | "... ... ... \n", 1453 | "25945 Nuclear Assault True \n", 1454 | "25946 Thelonious Monk Quartet False \n", 1455 | "25947 Gazzo False \n", 1456 | "25948 Johann Sebastian Bach False \n", 1457 | "25949 Big Bub False \n", 1458 | "25950 Paula Abdul False \n", 1459 | "25951 Frank Mccomb False \n", 1460 | "25952 Library Tapes False \n", 1461 | "25953 Joe Bonamassa False \n", 1462 | "25954 Phillip Phillips False \n", 1463 | "25955 Lydia Loveless False \n", 1464 | "25956 Reel Big Fish False \n", 1465 | "25957 Mortuus False \n", 1466 | "25958 Italian Restaurant Music of Italy False \n", 1467 | "25959 Bonnie \"Prince\" Billy False \n", 1468 | "25960 Blondie False \n", 1469 | "25961 Moby False \n", 1470 | "25962 The Cars False \n", 1471 | "25963 Rabbi Elkhanan Kirchen False \n", 1472 | "25964 Wolfgang Amadeus Mozart False \n", 1473 | "25965 LOCASH False \n", 1474 | "25966 The Lovin' Spoonful False \n", 1475 | "25967 Gavin James False \n", 1476 | "25968 Sum 41 False \n", 1477 | "25969 The Jacksons False \n", 1478 | "25970 Bhi Bhiman False \n", 1479 | "25971 Avenged Sevenfold False \n", 1480 | "25972 Henry Jamison False \n", 1481 | "25973 Field Report False \n", 1482 | "25974 Milt Jackson False \n", 1483 | "\n", 1484 | " id popularity \\\n", 1485 | "0 3FUsMXBxA4V7eUwQ7B0HQO 48 \n", 1486 | "1 2JdzB67NvIa90K4gEZPLeX 58 \n", 1487 | "2 0zXLMZUCYZCx8Bq4jCr174 30 \n", 1488 | "3 14w7n7gi635VCb5f7t2OQ5 37 \n", 1489 | "4 01NJd6s7Kyn6NSsPp503sh 28 \n", 1490 | "5 6qgpO647NPBUvBkm56vV7d 5 \n", 1491 | "6 3wx2kQWPn9p5UppQbNhPAk 67 \n", 1492 | "7 5DuxYjcuebFPontojL1NEE 0 \n", 1493 | "8 4eg3wsiTrPa7KpwVai2VY7 56 \n", 1494 | "9 341ShRaeysVdxLetlI391K 56 \n", 1495 | "10 4vLRCGOBz4zIS8nEHk5v9j 54 \n", 1496 | "11 7fRr8M0BGE3mmf9rjKcjd0 42 \n", 1497 | "12 3zkdaLqbeTXcIyJnMAwA35 32 \n", 1498 | "13 1mT4MwmdVPHvcqAkYyFg9C 34 \n", 1499 | "14 5o6WCwKNByv0py1w1zuKw0 48 \n", 1500 | "15 3jkI4pBId7ZC0b9QOCLPd1 40 \n", 1501 | "16 3AV3RLthCdEtkAUgL41yzp 34 \n", 1502 | "17 0SWNotmLvAsYVMQSDJsRk8 53 \n", 1503 | "18 6J7cSyvSCnPwv3vqHchEfL 65 \n", 1504 | "19 38YgZVHPWOWsKrsCXz6JyP 65 \n", 1505 | "20 2PldymZqtssieF3hecUxp8 37 \n", 1506 | "21 2ehTj8yNcjClESRnkkXEws 32 \n", 1507 | "22 6ZLjh6Os8Wh0A5sRXnwPvz 23 \n", 1508 | "23 39NWMAVXWhAlqfGGJb273W 35 \n", 1509 | "24 7soAS9Ksc9H6TdRSBlJlKV 50 \n", 1510 | "25 6YXA3DQuSE1aKAMvbSKFiz 38 \n", 1511 | "26 1hApLa0ZE1mv2Gm6pPg4z9 46 \n", 1512 | "27 1ZRXjiUrYkXLmOBatgpXDE 36 \n", 1513 | "28 2RJQk9M2tXk8HntW9lus5t 30 \n", 1514 | "29 0760mgHmuy6RoYgEYgEaki 25 \n", 1515 | "... ... ... \n", 1516 | "25945 0dGBtPj5aSXIkYKmCVcYgl 2 \n", 1517 | "25946 7zzFNNxVD0h0ctAT08H0pa 20 \n", 1518 | "25947 5zaWOwIvbf8z8zAEpnbEHL 51 \n", 1519 | "25948 21Lig0KA3GHOQiT2KITjau 6 \n", 1520 | "25949 3OWjkfq3mlexSVFAGamhhr 33 \n", 1521 | "25950 015qd1I4v00JIoK7yOUgKC 51 \n", 1522 | "25951 0AZTkbO9umWmABq28mfkle 28 \n", 1523 | "25952 3hyPgPDqCvJh5Y4jvAn5Bo 41 \n", 1524 | "25953 1I32D5O8mjfQEglezN4bY0 43 \n", 1525 | "25954 2ZQyksYO4zzhyHNcueL0CP 58 \n", 1526 | "25955 0hUVB9hUuH6qVSzyyT9hQ2 31 \n", 1527 | "25956 7IfckgnBsIdP4XE4tfWEDN 51 \n", 1528 | "25957 1bXyL07fkV4rpu0LsLcRZF 25 \n", 1529 | "25958 7AUe6MpDNTPf7Knw4bYf2X 25 \n", 1530 | "25959 3kSw1KWcgHLtJH4PmF4xvh 42 \n", 1531 | "25960 5N4EONedI3jGNyI5ac4JFK 4 \n", 1532 | "25961 6m97Mu089F0rYcvggzwS2W 41 \n", 1533 | "25962 4alHo6RGd0D3OUbTPExTHN 57 \n", 1534 | "25963 4ER7E5A3hQvA6BW0p22olh 25 \n", 1535 | "25964 7JvzXZDVLUWAQAy43TmYKF 33 \n", 1536 | "25965 5Toaot8f2kE2kmCSEPuiSn 71 \n", 1537 | "25966 1udKn1oNKYQSQ9OmiIWCMu 52 \n", 1538 | "25967 1bpAGufvAgqEIob4V1k7mP 58 \n", 1539 | "25968 5dcHKKPLXJJVE4HcVefdOI 55 \n", 1540 | "25969 70RnDnl6ctOyXHICnWOnMb 34 \n", 1541 | "25970 2hIAa70njvLuzClmw5If0Z 40 \n", 1542 | "25971 0KXvDdOjzSdFijlDcxdDmj 58 \n", 1543 | "25972 5Wvf91821sBE8aErRtpfRN 53 \n", 1544 | "25973 6PCf10OiKJyah7OkiIzrEF 35 \n", 1545 | "25974 6TSTb6Cj4oVFJmPnxUeVZV 12 \n", 1546 | "\n", 1547 | " title energy liveness \\\n", 1548 | "0 Love Buzz 0.885000 0.169 \n", 1549 | "1 Lump 0.873000 0.165 \n", 1550 | "2 So Sweet 0.936000 0.118 \n", 1551 | "3 License To Chill - Pacha Sax Lounge RMX 0.511000 0.24 \n", 1552 | "4 Be Mine! - Live At The Cherrytree House 0.249000 0.114 \n", 1553 | "5 Black 0.548000 0.179 \n", 1554 | "6 Leave The Night On 0.953000 0.349 \n", 1555 | "7 War Pictures 0.546000 0.147 \n", 1556 | "8 Hands to Myself, Love Yourself, Perfect (Acous... 0.445000 0.113 \n", 1557 | "9 Infinite 0.669000 0.108 \n", 1558 | "10 I Feel Good 0.584000 0.0677 \n", 1559 | "11 Romance In Dubai 0.194000 0.723 \n", 1560 | "12 Better Feeln' Better Days 0.401000 0.0943 \n", 1561 | "13 Yer Blues - Live 0.874000 0.686 \n", 1562 | "14 Feel The Void 0.228000 0.152 \n", 1563 | "15 L'indien 0.420000 0.108 \n", 1564 | "16 Isoldes World 0.161000 0.127 \n", 1565 | "17 Stanley Park 0.556000 0.104 \n", 1566 | "18 If It Means a Lot to You 0.536000 0.456 \n", 1567 | "19 Come On Get Higher 0.623000 0.0848 \n", 1568 | "20 Aifos 0.231000 0.108 \n", 1569 | "21 Blue Noise - 1 Hour 0.000513 0.792 \n", 1570 | "22 Missa Et ecce terrae motus (The Earthquake Mas... 0.249000 0.0499 \n", 1571 | "23 The Planets, Op. 32: II. Venus, the Bringer of... 0.011900 0.132 \n", 1572 | "24 Turn Your Love 0.721000 0.0814 \n", 1573 | "25 Oh Yes 0.815000 0.087 \n", 1574 | "26 I Still Wonder 0.735000 0.105 \n", 1575 | "27 The Man Village 0.017700 0.0722 \n", 1576 | "28 Bach: Goldberg Variations: Aria 0.231000 0.0713 \n", 1577 | "29 Kilfenora Reels: Connemara Stocking - The West... 0.861000 0.196 \n", 1578 | "... ... ... ... \n", 1579 | "25945 Rise from the Ashes 0.947000 0.0866 \n", 1580 | "25946 Crepescule With Nellie - Live At Carnegie Hall 0.144000 0.359 \n", 1581 | "25947 What You Waiting For 0.916000 0.484 \n", 1582 | "25948 Die Gitarrenprobe (Arr. After Jesus bleibet me... 0.327000 0.1 \n", 1583 | "25949 Zoom 0.383000 0.0212 \n", 1584 | "25950 Rush, Rush 0.440000 0.0958 \n", 1585 | "25951 Love Natural 0.678000 0.128 \n", 1586 | "25952 Running by the roads, running by the fields (s... 0.064100 0.1 \n", 1587 | "25953 Slow Train 0.694000 0.277 \n", 1588 | "25954 Home 0.792000 0.159 \n", 1589 | "25955 To Love Somebody 0.872000 0.0837 \n", 1590 | "25956 Take On Me - Best Of 0.940000 0.133 \n", 1591 | "25957 Disobedience 0.819000 0.354 \n", 1592 | "25958 Sunrise In Rome 0.218000 0.105 \n", 1593 | "25959 Gloria 0.087800 0.111 \n", 1594 | "25960 Heart Of Glass (12\" Version) 0.629000 0.0459 \n", 1595 | "25961 Go (Radio Edit) 0.848000 0.0943 \n", 1596 | "25962 Just What I Needed 0.579000 0.0858 \n", 1597 | "25963 Zing dash Gzang: An Shabbes tzu ous Gang 0.113000 0.106 \n", 1598 | "25964 Symphony No.35 In D, K.385 \"Haffner\": 2. Andan... 0.030700 0.0839 \n", 1599 | "25965 I Know Somebody 0.903000 0.127 \n", 1600 | "25966 Do You Believe in Magic 0.742000 0.339 \n", 1601 | "25967 Nervous 0.673000 0.127 \n", 1602 | "25968 Fake My Own Death 0.955000 0.181 \n", 1603 | "25969 Blame It On The Boogie 0.725000 0.108 \n", 1604 | "25970 Guttersnipe 0.623000 0.0853 \n", 1605 | "25971 The Stage 0.919000 0.106 \n", 1606 | "25972 The Rains 0.399000 0.0704 \n", 1607 | "25973 I Am Not Waiting Anymore 0.262000 0.122 \n", 1608 | "25974 Bags & Trane 0.192000 0.105 \n", 1609 | "\n", 1610 | " tempo speechiness acousticness instrumentalness time_signature \\\n", 1611 | "0 138.153 0.0354 0.000032 0.196 4 \n", 1612 | "1 142.726 0.0386 0.004680 0 4 \n", 1613 | "2 127.997 0.0425 0.000531 0.594 4 \n", 1614 | "3 171.963 0.0302 0.262000 0.837 4 \n", 1615 | "4 116.599 0.0451 0.955000 0 4 \n", 1616 | "5 76.020 0.0287 0.294000 0 4 \n", 1617 | "6 171.971 0.0624 0.099600 0 4 \n", 1618 | "7 72.940 0.961 0.921000 0 3 \n", 1619 | "8 110.056 0.05 0.057500 0 4 \n", 1620 | "9 99.987 0.0483 0.093700 0.82 4 \n", 1621 | "10 106.967 0.0366 0.006580 0 4 \n", 1622 | "11 123.994 0.0343 0.846000 0.913 4 \n", 1623 | "12 149.920 0.0423 0.110000 0.833 4 \n", 1624 | "13 110.950 0.132 0.004690 0.127 4 \n", 1625 | "14 176.037 0.0682 0.312000 0.83 4 \n", 1626 | "15 112.912 0.0463 0.894000 0.767 4 \n", 1627 | "16 80.014 0.0321 0.171000 0.908 3 \n", 1628 | "17 145.081 0.0337 0.701000 0.00867 3 \n", 1629 | "18 126.996 0.0279 0.112000 0 4 \n", 1630 | "19 92.018 0.0297 0.241000 0 4 \n", 1631 | "20 99.033 0.0299 0.990000 0.631 4 \n", 1632 | "21 0.000 None 0.112000 0.879 None \n", 1633 | "22 130.321 0.0409 0.982000 0.0516 3 \n", 1634 | "23 138.631 0.0401 0.958000 0.86 4 \n", 1635 | "24 172.022 0.0589 0.215000 0.118 4 \n", 1636 | "25 115.965 0.0476 0.143000 0 4 \n", 1637 | "26 100.038 0.03 0.024100 0.000373 4 \n", 1638 | "27 93.592 0.0382 0.957000 0.969 4 \n", 1639 | "28 131.075 0.0441 0.927000 0.646 4 \n", 1640 | "29 115.450 0.076 0.702000 0.0115 4 \n", 1641 | "... ... ... ... ... ... \n", 1642 | "25945 133.067 0.062 0.000047 0.874 4 \n", 1643 | "25946 135.640 0.0569 0.973000 0.177 3 \n", 1644 | "25947 130.044 0.0683 0.016800 3.31e-06 4 \n", 1645 | "25948 99.248 0.0486 0.928000 0.94 1 \n", 1646 | "25949 82.049 0.0347 0.141000 0.000158 4 \n", 1647 | "25950 90.012 0.0493 0.763000 0 4 \n", 1648 | "25951 86.718 0.065 0.663000 0.0244 4 \n", 1649 | "25952 121.944 0.0451 0.867000 0.911 4 \n", 1650 | "25953 165.272 0.0333 0.000932 0.0492 3 \n", 1651 | "25954 121.001 0.0335 0.021500 0 4 \n", 1652 | "25955 126.969 0.0342 0.000063 0.0534 4 \n", 1653 | "25956 97.876 0.118 0.019200 0 4 \n", 1654 | "25957 179.915 0.053 0.000013 0.904 4 \n", 1655 | "25958 205.111 0.0633 0.993000 0.932 4 \n", 1656 | "25959 101.409 0.0473 0.968000 0.0369 4 \n", 1657 | "25960 114.976 0.043 0.006620 0.0164 4 \n", 1658 | "25961 125.881 0.05 0.000052 0.931 4 \n", 1659 | "25962 127.224 0.0473 0.015200 6.4e-05 4 \n", 1660 | "25963 99.355 0.0485 0.971000 0 4 \n", 1661 | "25964 85.361 0.0393 0.961000 0.263 4 \n", 1662 | "25965 88.986 0.037 0.035600 0 4 \n", 1663 | "25966 138.591 0.0454 0.218000 0 4 \n", 1664 | "25967 83.102 0.0384 0.375000 7.65e-05 4 \n", 1665 | "25968 109.623 0.118 0.000195 0.00343 4 \n", 1666 | "25969 113.317 0.09 0.069400 0 4 \n", 1667 | "25970 77.227 0.0271 0.018500 2.21e-05 4 \n", 1668 | "25971 134.934 0.0847 0.000459 0.256 4 \n", 1669 | "25972 117.027 0.028 0.648000 0.0167 4 \n", 1670 | "25973 80.590 0.036 0.785000 0.000135 3 \n", 1671 | "25974 121.606 0.0458 0.838000 0.037 4 \n", 1672 | "\n", 1673 | " danceability key duration_ms loudness valence mode \n", 1674 | "0 0.47 3.0 215120.0 -7.224 0.78 1.0 \n", 1675 | "1 0.499 6.0 134200.0 -3.902 0.869 1.0 \n", 1676 | "2 0.715 4.0 201337.0 -6.127 0.106 0.0 \n", 1677 | "3 0.581 5.0 317811.0 -8.199 0.399 0.0 \n", 1678 | "4 0.533 0.0 272053.0 -8.532 0.513 0.0 \n", 1679 | "5 0.376 4.0 343667.0 -10.580 0.233 0.0 \n", 1680 | "6 0.516 9.0 192160.0 -3.828 0.849 1.0 \n", 1681 | "7 0.611 7.0 222200.0 -10.444 0.491 1.0 \n", 1682 | "8 0.702 9.0 226893.0 -9.693 0.326 0.0 \n", 1683 | "9 0.633 1.0 355200.0 -8.124 0.0384 0.0 \n", 1684 | "10 0.834 3.0 195427.0 -7.238 0.964 0.0 \n", 1685 | "11 0.447 10.0 459133.0 -14.445 0.249 0.0 \n", 1686 | "12 0.764 1.0 223000.0 -8.612 0.0722 1.0 \n", 1687 | "13 0.408 8.0 266600.0 -8.266 0.729 1.0 \n", 1688 | "14 0.593 6.0 199877.0 -15.824 0.642 0.0 \n", 1689 | "15 0.632 5.0 222747.0 -8.340 0.525 1.0 \n", 1690 | "16 0.611 7.0 261312.0 -13.674 0.154 1.0 \n", 1691 | "17 0.466 1.0 170213.0 -10.829 0.351 1.0 \n", 1692 | "18 0.584 10.0 243227.0 -8.158 0.455 1.0 \n", 1693 | "19 0.672 9.0 215173.0 -5.699 0.621 1.0 \n", 1694 | "20 0.451 6.0 277835.0 -13.764 0.179 1.0 \n", 1695 | "21 None 6.0 3720046.0 -22.258 None 0.0 \n", 1696 | "22 0.174 1.0 348200.0 -20.452 0.0925 1.0 \n", 1697 | "23 0.147 8.0 429933.0 -30.688 0.0326 1.0 \n", 1698 | "24 0.639 5.0 241920.0 -7.625 0.621 0.0 \n", 1699 | "25 0.819 7.0 203510.0 -3.243 0.669 1.0 \n", 1700 | "26 0.555 6.0 277040.0 -5.301 0.211 1.0 \n", 1701 | "27 0.171 6.0 177893.0 -31.730 0.036 1.0 \n", 1702 | "28 0.428 7.0 148200.0 -18.850 0.31 1.0 \n", 1703 | "29 0.493 2.0 171683.0 -7.956 0.942 1.0 \n", 1704 | "... ... ... ... ... ... ... \n", 1705 | "25945 0.243 6.0 188067.0 -12.770 0.127 0.0 \n", 1706 | "25946 0.538 8.0 266933.0 -17.711 0.102 1.0 \n", 1707 | "25947 0.626 11.0 231173.0 -2.554 0.582 1.0 \n", 1708 | "25948 0.641 7.0 197933.0 -16.848 0.899 1.0 \n", 1709 | "25949 0.715 6.0 355800.0 -6.853 0.538 1.0 \n", 1710 | "25950 0.706 4.0 292933.0 -11.577 0.396 1.0 \n", 1711 | "25951 0.64 11.0 415827.0 -7.945 0.463 0.0 \n", 1712 | "25952 0.446 2.0 122384.0 -28.817 0.142 0.0 \n", 1713 | "25953 0.372 1.0 409720.0 -6.763 0.625 0.0 \n", 1714 | "25954 0.592 0.0 209227.0 -5.884 0.271 1.0 \n", 1715 | "25955 0.564 3.0 278827.0 -4.560 0.614 0.0 \n", 1716 | "25956 0.576 9.0 199253.0 -3.003 0.841 1.0 \n", 1717 | "25957 0.153 2.0 466880.0 -4.816 0.149 1.0 \n", 1718 | "25958 0.342 7.0 120400.0 -13.755 0.424 1.0 \n", 1719 | "25959 0.43 9.0 189355.0 -12.623 0.188 0.0 \n", 1720 | "25960 0.661 9.0 350867.0 -7.797 0.679 1.0 \n", 1721 | "25961 0.669 4.0 218000.0 -9.412 0.512 0.0 \n", 1722 | "25962 0.619 4.0 225627.0 -9.307 0.699 1.0 \n", 1723 | "25963 0.425 2.0 182778.0 -14.954 0.385 1.0 \n", 1724 | "25964 0.211 7.0 493827.0 -25.870 0.079 1.0 \n", 1725 | "25965 0.505 1.0 197830.0 -3.699 0.498 1.0 \n", 1726 | "25966 0.552 0.0 125827.0 -7.963 0.745 1.0 \n", 1727 | "25967 0.543 7.0 216200.0 -10.046 0.159 1.0 \n", 1728 | "25968 0.304 0.0 194590.0 -3.701 0.192 1.0 \n", 1729 | "25969 0.77 8.0 210333.0 -7.927 0.891 1.0 \n", 1730 | "25970 0.533 0.0 412373.0 -7.136 0.35 1.0 \n", 1731 | "25971 0.453 9.0 512840.0 -8.971 0.216 0.0 \n", 1732 | "25972 0.689 6.0 211795.0 -10.906 0.431 1.0 \n", 1733 | "25973 0.447 5.0 208187.0 -9.218 0.166 1.0 \n", 1734 | "25974 0.479 1.0 440667.0 -17.190 0.221 0.0 \n", 1735 | "\n", 1736 | "[25975 rows x 18 columns]" 1737 | ] 1738 | }, 1739 | "execution_count": 5, 1740 | "metadata": {}, 1741 | "output_type": "execute_result" 1742 | } 1743 | ], 1744 | "source": [ 1745 | "songs" 1746 | ] 1747 | }, 1748 | { 1749 | "cell_type": "code", 1750 | "execution_count": 6, 1751 | "metadata": { 1752 | "collapsed": true 1753 | }, 1754 | "outputs": [], 1755 | "source": [ 1756 | "# Get track info from gracenote\n", 1757 | "# NOTE: Gracenote API has built-in fuzzy matching to artist and track.\n", 1758 | "from collections import defaultdict\n", 1759 | "\n", 1760 | "def get_gn_multiple(search, dictionary, item):\n", 1761 | " '''\n", 1762 | " Helper function to get multiple items within Gracenote record\n", 1763 | " '''\n", 1764 | " for i in search[item].iteritems():\n", 1765 | " dictionary[item + '_' + i[0]] = i[1]['TEXT']\n", 1766 | "\n", 1767 | "def get_gn(artist, track):\n", 1768 | " '''\n", 1769 | " Gets artist and track information from Gracenote\n", 1770 | " '''\n", 1771 | " gn_dict = defaultdict(list)\n", 1772 | " gn_info = pygn.search(clientid, userid, artist=artist, track=track)\n", 1773 | "\n", 1774 | " gn_dict['gnid'] = gn_info['track_gnid']\n", 1775 | "\n", 1776 | " # artist specific info\n", 1777 | " for a in ['artist_origin', 'artist_type', 'artist_era']:\n", 1778 | " get_gn_multiple(gn_info, gn_dict, a)\n", 1779 | " # track specific info\n", 1780 | " for s in ['genre', 'mood', 'tempo']: # can potentially drop 'tempo' since Spotify has already captured this\n", 1781 | " get_gn_multiple(gn_info, gn_dict, s) \n", 1782 | "\n", 1783 | " return dict(gn_dict)" 1784 | ] 1785 | }, 1786 | { 1787 | "cell_type": "code", 1788 | "execution_count": 7, 1789 | "metadata": { 1790 | "collapsed": false 1791 | }, 1792 | "outputs": [], 1793 | "source": [ 1794 | "@timefunc\n", 1795 | "def append_gn_df(df):\n", 1796 | " '''\n", 1797 | " Creates dataframe with artist and track information from Gracenote\n", 1798 | " '''\n", 1799 | " d = {}\n", 1800 | " for index, row in df.iterrows():\n", 1801 | " try:\n", 1802 | " d[row['id']] = get_gn(row['artist'], row['title'])\n", 1803 | " except:\n", 1804 | " pass\n", 1805 | " gn_df = pd.DataFrame(d).transpose().reset_index()\n", 1806 | " gn_df = gn_df.rename(columns = {'index' : 'id'})\n", 1807 | " return gn_df" 1808 | ] 1809 | }, 1810 | { 1811 | "cell_type": "code", 1812 | "execution_count": 14, 1813 | "metadata": { 1814 | "collapsed": false 1815 | }, 1816 | "outputs": [], 1817 | "source": [ 1818 | "@timefunc\n", 1819 | "def chunk_gn_df(df, start, stop):\n", 1820 | " '''\n", 1821 | " Gets Gracenote dataframe from dataframe with spotify IDs and merges them, indexing based on Spotify dataframe\n", 1822 | " '''\n", 1823 | " full_songs = pd.DataFrame()\n", 1824 | " for i in range(start, stop, 100): \n", 1825 | " gn = append_gn_df(df.iloc[i], attach = False)\n", 1826 | " data = pd.merge(df, gn, on='id')\n", 1827 | " full_songs = full_songs.append(data, ignore_index=True)\n", 1828 | " full_songs.to_pickle('data/full_songs_df_' + str(i[-1]) + '.pkl')\n", 1829 | " sleep(.1)" 1830 | ] 1831 | }, 1832 | { 1833 | "cell_type": "markdown", 1834 | "metadata": {}, 1835 | "source": [ 1836 | "### Testing functions" 1837 | ] 1838 | }, 1839 | { 1840 | "cell_type": "code", 1841 | "execution_count": 8, 1842 | "metadata": { 1843 | "collapsed": true 1844 | }, 1845 | "outputs": [], 1846 | "source": [ 1847 | "test = songs[:10].copy()" 1848 | ] 1849 | }, 1850 | { 1851 | "cell_type": "code", 1852 | "execution_count": 203, 1853 | "metadata": { 1854 | "collapsed": false 1855 | }, 1856 | "outputs": [ 1857 | { 1858 | "name": "stdout", 1859 | "output_type": "stream", 1860 | "text": [ 1861 | "append_gn_df took 6.28788208961 seconds\n" 1862 | ] 1863 | } 1864 | ], 1865 | "source": [ 1866 | "test_gn_df = append_gn_df(test)" 1867 | ] 1868 | }, 1869 | { 1870 | "cell_type": "code", 1871 | "execution_count": 9, 1872 | "metadata": { 1873 | "collapsed": true 1874 | }, 1875 | "outputs": [], 1876 | "source": [ 1877 | "test2 = songs[:100].copy()" 1878 | ] 1879 | }, 1880 | { 1881 | "cell_type": "code", 1882 | "execution_count": 35, 1883 | "metadata": { 1884 | "collapsed": false 1885 | }, 1886 | "outputs": [ 1887 | { 1888 | "name": "stdout", 1889 | "output_type": "stream", 1890 | "text": [ 1891 | "append_gn_df took 78.8128910065 seconds\n" 1892 | ] 1893 | } 1894 | ], 1895 | "source": [ 1896 | "test_gn_df2 = append_gn_df(test2)" 1897 | ] 1898 | }, 1899 | { 1900 | "cell_type": "code", 1901 | "execution_count": 10, 1902 | "metadata": { 1903 | "collapsed": true 1904 | }, 1905 | "outputs": [], 1906 | "source": [ 1907 | "test3 = songs[:1000].copy()" 1908 | ] 1909 | }, 1910 | { 1911 | "cell_type": "code", 1912 | "execution_count": 13, 1913 | "metadata": { 1914 | "collapsed": false 1915 | }, 1916 | "outputs": [ 1917 | { 1918 | "name": "stdout", 1919 | "output_type": "stream", 1920 | "text": [ 1921 | "append_gn_df took 79.7802000046 seconds\n", 1922 | "append_gn_df took 86.6563389301 seconds\n", 1923 | "append_gn_df took 65.2759389877 seconds\n", 1924 | "append_gn_df took 79.6878931522 seconds\n", 1925 | "append_gn_df took 76.4993541241 seconds\n", 1926 | "append_gn_df took 90.4260671139 seconds\n", 1927 | "append_gn_df took 72.7159290314 seconds\n", 1928 | "append_gn_df took 76.5112099648 seconds\n", 1929 | "append_gn_df took 94.4111959934 seconds\n", 1930 | "append_gn_df took 79.794656992 seconds\n", 1931 | "chunk_gn_df took 802.02742815 seconds\n" 1932 | ] 1933 | } 1934 | ], 1935 | "source": [ 1936 | "test = chunk_gn_df(test3)" 1937 | ] 1938 | }, 1939 | { 1940 | "cell_type": "markdown", 1941 | "metadata": { 1942 | "collapsed": true 1943 | }, 1944 | "source": [ 1945 | "## Batch Gracenote API Calls" 1946 | ] 1947 | }, 1948 | { 1949 | "cell_type": "code", 1950 | "execution_count": 15, 1951 | "metadata": { 1952 | "collapsed": false 1953 | }, 1954 | "outputs": [ 1955 | { 1956 | "name": "stdout", 1957 | "output_type": "stream", 1958 | "text": [ 1959 | "append_gn_df took 67.4224410057 seconds\n", 1960 | "append_gn_df took 72.3883001804 seconds\n", 1961 | "append_gn_df took 79.8355090618 seconds\n", 1962 | "append_gn_df took 78.1213560104 seconds\n", 1963 | "append_gn_df took 80.340474844 seconds\n", 1964 | "append_gn_df took 64.7614121437 seconds\n", 1965 | "append_gn_df took 79.3378539085 seconds\n", 1966 | "append_gn_df took 77.4290459156 seconds\n", 1967 | "append_gn_df took 68.3279361725 seconds\n", 1968 | "append_gn_df took 84.0087909698 seconds\n", 1969 | "chunk_gn_df took 753.381345987 seconds\n" 1970 | ] 1971 | } 1972 | ], 1973 | "source": [ 1974 | "## Can be called iteratively; manual process and assignemnt to variables not necessary\n", 1975 | "full_songs1999 = chunk_gn_df(songs, 1000, 2000)" 1976 | ] 1977 | }, 1978 | { 1979 | "cell_type": "code", 1980 | "execution_count": 17, 1981 | "metadata": { 1982 | "collapsed": false 1983 | }, 1984 | "outputs": [ 1985 | { 1986 | "name": "stdout", 1987 | "output_type": "stream", 1988 | "text": [ 1989 | "Must query with at least one field (artist, album, track, toc)\n", 1990 | "append_gn_df took 84.309497118 seconds\n", 1991 | "append_gn_df took 72.887706995 seconds\n", 1992 | "append_gn_df took 96.2273700237 seconds\n", 1993 | "append_gn_df took 132.650071144 seconds\n", 1994 | "append_gn_df took 85.8785710335 seconds\n", 1995 | "append_gn_df took 88.1040289402 seconds\n", 1996 | "append_gn_df took 77.864866972 seconds\n", 1997 | "append_gn_df took 86.2918081284 seconds\n", 1998 | "append_gn_df took 69.6620688438 seconds\n", 1999 | "append_gn_df took 68.9744520187 seconds\n", 2000 | "chunk_gn_df took 864.217645884 seconds\n" 2001 | ] 2002 | } 2003 | ], 2004 | "source": [ 2005 | "full_songs2999 = chunk_gn_df(songs, 2000, 3000)" 2006 | ] 2007 | }, 2008 | { 2009 | "cell_type": "code", 2010 | "execution_count": 19, 2011 | "metadata": { 2012 | "collapsed": false 2013 | }, 2014 | "outputs": [ 2015 | { 2016 | "name": "stdout", 2017 | "output_type": "stream", 2018 | "text": [ 2019 | "append_gn_df took 78.3683691025 seconds\n", 2020 | "append_gn_df took 79.9486739635 seconds\n", 2021 | "append_gn_df took 72.4678637981 seconds\n", 2022 | "append_gn_df took 78.1993000507 seconds\n", 2023 | "append_gn_df took 72.6659281254 seconds\n", 2024 | "append_gn_df took 76.5402870178 seconds\n", 2025 | "append_gn_df took 78.0043098927 seconds\n", 2026 | "append_gn_df took 73.5283191204 seconds\n", 2027 | "append_gn_df took 75.2775919437 seconds\n", 2028 | "append_gn_df took 74.0675299168 seconds\n", 2029 | "chunk_gn_df took 760.451182127 seconds\n" 2030 | ] 2031 | } 2032 | ], 2033 | "source": [ 2034 | "full_songs3999 = chunk_gn_df(songs, 3000, 4000)" 2035 | ] 2036 | }, 2037 | { 2038 | "cell_type": "code", 2039 | "execution_count": 21, 2040 | "metadata": { 2041 | "collapsed": false 2042 | }, 2043 | "outputs": [ 2044 | { 2045 | "name": "stdout", 2046 | "output_type": "stream", 2047 | "text": [ 2048 | "append_gn_df took 76.9578900337 seconds\n", 2049 | "append_gn_df took 75.7942149639 seconds\n", 2050 | "append_gn_df took 73.5237259865 seconds\n", 2051 | "append_gn_df took 77.3375658989 seconds\n", 2052 | "append_gn_df took 82.8529810905 seconds\n", 2053 | "append_gn_df took 67.162250042 seconds\n", 2054 | "Must query with at least one field (artist, album, track, toc)\n", 2055 | "append_gn_df took 72.9738769531 seconds\n", 2056 | "append_gn_df took 71.6249399185 seconds\n", 2057 | "Must query with at least one field (artist, album, track, toc)\n", 2058 | "append_gn_df took 79.046284914 seconds\n", 2059 | "append_gn_df took 71.738476038 seconds\n", 2060 | "chunk_gn_df took 750.387325048 seconds\n" 2061 | ] 2062 | } 2063 | ], 2064 | "source": [ 2065 | "full_songs4999 = chunk_gn_df(songs, 4000, 5000)" 2066 | ] 2067 | }, 2068 | { 2069 | "cell_type": "code", 2070 | "execution_count": 23, 2071 | "metadata": { 2072 | "collapsed": false 2073 | }, 2074 | "outputs": [ 2075 | { 2076 | "name": "stdout", 2077 | "output_type": "stream", 2078 | "text": [ 2079 | "append_gn_df took 95.8282520771 seconds\n", 2080 | "append_gn_df took 69.6465280056 seconds\n", 2081 | "append_gn_df took 83.172315836 seconds\n", 2082 | "append_gn_df took 78.8234639168 seconds\n", 2083 | "append_gn_df took 80.6341700554 seconds\n", 2084 | "Must query with at least one field (artist, album, track, toc)\n", 2085 | "append_gn_df took 68.7922978401 seconds\n", 2086 | "append_gn_df took 77.1774830818 seconds\n", 2087 | "append_gn_df took 83.2521080971 seconds\n", 2088 | "append_gn_df took 69.8379299641 seconds\n", 2089 | "append_gn_df took 70.1823079586 seconds\n", 2090 | "chunk_gn_df took 778.720597029 seconds\n" 2091 | ] 2092 | } 2093 | ], 2094 | "source": [ 2095 | "full_songs5999 = chunk_gn_df(songs, 5000, 6000)" 2096 | ] 2097 | }, 2098 | { 2099 | "cell_type": "code", 2100 | "execution_count": 25, 2101 | "metadata": { 2102 | "collapsed": false 2103 | }, 2104 | "outputs": [ 2105 | { 2106 | "name": "stdout", 2107 | "output_type": "stream", 2108 | "text": [ 2109 | "append_gn_df took 86.7909920216 seconds\n", 2110 | "append_gn_df took 78.6328549385 seconds\n", 2111 | "append_gn_df took 78.0821502209 seconds\n", 2112 | "append_gn_df took 74.4237539768 seconds\n", 2113 | "append_gn_df took 69.9132301807 seconds\n", 2114 | "append_gn_df took 68.4916939735 seconds\n", 2115 | "append_gn_df took 79.7115499973 seconds\n", 2116 | "append_gn_df took 76.0548529625 seconds\n", 2117 | "append_gn_df took 83.470785141 seconds\n", 2118 | "append_gn_df took 80.4534299374 seconds\n", 2119 | "chunk_gn_df took 777.427739143 seconds\n" 2120 | ] 2121 | } 2122 | ], 2123 | "source": [ 2124 | "full_songs6999 = chunk_gn_df(songs, 6000, 7000)" 2125 | ] 2126 | }, 2127 | { 2128 | "cell_type": "code", 2129 | "execution_count": 27, 2130 | "metadata": { 2131 | "collapsed": false 2132 | }, 2133 | "outputs": [ 2134 | { 2135 | "name": "stdout", 2136 | "output_type": "stream", 2137 | "text": [ 2138 | "append_gn_df took 87.3198399544 seconds\n", 2139 | "append_gn_df took 71.2444541454 seconds\n", 2140 | "append_gn_df took 64.7104129791 seconds\n", 2141 | "append_gn_df took 91.5900039673 seconds\n", 2142 | "append_gn_df took 78.8001978397 seconds\n", 2143 | "append_gn_df took 81.8212971687 seconds\n", 2144 | "append_gn_df took 78.2230608463 seconds\n", 2145 | "append_gn_df took 84.765859127 seconds\n", 2146 | "append_gn_df took 82.0997200012 seconds\n", 2147 | "append_gn_df took 86.5055379868 seconds\n", 2148 | "chunk_gn_df took 808.462280035 seconds\n" 2149 | ] 2150 | } 2151 | ], 2152 | "source": [ 2153 | "full_songs7999 = chunk_gn_df(songs, 7000, 8000)" 2154 | ] 2155 | }, 2156 | { 2157 | "cell_type": "code", 2158 | "execution_count": 29, 2159 | "metadata": { 2160 | "collapsed": false 2161 | }, 2162 | "outputs": [ 2163 | { 2164 | "name": "stdout", 2165 | "output_type": "stream", 2166 | "text": [ 2167 | "append_gn_df took 77.7793679237 seconds\n", 2168 | "append_gn_df took 73.5890009403 seconds\n", 2169 | "append_gn_df took 72.8890779018 seconds\n", 2170 | "append_gn_df took 76.9375469685 seconds\n", 2171 | "append_gn_df took 87.3194820881 seconds\n", 2172 | "append_gn_df took 72.121778965 seconds\n", 2173 | "append_gn_df took 78.8284990788 seconds\n", 2174 | "append_gn_df took 88.3182590008 seconds\n", 2175 | "append_gn_df took 64.0786280632 seconds\n", 2176 | "append_gn_df took 74.8370850086 seconds\n", 2177 | "chunk_gn_df took 768.161731958 seconds\n" 2178 | ] 2179 | } 2180 | ], 2181 | "source": [ 2182 | "full_songs8999 = chunk_gn_df(songs, 8000, 9000)" 2183 | ] 2184 | }, 2185 | { 2186 | "cell_type": "code", 2187 | "execution_count": 31, 2188 | "metadata": { 2189 | "collapsed": false 2190 | }, 2191 | "outputs": [ 2192 | { 2193 | "name": "stdout", 2194 | "output_type": "stream", 2195 | "text": [ 2196 | "append_gn_df took 76.7856390476 seconds\n", 2197 | "append_gn_df took 78.7005288601 seconds\n", 2198 | "append_gn_df took 78.9515731335 seconds\n", 2199 | "append_gn_df took 75.6537179947 seconds\n", 2200 | "append_gn_df took 84.0704278946 seconds\n", 2201 | "append_gn_df took 72.4143879414 seconds\n", 2202 | "append_gn_df took 125.271933079 seconds\n", 2203 | "append_gn_df took 153.4139359 seconds\n", 2204 | "append_gn_df took 119.485553026 seconds\n", 2205 | "append_gn_df took 308.530214071 seconds\n", 2206 | "chunk_gn_df took 1174.64778805 seconds\n" 2207 | ] 2208 | } 2209 | ], 2210 | "source": [ 2211 | "full_songs9999 = chunk_gn_df(songs, 9000, 10000)" 2212 | ] 2213 | }, 2214 | { 2215 | "cell_type": "code", 2216 | "execution_count": 33, 2217 | "metadata": { 2218 | "collapsed": false 2219 | }, 2220 | "outputs": [ 2221 | { 2222 | "name": "stdout", 2223 | "output_type": "stream", 2224 | "text": [ 2225 | "append_gn_df took 131.71905899 seconds\n", 2226 | "append_gn_df took 96.9787621498 seconds\n", 2227 | "append_gn_df took 146.209033966 seconds\n", 2228 | "append_gn_df took 351.851246119 seconds\n", 2229 | "append_gn_df took 154.008980989 seconds\n", 2230 | "append_gn_df took 105.124425888 seconds\n", 2231 | "append_gn_df took 230.586303949 seconds\n", 2232 | "append_gn_df took 112.298628092 seconds\n", 2233 | "append_gn_df took 85.2859518528 seconds\n", 2234 | "append_gn_df took 110.163626194 seconds\n", 2235 | "chunk_gn_df took 1525.60910511 seconds\n" 2236 | ] 2237 | } 2238 | ], 2239 | "source": [ 2240 | "full_songs10999 = chunk_gn_df(songs, 10000, 11000)" 2241 | ] 2242 | }, 2243 | { 2244 | "cell_type": "code", 2245 | "execution_count": 35, 2246 | "metadata": { 2247 | "collapsed": false 2248 | }, 2249 | "outputs": [ 2250 | { 2251 | "name": "stdout", 2252 | "output_type": "stream", 2253 | "text": [ 2254 | "append_gn_df took 98.8968849182 seconds\n", 2255 | "append_gn_df took 97.7458968163 seconds\n", 2256 | "append_gn_df took 91.483907938 seconds\n", 2257 | "append_gn_df took 107.240098953 seconds\n", 2258 | "append_gn_df took 118.474504948 seconds\n", 2259 | "append_gn_df took 111.802592039 seconds\n", 2260 | "append_gn_df took 343.274796009 seconds\n", 2261 | "append_gn_df took 226.170608044 seconds\n", 2262 | "append_gn_df took 89.4556779861 seconds\n", 2263 | "append_gn_df took 117.234147072 seconds\n", 2264 | "chunk_gn_df took 1403.17566109 seconds\n" 2265 | ] 2266 | } 2267 | ], 2268 | "source": [ 2269 | "full_songs11999 = chunk_gn_df(songs, 11000, 12000)" 2270 | ] 2271 | }, 2272 | { 2273 | "cell_type": "code", 2274 | "execution_count": 37, 2275 | "metadata": { 2276 | "collapsed": false 2277 | }, 2278 | "outputs": [ 2279 | { 2280 | "name": "stdout", 2281 | "output_type": "stream", 2282 | "text": [ 2283 | "append_gn_df took 133.29369092 seconds\n", 2284 | "append_gn_df took 151.5761621 seconds\n", 2285 | "append_gn_df took 92.5917768478 seconds\n", 2286 | "append_gn_df took 149.255569935 seconds\n", 2287 | "append_gn_df took 146.41320014 seconds\n", 2288 | "append_gn_df took 195.517437935 seconds\n", 2289 | "append_gn_df took 91.819890976 seconds\n", 2290 | "append_gn_df took 104.841881037 seconds\n", 2291 | "append_gn_df took 82.6004371643 seconds\n", 2292 | "append_gn_df took 85.0309300423 seconds\n", 2293 | "chunk_gn_df took 1234.32447505 seconds\n" 2294 | ] 2295 | } 2296 | ], 2297 | "source": [ 2298 | "full_songs12999 = chunk_gn_df(songs, 12000, 13000)" 2299 | ] 2300 | }, 2301 | { 2302 | "cell_type": "code", 2303 | "execution_count": 39, 2304 | "metadata": { 2305 | "collapsed": false 2306 | }, 2307 | "outputs": [ 2308 | { 2309 | "name": "stdout", 2310 | "output_type": "stream", 2311 | "text": [ 2312 | "append_gn_df took 110.27683115 seconds\n", 2313 | "append_gn_df took 92.056000948 seconds\n", 2314 | "append_gn_df took 91.6379680634 seconds\n", 2315 | "append_gn_df took 92.28464818 seconds\n", 2316 | "append_gn_df took 109.537946939 seconds\n", 2317 | "append_gn_df took 99.7420189381 seconds\n", 2318 | "append_gn_df took 90.7187151909 seconds\n", 2319 | "append_gn_df took 99.281733036 seconds\n", 2320 | "append_gn_df took 104.241221905 seconds\n", 2321 | "Must query with at least one field (artist, album, track, toc)\n", 2322 | "append_gn_df took 125.22577405 seconds\n", 2323 | "chunk_gn_df took 1016.37598181 seconds\n" 2324 | ] 2325 | } 2326 | ], 2327 | "source": [ 2328 | "full_songs13999 = chunk_gn_df(songs, 13000, 14000)" 2329 | ] 2330 | }, 2331 | { 2332 | "cell_type": "code", 2333 | "execution_count": 41, 2334 | "metadata": { 2335 | "collapsed": false 2336 | }, 2337 | "outputs": [ 2338 | { 2339 | "name": "stdout", 2340 | "output_type": "stream", 2341 | "text": [ 2342 | "append_gn_df took 102.279052973 seconds\n", 2343 | "append_gn_df took 149.364710808 seconds\n", 2344 | "append_gn_df took 98.630658865 seconds\n", 2345 | "append_gn_df took 93.2556109428 seconds\n", 2346 | "append_gn_df took 138.696675062 seconds\n", 2347 | "append_gn_df took 105.947779894 seconds\n", 2348 | "append_gn_df took 84.4272220135 seconds\n", 2349 | "append_gn_df took 91.7955269814 seconds\n", 2350 | "append_gn_df took 104.516112804 seconds\n", 2351 | "append_gn_df took 97.0090000629 seconds\n", 2352 | "chunk_gn_df took 1067.31919789 seconds\n" 2353 | ] 2354 | } 2355 | ], 2356 | "source": [ 2357 | "full_songs14999 = chunk_gn_df(songs, 14000, 15000)" 2358 | ] 2359 | }, 2360 | { 2361 | "cell_type": "code", 2362 | "execution_count": 43, 2363 | "metadata": { 2364 | "collapsed": false 2365 | }, 2366 | "outputs": [ 2367 | { 2368 | "name": "stdout", 2369 | "output_type": "stream", 2370 | "text": [ 2371 | "append_gn_df took 88.1784000397 seconds\n", 2372 | "append_gn_df took 186.100250006 seconds\n", 2373 | "append_gn_df took 133.599490166 seconds\n", 2374 | "append_gn_df took 106.875953197 seconds\n", 2375 | "append_gn_df took 92.7605168819 seconds\n", 2376 | "append_gn_df took 117.334963083 seconds\n", 2377 | "append_gn_df took 92.7208259106 seconds\n", 2378 | "append_gn_df took 80.0384938717 seconds\n", 2379 | "append_gn_df took 82.366686821 seconds\n", 2380 | "append_gn_df took 66.072042942 seconds\n", 2381 | "chunk_gn_df took 1047.44817519 seconds\n" 2382 | ] 2383 | } 2384 | ], 2385 | "source": [ 2386 | "full_songs15999 = chunk_gn_df(songs, 15000, 16000)" 2387 | ] 2388 | }, 2389 | { 2390 | "cell_type": "code", 2391 | "execution_count": 45, 2392 | "metadata": { 2393 | "collapsed": false 2394 | }, 2395 | "outputs": [ 2396 | { 2397 | "name": "stdout", 2398 | "output_type": "stream", 2399 | "text": [ 2400 | "append_gn_df took 68.4800598621 seconds\n", 2401 | "append_gn_df took 89.0547070503 seconds\n", 2402 | "append_gn_df took 76.2554938793 seconds\n", 2403 | "append_gn_df took 72.9623069763 seconds\n", 2404 | "append_gn_df took 83.4721598625 seconds\n", 2405 | "append_gn_df took 83.3267250061 seconds\n", 2406 | "append_gn_df took 68.4833159447 seconds\n", 2407 | "append_gn_df took 75.4022490978 seconds\n", 2408 | "append_gn_df took 69.1183638573 seconds\n", 2409 | "append_gn_df took 70.489814043 seconds\n", 2410 | "chunk_gn_df took 758.437319994 seconds\n" 2411 | ] 2412 | } 2413 | ], 2414 | "source": [ 2415 | "full_songs16999 = chunk_gn_df(songs, 16000, 17000)" 2416 | ] 2417 | }, 2418 | { 2419 | "cell_type": "code", 2420 | "execution_count": 47, 2421 | "metadata": { 2422 | "collapsed": false 2423 | }, 2424 | "outputs": [ 2425 | { 2426 | "name": "stdout", 2427 | "output_type": "stream", 2428 | "text": [ 2429 | "append_gn_df took 65.9987528324 seconds\n", 2430 | "append_gn_df took 81.4038321972 seconds\n", 2431 | "append_gn_df took 76.6291849613 seconds\n", 2432 | "append_gn_df took 77.9058899879 seconds\n", 2433 | "append_gn_df took 75.1371262074 seconds\n", 2434 | "append_gn_df took 72.6422510147 seconds\n", 2435 | "append_gn_df took 78.9188940525 seconds\n", 2436 | "append_gn_df took 71.4597859383 seconds\n", 2437 | "append_gn_df took 68.2057061195 seconds\n", 2438 | "append_gn_df took 79.3313319683 seconds\n", 2439 | "chunk_gn_df took 749.036851168 seconds\n" 2440 | ] 2441 | } 2442 | ], 2443 | "source": [ 2444 | "full_songs17999 = chunk_gn_df(songs, 17000, 18000)" 2445 | ] 2446 | }, 2447 | { 2448 | "cell_type": "code", 2449 | "execution_count": 49, 2450 | "metadata": { 2451 | "collapsed": false 2452 | }, 2453 | "outputs": [ 2454 | { 2455 | "name": "stdout", 2456 | "output_type": "stream", 2457 | "text": [ 2458 | "append_gn_df took 134.369413853 seconds\n", 2459 | "append_gn_df took 71.921598196 seconds\n", 2460 | "append_gn_df took 82.494289875 seconds\n", 2461 | "append_gn_df took 80.0985100269 seconds\n", 2462 | "append_gn_df took 85.3357758522 seconds\n", 2463 | "append_gn_df took 81.140155077 seconds\n", 2464 | "append_gn_df took 82.5929679871 seconds\n", 2465 | "append_gn_df took 71.8430140018 seconds\n", 2466 | "Must query with at least one field (artist, album, track, toc)\n", 2467 | "append_gn_df took 77.491494894 seconds\n", 2468 | "append_gn_df took 73.9180419445 seconds\n", 2469 | "chunk_gn_df took 842.593214035 seconds\n" 2470 | ] 2471 | } 2472 | ], 2473 | "source": [ 2474 | "full_songs18999 = chunk_gn_df(songs, 18000, 19000)" 2475 | ] 2476 | }, 2477 | { 2478 | "cell_type": "code", 2479 | "execution_count": 51, 2480 | "metadata": { 2481 | "collapsed": false 2482 | }, 2483 | "outputs": [ 2484 | { 2485 | "name": "stdout", 2486 | "output_type": "stream", 2487 | "text": [ 2488 | "append_gn_df took 79.8324451447 seconds\n", 2489 | "append_gn_df took 74.6913099289 seconds\n", 2490 | "append_gn_df took 75.8829219341 seconds\n", 2491 | "append_gn_df took 74.6354169846 seconds\n", 2492 | "append_gn_df took 69.8141829967 seconds\n", 2493 | "append_gn_df took 72.1624469757 seconds\n", 2494 | "append_gn_df took 93.358782053 seconds\n", 2495 | "append_gn_df took 71.6024250984 seconds\n", 2496 | "append_gn_df took 69.3719408512 seconds\n", 2497 | "append_gn_df took 70.4650909901 seconds\n", 2498 | "chunk_gn_df took 753.183333158 seconds\n" 2499 | ] 2500 | } 2501 | ], 2502 | "source": [ 2503 | "full_songs19999 = chunk_gn_df(songs, 19000, 20000)" 2504 | ] 2505 | }, 2506 | { 2507 | "cell_type": "code", 2508 | "execution_count": 53, 2509 | "metadata": { 2510 | "collapsed": false 2511 | }, 2512 | "outputs": [ 2513 | { 2514 | "name": "stdout", 2515 | "output_type": "stream", 2516 | "text": [ 2517 | "append_gn_df took 75.2547709942 seconds\n", 2518 | "append_gn_df took 94.6666181087 seconds\n", 2519 | "append_gn_df took 68.4411761761 seconds\n", 2520 | "append_gn_df took 79.5312569141 seconds\n", 2521 | "append_gn_df took 78.9820671082 seconds\n", 2522 | "append_gn_df took 77.2299990654 seconds\n", 2523 | "append_gn_df took 78.7224521637 seconds\n", 2524 | "append_gn_df took 73.3751819134 seconds\n", 2525 | "append_gn_df took 63.038287878 seconds\n", 2526 | "append_gn_df took 78.0099339485 seconds\n", 2527 | "chunk_gn_df took 768.634967089 seconds\n" 2528 | ] 2529 | } 2530 | ], 2531 | "source": [ 2532 | "full_songs20999 = chunk_gn_df(songs, 20000, 21000)" 2533 | ] 2534 | }, 2535 | { 2536 | "cell_type": "code", 2537 | "execution_count": 55, 2538 | "metadata": { 2539 | "collapsed": false 2540 | }, 2541 | "outputs": [ 2542 | { 2543 | "name": "stdout", 2544 | "output_type": "stream", 2545 | "text": [ 2546 | "append_gn_df took 76.02511096 seconds\n", 2547 | "append_gn_df took 78.6484959126 seconds\n", 2548 | "append_gn_df took 78.8567829132 seconds\n", 2549 | "append_gn_df took 75.5170691013 seconds\n", 2550 | "append_gn_df took 74.2776551247 seconds\n", 2551 | "append_gn_df took 77.606345892 seconds\n", 2552 | "append_gn_df took 75.952696085 seconds\n", 2553 | "append_gn_df took 76.0307929516 seconds\n", 2554 | "append_gn_df took 93.7007489204 seconds\n", 2555 | "append_gn_df took 66.8212759495 seconds\n", 2556 | "chunk_gn_df took 774.803480864 seconds\n" 2557 | ] 2558 | } 2559 | ], 2560 | "source": [ 2561 | "full_songs21999 = chunk_gn_df(songs, 21000, 22000)" 2562 | ] 2563 | }, 2564 | { 2565 | "cell_type": "code", 2566 | "execution_count": 57, 2567 | "metadata": { 2568 | "collapsed": false 2569 | }, 2570 | "outputs": [ 2571 | { 2572 | "name": "stdout", 2573 | "output_type": "stream", 2574 | "text": [ 2575 | "append_gn_df took 71.0597381592 seconds\n", 2576 | "append_gn_df took 71.5488610268 seconds\n", 2577 | "append_gn_df took 79.8974308968 seconds\n", 2578 | "append_gn_df took 77.8238909245 seconds\n", 2579 | "append_gn_df took 74.2301619053 seconds\n", 2580 | "append_gn_df took 79.7944989204 seconds\n", 2581 | "append_gn_df took 77.3801560402 seconds\n", 2582 | "append_gn_df took 74.3855559826 seconds\n", 2583 | "append_gn_df took 75.037225008 seconds\n", 2584 | "append_gn_df took 90.1520750523 seconds\n", 2585 | "chunk_gn_df took 772.704972029 seconds\n" 2586 | ] 2587 | } 2588 | ], 2589 | "source": [ 2590 | "full_songs22999 = chunk_gn_df(songs, 22000, 23000)" 2591 | ] 2592 | }, 2593 | { 2594 | "cell_type": "code", 2595 | "execution_count": 59, 2596 | "metadata": { 2597 | "collapsed": false 2598 | }, 2599 | "outputs": [ 2600 | { 2601 | "name": "stdout", 2602 | "output_type": "stream", 2603 | "text": [ 2604 | "append_gn_df took 80.5861279964 seconds\n", 2605 | "append_gn_df took 76.774463892 seconds\n", 2606 | "append_gn_df took 67.6875209808 seconds\n", 2607 | "append_gn_df took 80.0155110359 seconds\n", 2608 | "append_gn_df took 76.2862389088 seconds\n", 2609 | "append_gn_df took 76.028192997 seconds\n", 2610 | "append_gn_df took 84.122674942 seconds\n", 2611 | "append_gn_df took 67.9391460419 seconds\n", 2612 | "append_gn_df took 73.0469720364 seconds\n", 2613 | "append_gn_df took 71.1367211342 seconds\n", 2614 | "chunk_gn_df took 755.017567873 seconds\n" 2615 | ] 2616 | } 2617 | ], 2618 | "source": [ 2619 | "full_songs23999 = chunk_gn_df(songs, 23000, 24000)" 2620 | ] 2621 | }, 2622 | { 2623 | "cell_type": "code", 2624 | "execution_count": 61, 2625 | "metadata": { 2626 | "collapsed": false 2627 | }, 2628 | "outputs": [ 2629 | { 2630 | "name": "stdout", 2631 | "output_type": "stream", 2632 | "text": [ 2633 | "append_gn_df took 75.6429240704 seconds\n", 2634 | "append_gn_df took 89.7353980541 seconds\n", 2635 | "append_gn_df took 81.5058760643 seconds\n", 2636 | "append_gn_df took 83.1520318985 seconds\n", 2637 | "append_gn_df took 75.0766859055 seconds\n", 2638 | "append_gn_df took 78.1087810993 seconds\n", 2639 | "append_gn_df took 73.210572958 seconds\n", 2640 | "append_gn_df took 78.4695570469 seconds\n", 2641 | "append_gn_df took 71.3715658188 seconds\n", 2642 | "append_gn_df took 67.5516898632 seconds\n", 2643 | "chunk_gn_df took 775.238777161 seconds\n" 2644 | ] 2645 | } 2646 | ], 2647 | "source": [ 2648 | "full_songs24999 = chunk_gn_df(songs, 24000, 25000)" 2649 | ] 2650 | }, 2651 | { 2652 | "cell_type": "code", 2653 | "execution_count": null, 2654 | "metadata": { 2655 | "collapsed": false 2656 | }, 2657 | "outputs": [], 2658 | "source": [ 2659 | "full_songs25999 = chunk_gn_df(songs, 25000)" 2660 | ] 2661 | }, 2662 | { 2663 | "cell_type": "code", 2664 | "execution_count": 88, 2665 | "metadata": { 2666 | "collapsed": false 2667 | }, 2668 | "outputs": [], 2669 | "source": [ 2670 | "def load_pickles(start, stop):\n", 2671 | " df = pd.DataFrame([])\n", 2672 | " for i in range(start, stop, 1000):\n", 2673 | " df = df.append(pd.read_pickle('data/full_songs_df_'+str(i)+'.pkl'), ignore_index=True)\n", 2674 | " return df" 2675 | ] 2676 | }, 2677 | { 2678 | "cell_type": "code", 2679 | "execution_count": 89, 2680 | "metadata": { 2681 | "collapsed": true 2682 | }, 2683 | "outputs": [], 2684 | "source": [ 2685 | "full_songs_most = load_pickles(999, 24999)" 2686 | ] 2687 | }, 2688 | { 2689 | "cell_type": "code", 2690 | "execution_count": 92, 2691 | "metadata": { 2692 | "collapsed": false 2693 | }, 2694 | "outputs": [], 2695 | "source": [ 2696 | "full_songs_all = full_songs_most.append(pd.read_pickle('data/full_songs_df_25899.pkl'), ignore_index=True)" 2697 | ] 2698 | }, 2699 | { 2700 | "cell_type": "markdown", 2701 | "metadata": {}, 2702 | "source": [ 2703 | "### Load Pickle Point" 2704 | ] 2705 | }, 2706 | { 2707 | "cell_type": "code", 2708 | "execution_count": 94, 2709 | "metadata": { 2710 | "collapsed": false 2711 | }, 2712 | "outputs": [], 2713 | "source": [ 2714 | "full_songs_all.to_pickle('data/master_songs.pkl')" 2715 | ] 2716 | }, 2717 | { 2718 | "cell_type": "code", 2719 | "execution_count": 4, 2720 | "metadata": { 2721 | "collapsed": false 2722 | }, 2723 | "outputs": [], 2724 | "source": [ 2725 | "full_songs_all = pd.read_pickle('data/master_songs.pkl')" 2726 | ] 2727 | }, 2728 | { 2729 | "cell_type": "code", 2730 | "execution_count": 6, 2731 | "metadata": { 2732 | "collapsed": false 2733 | }, 2734 | "outputs": [ 2735 | { 2736 | "data": { 2737 | "text/html": [ 2738 | "
\n", 2739 | "\n", 2740 | " \n", 2741 | " \n", 2742 | " \n", 2743 | " \n", 2744 | " \n", 2745 | " \n", 2746 | " \n", 2747 | " \n", 2748 | " \n", 2749 | " \n", 2750 | " \n", 2751 | " \n", 2752 | " \n", 2753 | " \n", 2754 | " \n", 2755 | " \n", 2756 | " \n", 2757 | " \n", 2758 | " \n", 2759 | " \n", 2760 | " \n", 2761 | " \n", 2762 | " \n", 2763 | " \n", 2764 | " \n", 2765 | " \n", 2766 | " \n", 2767 | " \n", 2768 | " \n", 2769 | " \n", 2770 | " \n", 2771 | " \n", 2772 | " \n", 2773 | " \n", 2774 | " \n", 2775 | " \n", 2776 | " \n", 2777 | " \n", 2778 | " \n", 2779 | " \n", 2780 | " \n", 2781 | " \n", 2782 | " \n", 2783 | " \n", 2784 | " \n", 2785 | " \n", 2786 | " \n", 2787 | " \n", 2788 | " \n", 2789 | " \n", 2790 | " \n", 2791 | " \n", 2792 | " \n", 2793 | " \n", 2794 | " \n", 2795 | " \n", 2796 | " \n", 2797 | " \n", 2798 | " \n", 2799 | " \n", 2800 | " \n", 2801 | " \n", 2802 | " \n", 2803 | " \n", 2804 | " \n", 2805 | " \n", 2806 | " \n", 2807 | " \n", 2808 | " \n", 2809 | " \n", 2810 | " \n", 2811 | " \n", 2812 | " \n", 2813 | " \n", 2814 | " \n", 2815 | " \n", 2816 | " \n", 2817 | " \n", 2818 | " \n", 2819 | " \n", 2820 | " \n", 2821 | " \n", 2822 | " \n", 2823 | " \n", 2824 | " \n", 2825 | " \n", 2826 | " \n", 2827 | " \n", 2828 | " \n", 2829 | " \n", 2830 | " \n", 2831 | " \n", 2832 | " \n", 2833 | " \n", 2834 | " \n", 2835 | " \n", 2836 | " \n", 2837 | " \n", 2838 | " \n", 2839 | " \n", 2840 | " \n", 2841 | " \n", 2842 | " \n", 2843 | " \n", 2844 | " \n", 2845 | " \n", 2846 | " \n", 2847 | " \n", 2848 | " \n", 2849 | " \n", 2850 | " \n", 2851 | " \n", 2852 | " \n", 2853 | " \n", 2854 | " \n", 2855 | " \n", 2856 | " \n", 2857 | " \n", 2858 | " \n", 2859 | " \n", 2860 | " \n", 2861 | " \n", 2862 | " \n", 2863 | " \n", 2864 | " \n", 2865 | " \n", 2866 | " \n", 2867 | " \n", 2868 | " \n", 2869 | " \n", 2870 | " \n", 2871 | " \n", 2872 | " \n", 2873 | " \n", 2874 | " \n", 2875 | " \n", 2876 | " \n", 2877 | " \n", 2878 | " \n", 2879 | " \n", 2880 | " \n", 2881 | " \n", 2882 | " \n", 2883 | " \n", 2884 | " \n", 2885 | " \n", 2886 | " \n", 2887 | " \n", 2888 | " \n", 2889 | " \n", 2890 | " \n", 2891 | " \n", 2892 | " \n", 2893 | " \n", 2894 | " \n", 2895 | " \n", 2896 | " \n", 2897 | " \n", 2898 | " \n", 2899 | " \n", 2900 | " \n", 2901 | " \n", 2902 | " \n", 2903 | " \n", 2904 | " \n", 2905 | " \n", 2906 | " \n", 2907 | " \n", 2908 | " \n", 2909 | " \n", 2910 | " \n", 2911 | " \n", 2912 | " \n", 2913 | " \n", 2914 | " \n", 2915 | " \n", 2916 | " \n", 2917 | " \n", 2918 | " \n", 2919 | " \n", 2920 | " \n", 2921 | " \n", 2922 | " \n", 2923 | " \n", 2924 | " \n", 2925 | " \n", 2926 | " \n", 2927 | " \n", 2928 | " \n", 2929 | " \n", 2930 | " \n", 2931 | " \n", 2932 | " \n", 2933 | " \n", 2934 | " \n", 2935 | " \n", 2936 | " \n", 2937 | " \n", 2938 | " \n", 2939 | " \n", 2940 | " \n", 2941 | " \n", 2942 | " \n", 2943 | " \n", 2944 | " \n", 2945 | " \n", 2946 | " \n", 2947 | " \n", 2948 | " \n", 2949 | " \n", 2950 | " \n", 2951 | " \n", 2952 | " \n", 2953 | " \n", 2954 | " \n", 2955 | " \n", 2956 | " \n", 2957 | " \n", 2958 | " \n", 2959 | " \n", 2960 | " \n", 2961 | " \n", 2962 | " \n", 2963 | " \n", 2964 | " \n", 2965 | " \n", 2966 | " \n", 2967 | " \n", 2968 | " \n", 2969 | " \n", 2970 | " \n", 2971 | " \n", 2972 | " \n", 2973 | " \n", 2974 | " \n", 2975 | " \n", 2976 | " \n", 2977 | " \n", 2978 | " \n", 2979 | " \n", 2980 | " \n", 2981 | " \n", 2982 | " \n", 2983 | " \n", 2984 | " \n", 2985 | " \n", 2986 | " \n", 2987 | " \n", 2988 | " \n", 2989 | " \n", 2990 | " \n", 2991 | " \n", 2992 | " \n", 2993 | " \n", 2994 | " \n", 2995 | " \n", 2996 | " \n", 2997 | " \n", 2998 | " \n", 2999 | " \n", 3000 | " \n", 3001 | " \n", 3002 | " \n", 3003 | " \n", 3004 | " \n", 3005 | " \n", 3006 | " \n", 3007 | " \n", 3008 | "
artistexplicitidpopularitytitleenergylivenesstempospeechinessacousticness...artist_type_2genre_1genre_2genre_3gnidmood_1mood_2tempo_1tempo_2tempo_3
0NirvanaFalse3FUsMXBxA4V7eUwQ7B0HQO48Love Buzz0.8850.169138.1530.03540.000032...Male GroupAlternative & PunkAlternativeGrunge5007273-06983AE0CA94A42592A86F999A523B41BroodingAlienated / BroodingMedium TempoMedium60s
1The Presidents Of The United States Of AmericaFalse2JdzB67NvIa90K4gEZPLeX58Lump0.8730.165142.7260.03860.004680...Male GroupAlternative & PunkAlternativeAlternative Pop7176919-C893DAE82E18906A0C45F2D6651DF095AggressiveAggressive PowerFast TempoFast140s
2Stanton WarriorsFalse0zXLMZUCYZCx8Bq4jCr17430So Sweet0.9360.118127.9970.04250.000531...Male DuoElectronicaTechnoBreakbeat542968754-3A3DE9DCC8AACF9DE2F055187073DCA2EnergizingAbstract BeatMedium TempoMedium Fast120s
3Natalie MarchenkoFalse14w7n7gi635VCb5f7t2OQ537License To Chill - Pacha Sax Lounge RMX0.5110.24171.9630.03020.262000...NaNPopEasy ListeningOther Easy Listening212605678-5823A53026929EE7380477A9D3DCD697NaNNaNNaNNaNNaN
4RobynFalse01NJd6s7Kyn6NSsPp503sh28Be Mine! - Live At The Cherrytree House0.2490.114116.5990.04510.955000...FemaleElectronicaElectronica MainstreamPop Electronica176433014-A2FF98AC415031B8A67464F3DED3BC22RomanticHeartfelt PassionMedium TempoMedium70s
5Pearl JamFalse6qgpO647NPBUvBkm56vV7d5Black0.5480.17976.0200.02870.294000...Male GroupAlternative & PunkAlternativeGrunge17527306-1F01011247D0A98978073E66BF4D5597BroodingEvocative / IntriguingMedium TempoMedium70s
6Sam HuntFalse3wx2kQWPn9p5UppQbNhPAk67Leave The Night On0.9530.349171.9710.06240.099600...MaleTraditionalCountryContemporary Country459278920-F9806BD4AFF4B5DC038D6D65E70C0B6CYearningSensitive / ExploringMedium TempoMedium80s
7George CarlinFalse5DuxYjcuebFPontojL1NEE0War Pictures0.5460.14772.9400.9610.921000...MaleOtherComedyComedy4965187-7F868B4D3F7D16781A583E8E222EF876OtherNaNSlow TempoStatic0
8Kaya MayFalse4eg3wsiTrPa7KpwVai2VY756Hands to Myself, Love Yourself, Perfect (Acous...0.4450.113110.0560.050.057500...NaNPopWestern PopPop Vocal604743990-4B9A5237E117F5CE9E8506362D53C1D9BroodingDreamy BroodingMedium TempoMedium Slow50s
9NotakerFalse341ShRaeysVdxLetlI391K56Infinite0.6690.10899.9870.04830.093700...NaNElectronicaDance & ClubClub Dance625141650-9A245193045FB288D1785D87C9D94308ExcitedEuphoric EnergyMedium TempoMedium Fast100s
\n", 3009 | "

10 rows × 35 columns

\n", 3010 | "
" 3011 | ], 3012 | "text/plain": [ 3013 | " artist explicit \\\n", 3014 | "0 Nirvana False \n", 3015 | "1 The Presidents Of The United States Of America False \n", 3016 | "2 Stanton Warriors False \n", 3017 | "3 Natalie Marchenko False \n", 3018 | "4 Robyn False \n", 3019 | "5 Pearl Jam False \n", 3020 | "6 Sam Hunt False \n", 3021 | "7 George Carlin False \n", 3022 | "8 Kaya May False \n", 3023 | "9 Notaker False \n", 3024 | "\n", 3025 | " id popularity \\\n", 3026 | "0 3FUsMXBxA4V7eUwQ7B0HQO 48 \n", 3027 | "1 2JdzB67NvIa90K4gEZPLeX 58 \n", 3028 | "2 0zXLMZUCYZCx8Bq4jCr174 30 \n", 3029 | "3 14w7n7gi635VCb5f7t2OQ5 37 \n", 3030 | "4 01NJd6s7Kyn6NSsPp503sh 28 \n", 3031 | "5 6qgpO647NPBUvBkm56vV7d 5 \n", 3032 | "6 3wx2kQWPn9p5UppQbNhPAk 67 \n", 3033 | "7 5DuxYjcuebFPontojL1NEE 0 \n", 3034 | "8 4eg3wsiTrPa7KpwVai2VY7 56 \n", 3035 | "9 341ShRaeysVdxLetlI391K 56 \n", 3036 | "\n", 3037 | " title energy liveness \\\n", 3038 | "0 Love Buzz 0.885 0.169 \n", 3039 | "1 Lump 0.873 0.165 \n", 3040 | "2 So Sweet 0.936 0.118 \n", 3041 | "3 License To Chill - Pacha Sax Lounge RMX 0.511 0.24 \n", 3042 | "4 Be Mine! - Live At The Cherrytree House 0.249 0.114 \n", 3043 | "5 Black 0.548 0.179 \n", 3044 | "6 Leave The Night On 0.953 0.349 \n", 3045 | "7 War Pictures 0.546 0.147 \n", 3046 | "8 Hands to Myself, Love Yourself, Perfect (Acous... 0.445 0.113 \n", 3047 | "9 Infinite 0.669 0.108 \n", 3048 | "\n", 3049 | " tempo speechiness acousticness ... artist_type_2 \\\n", 3050 | "0 138.153 0.0354 0.000032 ... Male Group \n", 3051 | "1 142.726 0.0386 0.004680 ... Male Group \n", 3052 | "2 127.997 0.0425 0.000531 ... Male Duo \n", 3053 | "3 171.963 0.0302 0.262000 ... NaN \n", 3054 | "4 116.599 0.0451 0.955000 ... Female \n", 3055 | "5 76.020 0.0287 0.294000 ... Male Group \n", 3056 | "6 171.971 0.0624 0.099600 ... Male \n", 3057 | "7 72.940 0.961 0.921000 ... Male \n", 3058 | "8 110.056 0.05 0.057500 ... NaN \n", 3059 | "9 99.987 0.0483 0.093700 ... NaN \n", 3060 | "\n", 3061 | " genre_1 genre_2 genre_3 \\\n", 3062 | "0 Alternative & Punk Alternative Grunge \n", 3063 | "1 Alternative & Punk Alternative Alternative Pop \n", 3064 | "2 Electronica Techno Breakbeat \n", 3065 | "3 Pop Easy Listening Other Easy Listening \n", 3066 | "4 Electronica Electronica Mainstream Pop Electronica \n", 3067 | "5 Alternative & Punk Alternative Grunge \n", 3068 | "6 Traditional Country Contemporary Country \n", 3069 | "7 Other Comedy Comedy \n", 3070 | "8 Pop Western Pop Pop Vocal \n", 3071 | "9 Electronica Dance & Club Club Dance \n", 3072 | "\n", 3073 | " gnid mood_1 \\\n", 3074 | "0 5007273-06983AE0CA94A42592A86F999A523B41 Brooding \n", 3075 | "1 7176919-C893DAE82E18906A0C45F2D6651DF095 Aggressive \n", 3076 | "2 542968754-3A3DE9DCC8AACF9DE2F055187073DCA2 Energizing \n", 3077 | "3 212605678-5823A53026929EE7380477A9D3DCD697 NaN \n", 3078 | "4 176433014-A2FF98AC415031B8A67464F3DED3BC22 Romantic \n", 3079 | "5 17527306-1F01011247D0A98978073E66BF4D5597 Brooding \n", 3080 | "6 459278920-F9806BD4AFF4B5DC038D6D65E70C0B6C Yearning \n", 3081 | "7 4965187-7F868B4D3F7D16781A583E8E222EF876 Other \n", 3082 | "8 604743990-4B9A5237E117F5CE9E8506362D53C1D9 Brooding \n", 3083 | "9 625141650-9A245193045FB288D1785D87C9D94308 Excited \n", 3084 | "\n", 3085 | " mood_2 tempo_1 tempo_2 tempo_3 \n", 3086 | "0 Alienated / Brooding Medium Tempo Medium 60s \n", 3087 | "1 Aggressive Power Fast Tempo Fast 140s \n", 3088 | "2 Abstract Beat Medium Tempo Medium Fast 120s \n", 3089 | "3 NaN NaN NaN NaN \n", 3090 | "4 Heartfelt Passion Medium Tempo Medium 70s \n", 3091 | "5 Evocative / Intriguing Medium Tempo Medium 70s \n", 3092 | "6 Sensitive / Exploring Medium Tempo Medium 80s \n", 3093 | "7 NaN Slow Tempo Static 0 \n", 3094 | "8 Dreamy Brooding Medium Tempo Medium Slow 50s \n", 3095 | "9 Euphoric Energy Medium Tempo Medium Fast 100s \n", 3096 | "\n", 3097 | "[10 rows x 35 columns]" 3098 | ] 3099 | }, 3100 | "execution_count": 6, 3101 | "metadata": {}, 3102 | "output_type": "execute_result" 3103 | } 3104 | ], 3105 | "source": [ 3106 | "full_songs_all.head(10)" 3107 | ] 3108 | }, 3109 | { 3110 | "cell_type": "code", 3111 | "execution_count": 105, 3112 | "metadata": { 3113 | "collapsed": false 3114 | }, 3115 | "outputs": [ 3116 | { 3117 | "data": { 3118 | "text/plain": [ 3119 | "artist 24567\n", 3120 | "explicit 24567\n", 3121 | "id 24567\n", 3122 | "popularity 24567\n", 3123 | "title 24567\n", 3124 | "energy 24567\n", 3125 | "liveness 24561\n", 3126 | "tempo 24567\n", 3127 | "speechiness 24531\n", 3128 | "acousticness 24567\n", 3129 | "instrumentalness 24566\n", 3130 | "time_signature 24531\n", 3131 | "danceability 24531\n", 3132 | "key 24567\n", 3133 | "duration_ms 24567\n", 3134 | "loudness 24567\n", 3135 | "valence 24529\n", 3136 | "mode 24567\n", 3137 | "artist_era_1 20782\n", 3138 | "artist_era_2 8151\n", 3139 | "artist_origin_1 20791\n", 3140 | "artist_origin_2 20769\n", 3141 | "artist_origin_3 15260\n", 3142 | "artist_origin_4 10986\n", 3143 | "artist_type_1 20785\n", 3144 | "artist_type_2 20744\n", 3145 | "genre_1 24354\n", 3146 | "genre_2 24354\n", 3147 | "genre_3 24354\n", 3148 | "gnid 24567\n", 3149 | "mood_1 21500\n", 3150 | "mood_2 21059\n", 3151 | "tempo_1 21499\n", 3152 | "tempo_2 21499\n", 3153 | "tempo_3 21499\n", 3154 | "dtype: int64" 3155 | ] 3156 | }, 3157 | "execution_count": 105, 3158 | "metadata": {}, 3159 | "output_type": "execute_result" 3160 | } 3161 | ], 3162 | "source": [ 3163 | "full_songs_all.count(axis=0)" 3164 | ] 3165 | } 3166 | ], 3167 | "metadata": { 3168 | "anaconda-cloud": {}, 3169 | "kernelspec": { 3170 | "display_name": "Python [conda root]", 3171 | "language": "python", 3172 | "name": "conda-root-py" 3173 | }, 3174 | "language_info": { 3175 | "codemirror_mode": { 3176 | "name": "ipython", 3177 | "version": 2 3178 | }, 3179 | "file_extension": ".py", 3180 | "mimetype": "text/x-python", 3181 | "name": "python", 3182 | "nbconvert_exporter": "python", 3183 | "pygments_lexer": "ipython2", 3184 | "version": "2.7.12" 3185 | } 3186 | }, 3187 | "nbformat": 4, 3188 | "nbformat_minor": 0 3189 | } 3190 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Audio Music Mood Classification 2 | 3 | Classification using audio features to generate a mood profile for a spotify playlist. Analysis and modeling done with pandas, scikit-learn ensemble methods, and XGBoost. Visualizations created using matplotlib and seaborn. Production in Flask. Data queried from Billboard API, Spotify API and Gracenote API. 4 | 5 | * [Blog Post](https://neokt.github.io/projects/audio-music-mood-classification/) 6 | * [Presentation](neokt-audio-music-mood-classification-102816.pdf) 7 | * [App Screenshots](/screenshots) 8 | 9 | Please contact me at neo.kaiting@gmail.com if you would like access to the dataset. 10 | -------------------------------------------------------------------------------- /app/.cache-neo.kaiting: -------------------------------------------------------------------------------- 1 | {"access_token": "BQCieldqTtPut2LQHKfYuBCZnbnFWjCBFwsdbm_7ZqCinEVthyQmPcijRJXj_WLnwEzpx2zyuRzOrXfiYSUjXXnwh2y4PXE0ZkWS0NkOihUzYcqXz9jsXLGbDU3C-1Akjr64r_GzETE11aL8", "expires_in": 3600, "expires_at": 1479163046, "token_type": "Bearer", "scope": null, "refresh_token": "AQDrO_NQKi7MrQ3x0Hrla07mREPo0_IP_zk2mjLP4Mnh_bcHjdPe_c_tHD4W7FoYHKsaMvA3Kbem-j6F7yPfMoMKJ2Bte3Q92Z_3OgIqPUvEnDkg0nMz2AfX7Bu0IZseB8c"} -------------------------------------------------------------------------------- /app/app.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | from flask import Flask, render_template, send_file, make_response, request, redirect, url_for 3 | import spotipy 4 | import spotipy.util as util 5 | import numpy as np 6 | import pandas as pd 7 | import pickle 8 | 9 | from cStringIO import StringIO 10 | import matplotlib.cm as cm 11 | import matplotlib.pyplot as plt 12 | import seaborn as sns 13 | 14 | sns.set(rc={'axes.facecolor':'black', 'figure.facecolor':'black', 'axes.grid' : False}) 15 | 16 | app = Flask(__name__) 17 | 18 | # Setting up spotify tokens and authorization - hidden for github, use own tokens 19 | token = util.prompt_for_user_token(, 20 | client_id=, 21 | client_secret=, 22 | redirect_uri=) 23 | 24 | spotify = spotipy.Spotify(auth=token) 25 | 26 | master_df = pd.read_pickle('../data/master_df.pkl') 27 | 28 | mood_map = {'Peaceful': (-2,2), 'Easygoing': (-1,2), 'Tender': (-2,1), 'Romantic': (-1,1), 29 | 'Upbeat': (0,2), 'Empowering': (0,1), 30 | 'Lively': (1,2), 'Excited': (2,2), 'Stirring': (1,1), 'Rowdy': (2,1), 31 | 'Sentimental': (-2,0), 'Sophisticated': (-1,0), 32 | 'Sensual': (0,0), 33 | 'Fiery': (1,0), 'Energizing': (2,0), 34 | 'Melancholy': (-2,-1), 'Cool': (-1,-1), 'Somber': (-2,-2), 'Gritty': (-1,-2), 35 | 'Yearning': (0,-1), 'Serious': (0,-2), 36 | 'Urgent': (1,-1), 'Defiant': (2,-1), 'Brooding': (1,-2), 'Aggressive': (2,-2)} 37 | 38 | reverse_mood_map = {v: k for k, v in mood_map.items()} 39 | 40 | def get_reverse_mood_map(x): 41 | return reverse_mood_map[x] 42 | 43 | def get_mood_map(x): 44 | return mood_map[x] 45 | 46 | # get song ids from list of playlist ids 47 | def get_songs(playlists): 48 | song_ids = [] 49 | for i in playlists: 50 | try: 51 | for j in spotify.user_playlist('spotify', i)['tracks']['items']: 52 | song_ids.append(j['track']['id']) 53 | except: 54 | pass 55 | return song_ids 56 | 57 | @app.route('/') 58 | def my_form(): 59 | return render_template("index.html") 60 | 61 | @app.route('/', methods=['POST']) 62 | def my_form_post(): 63 | playlist = request.form['text'] 64 | return redirect(url_for('mood_maker', a=playlist), code=302) 65 | 66 | @app.route('//') 67 | def mood_maker(a): 68 | name = spotify.user_playlist('spotify', a)['name'] 69 | songs = get_songs([a]) 70 | songs_df = master_df[master_df['id'].isin(songs)] 71 | 72 | n = songs_df['mood_predict_map'].value_counts() 73 | nplus = pd.DataFrame(n).reset_index() 74 | nplus['mood'] = nplus['index'].apply(get_reverse_mood_map) 75 | nplus.columns = ['coord', 'value', 'mood'] 76 | 77 | plus = len(songs_df) 78 | 79 | colors = iter(cm.rainbow(np.linspace(0, 1, len(n)))) 80 | fig = plt.figure(dpi = 300, figsize=(8,5)) 81 | axes = fig.add_subplot(1, 1, 1) 82 | 83 | for index, items in nplus.iterrows(): 84 | axes.plot(items[0][0], items[0][1], marker='h', markersize = items[1]/plus*600, alpha=0.65, label=items[2], 85 | color=next(colors)) 86 | 87 | axes.set_title(name) 88 | axes.set_xlim(-3, 3) 89 | axes.set_ylim(-3, 3) 90 | axes.set_xticklabels([]) 91 | axes.set_yticklabels([]) 92 | 93 | for k, v in reverse_mood_map.iteritems(): 94 | plt.annotate(v, k, ha='center', size=10, alpha=1, color='white') 95 | 96 | f = StringIO() 97 | plt.savefig(f, format='png') 98 | 99 | # Serve up the data 100 | header = {'Content-type': 'image/png'} 101 | f.seek(0) 102 | data = f.read() 103 | 104 | return data, 200, header 105 | 106 | if __name__ == '__main__': 107 | app.run(host='0.0.0.0', port=8890, debug=True) 108 | -------------------------------------------------------------------------------- /app/static/photo-1468164016595-6108e4c60c8b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/app/static/photo-1468164016595-6108e4c60c8b.jpg -------------------------------------------------------------------------------- /app/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 47 | 48 |
49 |

your spotify playlist id here

50 |
51 |

52 |

53 |
54 | 55 | -------------------------------------------------------------------------------- /neokt-audio-music-mood-classification-102816.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/neokt-audio-music-mood-classification-102816.pdf -------------------------------------------------------------------------------- /screenshots/example00-input_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example00-input_example.png -------------------------------------------------------------------------------- /screenshots/example00-landing_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example00-landing_page.png -------------------------------------------------------------------------------- /screenshots/example01-indie_electronics_mood_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example01-indie_electronics_mood_map.png -------------------------------------------------------------------------------- /screenshots/example01-indie_electronics_playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example01-indie_electronics_playlist.png -------------------------------------------------------------------------------- /screenshots/example02-mood_booster_mood_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example02-mood_booster_mood_map.png -------------------------------------------------------------------------------- /screenshots/example02-mood_booster_playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example02-mood_booster_playlist.png -------------------------------------------------------------------------------- /screenshots/example03-state_of_mind_mood_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example03-state_of_mind_mood_map.png -------------------------------------------------------------------------------- /screenshots/example03-state_of_mind_playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example03-state_of_mind_playlist.png -------------------------------------------------------------------------------- /screenshots/example04-90s_baby_makers_mood_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example04-90s_baby_makers_mood_map.png -------------------------------------------------------------------------------- /screenshots/example04-90s_baby_makers_playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neokt/audio-music-mood-classification/e76e5b214dd316ffd6f2910aa00d3e7a68635acc/screenshots/example04-90s_baby_makers_playlist.png --------------------------------------------------------------------------------