Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws2122:spotify:spotify_chart_analyse

🎵 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 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.

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

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. Abb.2Abb.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

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.

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: 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

Bildquellen
  • Die restlichen Grafiken wurden selbst erstellt.
Die Letzten kommen immer zum Schluss.
– Lasse G.

Vielen Dank fürs Lesen!😊

ws2122/spotify/spotify_chart_analyse.txt · Zuletzt geändert: 2022/04/25 22:14 von quinten