Escribiendo con R y Quarto
  • Info
  • Materiales
  • Blog
  • Pedro J. Pérez

Índice

  • Eurovisión
    • 1. Análisis con R
    • 2. Doc’s con QMD
      • 2.A (informe básico)
      • 2.B (informe tuneado)
    • 3. Slides con QMD
      • 3.A (slides básicas)
      • 3.B (slides tuneadas)

Editar esta página

Informar de un problema

Cuestionario

Ejercicios para el curso Escribiendo con R y Quarto

Autor
Afiliación

Pedro J. Pérez

Universitat de València

Fecha de Publicación

23 de junio de 2023

Contexto

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

Contexto/Objetivo

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

⚠️ Intalación paquetes
  • Para que te funcione el script necesitarás tener instalados varios paquetes de R:
install.packages("pak")
pak::pak(c("tidyverse", "ggtext",  "curl", "perezp44/pjpv.curso.R.2022", "irlba", "widyr"))
Código R
#- 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.

Instrucciones para confeccionar el informe

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:

Ayudita
---
title: "Eurovisión: ¿hay clubs de países?"
author: Nosotros
format: html
---

# Intro

# Marco teórico

# Datos 

# Análisis

# Resultados

## Tabla

## Mapa
Ayuda gorda
---
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**

![Domenico Modugno](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Domenico_Modugno_%281958%29%2C_Bestanddeelnr_909-4001.jpg/800px-Domenico_Modugno_%281958%29%2C_Bestanddeelnr_909-4001.jpg){#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"))
```

2.B (informe tuneado)


Vamos a mejorar nuestro informe. Abajo os doy instrucciones más precisas:

Instrucciones para tunear el informe
  • 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:

Ayudita

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:

Ayudita

Solo tienes que (desde RStudio) crear un fichero para presentación (File > New File > Quarto Presentation). Se creará un fichero con este yaml:

---
title: "Untitled"
format: revealjs
---

Luego solo tendrás que copiar el contenido, exceptuando el yaml, de eurovision_2a.qmd. Quedará algo como:

Primera versión de las slides
---
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**

![Domenico Modugno](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Domenico_Modugno_%281958%29%2C_Bestanddeelnr_909-4001.jpg/800px-Domenico_Modugno_%281958%29%2C_Bestanddeelnr_909-4001.jpg){#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.

Ayuda (segunda versión de las slides)

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**

![](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Domenico_Modugno_%281958%29%2C_Bestanddeelnr_909-4001.jpg/800px-Domenico_Modugno_%281958%29%2C_Bestanddeelnr_909-4001.jpg){#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

Usemos un theme (3ª version de las slides)

Para ello solo has de sustituir el anterior yaml por este:

---
title: "Votaciones de Eurovisión"
format: 
  revealjs:
    theme: sky #- https://quarto.org/docs/presentations/revealjs/themes.html
---

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

Instrucciones 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:

Ayudita




Reutilizar

https://creativecommons.org/licenses/by/4.0/deed.es
© 2023 Pedro J. Pérez
Hecho con Quarto