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.
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
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í
Implementujeme 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
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
Jako 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ě.
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!