1. INTRODUCCIÓN
Motivación
Para la asignatura de Big Data también teníamos que realizar un trabajo individual, yo en mi caso he decidido hacerlo sobre música, en concreto sobre Rosalía y C. Tangana que pienso que son grandes artistas actualmente en nuestro país.
Datos
Los Datos los he extraído de mi propio Spotify, para ello seguí el taller de uno de los ejemplos de la clase_12 y obteniendo mis credenciales siguiendo otro tutorial pude obtener los datos de la API de Spotify, los paquetes que he utilizado tienen más funciones que permiten conocer por ejemplo cuales han sido tus 5 artistas más escuchados o tu canción favorita.
Una pequeña biografía de los artistas
Rosalía Vila Tobella, conocida profesionalmente como Rosalía, es una cantante, compositora y productora discográfica española. Es conocida por su música flamenca fusionada con elementos del pop, el R&B y el reggaetón. Ha ganado varios premios, incluyendo el Grammy Latino y el Premio Nacional de Música. Su álbum debut “Los Ángeles” fue lanzado en 2017, y su segundo álbum “El Mal Querer” fue lanzado en 2018. Rosalía se ha destacado en la escena musical española y mundial por su gran creatividad y innovación en su música y su estética, ha colaborado con artistas de renombre como James Blake, Billie Eilish, Pharrell Williams y J Balvin.
C. Tangana es un rapero y cantante español de Madrid, España. Comenzó su carrera como rapero en la escena underground del hip-hop en España, pero ha logrado tener éxito en el mainstream. Ha lanzado varios álbumes en solitario, incluyendo “Èl Último Tour de la Humanidad” y “Antes de Morirme”, y ha colaborado con otros artistas como Rosalía y Alizzz. C. Tangana es conocido por su estilo único de combinar la música flamenca tradicional con influencias modernas de hip-hop y R&B.
2. TABLAS
Tabla completa sobre los álbumes de Rosalía
Código
ARTISTA = 'ROSALIA'
vars_audio = c(
'danceability', 'energy', 'loudness', 'acousticness', 'instrumentalness')
df_artist_features <- get_artist_audio_features(artist = ARTISTA) %>%
select(
artist_id, artist_name, album_id, album_name,
album_release_date, album_images, track_name, duration_ms,
all_of(vars_audio)
) %>%
arrange(desc(album_release_date))
df_albums <- df_artist_features %>%
group_by(
album_images, artist_name, album_id, album_name, album_release_date
) %>%
summarise(duration_mins = sum(duration_ms/(1000*60)),
across(all_of(vars_audio), ~ list(.x)),
) %>%
ungroup()
df_albums <- df_albums %>% select(-instrumentalness)
tabla_albums <- df_albums %>% select(-album_id) %>%
gt() %>%
tab_header(
title = md(glue::glue('**{str_to_title(ARTISTA)}** en Spotify')),
subtitle = 'Álbumes más recientes'
) %>%
text_transform(
locations = cells_body(columns = c(album_images)),
fn = function(album_images) {
lapply(album_images, web_image, height = 50)
}
)
get_imagen = function(album_images){
album_images %>%
data.frame() %>%
filter(height==64) %>%
pull(url) %>%
as.character()
}
df_albums <- df_albums %>%
mutate(album_images = map(album_images, ~get_imagen(album_images=.x))) %>%
distinct()
tabla_albums <- df_albums %>% select(-album_id) %>%
gt() %>%
tab_header(
title = md(glue::glue('**{str_to_title(ARTISTA)}** en Spotify')),
subtitle = 'Álbumes más recientes'
) %>%
text_transform(
locations = cells_body(columns = c(album_images)),
fn = function(album_images) {
lapply(album_images, web_image, height = 50)
}
)
tabla_albums <- tabla_albums %>%
gt_merge_stack(
col1 = album_name,
col2 = artist_name
)
tabla_albums <- tabla_albums %>%
gt_color_box(columns = duration_mins,
palette=c('white'),
domain=c(0,round(max(df_albums$duration_mins))+1)) %>%
gt_plt_dist(column = danceability,
type = "density", line_color = "black",
fill_color = "green") %>%
gt_plt_dist(column = energy,
type = "density", line_color = "black",
fill_color = "green") %>%
gt_plt_dist(column = loudness,
type = "density", line_color = "black",
fill_color = "green") %>%
gt_plt_dist(column = acousticness,
type = "boxplot", line_color = "black",
fill_color = "green")
tabla_albums <- tabla_albums %>%
gt::tab_footnote(
locations=cells_column_labels('duration_mins'),
footnote='Duración en minutos = suma de la duración de cada una de las canciones que componen el álbum.') %>%
gt::tab_source_note(source_note='Fuente: API de Spotify') %>%
cols_label(
album_images = '',
album_name = '',
album_release_date = 'Lanzamiento',
duration_mins = 'Duración',
danceability = 'Danceability 🕺',
energy = 'Energy ✨',
loudness = 'Loudness 🔊',
acousticness = 'Acousticness 🎹'
)
my_theme <- function(gt_object, ...){
gt_object %>%
tab_options(
column_labels.background.color = "#FFAEB9",
footnotes.background.color = "#FFF0F5",
source_notes.background.color = "#FFF0F5",
heading.background.color = "#CD8C95",
heading.align = "left",
...
) %>%
tab_style(
style = cell_text(color = "black", size = px(32)),
locations = cells_title("title")
)
}
tabla_albums <- tabla_albums %>%
my_theme()
tabla_albums
Rosalia en Spotify | |||||||
Álbumes más recientes | |||||||
Lanzamiento | Duración1 | Danceability 🕺 | Energy ✨ | Loudness 🔊 | Acousticness 🎹 | ||
---|---|---|---|---|---|---|---|
MOTOMAMI +
ROSALÍA
|
2022-09-09 | 62
|
|||||
MOTOMAMI
ROSALÍA
|
2022-03-18 | 42
|
|||||
El Mal Querer
ROSALÍA
|
2018-11-02 | 30
|
|||||
Los Ángeles
ROSALÍA
|
2017-02-10 | 49
|
|||||
Fuente: API de Spotify | |||||||
1 Duración en minutos = suma de la duración de cada una de las canciones que componen el álbum. |
Otra forma de visualizar la tabla con los álbumes de C.Tangana
Código
ARTISTA = 'C. Tangana'
vars_audio = c(
'danceability', 'energy', 'loudness', 'acousticness', 'instrumentalness'
)
df_artist_features_xx <- get_artist_audio_features(artist = ARTISTA) %>%
select(
artist_id, artist_name, album_id, album_name,
album_release_date, album_images, track_name, duration_ms,
all_of(vars_audio)
) %>%
arrange(desc(album_release_date))
df_albums_xx <- df_artist_features_xx %>%
group_by(
album_images, artist_name, album_id, album_name, album_release_date
) %>%
summarise(duration_mins = sum(duration_ms/(1000*60)),
across(all_of(vars_audio), ~ list(.x)),
) %>%
ungroup()
tablac <- df_albums_xx %>%
select(artist_name, album_name, album_release_date, duration_mins) %>%
gt()
tablac %>%
tab_header(
title = md('**C.Tangana** en Spotify'),
subtitle = 'Álbumes más recientes'
) %>%
gt_color_box(
columns = duration_mins, palette=c('white', 'green'),
domain=c(0,round(max(df_albums_xx$duration_mins))+1))
C.Tangana en Spotify | |||
Álbumes más recientes | |||
artist_name | album_name | album_release_date | duration_mins |
---|---|---|---|
C. Tangana | El Madrileño (La Sobremesa) | 2022-02-18 | 73
|
C. Tangana | El Madrileño | 2021-02-26 | 43
|
C. Tangana | Avida Dollars | 2018-04-20 | 23
|
C. Tangana | Ídolo | 2017-10-05 | 40
|
3. ANÁLISIS DE LOS ÁLBUMES CON LOS DATOS.
3.1 Bailabilidad Media
Para ello he calculado la bailabilidad media de los álbumes de cada artista por separado para después unirlo con la opción (full_join) y así poder compararlos. Como se puede observar la bailabilidad media de los álbumes de Rosalía ha ido en aumento mientrás que con C.Tangana ocurre lo contrario, a lo largo del tiempo (basándonos en la fecha de publicación de sus álbumes) ha ido disminuyendo.
Código
xx <- df_artist_features_xx %>%
group_by(album_release_date) %>%
summarise(bailabilidad_media = mean(danceability))
rr <- df_artist_features%>%
group_by(album_release_date) %>%
summarise(bailabilidad_media = mean(danceability))
df_left_join_xx <- left_join(df_albums_xx, xx)
df_left_join_rosalia <- left_join(df_albums, rr)
df_full_join_artistas <- full_join(df_left_join_xx, df_left_join_rosalia)
r1 <- ggplot(df_left_join_rosalia, aes(x = album_release_date, y = bailabilidad_media, color = artist_name)) + geom_point() + geom_line(aes(group = artist_name)) + labs(title = "BAILABILIDAD MEDIA de LOS ÁLBUMES ", subtitle = "de Rosalía")
r1
3.2 ¿Cúales son las 6 canciones con mayor energía de cada artista?
En el caso de Rosalía son: SAOKO, BIZCOCHITO, LA FAMA - Live en el Palau Sant Jordi, PIENSO EN TU MIRÁ, CANDY Remix y QUE NO SALGA LA LUNA ordenadas de mayor a menor con la función de fct_infreq. Para poder calcular cuales eran las 6 canciones con mayor energía utilicé la opción summarise y slice que en lugar de ser c(1:6) es c(1:8) ya que en Motomami y Motomami + se repetían las canciones BIZCOCHITO y SAOKO.
Código
aa <- df_artist_features %>%
select(track_name, album_name, energy) %>%
group_by(album_name, track_name) %>%
summarise(energia = sum(energy, na.rm = TRUE)) %>% #- cuidado con na.rm = FALSE
ungroup() %>%
arrange(desc(energia)) %>%
slice(c(1:8))
p6 <- ggplot(aa, aes(x = energia, y = track_name)) +
geom_col(fill = "steelblue") + coord_flip()
df <- aa %>% mutate(energia.f = forcats::as_factor(energia)) #- convertimos la v. class a factor con la f. as_factor()
df <- df %>% mutate(energia.ff = forcats::fct_infreq(energia.f))
df_ros <- df %>%
mutate(canciones_rosalia = forcats::fct_reorder(track_name, energia))
#- fct_infreq() los niveles del factor según su frecuencia de mayor a menor
p <- ggplot(df_ros, aes(y = energia, x = canciones_rosalia)) +
geom_col(fill = "#FFAEB9") + coord_flip()
p
En el caso de C. Tangana las 6 canciones con mayor energía de C. Tangana órdenadas de mayor a menor son: La Culpa (feat. Canelita), Pa Que Brille, Caballo Ganador, Huele a Nuevo (feat. Sticky M.A., Danni Ble & Royce Rolo), Yate y por último Sangre (feat. Steve Lean & Saox).
Código
aac <- df_artist_features_xx %>%
select(track_name, album_name, energy) %>%
group_by(album_name, track_name) %>%
summarise(energia = sum(energy, na.rm = TRUE)) %>% #- cuidado con na.rm = FALSE
ungroup() %>%
arrange(desc(energia)) %>%
slice(c(1:6))
df_c <- aac %>% mutate(energia.f = forcats::as_factor(energia)) #- convertimos la v. class a factor con la f. as_factor()
df_cc <- df_c %>% mutate(energia.ff = forcats::fct_infreq(energia.f))
df_ccc <- df_cc %>%
mutate(canciones_ctangana = forcats::fct_reorder(track_name, energia))
p <- ggplot(df_ccc, aes(y = energia, x = canciones_ctangana)) +
geom_col(fill = "#B4EEB4") + coord_flip()
p
3.3 Relación entre la bailabilidad y la energía de los álbumes
Como se puede observar en los álbumes de Rosalía existe una relación positiva entre la energía y la bailabilidad de las canciones que componen el álbum, excepto en el álbum Los Ángeles donde existe una relación negativa entre estas dos variables.
Código
El caso de C. Tangana la relación entre las dos variables es más constante en el caso de “El Madrileño” y el “El Madrileño (La Sobremesa)”, pero no se puede decir lo mismo en “Avida Dollars” y “Ídolo” donde mayor energía no implica mayor bailabilidad, (que sería lo habitual). Por tanto en estos dos últimos álbumes a mayor energía menor bailabilidad.
3.4 ¿Qué álbumes tienen las canciones con mayor energía?
En el caso de Rosalía el álbum ganador es Motomami +, sin embargo, en el caso de C. Tangana hay un empate entre Avida Dollars, El Madrileño y El Madrileño (La sobremesa).
Código
aarr <- df_artist_features %>%
select(track_name, album_name, energy) %>%
group_by(album_name, track_name) %>%
summarise(energia = sum(energy, na.rm = TRUE)) %>% #- cuidado con na.rm = FALSE
ungroup() %>%
arrange(desc(energia)) %>%
slice(c(1:10))
grafico1 <- ggplot(aarr, aes(x="", y = energia, fill = album_name)) +
geom_bar(stat ="identity", color = "black") +
geom_text(aes(label = energia), position = position_stack(vjust=0.6), color="black", size = 2.5, ) +
coord_polar(theta = "y") +
theme_void() +labs(title = "Proporción de los álbumes con las 10 canciones de mayor energía", subtitle = "de Rosalia")
grafico1
Código
aacc <- df_artist_features_xx %>%
select(track_name, album_name, energy) %>%
group_by(album_name, track_name) %>%
summarise(energia = sum(energy, na.rm = TRUE)) %>% #- cuidado con na.rm = FALSE
ungroup() %>%
arrange(desc(energia)) %>%
slice(c(1:10))
graficoc1 <- ggplot(aacc, aes(x="", y = energia, fill = album_name)) +
geom_bar(stat ="identity", color = "black") +
geom_text(aes(label = energia), position = position_stack(vjust=0.6), color="black", size = 2.5, ) +
coord_polar(theta = "y") +
theme_void() +labs(title = "Proporción de los álbumes con las 10 canciones de mayor energía", subtitle = "de C.Tangana")
graficoc1
4. Curiosades sobre los artistas
5. Bibliografía
Para realizar este trabajo me basé en la página web de la asignatura y en el tutorial de la clase_12.
Con esto acabo mi trabajo para BigData!!
Información sobre la sesión
Abajo muestro mi entorno de trabajo y paquetes utilizados
current session info
─ Session info ───────────────────────────────────────────────────────────────
setting value
version R version 4.2.1 (2022-06-23)
os macOS Big Sur ... 10.16
system x86_64, darwin17.0
ui X11
language (EN)
collate es_ES.UTF-8
ctype es_ES.UTF-8
tz Europe/Madrid
date 2023-01-13
pandoc 2.18 @ /Users/noeliateruelortega/Desktop/BIG DATA/RStudio.app/Contents/MacOS/quarto/bin/tools/ (via rmarkdown)
─ Packages ───────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.2.0)
backports 1.4.1 2021-12-13 [1] CRAN (R 4.2.0)
broom 1.0.1 2022-08-29 [1] CRAN (R 4.2.0)
cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.2.0)
cli 3.4.1 2022-09-23 [1] CRAN (R 4.2.0)
clipr 0.8.0 2022-02-22 [1] CRAN (R 4.2.0)
colorspace 2.0-3 2022-02-21 [1] CRAN (R 4.2.0)
commonmark 1.8.0 2022-03-09 [1] CRAN (R 4.2.0)
crayon 1.5.2 2022-09-29 [1] CRAN (R 4.2.0)
crosstalk 1.2.0 2021-11-04 [1] CRAN (R 4.2.0)
curl 4.3.2 2021-06-23 [1] CRAN (R 4.2.0)
data.table 1.14.2 2021-09-27 [1] CRAN (R 4.2.0)
DBI 1.1.3 2022-06-18 [1] CRAN (R 4.2.0)
dbplyr 2.2.1 2022-06-27 [1] CRAN (R 4.2.0)
desc 1.4.2 2022-09-08 [1] CRAN (R 4.2.0)
details 0.3.0 2022-03-27 [1] CRAN (R 4.2.0)
digest 0.6.30 2022-10-18 [1] CRAN (R 4.2.0)
dplyr * 1.0.10 2022-09-01 [1] CRAN (R 4.2.0)
ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.2.0)
evaluate 0.16 2022-08-09 [1] CRAN (R 4.2.0)
fansi 1.0.3 2022-03-24 [1] CRAN (R 4.2.0)
farver 2.1.1 2022-07-06 [1] CRAN (R 4.2.0)
fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.2.0)
fontawesome 0.3.0 2022-07-20 [1] CRAN (R 4.2.0)
forcats * 0.5.2 2022-08-19 [1] CRAN (R 4.2.0)
fs 1.5.2 2021-12-08 [1] CRAN (R 4.2.0)
gargle 1.2.1 2022-09-08 [1] CRAN (R 4.2.0)
generics 0.1.3 2022-07-05 [1] CRAN (R 4.2.0)
ggplot2 * 3.4.0 2022-11-04 [1] CRAN (R 4.2.0)
ggrepel * 0.9.2 2022-11-06 [1] CRAN (R 4.2.0)
glue 1.6.2 2022-02-24 [1] CRAN (R 4.2.0)
googledrive 2.0.0 2021-07-08 [1] CRAN (R 4.2.0)
googlesheets4 1.0.1 2022-08-13 [1] CRAN (R 4.2.0)
gt * 0.7.0 2022-08-25 [1] CRAN (R 4.2.0)
gtable 0.3.1 2022-09-01 [1] CRAN (R 4.2.0)
gtExtras * 0.4.3 2022-11-05 [1] CRAN (R 4.2.0)
haven 2.5.1 2022-08-22 [1] CRAN (R 4.2.0)
hms 1.1.2 2022-08-19 [1] CRAN (R 4.2.0)
htmltools 0.5.3 2022-07-18 [1] CRAN (R 4.2.0)
htmlwidgets 1.5.4 2021-09-08 [1] CRAN (R 4.2.0)
httr 1.4.4 2022-08-17 [1] CRAN (R 4.2.0)
janitor 2.1.0 2021-01-05 [1] CRAN (R 4.2.0)
jsonlite 1.8.0 2022-02-22 [1] CRAN (R 4.2.0)
knitr 1.40 2022-08-24 [1] CRAN (R 4.2.0)
labeling 0.4.2 2020-10-20 [1] CRAN (R 4.2.0)
lattice 0.20-45 2021-09-22 [1] CRAN (R 4.2.1)
lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.2.0)
lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.2.0)
lubridate 1.8.0 2021-10-07 [1] CRAN (R 4.2.0)
magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.2.0)
Matrix 1.5-1 2022-09-13 [1] CRAN (R 4.2.0)
mgcv 1.8-40 2022-03-29 [1] CRAN (R 4.2.1)
modelr 0.1.9 2022-08-19 [1] CRAN (R 4.2.0)
munsell 0.5.0 2018-06-12 [1] CRAN (R 4.2.0)
nlme 3.1-157 2022-03-25 [1] CRAN (R 4.2.1)
paletteer 1.5.0 2022-10-19 [1] CRAN (R 4.2.0)
pillar 1.8.1 2022-08-19 [1] CRAN (R 4.2.0)
pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.2.0)
plotly 4.10.0 2021-10-09 [1] CRAN (R 4.2.0)
png 0.1-7 2013-12-03 [1] CRAN (R 4.2.0)
purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.2.0)
R6 2.5.1 2021-08-19 [1] CRAN (R 4.2.0)
ragg 1.2.2 2022-02-21 [1] CRAN (R 4.2.0)
RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.2.0)
Rcpp 1.0.9 2022-07-08 [1] CRAN (R 4.2.0)
readr * 2.1.2 2022-01-30 [1] CRAN (R 4.2.0)
readxl 1.4.1 2022-08-17 [1] CRAN (R 4.2.0)
rematch2 2.1.2 2020-05-01 [1] CRAN (R 4.2.0)
reprex 2.0.2 2022-08-17 [1] CRAN (R 4.2.0)
rjson * 0.2.21 2022-01-09 [1] CRAN (R 4.2.0)
rlang 1.0.6 2022-09-24 [1] CRAN (R 4.2.0)
rmarkdown 2.16 2022-08-24 [1] CRAN (R 4.2.0)
rprojroot 2.0.3 2022-04-02 [1] CRAN (R 4.2.0)
rstudioapi 0.14 2022-08-22 [1] CRAN (R 4.2.0)
rvest 1.0.3 2022-08-19 [1] CRAN (R 4.2.0)
sass 0.4.2 2022-07-16 [1] CRAN (R 4.2.0)
scales 1.2.1 2022-08-20 [1] CRAN (R 4.2.0)
sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.2.0)
snakecase 0.11.0 2019-05-25 [1] CRAN (R 4.2.0)
spotifyr * 2.2.4 2022-12-15 [1] CRAN (R 4.2.0)
stringi 1.7.8 2022-07-11 [1] CRAN (R 4.2.0)
stringr * 1.4.1 2022-08-20 [1] CRAN (R 4.2.0)
svglite 2.1.0 2022-02-03 [1] CRAN (R 4.2.0)
systemfonts 1.0.4 2022-02-11 [1] CRAN (R 4.2.0)
textshaping 0.3.6 2021-10-13 [1] CRAN (R 4.2.0)
tibble * 3.1.8 2022-07-22 [1] CRAN (R 4.2.0)
tidyr * 1.2.1 2022-09-08 [1] CRAN (R 4.2.0)
tidyselect 1.1.2 2022-02-21 [1] CRAN (R 4.2.0)
tidyverse * 1.3.2 2022-07-18 [1] CRAN (R 4.2.0)
tzdb 0.3.0 2022-03-28 [1] CRAN (R 4.2.0)
utf8 1.2.2 2021-07-24 [1] CRAN (R 4.2.0)
vctrs 0.5.1 2022-11-16 [1] CRAN (R 4.2.0)
vembedr * 0.1.5 2021-12-11 [1] CRAN (R 4.2.0)
viridisLite 0.4.1 2022-08-22 [1] CRAN (R 4.2.0)
withr 2.5.0 2022-03-03 [1] CRAN (R 4.2.0)
xfun 0.33 2022-09-12 [1] CRAN (R 4.2.0)
xml2 1.3.3 2021-11-30 [1] CRAN (R 4.2.0)
yaml 2.3.5 2022-02-21 [1] CRAN (R 4.2.0)
[1] /Library/Frameworks/R.framework/Versions/4.2/Resources/library
──────────────────────────────────────────────────────────────────────────────