Votaciones de Eurovisión

Ejercicio del curso Escribiendo con R y Quarto

Clustering
Eurovision
Published

January 2, 2023

Modified

June 8, 2023

Abstract
Los resultados señalan los siguientes clusters de países …. y

Intro

Estamos en el tercer día del curso de Introducción a Quarto y estamos practicando cómo hacer un tutorial. Para ello usamos un gist de Julia Silge

Marco teórico

Los países tienen afinidades/intereses etc… que pueden condicionar las votaciones de Eurovisión. El “prestigioso” diario Marca se hace eco aquí de esta hipótesis. En el artículo se cita a @picanumeros que ha trabajado el tema. Puedes ver su análisis en este hilo de twitter.

En la Wikipedia tenemos un largo artículo sobre Eurovisión lleno de datos, tablas y mapas.

Una imagen de WikiCommons de la 3ª edición del festival en la que aparece Domenico Modugno

Figure 1: Domenico Modugno

Por mucho que me empeñe yo cuesta incorporar ecuaciones a un informe sobre Eurovision, pero aquí tenemos una ecuación inline, \(A(L)=(I_{K}-A_{1}L^{1}- ... -A_{p}L^{p})\) , más abajo una ecuación independiente:

\[y_{t}=A_{1}y_{t-1}+v_{t}\]

Datos

Necesitamos datos. Afortunadamente el proyecto tidytuesday en su edición del 17 de mayo de 2022 utilizó datos sobre votaciones en Eurovision.

Antes de iniciar el análisis cargamos los paquetes de R que usaremos, solo que no vas a ver el chunk en el output final porque hemos puesto #| include: false.

Descargamos datos de Eurovision con este chunk de código:

Code
eurovision_votes <- read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2022/2022-05-17/eurovision-votes.csv')

Análisis

La verdad es que con esos datos se podrían hacer algún análisis más, por ejemplo tenemos el orden de aparición: igual el orden en el que cantas influye en las votaciones; pero vamos a replicar el análisis de @juliasilge@fosstodon.org

Vamos a utilizar técnicas de clustering implementadas en el paquete widyr Supondremos que hay 4 clusters.

Code
#- clustering -----
set.seed(234)
eurovision_clusters <-  eurovision_votes %>%
  # dimensionality reduction with SVD: https://www.youtube.com/watch?v=UyAfmAZU_WI
  widyr::widely_svd(from_country, to_country, points, nv = 24) %>%
  #- combination of SVD and k-means: https://www.researchgate.net/publication/284617182_Combination_of_Singular_Value_Decomposition_and_K-means_Clustering_Methods_for_Topic_Detection_on_Twitter
  widyr::widely_kmeans(from_country, dimension, value, k = 4)

Resultados

Los resultados parecen good

Tabla

Code
#- tabla -----
table <- eurovision_clusters %>% 
  group_by(cluster) %>% 
  summarise(from_country = paste(from_country, collapse = ", ")) 
gt::gt(table)
cluster from_country
1 Belarus, Belgium, Bosnia & Herzegovina, Bulgaria, Estonia, Greece, Israel, Latvia, Lithuania, Poland, Romania, Russia, San Marino, Slovakia, United Kingdom
2 Albania, Armenia, Austria, Azerbaijan, Croatia, Czech Republic, F.Y.R. Macedonia, Finland, France, Georgia, Germany, Luxembourg, Macedonia, Malta, Monaco, Montenegro, North Macedonia, Norway, Portugal, Serbia, Serbia & Montenegro, Slovenia, Spain, Sweden, Switzerland, Yugoslavia
3 Andorra, Cyprus, Denmark, Ireland, Italy, Morocco, Netherlands, The Netherlands
4 Australia, Hungary, Iceland, Moldova, Turkey, Ukraine

Mapa

Code
#- mapa -----
map_data("world") %>%
  filter(region %in% eurovision_clusters$from_country) %>%
  left_join(eurovision_clusters, by = c("region" = "from_country")) %>%
  ggplot(aes(long, lat, group = group, fill = cluster)) +
  geom_polygon(alpha = 0.8) +
  coord_map() +
  scale_fill_brewer(palette = "Dark2") +
  labs(title = "Which countries vote similarly for Eurovision?",
       subtitle = "Clusters identified with SVD and K-means",
       caption = "Big thanks to @juliasilge@fosstodon.org") +
  pjpv.curso.R.2022::theme_pjp_maps() +
  theme(panel.background = ggplot2::element_rect(fill = "white",  color = NA)) +
  theme(plot.background = ggplot2::element_rect(colour = "white",fill = "white"))