Analyzujte svůj hudební vkus pomocí Pythonu a Spotify API
30.06.2021
Analyzujte svůj hudební vkus pomocí Pythonu a Spotify API

​Spotify nedávno zveřejnilo svůj výzkum ohledně psychologických profilů a hudebního vkusu. Postupně začíná používat analýzu uživatelů pomocí osvědčené Big Five metriky, na jejímž základě budou dále předpovídat hudební vkus uživatele. K předpovídání psychologického profilu uživatele využívají zejména tzv. "audio features". Tyto “vlastnosti" skladeb pak mohou naznačovat charakter uživatele (např. více energická hudba je spojena s extravertním charakterovým rysem a žánr metal je inverzně korelovaný s emoční stabilitou). Více o spojitosti mezi charakterem a hudebním vkusem najdete zde.

V tomto článku si postavíme jednoduchou aplikaci, která provede analýzu všech veřejných Spotify playlistů jakéhokoliv uživatele a vypočítá průměrné “audio features" obsažených hudebních skladeb. Z těchto extrahovaných dat poté vytvoříme radarový graf, který bude vizualizovat jednotlivé vlastnosti. A na jejich základě lze odhadnout určité charakterové rysy.

Budeme potřebovat balíky spotipy (spotify-py) a plotly. Spotipy je Spotify API wrapper a plotly zajistí snadnou tvorbu grafu. Oba nainstalujeme přes balíkovací systém pip. Aplikace bude umět stahovat playlisty, analyzovat všechny skladby, a z vlastností skladeb vytvoří graf. Vše se vejde na méně než 100 řádků.

Inicializace aplikace

Nejprve naimportujeme potřebné balíky. Pak vytvoříme třídu SpotifyFeaturesAnalysis a inicializujeme spotipy. V aplikaci musíte použít svoje Spotify API údaje - client_id a client_secret. Ty si můžete vygenerovat ve vývojářské konzoli Spotify při vytvoření nové Spotify aplikace. Dále vytvoříme datovou strukturu data, která bude držet údaje o všech skladbách. Inicializujeme také proměnné pro jednotlivé vlastnosti audia.

Audio Features

O jednotlivých vlastnostech můžete najít detaily v dokumentaci Spotify API, ale ve zkratce si je shrneme i zde.

 vlastnosti audia.png

Danceability můžeme přeložit jako tancovatelnost, tj. jak vhodná je skladba pro tančení. Další je energie. Tyto skladby jsou rychlé, hlasité a hlučné. Speechiness reprezentuje množství mluveného slova ve skladbě (nad index 0.66 jsou podcasty, mezi 0.33-0.66 je např. rap a skladby pod 0.33 jsou pravděpodobně beze slov). Další jsou acousticness, akustičnost, a instrumentalness, instrumentálnost. Liveness je živost, tzn. zda je skladba živý koncert, a poslední Valence značí pozitivitu skladby.

 

Metoda pro načtení playlistů uživatele

metoda.png

​Připravíme si metodu pro stažení všech veřejných playlistů uživatele, load_playlists. Jako vstupní parametr má pouze uživatelské jméno username. Pak využijeme metody user_playlist pro načtení všech playlistů. Přes tento seznam iterujeme a postupně načítáme všechny skladby pomocí metody get_all_track_features (tuto metodu implementujeme níže). Přes playlisty iterujeme tak dlouho, dokud jsou k dispozici - Spotify API využívá pagination přes parametr next (sp.next).

Analýza hudebních vlastností

hud_vlastnosti.pngImplementujeme výše zmíněnou metodu pro načítání audio features. Jako parametr přijímá seznam všech skladeb. Opět budeme iterovat přes všechny skladby, v našem případě si načteme slovník obsažený v item['tracks'], který obsahuje všechny údaje o skladbě, včetně jejího jména, umělce a hlavně ID. Tyto ID si uložíme do seznamu a poskytneme další Spotify API metodě audio_features. Tato metoda vrátí slovník obsahující jednotlivé vlastnosti (valence, energy atp.). Přidáme je do předem vytvořeného seznamu self.data.
Průměrné vlastnosti všech skladeb

prum_vlast.png

Vytvoříme si funkci pro zprůměrování všech vlastností, které jsme si uložili. Jednoduše sečte všechny hodnoty daného faktoru a vydělí je počtem.

 

Vykreslení grafu

​​

vykresleni.pngJako poslední vytvoříme funkci plot_graph. Do proměnné data si připravíme jednotlivé vlastnosti, které předáme plotly funkci line_polar, která vykreslí radarový graf. Parametr r určuje hodnoty grafu, parametr theta popisky a parametr range určuje vykreslený rozsah osy. Vše pak spustíme v metodě main. Výsledný graf vypadá následovně.

aud_features.png
To je pro tento návod vše. Zajímavým dodatkem této aplikace může být například využití údajů z psychologického výzkumu, který odkazuji na začátku. Ve studii byly nalezeny statisticky významné pozitivní korelace mezi vlastností valence a emoční stabilitou a extraverzí. Akustičnost a energie byla pozitivně korelována s otevřeností novým zkušenostem (tento psychologický rys je spojen s inteligencí a kreativitou) a živost s extraverzí. Kompletní kód aplikace je dostupný na mém
githubu. Pošlete do komentářů svoje grafy!​

Jan Jileček