Close
Genesis Spotify

Genesis Spotify

Kto dziś pamięta, że muzykę w internecie kupowało się utwór po utworze, czy nawet album danego wykonawcy. Obecnie korzystamy z serwisów strumieniujących muzykę. To właśnie dzięki nim możemy się cieszyć legalną muzyką na dowolnym urządzeniu otrzymując dostęp do milionów utworów. Pierwszym takim serwisem i chyba aktualnie najbardziej popularnym jest Spotify. Genesis serwisu miał miejsce w Szwecji w 2006 roku. Dziś serwis wart jest ponad 24 mld USD.  

To tyle tytułem wstępu. Słuchając ulubionych utworów z serwisu Spotify nie zastanawiamy się nad tym, że obecny przemysł muzyczny przeszedł takie ucyfrowienie, że oprócz płynących z urządzenia ulubionych bitów muzyki z każdym utworem czy albumem wykonawcy zapisywany jest cały zbiór dodatkowych cech i właściwości. Dzięki platformie programistycznej Spotify możemy poznać np. taneczność utworu, jego energię, głośność, akustyczność a nawet to czy linia melodyczna lub głosowa jest dominująca. Opisy poszczególnych parametrów można znaleźć tutaj.

Dlaczego zatem nie skorzystać z tej całej dobroci dodatkowych informacji i nie wykorzystać programu R do analizy i wizualnej prezentacji interesujących danych. Dla przeprowadzenia analizy pomocna będzie biblioteka SpotifyR, którą doinstaluję do mojego środowiska R.

install.packages('spotifyr')
library(spotifyr)

Następnie, aby móc skorzystać z dobrodziejstw danych udostępnianych przez Spotify potrzebuję uzyskać dostęp do ich Web API poprzez skonfigurowanie konta developera. W ten sposób otrzymuje się identyfikator oraz klucz klienta, który wykorzystamy do uwierzytelnienia się poprzez program R.

Sys.setenv(SPOTIFY_CLIENT_ID = id )
Sys.setenv(SPOTIFY_CLIENT_SECRET = secret )
access_token <- get_spotify_access_token()

Powiedzmy, że chcielibyśmy poznać jaki jest najbardziej pozytywny i jednocześnie energetyczny utwór wybranego artysty. Wybiorę Genesis. Dlaczego? W końcu to początek, a poza tym pierwsza moja zagraniczna płyta to właśnie Genesis tego zespołu i niezapomniane na niej utwory takie jak choćby Mama czy Home by the sea.

Nie powiem mam wielki sentyment do tej płyty, zresztą zachowałem ją do dziś, choć od wielu lat gramofonu już nie posiadam. Zresztą Ci z Was, co na początku lat osiemdziesiątych próbowali „zdobyć” jakąkolwiek płytę dowolnego wykonawcy wiedzą ile wysiłku i czasu zajmowało to, by w końcu móc odtworzyć czarny krążek. Ale wróćmy do tematu. Wczytujemy potrzebne biblioteki, a następnie wybranego artystę i odczytujemy dla niego zbiór wydanych albumów.

artist <- c("Genesis")
ainfo <- get_artist_audio_features(artist) 
ainfo.albums <- as.vector(unique(ainfo$album_id))

Z uwagi na to, że w przypadku Genesis jest ich dość sporo (dokładnie 43) to posłużę się trochę statystyką i wybiorę do dalszej analizy tylko te płyty, których popularność wśród użytkowników Spotify jest większa od trzeciego kwartyla. Dla nie wtajemniczonych kwartyle dzielą uporządkowane wartości na „ćwiartki”. Trzeci kwartyl to taka liczba, dla której 75% wartości jest mniejsza lub równa, a 25% wartości jest większa lub równa od niej. Bierzemy zatem najbardziej popularne.

albums <- data.frame()

for (i in 1:length(ainfo.albums)) {
  album <- get_album(ainfo.albums[i])
  df <- data.frame(id=album$id,name=album$name,pop=album$popularity)
  albums <- rbind(albums,df)
}

top_albums <- albums %>% 
  arrange(-pop) %>% 
  filter(pop > quantile(pop,probs=0.75))

To pozwoliło mi z całej gamy zawęzić liczbę albumów do następujących:

Invisible Touch
We Can't Dance
Genesis
And Then There Were Three
Selling England By The Pound
Live Over Europe 2007 

A teraz czas by dowiedzieć się o właściwościach utworów zamieszczonych na wybranych płytach.

get_artist_audio_features_from_best_albums <- ainfo %>% 
  filter(album_id %in% albums_id)

i wydzielić z tej grupy parametr energy opisujący intensywność i aktywność utworu, a także valence który przedstawia pozytywność muzyczną przenoszoną przez ścieżkę dźwiękową. Dla zobrazowania tych parametrów w przestrzeni dwuwymiarowej określę ich lokalizację, a następnie przyjmując za początek układu współrzędnych punkt (0,0) wyznaczę odległość danego punktu (utworu). Najbardziej odległy utwór będzie tym który szukam. Z ciekawości wyznaczę również ten leżący na przeciwległym biegunie, czyli najmniej energetyczny i pozytywny. Zatem do dzieła.

mes <- get_artist_audio_features_from_best_albums %>% 
  mutate(distance = sqrt(energy^2+valence^2)) %>% 
  select(album_id,album_name,track_id,track_name,energy,valence,distance) %>% 
  arrange(-distance)

ggplot(data=mes, mapping=aes(x=valence,y=energy)) +
  geom_point(size=2) + 
  geom_point(data=mes[c(1,nrow(mes)),], mapping=aes(col="red"),size=5) +
  geom_text(data=mes[c(1,nrow(mes)),], mapping=aes(label=track_name), vjust=-0.5) + theme_minimal() + theme(legend.position = 'none')

zerknijmy na rezultat graficzny:

cała masa punktów (utworów), ale mnie interesują w tym momencie te dwa oznaczone kolorem pomarańczowym. Sprawdźmy, z jakich albumów one pochodzą.

joysad_albums <- mes[c(1,nrow(mes)),]

Zostały wyodrębnione dwa:

Invisible Touch
Selling England By The Pound

Stąd mamy, że najbardziej energetyczny utwór Genesis znajduje się na albumie Invisible Touch podczas gdy najmniej energetyczny na Selling England By The Pound. Czy wszystkie utwory na tych albumach mają podobny charakter? Sprawdźmy to. Wyniki analizy przedstawiono w tabeli oraz graficznie, w tym także za wykorzystaniem grafiki interaktywnej.

Teraz nie pozostaje już nic, jak odtworzyć te dwa utwory. Przyjemnego słuchania.

Aha gdybyście jednak nie chcieli bawić się sami w przeprowadzenie takiej analizy polecam skorzystać z gotowego narzędzia – Sentify. Wystarczy wpisać wykonawcę, nacisnąć przycisk Generate Plot, a następnie trochę poczekać, a potem wybieramy zgodnie z nastrojem.

Dodatkowe materiały

Jurand Bień

dr hab. inż., prof. Politechniki Częstochowskiej; zainteresowania: aspekty środowiskowe, gospodarowanie odpadami (praktyczne), danologia (hobbystycznie)

dr hab. inż., prof. Politechniki Częstochowskiej; zainteresowania: aspekty środowiskowe, gospodarowanie odpadami (praktyczne), danologia (hobbystycznie)

Leave a Reply

Your email address will not be published. Required fields are marked *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.