Blockvoting in the Eurovision Song Contest

[This article was first published on R – mildlyscientific, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

The Eurovision Song Contest is one of, if not THE biggest international TV song competition in the world. Hundreds of millions of people tune in every year, for stunning voices, weird performances and unforgettable singers. Remember the Epic Sax Guy? He is back again this year!

The winner of the contest is selected by a positional voting system. The voting system has changed a lot over the years, but the general approach has always been the same. Each country awards points to their favorite 10 songs, which can not include the own song. The voting sometimes is considered a bit controversial, since one gets the impression that there is a lot of regional bloc voting going on. Be it Norway and Sweden exchanging 12 points or former soviet countries voting for Russia, anecdotal evidence is all over the place.

In this post, I want to explore, how much evidence the voting data from all ESC provides. You will see, that there is actually quite a lot! The voting data from 1958-2016 was scraped from eurovisionworld and was done in R. The code can be found on github.

Detecting block voting

I created a network of countries, where the links correspond to how often a country gave the maximum points to another.

You might notice that Morocco is in the network. I was surprised too, but they actually participated in 1980! Also Australia is not really part of Europe. They participated in 2015, which was thought to be a one time thing, but since it was so successful, they participate for the third time this year.

To detect the blocks, I used a graph clustering algorithm based on modularity maximization. The maximization goal of the algorithm is exactly what we are after: Find groups of countries that have a lot of strong links among them and very few outside of the group. The algorithm detected five such groups, which are:

  • Austria, France, Belgium, Italy, Switzerland, Germany, Luxembourg, Netherlands, Monaco, UK, Spain, Portugal, Israel, Turkey, Morocco, Andorra
  • Denmark, Sweden, Norway, Finland, Ireland, Iceland, Hungary, Australia
  • Malta, Bosnia & Herzegovina, Croatia, Slovenia, Slovakia, Macedonia, Serbia, Montenegro
  • Greece, Cyprus, Albania, Bulgaria, San Marino
  • Poland, Estonia, Lithuania, Romania, Russia, Latvia, Ukraine, Belarus, Moldova, Armenia, Czech, Republic, Georgia, Azerbaijan

So we have a block of mostly western European countries (and Morocco), the Scandinavian block with Hungary (maybe because of similarities between Finnish and Hungarian?) and Australia, a Balkan block and the Baltic/Caucasus block. When we put this on a map, the regional biases become pretty obvious.

This post was written while watching the 2017 ESC. So meta!

To leave a comment for the author, please follow the link and comment on their blog: R – mildlyscientific. offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)