Coding

Analyzing the Swiss song charts

(There is a follow-up of this post: Part II)

TLDR: Scroll down to find a searchable table of the most succesful songs ever (by a custom scoring system).


After going to a pub quiz night with a challenge to “name the song”, in which popular songs where played and one had to guess the title, I thought about which songs I would chose myself for such a quiz.
Clearly, one would have to chose popular songs – but how to measure popularity of a song over time, and especially how to compare one song to another?

The official Swiss song charts, tracked by hitparade.ch, tracks the performance of each song appearing in the charts back until 1968, so that was a good point to begin with.

Getting the charts

After finding the text version, I also saw that the charts could be navigated through by week, so for example https://hitparade.ch/showcharttext.asp?week=2619 would give you the most current chart week (for singles) at the time writing.

I wrote a little script to scrape all data into a folder, on which I then could perform some analysis (and without the need to download them again).

You can have a look at the code in this Github repo (with the raw data).

Scoring

After downloading the complete charts, I had to find a way to calculate scores for each song. With position per week as the only metric, what does it mean for a song to be popular or successful over some time? How to translate a chart position into a score?

There is already a simple version of this over at hitparade.ch, but the weight of a chart position is just a linear sequence from 100 to 1:

  • Position 1: 100 points
  • Position 2: 99 points
  • Position 3: 98 Points
  • Position 100: 1 point

So this means, if a song is two times on 50th position, this equals to being once on a position 1? That doesn’t seem fair – the higher the chart position, the more popular it gets, and that does not translate linearly. A song which is twice on 50th place is nowhere near the top 10, and the scoring system should take that into account accordingly.

So I thought of an exponential rating: What if each next chart position is 95% of the current one, starting at 100 points?

This leads to the following scorings:

  • Position 1: 100 points
  • Position 2: 95 points
  • Position 3: 90.25 points
  • Position 4: 85.7 points
  • Position 5: 81.5 points
  • Position 10: 63 points
  • Position 20: 37.7 points
  • Position 30: 22.6 points
  • Position 40: 13.5 points
  • Position 50: 8.1 points
  • Position 100: 0.6 points

which makes more sense in my eyes, or at least is more intuitive than the simpler rating.

Compiling a list

After applying the scoring to all the songs for all existing weeks back to 1968, this yielded an all-time song chart list, which is shown below. You can browse or search for your favorite song (50 entries shown):

All-time charts

Search:
{{entry[0]}}. {{entry[1]}} ({{entry[3]}}) - {{entry[2]}} points

These are the all the 11708 songs by scoring. You can also download the complete list as csv or have a look how it is built on Github.

Thanks for reading!

adrianus
---

« Older Newer »