New spotifyr R Package Release

2.2.1: Thoroughly modernized exception handling, documentation, and some bug fixes

The package is an excellent starting to point for R newbies to try their hands on musicology analysis with a few keystrokes. And of course, it is an essential part of the research infrastructure of musicology worldwide in far more advanced applications.

I have been a very long-time user of Charlie Thomson’s spotifyr R package, which is probably the most used open-source music analytics software in the world. It provides programmatic access to the Spotify Web API, which contains access to the former Echo Nest quantitative musicology engine.

It is an essential part of the Digital Music Observatory’s streaming analysis and our Listen Local apps designed for our trustworthy AI experiments and independent artist services. I am extremely proud to announce that after a very thorough modernization of the package’s exception handling, documentation, and code dependencies that I did in the last week, the package has passed again the peer-review standards and it is back on CRAN.

The package is an excellent starting to point for R newbies to try their hands on musicology analysis with a few keystrokes. And of course, it is an essential part of the research infrastructure of musicology worldwide in far more advanced applications.

Getting Started

You should start with the README and get your Spotify Web API access tokens to get started.

What Was the Beatles' Favorite Key?

library(spotifyr)
beatles <- get_artist_audio_features('the beatles')
library(dplyr)
library(purrr)
library(knitr)

beatles %>% 
    count(key_mode, sort = TRUE) %>% 
    head(5) %>% 
    kable()
key_moden
C major104
D major98
G major82
A major76
E major62

Get your most recently played tracks

library(lubridate)

get_my_recently_played(limit = 5) %>% 
    mutate(
        artist.name = map_chr(track.artists, function(x) x$name[1]),
        played_at = as_datetime(played_at)
        ) %>% 
    select(
      all_of(c("track.name", "artist.name", "track.album.name", "played_at"))
      ) %>% 
    kable()
track.nameartist.nametrack.album.nameplayed_at
A Case of YouTristenA Case of You2021-06-14 09:54:44
Paper CupReal EstatePaper Cup2021-06-10 20:20:11
Wrong with YouTristenWrong with You2021-06-10 20:17:24
Animal - EditLUMPAnimal2021-06-10 20:13:21
Streets Of Your TownDOPE LEMONStreets Of Your Town2021-06-10 18:23:00

That’s about right…

Find Your All Time Favorite Artists

get_my_top_artists_or_tracks(type = 'artists', 
                             time_range = 'long_term', 
                             limit = 5) %>% 
    select(.data$name, .data$genres) %>% 
    rowwise %>% 
    mutate(genres = paste(.data$genres, collapse = ', ')) %>% 
    ungroup %>% 
    kable()
namegenres
Japanese Breakfastart pop, bubblegrunge, eugene indie, indie pop, indie rock, philly indie
Haley Bonarmelancholia, stomp and holler
Balthazarbelgian indie, belgian rock, dutch indie, dutch rock, ghent indie
Buildings Breedingindie fuzzpop
Angus & Julia Stoneaustralian indie folk, indie folk, stomp and holler

What could I say? I travelled Australia listening only to Angus & Julia Stone, the Buildings Breeding have been with me since I discovered them on my first iPod, in one of the first podcasts, the Indiefeed. I created my Kickstarter account back in 2010 to support Haley Bonar’s third album. And the year before I was very much into Japanese Breakfast and Balthazar.

Find your favorite tracks at the moment

get_my_top_artists_or_tracks(type = 'tracks', 
                             time_range = 'short_term', 
                             limit = 5) %>% 
    mutate(
        artist.name = map_chr(artists, function(x) x$name[1])
        ) %>% 
    select(name, artist.name, album.name) %>% 
    kable()
nameartist.namealbum.name
Hot & HeavyLucy DacusHot & Heavy
Sea UrchinMystic BravesSea Urchin
HumanFreedom FryHuman
Hot MotionTemplesHot Motion
Animal - EditLUMPAnimal

What’s the most joyful Joy Division song?

Let’s take a look at the audio feature has to be valence, a measure of musical positivity.

joy <- get_artist_audio_features('joy division')
joy %>% 
    arrange(-valence) %>% 
    select(.data$track_name, .data$valence) %>% 
    head(5) %>% 
    kable()
track_namevalence
Passover - 2020 Digital Master0.946
Passover - 2007 Remaster0.941
Colony - 2020 Digital Master0.829
Colony - 2007 Remaster0.808
Atrocity Exhibition - 2020 Digital Master0.790

Now if only there was some way to plot joy…

Joyplot of the emotional rollercoasters that are Joy Division’s albums

Joyplot of the emotional rollercoasters that are Joy Division’s albums

Sentify: A Shiny app

This app, powered by spotifyr, allows you to visualize the energy and valence (musical positivity) of all of Spotify’s artists and playlists.

Dope Stuff Other People Have Done with spotifyr

The coolest thing about making this package has definitely been seeing all the awesome stuff other people have done with it. Here are a few examples:

Exploring the Spotify API with R: A tutorial for beginners, by a beginner, Mia Smith

Blue Christmas: A data-driven search for the most depressing Christmas song, Caitlin Hudon

Sente-se triste quando ouve “Amar pelos dois”? Não é o único (Do you feel sad when you hear “Love for both?” You’re not alone), Rui Barros, Rádio Renascença

Using Data to Find the Angriest Death Grips Song, Evan Oppenheimer

Hierarchical clustering of David Bowie records, Alyssa Goldberg

tayloR, Simran Vatsa

Our Work with spotifyR

A key mission of our Digital Music Observatory, which is our modern, subjective approach on how the future European Music Observatory should look like, is to not only to provide high-quality data on the music economy, the diversity of music, and the audience of music, but also on metadata. The quality and availability, interoperability of metadata (information about how the data should be used) is key to build trustworthy AI systems. We rely on spotifyr to fulfil this mission.

*Join our open collaboration Music Data Observatory team as a data curator, developer or business developer.

Related