Čo keby sme sa pri vytváraní vianočných playlistov neriadili našimi preferenciami, ale dátami? Rozhodol som sa, že sa na to skúsim pozrieť, hoci výsledok bol neistý. A áno, práca na tomto projekte znamenala vyhľadávanie a počúvanie veľkého množstva vianočných skladieb. A áno, to znamená, že moje personalizované odporúčania v Spotify sú týmto experimentovaním značne ovplyvnené. Napriek tomu som sa obetoval pre vyššie dobro, aby ste si nemuseli prejsť rovnakými útrapami. Vytvoril som pre vás 6 data-driven vianočných playlistov a získal pár zaujímavých štatistík.

Začiatok článku o zbere a vyhodnocovaní dát je pre hardcore analytikov. Neskôr nájdete ešte viac zaujímavých štatistík. A koho nič z toho nezaujíma, sa môže rovno prescrollovať na koniec článku k playlistom. 😉

Zázrak sa nestal

V kútiku duše som dúfal, že tento rok pre mňa Vianoce prídu o čosi skôr a že nájdem dataset vianočných pesničiek vhodný na analýzu. Nemyslím si, že som mal veľké nároky. Stačilo by, aby dataset obsahoval názov skladby, interpreta a dátum vydania (poprípade akékoľvek ďalšie zaujímavé údaje, ktoré by sa dali pri analýze využiť). Vianočný zázrak sa však nestal a nič schopné som nenašiel (teda ak sa mi nechcelo sťahovať a následne prehľadávať 300GB dát. Spoiler: nie, nechcelo 😉 ). Po krátkom Googlení som našťastie natrafil na Spotify API. Navyše som zistil, že pre Spotify API existuje aj R wrapper, vďaka ktorému je možné dáta sťahovať a ďalej s nimi pracovať v R-ku.

Smutný santa :(

Keďže moje skúsenosti s R-kom sú na bode mrazu (pun intended), musím priznať, že získanie dát a ich analyzovanie bolo náročné. Rozhodol som sa, že vianočné pesničky získam zo štyroch najpočúvanejších vianočných playlistov – „Christmas Hits“, „Christmas Classics“, „Christmas Pop“ a „Christmas Is Coming“. Pridávanie ďalších playlistov mi už nedávalo veľký zmysel, nakoľko by aj tak väčšinou obsahovali tie isté skladby. V tom horšom prípade dokonca tú istú skladbu naspievanú 42 rôznymi interpretmi, v 13 remixoch, vydanú na 3 rôznych albumoch.

Zistil som, že cez Spotify API sa možem dostať k naozaj veľkému množstvu dát. Každá skladba obsahuje základné údaje ako názov a id skladby, meno interpreta, rok vydania, dĺžka skladby (v ms) a album, na ktorom vyšla. Okrem týchto základných informácií, som cez Spotify API o každej skladbe získal aj ďalšie zaujímavé metriky (každá metrika môže nadobúdať hodnoty od 0 do 1):

  • Danceability – táto metrika určuje ako dobre sa na skladbu tancuje. Algoritmus na určenie tejto hodnoty zohľadňuje viacero faktorov. Napr. tempo, stálosť rytmu, pravidelnosť skladby atď. Na pesničky som však tancovať neskúšal, takže som presnosť tejto metriky empiricky neoveril. Možno úloha pre vás. 😉
  • Energy – typicky energické skladby sú rýchle a hlasné. Podľa Spotify má vysokú energiu napríklad Death Metal, zatiaľ čo Prelude od Bacha má nízku energiu.
  • Loudness – celková hlasitosť skladby.
  • Speechineess – metrika predstavuje, koľko hovoreného slova skladba obsahuje. Čím vyššia hodnota, tým viac hovoreného slova (ak je hodnota väčšia ako 0.6 ide s veľkou pravdepodobnosťou o podcast).
  • Acousticness – čím vyššia hodnota, tým vyššia pravdepodobnosť, že skladba je v akustickom prevedení.
  • Valence – zaujímavá metrika, ktorá meria pozitivitu skladby. Skladby s vysokou hodnotou valence (bližšie k 1) sú pozitívne, šťastné až euforické skladby, naopak skladby s nízkou valence (bližšie k 0) znejú viac negatívne (smutne, depresívne, nahnevane).
  • Tempo – tempo skladby (založené na BPM – beats per minute).
  • Popularity – popularita skladby, hodnota od 0 po 100, kde 100 predstavuje momentálne najpopulárnejšiu skladbu. Táto metrika je úzko prepojená s aktuálnou počúvanosťou skladby. Skladba, ktorá je aktuálne počúvaná viac bude mať vyššiu popularitu.

Tieto metriky sú dosť black-box (nevieme presne ako sú počítané), no budeme predpokladať, že ľudia v Spotify vedia, čo robia. 🙂

Výber pesničiek

Po nazbieraní dát o všetkých pesničkách nasledovalo čistenie datasetu. Prvým krokom bolo odstránenie duplicitných pesničiek. Najskôr som odstránil všetky riadky s rovnakým track.id. Tento postup však neodstránil rovnaké skladby, ktoré sa nachádzali na iných albumoch (tieto skladby majú rôzne track.id, hoci sa jedná o rovnakú pesničku od rovnakého interpreta). Tento postup taktiež neodstránil rôzne ‚Remastered‘ verzie, alebo covery (vždy som sa snažil ponechať originálnu verziu). A keďže mi nenapadol spoľahlivejší spôsob, ako tieto duplicity odstrániť skriptom, pustil som sa do toho ručne. Navyše, niektoré skladby (najmä tie staršie) mali priradený nesprávny rok vydania, tak som opravil aj ten. Konečný dataset som vyexportoval do Google Sheet.

Dataset konečne hotový!

Zaujímavé štatistiky

Po prečistení datasetu v ňom ostalo 118 skladieb. Obsahuje tie najväčšie bangre od Franka Sinatru či Justina Biebera, s rokom vydania začínajúcim rokom 1942, končiac v roku 2019. Najviac skladieb v datasete má:

  • Bing Crosby (9),
  • Mariah Carey (6)
  • a prekvapivo Sia (5 – vedeli ste, že Sia vydala minulý rok vianočný album? Ja tiež nie.).

Nemusíte byť zrovna data scientist, aby ste z nasledujúceho grafu vyčítali, že v poslednej dekáde sa s vianočnými skladbami akosi roztrhlo vrece.

analýza vianočných songov

Distribúcia skladieb podľa roku vydania – x: Rok vydania, y: Počet skladieb v datasete.

Najkratšou skladbou v datasete je známa koleda „We Wish You a Merry Christmas“ (John Denver) – skladba trvá len 65 sekúnd.

Naopak, najdlhšou skladbou je „You’re a Mean One, Mr. Grinch“ (Thurl Ravenscroft), ktorú si budete užívať úctyhodných 5 minút a 16 sekúnd (vypočul som si ju a verzia na Spotify obsahuje veľa hovoreného slova, preto tá odstrašujúca stopáž). Priemerná dĺžka skladby je však akceptovateľné (?) 3 minúty a 12 sekúnd.

Keďže sa mi dát stále málilo, rozhodol som sa získať texty jednotlivých skladieb. V tomto skvelom blogu Caitlin popisuje, ako rýchlo a jednoducho môžeme texty stiahnuť využitím Genius API. A skutočne, o pár hodín neskôr som mal texty všetkých piesní k dispozícií. K niektorým textom skladieb som sa cez Genius API nevedel dostať. V takom prípade nastupovalo staré dobré Googlenie a ručné kopírovanie a pridávanie textov.

Po ďalších troch hodinách predspracovania textov skladieb som začal pochybovať, či tento článok reálne vyjde pred Vianocami 2019. Jedným z problémov bolo odstrániť tzv. stopwords. Stopwords sú slová, ktoré nenesú žiadny význam (napríklad the, a, but, and, or, what…). Po odstránení týchto slov som mohol vygenerovať ďalšie štatistiky.

Najmenej unikátnych slov majú skladby „Ho Ho Ho“ (Sia) a „Holly Jolly Christmas“ (Michael Bublé) – po 30. Naopak, najkreatívnejšou skladbou (aspoň čo sa do počtu slov týka) je skladba „Christmas Wrapping“ (Kylie Minogue) so 175 unikátnymi slovami.

analýza vianočných pesničiek

Aj keď „Ho Ho Ho“ obsahuje len 30 unikátnych slov, zopár z nich je veľmi zaujímavých.

Asi nikoho neprekvapí, že najčastejším slovom, ktoré sa vyskytuje vo vianočných pesničkách je slovo „Christmas“ – celkovo sa v 118 skladbách vyskytuje presne 833 krát (čo znamená, že v jednej pesničke sa priemerne vyskytuje 7 krát). Zaujímavé je, že slovo „Christmas“ sa aspoň raz objaví v 92 skladbách (čo zvyšuje primerný výskyt slova na 9).

To ale znamená, že v 26 vianočných pesničkách sa slovo „Christmas“ vôbec nevyskytuje! Nedalo mi, a musel som sa pozrieť, ktoré to sú (playlist nájdete na konci článku).

55 skladieb má „Christmas“ priamo v názve. Slovo „Christmas“ sa objavuje aj v zaujímavých variáciách – ako napríklad v pesničke „Merry Christmas Darling“ (Carpenters) sa objaví slovo „Christmasing“ – toto slovo sa nevyskytuje v žiadnej inej pesničke v datasete.

Ďalšie obľúbené slová sú „love“, „time“, „year“, „merry“, „snow“, „make“, „santa“, „like“, „baby“ atď. Ostatné slová si môžete pozrieť v tejto vizualizácií v tvare vianočného stromčeka (lebo prečo nie).

 data driven analýza vianočných pesničiek - oblak značiek, wordcloud

Tu sú! Data-driven playlisty

Na začiatku som nemal úplne jasnú predstavu, ako chcem k analýze vlastne pristúpiť. Nápady prichádzali postupne, či už pri vytváraní datasetu, alebo čítaním blogových článkov (zoznam užitočných článkov som spísal úplne nakoniec v časti Zdroje).

Playlist: Cheesiest Christmas!

Tento playlist obsahuje tie najgýčovejšie a najneoriginálnejšie vianočné skladby. Na určenie najgýčovejšej skladby som si definoval tzv. Christmas Cheese Ratio. Tento pomer sa počíta podľa veľmi jednoduchého vzorca:

Christmas Cheese Ratio určuje, koľko percent z pesničky tvorí 20 najbežnejších slov vo vianočných skladbách. Ak je tento pomer väčší ako 33% (viac ako tretina pesničky je tvorená najbežnejšie vyskytujúcimi sa slovami), skladba je na playliste! Osemnásť najmenej kreatívnych vianočných skladieb – to chcete!

Fakt, že v tomto playliste nájdete až 3 pesničky od Mariah Carey, už posúďte sami. Najgýčovejšou vianočnou pesničkou je Make It To Christmas (Alessia Cara).

Playlists: Joyful Christmas 🙂 & Sad Christmas 🙁

Rozmýšľal som ako pri analýze využiť text skladieb. Zaujala ma analýza sentimentu (slová môžu byť pozitívne, negatívne alebo neutrálne) a emócie textu. Väčšina slov je zaradená do kategórie (niektoré slová môžu byť vo viacerých kategóriách) podľa toho, akú emóciu v ľuďoch vyvoláva. Využil som NRC lexicon , ktorý slová kategorizuje do desiatich kategórií – positive and negative (pozitívne a negatívne), anger and anticipation (hnev a očakávanie), disgust and fear (znechutenie a strach), joy and sadness (šťastie a smútok) a surprise and trust (prekvapenie a dôvera). V prvom kroku som sa pozrel na slová všetkých pesničiek. Podľa očakávania sa na prvých piatich miestach objavili emócie positive, joy, anticipation, trust a surprise. Naopak, päť najmenej používaných citovo zafarbených slov spadalo do kategórií negative, sadness, anger, fear a disgust  (hoci verte mi, po týždni konštatného počúvania vianočných playlistov som bol znechutený viac než dosť).

skladby podľa sentimentu - data driven analýza vianočných pesničiek

Chcel som teda určiť najšťastnejšie pesničky. Tiež som sa chcel pozrieť, či by sa niektoré z nich dali označiť za smutné až depresívne, alebo sú negatívne slová skôr rovnomerne rozložené naprieč skladbami. Zadefinoval som si dva vzorce:

Celkovú pozitivitu skladby (christmasEndorphinIndex) som určil ako priemer troch normalizovaných hodnôt – positiveWordslyricalDensity a energypositiveWords je pomer medzi pozitívnymi slovami a všetkými slovami v pesničke (bez stopwords). lyricalDensity je pomer počtu slov v pesničke a jej času (takže vyjadruje počet slov za sekundu). energy je metrika od Spotify a mala by predstavovať energické skladby. Metriky lyricalDensity a energy som do vzorca zahrnul, pretože okrem pozitívnych slov by šťastná (joyful) vianočná pesnička mala byť aj vo veselom rýchlom tempe. Ak by pesnička obsahovala veľa pozitívnych slov, ale tempo a energia by boli nízke, pesnička by pôsobila skôr upokojujúco (napr. Tichá noc). Tempo spievania vyjadruje metrika lyricalDensity a hudobné tempo metrika energy. Všetky tri metriky boli normalizované na hodnoty od 0 po 1. Najpozitívnejšou pesničkou je „Merry Christmas, Happy Holidays“ (*NSYNC). 

 

Podobne som postupoval pri hľadaní negatívnych pesničiek. Vytvoril som ukazovateľ christmasDepressionIndex. Samozrejme, namiesto pozitívnych slov som v metrike negativeWords zisťoval frekvenciu výskytu negatívnych slov. V tomto prípade som ale metriky lyricalDensity a energy znegoval – tzn. ak mala pesnička menej slov za sekundu a bola menej energická, považujem ju za smutnejšiu. Vysoká frekvencia negatívynch slov a vysoké metriky energy a lyricalDensity by skôr implikovali hnev (myslím, že žiadna metalová skupina sa do finálneho datasetu nedostala). Preto som sa sústredil na skladby s nízkou energy a lyricalDensity – tieto skladby budú evokovať smútok. Najsmutejšou skladbou sa stala „You’re A Mean One, Mr. Grinch“ (Thurl Ravenscroft). Zaujímavé je, že na playlist sa dostala aj pesnička „Let It Snow! Let It Snow! Let It Snow!“ (Frank Sinatra), ktorú vnímam skôr pozitívne, ale keďže sme všetci data-driven, osobné preferencie nikoho nezaujímajú.

Pár bonusových playlistov na záver

Počas predspracovávania datasetu mi napadli ďalšie zaujímavé playlisty. Za týmito playlistmi nehľadajte žiadnu veľkú analýzu (skôr je to len zaujímavá štatistika).

Playlist: Christmas songs without word „Christmas“ in their lyrics, because why not

Tento playlist je vytvorený z vianočných skladieb, ktoré neobsahujú slovo „Christmas“.*

*Hoci analýza ukázala, že pesnička „Wonderful Christmastime“ (Paul McCartney) a pesnička „Merry Xmas Everybody“ (Slade) neobsahujú slovo „Christmas“ – vyskytuje sa len vo variáciách „Christmastime“ resp. „X-mas“ – do playlistu som ich nakoniec nezaradil (aby som sa vyhol prípadným sťažnostiam).

Playlist: Let’s Dance this Christmas

Taktiež som sa chcel pozrieť na ostatné metriky od Spotify a „overiť“ si ich presnosť. V tomto playliste nájdete energické skladby, na ktoré by sa malo aj dobre tancovať (dajte mi vedieť, keď odskúšate na vianočnom večierku).

Playlist: Is it over yet? [Christmas]

Tento playlist je určený pre všetkých, ktorí by boli najradšej keby Vianoce prešli čo najrýchlejšie, no nechcú kaziť radosť tým, ktorí sa na Vianoce tešili celý rok. 20 pesničiek do 40 minút? Žiadny problém! Ani jedna pesnička na tomto playliste netrvá dlhšie ako dve a pol minúty!

Zdroje

Ako som už spomínal vyššie, moje znalosti v R boli pred začatím tohto projektu takmer nulové a preto by tento článok nikdy nevznikol bez týchto skvelých článkov:

SpotifyR – Charlie Thompson, Josiah Parry, Donal Phipps, Tom Wolff

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

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

Prajeme Veselé Vianoce
a veľa data-driven rozhodnutí v Novom Roku!

Upozornenie na záver: Počúvanie všetkých playlistov je len na vlastné riziko! Autor článku Peťo, už nie tým človekom, ktorým býval pred napísaním tohto článku…