---
title: "Votaciones de Eurovisión"
author: Nosotros y [@juliasilge@fosstodon.org](https://mastodon.social/@juliasilge)
format: html
---
# Intro
Estamos en el tercer día del [curso de Introducción a Quarto](https://perezp44.github.io/intro.to.quarto/) y estamos practicando cómo hacer un tutorial. Para ello usamos un [gist de Julia Silge](https://gist.github.com/juliasilge/c5e76731e8dc4e2b709f5afd4ebf9b61
)
# 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í](https://www.marca.com/tiramillas/musica/2023/05/11/645c8fd1268e3e48528b45c2.html) 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](https://twitter.com/Picanumeros/status/1525422610179293184).
En la Wikipedia tenemos un largo [artículo sobre Eurovisión](https://es.wikipedia.org/wiki/Festival_de_la_Canci%C3%B3n_de_Eurovisi%C3%B3n) lleno de datos, tablas y mapas.
Una imagen de WikiCommons de la 3ª edición del festival en la que aparece **Domenico Modugno**
{#fig-01 fig-align="center" width="45%"}
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](https://github.com/rfordatascience/tidytuesday/tree/master/data/2022/2022-05-17#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`.
```{r}
#| label: setup #- se ejecutará siempre
#| include: false #- para que se ejecute pero no se muestre nada en el output
library(tidyverse)
library(widyr) #- (irlba, widyr)
library(maps)
```
Descargamos datos de Eurovision con este chunk de código:
```{r}
#| echo: true
#| eval: true
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](https://gist.github.com/juliasilge/c5e76731e8dc4e2b709f5afd4ebf9b61)
Vamos a utilizar técnicas de clustering implementadas en el paquete `widyr` **Supondremos que hay 4 clusters**.
```{r}
#- 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
```{r}
#- tabla -----
table <- eurovision_clusters %>%
group_by(cluster) %>%
summarise(from_country = paste(from_country, collapse = ", "))
gt::gt(table)
```
## Mapa
```{r}
#- 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"))
```
Cuestionario
Ejercicios para el curso Escribiendo con R y Quarto
23 de junio de 2023
Cuestionario, confeccionado para el curso Escribiendo con R y Quarto. El curso es una introducción a Quarto en el que vemos como generar documentos (tutoriales, slides, webs …) con contenido estadístico generado con R.
Los ejercicios se han pensado para resolver en el Qproject “quarto.ejercicios” que puedes descargarte aquí
Eurovisión
Igual algunos de vosotros no sabéis mucho R, pero os voy a proporcionar código R para hacer un análisis con datos de las votaciones de Eurovisión.
No es preocupéis por el código R, sólo vamos a ejecutarlo para que veáis que lo que hace es cargar unos datos, trabajarlos, aplicar una técnica estadística y crear una tabla y una visualización.
El ejercicio solo es una excusa, una forma de practicar la creación de documentos con Quarto.
El código del ejemplo se lo debemos a @juliasilge@fosstodon.org. Thanks Julia!!
1. Análisis con R
Pega el siguiente código R en un script (fichero .R) llamado eurovision_1.R
y ejecuta el código
#- eurovision_1.R -----
#- https://github.com/rfordatascience/tidytuesday/blob/master/data/2022/2022-05-17/readme.md
#- https://gist.github.com/juliasilge/c5e76731e8dc4e2b709f5afd4ebf9b61
library(tidyverse)
library(widyr) #- pacman::p_load(irlba, widyr)
library(maps)
#- cargamos datos -----
eurovision_votes <- read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2022/2022-05-17/eurovision-votes.csv')
#- 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)
#- tabla -----
table <- eurovision_clusters %>%
group_by(cluster) %>%
summarise(from_country = paste(from_country, collapse = ", "))
gt::gt(table)
#- 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"))
#- otro análisis con esos datos: https://twitter.com/geokaramanis/status/1527271169447014403
2. Doc’s con QMD
2.A (informe básico)
Una vez hemos comprobado que el código del apartado anterior nos funciona, hay que redactar un informe (reproducible) que describa lo que hemos hecho con el código anterior. Más abajo os doy instrucciones más precisas.
Generar un informe básico en formato html que describa lo que hemos en el apartado anterior
Indicaciones:
El documento fuente que generará el informe final ha de llamarse
eurovision_2a.qmd
Informe en formato html, con título y autor.
El informe tendrá las siguientes secciones de primer nivel: Intro, Marco teórico, Datos, Análisis y Resultados
El informe ha de contener: párrafos, una imagen, enlaces, una cita, una nota al pie, texto en negrita, una ecuación, una tabla y un gráfico
No te preocupes por lo que escribes, preocúpate sólo de la sintaxis y elementos de Quarto.
Evidentemente, sabrías hacer el informe, solo que necesitarías tiempo. Así que mejor si empiezas, lo intentas un poco, ya veremos cuanto (¿3-4 minutos?) y una vez lo hayas intentado usas lo siguiente:
2.B (informe tuneado)
Vamos a mejorar nuestro informe. Abajo os doy instrucciones más precisas:
Para preservar el documento fuente del informe original, guarda una copia con el nombre
eurovision_2b.qmd
Pon TOC a la derecha
Pon las opciones (las que puedas) de los chunks en el YAML. Aprovecha y haz que no se muestren los mensajes y los warnings que quedan muy feos en el informe final
Haz que los chunks sean expandibles
Que se pueda descargar el documento fuente
…. más cosas que se nos ocurran
Evidentemente, sabrías tunear el informe, solo que necesitarías tiempo. Así que mejor si empiezas, lo intentas un poco, ya veremos cuanto (¿3 minutos?) y una vez lo hayas intentado (pero fuerte) usas lo siguiente:
Puedes usar el yaml que ves más abajo. Está un poco cargadito, pero se trata de recordar algunas de las opciones que tenemos en el YAML
---
title: "Votaciones de Eurovisión"
subtitle: "Ejercicio del curso [Escribiendo con R y Quarto](https://perezp44.github.io/intro.to.quarto/){target='blank'}"
abstract: Los resultados señalan los siguientes clusters de países .... y
date: 2023-01-02
date-modified: last-modified
author:
- name: Pedro J. Pérez
url: https://perezp44.github.io/intro.to.quarto/
affiliation: Universitat de València
affiliation-url: https://www.uv.es
orcid: 0000-0001-9375-6330
- name: Nosostros y [@juliasilge@fosstodon.org](https://mastodon.social/@juliasilge)
categories: [Clustering, Eurovision]
format:
html:
page-layout: full
theme:
- superhero #sketchy #slate #- litera darkly cosmo
- assets/ember.scss
css:
- assets/styles.css
toc: true
toc-title: Índice
toc-depth: 3
toc-location: right
code-line-numbers: true
code-copy: true
code-overflow: scroll #- {wrap, scroll}
code-fold: show
code-tools: false
code-link: true
execute:
echo: true
eval: true
message: false
warning: false
embed-resources: true
---
3. Slides con QMD
3.A (slides básicas)
Utiliza el documento eurovision_2a.qmd
para generar unas Revealjs slides sobre Eurovision. El archivo que generará las slides llámalo eurovision_3a.qmd
Evidentemente sabes hacer las slides, inténtalo fuerte (3-4 minutos) y luego mira las ayudas:
Solo tienes que (desde RStudio) crear un fichero para presentación (File > New File > Quarto Presentation). Se creará un fichero con este yaml:
Luego solo tendrás que copiar el contenido, exceptuando el yaml, de eurovision_2a.qmd
. Quedará algo como:
---
title: "Votaciones de Eurovisión"
format: revealjs
---
# Intro
Estamos en el tercer día del [curso de Introducción a Quarto](https://perezp44.github.io/intro.to.quarto/) y estamos practicando cómo hacer un tutorial. Para ello usamos un [gist de Julia Silge](https://gist.github.com/juliasilge/c5e76731e8dc4e2b709f5afd4ebf9b61
)
# 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í](https://www.marca.com/tiramillas/musica/2023/05/11/645c8fd1268e3e48528b45c2.html) 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](https://twitter.com/Picanumeros/status/1525422610179293184).
En la Wikipedia tenemos un largo [artículo sobre Eurovisión](https://es.wikipedia.org/wiki/Festival_de_la_Canci%C3%B3n_de_Eurovisi%C3%B3n) lleno de datos, tablas y mapas.
Una imagen de WikiCommons de la 3ª edición del festival en la que aparece **Domenico Modugno**
{#fig-01 fig-align="center" width="45%"}
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](https://github.com/rfordatascience/tidytuesday/tree/master/data/2022/2022-05-17#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`.
```{r}
#| label: setup #- se ejecutará siempre
#| include: false #- para que se ejecute pero no se muestre nada en el output
library(tidyverse)
library(widyr) #- (irlba, widyr)
library(maps)
```
Descargamos datos de Eurovision con este chunk de código:
```{r}
#| echo: true
#| eval: true
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](https://gist.github.com/juliasilge/c5e76731e8dc4e2b709f5afd4ebf9b61)
Vamos a utilizar técnicas de clustering implementadas en el paquete `widyr` **Supondremos que hay 4 clusters**.
```{r}
#- 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
```{r}
#- tabla -----
table <- eurovision_clusters %>%
group_by(cluster) %>%
summarise(from_country = paste(from_country, collapse = ", "))
gt::gt(table)
```
## Mapa
```{r}
#- 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"))
```
OK, salen unas slides, PERO no muy bien, porque hay contenido que no se ve: tenemos que dedicar un poco de tiempo a ver como separamos el contenido en slides. Una posibilidad es hacerlo como puedes ver en la siguiente ayuda.
Simplemente he dividido el contenido del “Marco teórico” en 3 slides, he quitado cosas y he puesto bullets
---
title: "Votaciones de Eurovisión"
format: revealjs
---
## Intro
Estamos en el tercer día del [curso de Introducción a Quarto](https://perezp44.github.io/intro.to.quarto/) y estamos practicando cómo hacer un tutorial. Para ello usamos un [gist de Julia Silge](https://gist.github.com/juliasilge/c5e76731e8dc4e2b709f5afd4ebf9b61
)
## 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í](https://www.marca.com/tiramillas/musica/2023/05/11/645c8fd1268e3e48528b45c2.html) 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](https://twitter.com/Picanumeros/status/1525422610179293184).
- En la Wikipedia tenemos un largo [artículo sobre Eurovisión](https://es.wikipedia.org/wiki/Festival_de_la_Canci%C3%B3n_de_Eurovisi%C3%B3n) lleno de datos, tablas y mapas.
---
- Una imagen de WikiCommons de la 3ª edición del festival en la que aparece **Domenico Modugno**
{#fig-01 fig-align="center" width="45%"}
---
- 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})$ ,
- ahora 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](https://github.com/rfordatascience/tidytuesday/tree/master/data/2022/2022-05-17#eurovision).
```{r}
#| label: setup #- se ejecutará siempre
#| include: false #- para que se ejecute pero no se muestre nada en el output
library(tidyverse)
library(widyr) #- (irlba, widyr)
library(maps)
```
- Descargamos datos de Eurovision con este chunk de código:
```{r}
eurovision_votes <- read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2022/2022-05-17/eurovision-votes.csv')
```
## Análisis
- Vamos a utilizar técnicas de clustering implementadas en el paquete `widyr` **Supondremos que hay 4 clusters**.
```{r}
#- 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
```{r}
#- tabla -----
table <- eurovision_clusters %>%
group_by(cluster) %>%
summarise(from_country = paste(from_country, collapse = ", "))
gt::gt(table)
```
---
### Mapa
```{r}
#- 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"))
```
Bueno, siguen sin estar muy chulas, así que vamos a usar un theme
Aún necesitan más trabajo, pero en un apuro gordo medio podrían valer 😉😉
3.B (slides tuneadas)
Una vez hemos hecho unas slides básicas vamos a mejorarlas. Más abajo os doy instrucciones más precisas para tunear las slides
Indicaciones:
cambia el color de una página
….
Evidentemente, sabrías tunear las slides, solo que necesitarías tiempo. Así que mejor si empiezas, lo intentas un poco, ya veremos cuanto (¿3 minutos?) y una vez lo hayas intentado (pero fuerte) usas lo siguiente: