Songs to pave the seasons

I have analyzed my Spotify data1 for the period 2016-2024. The results accurately represent my actual music taste2.

Technical details

This is a suitable task for an array language, so I rely on BQN which is my favorite one:

⟨P⇐Parse⟩ ← •Import "../bqn-libs/json.bqn"
@ ⊣ spd ← P •file.Chars "../supp/spdat/data.json"

Additional structural information is needed, namely index of the songs, artists, elapsed time, and the length of the desired result.

s‿a‿m‿l ← ⟨7, 8, 3, 1+↕20⟩

We define a (50 chars) dyadic block function to execute the queries:

Q ← {l≍˘∾(⍷𝕨⊸⊏˘)¨ l⊏ ((⍒(+´m⊸⊏˘)¨)⊸⊏ 𝕨⊸⊏˘⊐⊸⊔⊢) >1⊏¨ 𝕩}

Top songs

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

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 the official discography:

lo ← (↕∘⌈+´÷≠) 7‿5‿9‿7‿8‿6‿8‿8‿7‿10‿7‿11‿10

Then:

O ← {lo (1⊸+∘⊣≍˘⊏) (⊢˝˘⊸∊⟜𝕨/⊏˘) ∾(⍷s‿a⊸⊏˘)¨ ((⍒(+´m⊸⊏˘)¨)⊸⊏ s⊸⊏˘⊐⊸⊔⊢) >1⊏¨ 𝕩}

Enjoy:

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:

1

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.

2

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.