Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws2122:spotify:spotify_chart_analyse [2022/03/16 16:03] Lasse.G [Ergebnis] |
ws2122:spotify:spotify_chart_analyse [2022/04/25 22:14] (aktuell) quinten code zip datei |
||
---|---|---|---|
Zeile 9: | Zeile 9: | ||
=====1. Einleitung===== | =====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. ... | + | 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. Jedoch reicht dies für unsere Projekt aus. | + | 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. | Schaut man sich die Verteilung von Spotify-Nutzern an, fällt auf, dass Spotify vor allem in der westlicheren Kultur Anwendung findet. | ||
Zeile 19: | Zeile 19: | ||
Somit erklärt sich auch, warum es kaum Daten über zum Beispiel afrikanische oder asiatische Länder bei Spotify gibt. | 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. | + | 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===== | =====2. Projektziele===== | ||
Zeile 49: | Zeile 49: | ||
=====3. Dokumentation===== | =====3. Dokumentation===== | ||
- | {{ws2122:spotify:flowchart.drawio-2.png|Flowchart unseres Projekts}} | + | {{ws2122:spotify:flowchart-2.drawio.png|Flowchart unseres Projekts}} |
====Datenakquise==== | ====Datenakquise==== | ||
- | Spotify stellt ihre wöchentlichen Charts für alle Länder wo Spotify verfügbar ist öffentlich zum Download zur Verfügung. Wir haben uns alle Daten heruntergeladen und ein Programm geschrieben, dass 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. | + | 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==== | ====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. | + | 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 unteranderem erfolgreiche Songs in den deutschen Charts mit populären Weihnachtssongs verglichen. | + | 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}}\\ | {{:ws2122:spotify:weihnachtssong_vs._chartsong.png |Abb.2}}{{ :ws2122:spotify: Last_Christmas_vs._Baller_los.png?300|Abb.3}}\\ | ||
Zeile 76: | Zeile 76: | ||
^ Chartplazierung nach Weihnachten | nicht 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: | + | Daraufhin haben wir entschieden, wie wichtig die Eigenschaften sind bzw. wie stark diese gewichtet werden sollen: |
====Gewichtung==== | ====Gewichtung==== | ||
- | {{ analyse.drawio.png?300|Aufbau des Analysealgorithmus}} | + | {{ 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. | Der erarbeitete Algorithmus ordnet jedem Song, der in den Charts gewesen ist, einen Wert zu, diesen nennen wir Weihnachtlichkeit. | ||
Zeile 152: | Zeile 152: | ||
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). | 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. | + | 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 bzw. Next.js erstellt. Zusätzliche verwendete Module sind (npm): | + | Die interaktive Landkarte haben wir mithilfe von React und Next.js erstellt. Zusätzliche verwendete Module sind u.a. (npm): |
- | * chakra-ui | + | * chakra-ui (User Interface) |
- | * framer-motion | + | * framer-motion (Animationen auf Website) |
- | * react-simple-maps | + | * 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. | 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. | ||
Zeile 175: | Zeile 175: | ||
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. | 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. | 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. | ||
Zeile 194: | Zeile 201: | ||
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. | 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 Webapp** | + | **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 etwas Erfahrung haben, haben sie mithilfe von Nextjs eine eigene Webapp zur Visualisierung der Daten geschrieben. Im Vergleich zum Nutzen einer bereits existierenden Bibliothek ist das natürlich ein gewisser Mehraufwand, dafür haben wir mit der Webapp wesentlich mehr Flexibilität, einen Musikplayer auf der Website einzubauen haben wir geplant. | + | 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** | **große Datenmengen → Verlangsamung** | ||
Zeile 212: | Zeile 221: | ||
[[https://spotifycharts.com]] [[https://dash.plotly.com]] [[https://pandas.pydata.org/docs/]] [[https://stmorse.github.io/journal/spotify-api.html]] [[https://matplotlib.org]] | [[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== | ==Bildquellen== |