=====đ” Spotify Chart Analyse đ”=====
**Mitglieder**: Lasse G., Simon V., Greta S., Quinten R. und Martha I.
=====1. Einleitung=====
Wir haben lange zwischen mehreren Ideen geschwankt, wir hatten aber definitiv Lust, etwas mit der sehr umfangreichen API von Spotify zu realisieren. Das war im November, kurz vor der Hochphase der Weihnachtszeit - mit (coronakonformen) WeihnachtsmĂ€rkten und Last Christmas ĂŒberall. ...
So kam uns die Idee, die "besten" bzw. "beliebtesten" Weihnachtssongs zu kĂŒren. Also ĂŒberlegten wir uns, welche Daten wir fĂŒr die Analyse brauchen und wie wir diese verarbeiten wollen. Auf der Website von [[https://spotifycharts.com | Spotify]] wurden wir fĂŒndig. Zwar sind die Daten insofern beschrĂ€nkt, dass dort nur Chartdaten fĂŒr LĂ€nder, die Spotify in einem bestimmten MaĂ nutzen und fĂŒr einen bestimmten Zeitrahmen zu finden sind. Jedoch reicht dies fĂŒr unser Projekt aus.
Schaut man sich die Verteilung von Spotify-Nutzern an, fÀllt auf, dass Spotify vor allem in der westlicheren Kultur Anwendung findet.
{{ :ws2122:spotify:nutzer.png?500 |Abb1: Spotify-Nutzer}}
Somit erklĂ€rt sich auch, warum es kaum Daten ĂŒber zum Beispiel afrikanische oder asiatische LĂ€nder bei Spotify gibt.
Also haben wir uns entschieden, hauptsÀchlich mit den Daten westlicher LÀnder zu arbeiten und als Bonus LÀnder wie Japan oder Vietnam mit in den Katalog aufzunehmen.
----
=====2. Projektziele=====
====Minimalziel====
Weihnachtssongs mit Hilfe unserer Analysemethoden fĂŒr bestimmte LĂ€nder identifizieren (DatenintegritĂ€t ĂŒberprĂŒfen) \\
* FunktionalitĂ€t prĂŒfen, testweise Daten auslesen⊠\\
* Daten sortieren und kompilieren \\
* Programmplan erstellen (Songcharakteristika erdenken) \\
* Programm schreiben \\
**Option 1** \\
Weihnachtssongs beliebiger LĂ€nder identifizieren, der Benutzer wird interaktiv gefragt
**Option 2** \\
Eine Website, auf der unsere Analyseergebnisse mittels einer interaktiven Landkarte dargestellt werden (evtl. plotly)
**Option 3** \\
Andere besondere Events (Tag der Toten, usw.) hinzufĂŒgen
**Option 4** \\
Andere Daten hinzufĂŒgen und auswerten (Glockenklingeln)/ Songcharakteristika
----
=====3. Dokumentation=====
{{ws2122:spotify:flowchart-2.drawio.png|Flowchart unseres Projekts}}
====Datenakquise====
Spotify stellt ihre wöchentlichen Charts fĂŒr alle LĂ€nder, in denen Spotify verfĂŒgbar ist, öffentlich zum Download zur VerfĂŒgung. Wir haben uns alle Daten heruntergeladen und ein Programm geschrieben, das alle wöchentlichen Chartdaten eines Landes in eine Datei zusammenfĂŒgt (Merger). So ist es spĂ€ter fĂŒr unser Analyseprogramm einfacher, alle Chartdaten einzulesen.
====Entwicklung des Algorithmus====
Nachdem wir uns ĂŒberlegt hatten, welche Möglichkeiten wir haben (siehe 2. Projektziele), haben wir entschieden, uns als erstes auf die Daten aus Deutschland zu konzentrieren, d. h. unser Algorithmus beruht auf den Erfahrungen aus der Analyse der deutschen Chartdaten.
Um typische Eigenschaften eines Weihnachtssongs zu ermitteln, haben wir unter anderem erfolgreiche Songs in den deutschen Charts mit populÀren Weihnachtssongs verglichen.
{{:ws2122:spotify:weihnachtssong_vs._chartsong.png |Abb.2}}{{ :ws2122:spotify: Last_Christmas_vs._Baller_los.png?300|Abb.3}}\\
Es ist deutlich zu erkennen, dass Weihnachtssongs jedes Jahr wieder neu in die Charts eintreten, wohingegen "regulÀre" Songs nach dem Einstieg in die Charts bei Betrachtung der Chartplazierung immer weiter fallen.
Besonders gut ist der Unterschied zu erkennen, beim Vergleich von einem erfolgreichen Weihnachtssong wie "Last Christmas" von Wham! (hier in rot) und einem durchschnittlichen Song in den Charts wie "Baller Los" von Mero (hier in blau).
Daraus konnten wir folgende Charakterisierung ĂŒbernehmen...
| ^ typische Eigenschaften ^
^ Zeitspanne/ Weihnachten | November - Dezember |
^ wiederholtes Auftauchen/ Re-Entry | zu Weihnachten re-entry |
^ Chartplazierung um Weihnachten | in den Charts |
^ Chartplazierung nach Weihnachten | nicht in den Charts |
Daraufhin haben wir entschieden, wie wichtig die Eigenschaften sind bzw. wie stark diese gewichtet werden sollen:
====Gewichtung====
{{ analyse.drawio-2.png?300|Aufbau des Analysealgorithmus}}
Der erarbeitete Algorithmus ordnet jedem Song, der in den Charts gewesen ist, einen Wert zu, diesen nennen wir Weihnachtlichkeit.
Die Weihnachtlichkeit beschreibt zwei Dinge:
* Die Wahrscheinlichkeit, dass es sich um einen Weihnachtssong in dem jeweiligen Land handelt und
* Die PopularitĂ€t, die dieser Song als Weihnachtssong in dem jeweiligen Land genieĂt.
Dabei steht ein höherer Wert fĂŒr eine höhere Wahrscheinlichkeit bzw. eine höhere PopularitĂ€t eines Weihnachtssong.
Die Weihnachtlichkeit wird wie folgt berechnet:
Wir haben zwei Gruppen von Ereignissen erstellt welche sich jeweils positiv bzw. negativ auf die Weihnachtlichkeit eines bestimmten Songs auswirken können, wobei eine hohe Chartplazierung die Gesamtbilanz eines Songs verstÀrkt, unabhÀngig davon, ob es sich um eine positive oder negative Auswirkung handelt.
Dadurch sollen Songs die der Beschreibung der Weihnachtlichkeit entsprechen eine positive Bilanz bzw. eine hohe Weihnachtlichkeit erhalten. Ebenso sollen so Songs, die nicht der Beschreibung der Weihnachtlichkeit entsprechen eine negative Bilanz bzw. eine geringe Weihnachtlichkeit erhalten.
Als Kategorien haben wir uns an der herausgearbeiteten Charakterisierung von Weihnachtssongs in den deutschen Spotify-Charts orientiert.
**Positive Auswirkungen** \\
1. Song innerhalb einer gewissen Zeitspanne in den Charts/ Song nahe der Weihnachtswoche (Kalenderwoche 51) in den Charts
Zuerst hatten wir uns dazu entschieden, die Kalenderwochen 48-52 als Weihnachtswochen zu definieren. Allerdings haben wir festgestellt, dass Weihnachtssongs zwar teilweise schon im November in die Charts einsteigen, jedoch erst um die 51. Kalenderwoche ihre Top-Platzierung erreichen. Deshalb haben wir uns entschieden eine Funktion erstellen, welche den Songs in der Weihnachtswoche gröĂere Bedeutung zurechnet, als den Songs die in den Wochen davor und danach in den Charts sind.
Dadurch konnten wir unseren Code deutlich vereinfachen.
{{ :ws2122:spotify:geogebra-export.png |}}
kw_delta = 51-kw
# f(x)=10*2^(-abs(0.29 x))-3
kw_delta *= 0.29
kw_delta = abs(kw_delta)
kw_delta *= -1
f = 10 * 2**kw_delta -3
2. Wiederholtes Auftreten in den Charts ĂŒber mehrere Jahre
# Weight wird verdreifacht, wenn Song in gleicher KW im vorherigen Jahr in den Charts war
if kw in repetitions.get(track, {}).get(year-1, []):
weight *= 3
# Um Wiederholungen zu prĂŒfen, werden fĂŒr jeden Song die KWs pro Jahr gespeichert
if repetitions.get(track, {}).get(year) == None:
if repetitions.get(track) == None:
# Falls der Song noch nicht gespeichert wurde, wird er initialisiert
repetitions[track] = {}
# Neue Liste mit erster KW wird gespeichert
repetitions[track][year] = [kw]
else:
# Falls das Jahr bereits gespeichert ist, wird die KW angefĂŒgt.
repetitions[track][year].append(kw)
**Negative Auswirkungen**\\
1. Falls sich der Song auĂerhalb der gewissen Zeitspanne in den Charts befand, wurden Punkte abgezogen.
Neben der Funktion, die sich positiv fĂŒr Songs um die 51. KW und negativ fĂŒr die zeitlich weiter entfernten Songs auswirkt (siehe oben), bekommen die Songs auĂerhalb der Weihnachstwochen noch zusĂ€tzlich Punkte abgezogen (abhĂ€ngig ihrer Chartplatzierung)
# Falls die Songs nicht innerhalb der Weihnachtswochen sind, werden Punkte abgezogen
weight = -10.0 / rank
====Visualisierung====
Nachdem wir anfÀnglich mit einfachen Darstellungsmöglichkeiten wie Balkendiagrammen experimentiert hatten, haben wir uns darauf geeinigt die Endergebnisse mithilfe einer interaktiven Landkarte darzustellen.
Unsere Idee: Klickt der Benutzer auf ein Land, werden ihm die weihnachtlichsten Songs des Landes angezeigt. Dabei haben wir uns, der Ăbersicht wegen, auf die Top 15 Songs geeinigt. Zudem sollte erkennbar sein, bei welchen LĂ€ndern es der gleiche Track auf Platz 1 geschafft hat (FarbĂŒbereinstimmung).
Auf Empfehlung von Andrea und Lysanne hatten wir uns mit Plotly beschĂ€ftigt. Plotly ist ein Datenvisualisierungsbibliothek fĂŒr Python. Letztendlich haben wir uns jedoch nach der Recherche gegen Plotly entschieden, weil wir Plotly als zu komplex fĂŒr unser Vorhaben empfanden.
Die interaktive Landkarte haben wir mithilfe von React und Next.js erstellt. ZusÀtzliche verwendete Module sind u.a. (npm):
* chakra-ui (User Interface)
* framer-motion (Animationen auf Website)
* react-simple-maps (Darstellung der Karte)
Unsere anfĂ€nglichen Ideen zur Visualisierung konnten wir gut umsetzen. Nachdem wir anfangs die FlĂ€che der LĂ€nder mit dem Cover des populĂ€rsten Weihnachtssongs gestalten wollten, haben wir uns letzten Endes doch fĂŒr EinfĂ€rbungen im gleichen Farbton entschieden, da die LandesflĂ€chen sehr unterschiedliche Formen und GröĂen haben, sodass das Cover nur schwer zu erkennen ist. ZusĂ€tzlich sind die LĂ€ndertöne abhĂ€ngig von der Weihnachtlichkeit des Top-Songs. Sie werden unterschiedlich stark gesĂ€ttigt, um die generelle Weihnachtlichkeit der LĂ€nder und die Genauigkeit der Ergebnisse darzustellen.
----
=====4. Protokolle=====
Den Protokollen, die regelmĂ€Ăig angefertigt wurden kann man den Verlauf unseres Projektes entnehmen. \\
Hier befinden sich alle Protokolle des Semesters: [[ws2122:spotify:spotify_chart_analyse:Protokolle]]
----
=====5. Fazit=====
====Bezug auf Zielsetzung====
Weitestgehend sind wir mit dem Ergebnis unseres Projekts zufrieden. Wir haben unser Minimalziel erreicht, indem wir Weihnachtssongs mit Hilfe unserem Code fĂŒr bestimmte LĂ€nder identifizieren können. NatĂŒrlich unter der Voraussetzung, dass fĂŒr dieses Land von Spotify die Charts fĂŒr einen lĂ€ngeren Zeitraum generiert wurden, da sonst der Datensatz zu gering ist.
NatĂŒrlich ist unser Algorithmus nicht perfekt - einige der aufgefĂŒhrten Songs sind ganz offensichtlich keine Weihnachtssongs. Dabei zu beachten ist die Weihnachtlichkeit des Top-Songs: Wenn diese einen gewissen Wert unterschreitet (nach unserer Erfahrung etwa 10), sind die Ergebnisse mit hoher Wahrscheinlichkeit keine Weihnachtssongs und werden nicht zu Weihnachten gespielt. Nun zeigen wir auf unserer Website aber immer die Top 15 Songs an, egal wie hoch die Weihnachtlichkeit ist. So ist es, vor allem in LĂ€ndern mit keiner stark ausgeprĂ€gten Weihnachtskultur so, dass wir eben keine schlĂŒssigen Ergebnisse anbieten können.
AuĂerdem sind unsere korrekt identifizierten Songs meistens keine âtraditionellenâ Songs: unsere Datenbasis liefert der Streamingdienst Spotify, den doch tendenziell eher junge Menschen nutzen - die tendenziell eher moderne Musik hören.
Die Parameter des Algorithmus kann man auch noch etwas optimieren - momentan ĂŒbertrumpfen sehr erfolgreiche Songs, die die lange in den Charts sind die periodisch wieder eintretenden Weihnachtssongs mit purer PopularitĂ€t.
Auch konnten wir âOption 1â und âOption 2â realisieren, durch die Visualisierung der Analyseergebnisse mittels einer interaktiven Landkarte wird der Benutzer interaktiv gefragt, welches Land fĂŒr diesen von Interesse ist.
====Probleme und Herausforderungen====
**trackname oder URI?**
Ein Problem mit dem wir vorher nicht gerechnet hatten, ist das Problem wie wir einen Song identifizieren können. Zu Anfang hatten wir mit der ID und der URI gearbeitet, allerdings mussten wir feststellen, das es von den populÀren Weihnachtssongs viele verschiedene Versionen gibt.
Neben Neuaufnahmen, die bei der Verwendung von URI und ID jeweils einzeln aufgelistet werden, hat uns auch gestört, dass wenn der gleiche Song einmal als Single und einmal innerhalb eines Albums veröffentlicht wurde, als verschiedene Songs gelistet werden. Darum haben wir uns darauf geeinigt die Songs nach dem âtracknameâ zu listen. Ausschlaggebend dafĂŒr war im wesentlichen der Song Last Christmas, wovon neben verschiedenen Covern, eine Originalversion, eine Neuaufnahme und eine
Version fĂŒr den Film Last Christmas veröffentlicht wurde.
**zeitlich kurze Aufzeichnung der Charts eine Landes**
Bei einigen LĂ€ndern ist der Datensatz sehr gering, da in diesen LĂ€ndern Spotify erst seit einem kĂŒrzeren Zeitraum verfĂŒgbar ist und/oder die Chartlisten erst seit wenigen Monaten von Spotify erstellt werden. Beispielhaft dafĂŒr sind unter anderem Indien (seit 2019) und Ăgypten (seit 2018).
**Wie stark muss die Gewichtung sein (Balance)?**
Unser Algorithmus beruht auf Erkenntnissen, die von einem Land (Deutschland) gestĂŒtzt werden. Die Regeln, nach denen die Songs bewertet werden, beruhen darauf. Aus KapazitĂ€tsgrĂŒnden haben wir es bei diesen recht âgrobenâ Regelungen belassen, sicherlich kann unser Algorithmus, aber noch verbessert werden.
**Visualisierung â Möglichkeiten Analyseergebnisse darstellen | Plotly vs React**
Andrea und Lysanne haben uns zur Datenvisualisierung Plotly empfohlen. Plotly ist eine Datenvisualisierungsbibliothek fĂŒr Python. Sie ist sehr umfangreich und man kann mit ihr groĂe DatensĂ€tze darstellen, jedoch empfanden wir sie fĂŒr unsere Anwendung als zu komplex. Da Quinten und Simon mit der Entwicklung von Webapps bereits Erfahrung haben, haben sie mithilfe von Next.js eine eigene Webapp zur Visualisierung der Daten geschrieben.
Dies ist AufwĂ€ndiger, als Plotly zu verwenden, da man nicht direkt auf die Daten und den Code aus Python zugreifen kann. Allerdings konnten wir alle unsere Analyseergebnisse statisch exportieren und in der Website einbinden. Ein groĂer Vorteil der Website ist, dass sie vollkommen statisch ist. Das heiĂt, sie besteht nur aus HTML/CSS/JS Dateien, welche nur auf einem Server gespeichert sind. Das viel gĂŒnstiger, einfacher und schneller, als einen Plotly Server zu hosten. Ein weiterer Vorteil ist, dass die Website viel flexibler gestaltet werden konnte.
**groĂe Datenmengen â Verlangsamung**
Den Algorithmus haben wir mit dem vollstĂ€ndigen Datensatz der Chartplatzierungen fĂŒr Deutschland getestet. Dieser ist knapp 7MB groĂ und umfasst etwa 50 Tsd. EintrĂ€ge. Daher kann ein Testdurchlauf des Programms mehrere Minuten dauern, was die Entwicklung stark verlangsamt hat. Schlussendlich haben wir den Datensatz reduziert und den vollstĂ€ndigen Datensatz nur teilweise analysiert wobei wir darauf geachtet haben die Aussagekraft der Ergebnisse nicht zu beeintrĂ€chtigen. Dies fĂŒhrte zu einer deutlich verkĂŒrzten Laufzeit.
====Ergebnis====
{{ :ws2122:spotify:unknown1.png? |Website}}
[[https://christmas-songs.vercel.app/|Datenvisualisierung]]
----
=====6. Links und Quellen=====
[[https://spotifycharts.com]] [[https://dash.plotly.com]] [[https://pandas.pydata.org/docs/]] [[https://stmorse.github.io/journal/spotify-api.html]] [[https://matplotlib.org]]
Unser gesamter Code befindet sich [[https://git.tu-berlin.de/music-charts/spotify-charts|hier]], bzw. hier:
{{:ws2122:spotify:spotify-charts-main.zip|}}
==Bildquellen==
*[[https://de.statista.com/statistik/daten/studie/887077/umfrage/verteilung-der-monatlich-aktiven-nutzer-von-spotify-nach-regionen-weltweit/|Abbildung 1]]
*Die restlichen Grafiken wurden selbst erstellt.
> Die Letzten kommen immer zum Schluss.
> -- Lasse G.
Vielen Dank fĂŒrs Lesen!đ