Songs to pave the seasons
My Spotify data1 from 2016-2024, representing eight years of listening, reveals patterns that are more about me2 than the music itself. I processed it all in BQN, as its clarity is perfectly suited for both data analysis and introspection. Whether you enjoy these kinds of patterns or just the music, I’m always glad to exchange thoughts.
Technical details
The data come as a large JSON file exported from Spotify. Parsing it is straightforward thanks to bqn-libs:
⟨P⇐Parse⟩ ← •Import "../../bqn-libs/json.bqn" @ ⊣ spd ← P •file.Chars "../../supp/spdat/data.json"
For later queries I isolate the relevant fields (song index, artist, elapsed time) and set the length of the desired result:
s‿a‿m‿l ← ⟨7, 8, 3, 1+↕20⟩
Finally, I define a compact (50 chars) dyadic block function to perform ranked lookups and return the top entries:
Q ← {l≍˘∾(⍷𝕨⊸⊏˘)¨ l⊏ ((⍒(+´m⊸⊏˘)¨)⊸⊏ 𝕨⊸⊏˘⊐⊸⊔⊢) >1⊏¨ 𝕩}
Top songs
The result is somewhat eclectic, yet a clear pattern emerges. Most pieces belong to a world of intricate harmonies and long forms: during these years, it's been all about progressive rock and progressive metal. A few simpler intrusions distort the spectrum: traces of a desert island I once inhabited.
s Q spd
┌─
╵ 1 "Countless Skies"
2 "Divertimento I, K.136: Allegro"
3 "The Numbers"
4 "Autre temps"
5 "Ghost of Perdition"
6 "Crossing the Road Material"
7 "Hoppípolla"
8 "Ether"
9 "Colossus"
10 "River"
11 "El Tete"
12 "Will o the Wisp"
13 "Pakumba"
14 "Damned Rope"
15 "Eternal Rains Will Come"
16 "La femme d'argent"
17 "Bajanda"
18 "Nimrodel - Medley"
19 "Breathe (In The Air) - 2011 Remastered Version"
20 "In The Shadow Of Our Pale Companion"
┘
Top artists
The same tendency appears at the level of artists. I gravitate toward music that builds worlds rather than merely expresses moods. Yet sometimes I descend to a simpler plane, to enjoy the breeze down there, or to feel the melancholia of my past existence3.
a Q spd
┌─
╵ 1 "Opeth"
2 "Wolfgang Amadeus Mozart"
3 "Pink Floyd"
4 "Be'lakor"
5 "Sigur Rós"
6 "Coldplay"
7 "Mogwai"
8 "Chocolate Mc"
9 "Radiohead"
10 "Joaquín Sabina"
11 "Iron & Wine"
12 "Rammstein"
13 "Alcest"
14 "Buena Fe"
15 "Silvio Rodríguez"
16 "Amon Amarth"
17 "In Mourning"
18 "Lamb of God"
19 "Camel"
20 "Omnium Gatherum"
┘
Bonus: Opeth anthology
This is the Opeth album I would recommend to anyone. The query function needs to be modified a bit for generating it. But before that, let's look at average album length in the official discography:
lo ← (↕∘⌈+´÷≠) 7‿5‿9‿7‿8‿6‿8‿8‿7‿10‿7‿11‿10
We can then filter all Opeth entries among the top songs, and select the first ≠lo:
O ← {lo (1⊸+∘⊣≍˘⊏) (⊢˝˘⊸∊⟜𝕨/⊏˘) ∾(⍷s‿a⊸⊏˘)¨ ((⍒(+´m⊸⊏˘)¨)⊸⊏ s⊸⊏˘⊐⊸⊔⊢) >1⊏¨ 𝕩}
Enjoy this whisper within a sigh4:
spd O˜⋈ "Opeth"
┌─
╵ 1 "Ghost of Perdition"
2 "River"
3 "Will o the Wisp"
4 "Eternal Rains Will Come"
5 "The Drapery Falls"
6 "Elysian Woes"
7 "Burden"
8 "Harvest"
┘
Footnotes:
It is possible to request a detailed report of all user activity since the account was created. There are some interesting fields in the data, but more advanced information, such as genre, requires querying the Spotify Web API, which is beyond the scope of this post.
Well, modulo all from Tool and Silent state optimizer from Leech, which are definitely in my top ten,
and which I listen to on YouTube. It's possible to analyze the data from this site as well, perhaps in a follow-up post.
Silvio would say "Ahora me parece que hubiera vivido un caudal de siglos por viejos caminos".