Explora tu actividad en Spotify con R y “spotifyr”: Análisis y visualización de datos de tu historial y gustos musicales

Descubre cómo y cuánto consumes de Spotify, usando una copia de tus datos personales y el package “spotifyr”

Dashboard para visualizar actividad de reproducción en Spotify. Link al final del articulo

Puedo decir con mucho orgullo que soy de las personas que aún tuvieron el placer de ir a las mejores tiendas de CD’s musicales para adquirir los últimos lanzamientos de sus artistas favoritos. Recuerdo que, teniendo apenas unos 15 años de edad (edad en la que la mayoría de nosotros adoptamos un género musical, bandas y artistas con los que nos sentimos identificados), representaba para mi todo un ritual, desde la incansable búsqueda hasta ese mágico momento en el que sonaba ese primer compás del primer track en el stereo o el discman con los audífonos bien puestos, y a todo volumen. La música muy probablemente sea una de esas cosas en particular por las que cualquier civilización de otra galaxia (de haberlas) nos señalaría identificándonos como raza humana.

“Después del silencio, lo que más se acerca a expresar lo inexpresable es la música.”
- Aldous Huxley.

Al igual que todo en la vida, con el paso del tiempo la música también cambia y se transforma, evoluciona (¿o muta extrañamente?). Y esto también ocurre con la forma en que escuchamos y consumimos música. Hoy, 17 años después, mi ritual dejó de existir y son muy pocas las tiendas que venden CD’s musicales, con el tiempo los reemplacé completamente por la comodidad que brinda estar suscrito al servicio de streaming más popular del mundo: Spotify. Según estadísticas recientes, el 35% de suscriptores a un servicio de streaming de música en todo el mundo, tienen una suscripción con Spotify, casi el doble de la proporción que se encuentran suscritos a Apple Music, y muy por encima de Amazon, Deezer y otras plataformas.

Es por ello que me pareció interesante poder aprovechar que Spotify, al igual que casi cualquier aplicación hoy en día, te permite descargar los datos personales que resguarda de tu cuenta. Esto incluye tu actividad reproducción, historial de búsqueda, entre otras cosas en formato JSON.

Screenshot: Correo de Spotify “Year in review” 2020

Sí, ya se que Spotify año con año te ofrece muy amablemente tu “year in review”, con información sobre tus hábitos y consumo. Seguramente en diciembre recibiste un correo invitándote a explorar tu actividad durante el año.

Sin embargo siempre resulta interesante y divertido ver cómo se hacen las cosas por tu cuenta, además de escudriñar en otros datos que Spotify no te brindaría por si solo.

También quiero que conozcas un interesante package para trabajar con R, llamado “spotifyr” que permite de manera sencilla dar vistazos más profundos sobre tus gustos musicales con el API de Spotify. Pero bueno, como diría Jack el Destripador… ¡Vámonos por partes!.

¿Dónde y cómo puedo obtener una copia de mis datos en Spotify?

Tendrás que loguearte con tu username y password para poder ingresar en la url de ajustes de privacidad de tu cuenta personal en Spotify: https://www.spotify.com/us/account/privacy/. Ahí encontrarás que casi al término de la página hay un apartado con el texto “Download your data”, que te invita en tres sencillos pasos a descargar tus datos.

Screenshot: Ajustes de privacidad en cuenta personal de Spotify

Una vez que realizas la solicitud, por seguridad Spotify estará enviándote un correo electrónico para verificar que efectivamente fuiste tú quien solicitó esta copia de datos. Es necesario confirmar el correo que recibas.

Screenshot: Correo de confirmación de solicitud de copia de datos personales en Spotify

Al confirmar estará casi inmediato llegándote un correo más, donde Spotify te avisará que tu petición ha sido exitosa, pero que debes esperar hasta 30 días en lo que recopila tu información para enviártela. No te desesperes y espera hasta nuevo aviso.

En realidad creo que depende mucho de que tan robusta haya sido tu actividad con la plataforma. Probando con otras cuentas con una mayor actividad que la mía, llegaron a tardarse casi los treinta días, mientras que en mi caso, a los tres días de haber realizado la petición recibí el correo final invitándome a descargar mis datos. Te encontrarás después de un par de un días entonces con un correo como el siguiente.

Screenshot: Correo de invitación a descargar tu copia de datos personales en Spotify

Al dar clic en el botón “Descargar” estarás siendo redirigido una vez más a la página de ajustes de privacidad de tu cuenta en Spotify, donde por motivos de seguridad, aunque ya te encuentres logueado, te pedirá que ingreses tu password de nuevo. Hecho esto último, automáticamente estarás viendo en tu navegador una descarga activa de un archivo con el nombre “my_spotify_data.zip”. Recuerda que como lo menciona el último correo, sólo tienes un máximo de 14 días a partir de que te fue enviado para poder descargar tu archivo, de lo contrario tendrás que volver a realizar una nueva solicitud.

Screenshot: Descarga de archivo “my_spotify_data.zip” en chrome

Felicidades, ahora tienes en tu poder tu copia de datos personales en Spotify. Epero que no hayas tenido que esperar muchos días.

Lectura de Datos de historial de reproducciones en Spotify

Cuando descomprimas el archivo que has descargado, te encontrarás con una carpeta de nombre “My Data” que contiene distintos archivos en formato JSON, entre ellos uno muy en particular con la información que te interesa: tu historial de reproducción, con el nombre de archivo “StreamingHistory0.json”.

Screenshot: Archivo “my_spotify_data.zip” descomprimido

Si tú has tenido una actividad más intensa que la mía en tu cuenta, muy probablemente te encuentres con más de un archivo, sucedido con el siguiente número. Por ejemplo: “StreamingHistory1.json”, “StreamingHistory2.json”, etc. Spotify estará dividiendo en archivos no mayores a 1.5 MB tu historial completo. Un detalle a tomar en cuenta: Spotify conserva sólo tus datos e historial con antiguedad de un año. Sería genial poder contar con el hisorial completo, por ejemplo en mi caso tengo poco más de seis años usando la plataforma, pero bueno, por ahora será suficiente con analizar los datos del último año.

Ahora sí, puedes poner manos a la obra creando un nuevo script en R. Lo primero que tienes que establecer es la carga de las librerías que estarás usando, además de la lectura del archivo de tu historial en formato JSON.

# LIBRERÍAS REQUERIDASlibrary(jsonlite)
library(lubridate)
library(gghighlight)
library(spotifyr)
library(tidyverse)
library(knitr)
library(ggplot2)
# LECTURA DE HISTORIAL DE REPRODUCCIÓN JSONstreamHistory <- fromJSON("StreamingHistory0.json", flatten = TRUE)

Encontrarás que tu historial contiene básicamente cuatro variables con las que estarás jugando: “endTime”, “artistName”, “trackName” y “msPlayed”.

También notarás que has cargado la librería “spotifyr”, de la cual te platico por ahora como introducción, pertenece al package creado por el usuario en github “charlie86”, y te permitirá de manera sencilla usar el API de Spotify para obtener detalles adicionales que no podrías encontrar en tu copia de datos personales. Puedes encontrar más allá de lo que realices con los ejemplos de este artículo, otros interesantes ejemplos en su repositorio: https://github.com/charlie86/spotifyr.

¿En qué fechas escuchaste más o menos música en Spotify?

Esta es una primer pregunta que podrías responder. Partiendo de nuestras variables, puedes definir las horas, minutos y segundos, y cualquier temporalidad básicamente. Puedes realizar un primer plot para observar el comportamiento de tu actividad en Spotify a lo largo del año, por semana por ejemplo.

# AÑADIR FECHA Y TIMINGmySpotify <- streamHistory %>% 
as_tibble() %>%
mutate_at("endTime", ymd_hm) %>%
mutate(endTime = endTime - hours(6)) %>%
mutate(date = floor_date(endTime, "day") %>% as_date, seconds = msPlayed / 1000, minutes = seconds / 60)
# ACTIVIDAD DE REPRODUCCIÓN POR SEMANAS Y HORASstreamingHours <- mySpotify %>%
filter(date >= "2020-01-01") %>%
group_by(date) %>%
group_by(date = floor_date(date, "week")) %>%
summarize(hours = sum(minutes) / 60) %>%
arrange(date) %>%
ggplot(aes(x = date, y = hours)) +
geom_col(aes(fill = hours)) +
scale_fill_gradient(low = "yellow", high = "red") +
labs(x= "Fecha", y= "Horas de reproducción") +
ggtitle("¿En qué fechas escuché más o menos música en Spotify?", "Actividad de reproducción por semana")
streamingHours

Como resultado obtendrás un plot como el siguiente, donde en mi caso, es muy visible el decremento de uso de Spotify después de Abril. Quizás en gran medida esto se deba a que en abril de 2020, cuando nos vimos forzados a trabajar desde casa (y hasta la fecha) por el covid-19, los momentos en que disfrutaba más de escuchar música era en la oficina, y hoy en día trabajando en casa nos turnamos por reporducir cada quien su música en sus plataformas.

Análisis y visualización de datos de tu historial en Spotify — Plot de horas reproducidas por semana

¿En qué fechas escuchaste más o menos música de un artista en específico?

Otra pregunta más que podrías responder de manera muy sencilla y visualizar con un line chart, puedes también resaltar los resultados que buscas haciendo uso de la libreria “gghighlight”, y por medio de la variable artistName.

# ACTIVIDAD DE REPRODUCCIÓN POR ARTISTA ESPECÍFICOhoursArtist <- mySpotify %>% 
group_by(artistName, date = floor_date(date, "month")) %>%
summarize(hours = sum(minutes) / 60) %>%
ggplot(aes(x = date, y = hours, group = artistName)) +
labs(x= "Fecha", y= "Horas de reproducción") +
ggtitle("¿En qué fechas escuché más o menos música de un artista específico?", "P.ej: Alton Ellis and Jarabe de Palo") +
geom_line() +
gghighlight(artistName == "Alton Ellis" || artistName == "Jarabe De Palo")
hoursArtist

Por ejemplo en mi caso, tomé a dos artistas que suelo escuchar: “Alton Ellis”, referente del género rocksteady, y a “Jarabe de Palo”, referente del rock en español, obteniendo el siguiente plot como resultado. Hay un pico muy notorio escuchando a este último, ya que recién en Junio de 2020 su vocalista, Pau Donés, lamentablemente falleció, fecha en que a manera de homenaje estuve reproduciendo muchos de sus tracks.

Análisis y visualización de datos de tu historial en Spotify — Plot de horas reproducidas por fecha y artista en específico

¿Cuáles fueron los artistas que más escuchaste en tu Spotify?

Puedes establecer un mínimo de horas de reproducción y averiguar a partir de ahí cuáles fueron los artistas que más escuchaste. Por ejemplo, digamos que consideras que los más escuchados fueron aquellos artistas a los que les dedicaste por lo menos 3 horas de reproducción o más.

# ARTISTAS MÁS ESCUCHADOS (MÁS DE 3 HORAS)minutesMostListened <- mySpotify %>% 
filter(date >= "2020-01-01") %>%
group_by(artistName) %>%
summarize(minutesListened = sum(minutes)) %>%
filter(minutesListened >= 180) %>%
ggplot(aes(x = artistName, y = minutesListened)) +
geom_col(aes(fill = minutesListened)) +
scale_fill_gradient(low = "yellow", high = "red") +
labs(x= "Artista", y= "Minutos de reproducción") +
ggtitle("¿Cuáles fueron los artistas más escuchados en mi Spotify?", "> 3 horas de reproducción") +
theme(axis.text.x = element_text(angle = 90))
minutesMostListened

Obtendrás un plot similar al siguiente, en el que podrás visualizar dichos artistas. En mi caso, comparto como muchos de ustedes mi cuenta con mi novia, por lo que puedo observar en su mayoría una variedad de artistas pop latinos del momento.

Análisis y visualización de datos de tu historial en Spotify — Plot de artistas más escuchados

¿En qué horario has tenido una mayor actividad de reproducción en tu Spotify?

Podrías visualizar por hora del día inclusive, el registro de actividad de tu historial completo con un heatmap, para observar cómo este hábito ha cambiado a lo largo del tiempo, si es el caso.

# ACTIVIDAD DE REPRODUCCIÓN POR FECHA Y HORA DEL DÍAtimeDay <- mySpotify %>% 
filter(date >= "2020-01-01") %>%
group_by(date, hour = hour(endTime)) %>%
summarize(minutesListened = sum(minutes)) %>%
ggplot(aes(x = hour, y = date, fill = minutesListened)) +
geom_tile() +
labs(x= "Hora del día", y= "Fecha") +
ggtitle("¿Cuándo ha habido más actividad de reproducción en mi Spotify?", "Actividad por fecha y hora del día") +
scale_fill_gradient(low = "yellow", high = "red")
timeDay

Encontrarás como resultado el siguiente plot, donde de manera muy visual podrás ver si ha habido cambios en tus horarios habituales en que sueles escuchar música. En mi caso por ejemplo, cambió después de abril de 2020 la constante de escuchar mayormente música por las noches.

Análisis y visualización de datos de tu historial en Spotify — Plot de actividad por fecha y hora del día

También puedes crear un gráfico de barras para dar un vistazo más cercano a detalle en los horarios del día en los que existe un registro de mayor actividad en tu cuenta.

# ACTIVIDAD DE REPRODUCCIÓN POR HORA DEL DÍAhoursDay <- mySpotify %>% 
filter(date >= "2019-01-01") %>%
group_by(date, hour = hour(endTime), weekday = wday(date, label = TRUE))%>%
summarize(minutesListened = sum(minutes))
hoursDay %>%
ggplot(aes(x = hour, y = minutesListened, group = date)) +
geom_col(fill = "#ff6600") +
labs(x= "Hora del día", y= "Minutos de reproducción") +
ggtitle("¿A qué hora del día he escuchado más música en Spotify?", "Actividad de 0 a 24 horas")

Podrás observar el horario en específico en que hay mayor cantidad de minutos de reproducción acumulados. En mi caso por ejemplo, no existe horario alguno del día en que no haya por lo menos usado un par de minutos mi cuenta para escuchar algo, incluso en esos momentos de insomnio.

Análisis y visualización de datos de tu historial en Spotify — Plot de actividad por hora del día

¿Qué días de la semana tienes una mayor actividad de reproducción en tu Spotify?

También puedes contestar a esta pregunta creando otro heatmap, pero esta vez visualizando la relación entre día de la semana y horario del día.

# ACTIVIDAD DE REPRODUCCIÓN POR HORA DEL DÍA Y DÍA DE LA SEMANAhoursDay %>% 
group_by(weekday, hour) %>%
summarize(minutes = sum(minutesListened)) %>%
ggplot(aes(x = hour, weekday, fill = minutes)) +
geom_tile() +
scale_fill_gradient(low = "yellow", high = "red") +
labs(x= "Hora del día", y= "Día de la semana") +
ggtitle("¿Qué día de la semana y hora del día escucho más música en Spotify?", "Actividad por día de la semana, de 0 a 24 horas")

Podrás observar cuál o cuáles días de la semana marcan tendencia de una mayor actividad en tu cuenta. Por ejemplo en mi caso, puedo ver claramente que los días martes, jueves y viernes hay un registro mayor de actividad.

Análisis y visualización de datos de tu historial en Spotify — Plot de actividad por hora del día y día de la semana

Otra manera en la que puedes dar un vistazo a los detalles anteriormente obtenidos, podría ser creando un line chart.

# ACTIVIDAD DE REPRODUCCIÓN POR HORA DEL DÍA Y DÍA DE LA SEMANA - GRÁFICO DE LÍNEASweekDay <- hoursDay %>% 
group_by(weekday, hour) %>%
summarize(minutes = sum(minutesListened)) %>%
ggplot(aes(x = hour, y = minutes, color = weekday)) +
geom_line() +
labs(x= "Hora del día", y= "Minutos de reproducción") +
ggtitle("¿Qué día de la semana y hora del día escucho más música en Spotify?", "Line chart - Actividad por día de la semana, de 0 a 24 horas")
weekDay

Puedo ver en mi caso, que los domingos son definitivamente los días que menormente suelo escuchar música. Obtendrás como resultado un plot similar al siguiente donde puedes ver también cuál es el día en que tienes una menor actividad de reproducciones.

Análisis y visualización de datos de tu historial en Spotify — Plot de actividad por hora del día y día de la semana

Aunque es de obviarse después de las visualizaciones obtenidas anteriormente, también podrías crear un plot más para mirar en qué tipo de día (entre semana ó fines de semana) has tenido una mayor actividad en tu cuenta.

# ACTIVIDAD DE REPRODUCCIÓN POR HORA DEL DÍA Y TIPO DE DÍA - LINE CHARTdayType <- hoursDay %>% 
mutate(day_type = if_else(weekday %in% c("Sat", "Sun"), "weekend", "weekday")) %>%
group_by(day_type, hour) %>%
summarize(minutes = sum(minutesListened)) %>%
ggplot(aes(x = hour, y = minutes, color = day_type)) +
geom_line() +
labs(x= "Hora del día", y= "Minutos de reproducción") +
ggtitle("¿Qué tipo de día he escuchado más música en Spotify?", "Actividad por tipo de día de la semana de 0 to 24 horas")
dayType

Entonces obtendrás un plot como el siguiente, identificando la actividad de tu cuenta por el tipo de día y horario del día.

Análisis y visualización de datos de tu historial en Spotify — Plot de actividad por hora del día y tipo de día

Juguemos un poco con “spotifyr”: Configuración de una nueva aplicación en R

Es tiempo de echar un vistazo en cómo funciona el package “spotifyr”. Como te comentaba en un principio, básicamente este package nos permitirá conectarnos con el API de Spotify. Spotify guarda datos sumamente interesantes de los tracks, artistas y álbumes que hospeda en su plataforma, tales como la popularidad, la energía, valencia, qué tan “bailable” es, entre muchísimas otras cosas más.

Lo primero que tienes que hacer para poder comenzar a consumir tales datos a través de “spotifyr” es establecer una conexión desde tu aplicación en R. Para esto necesitas obtener principalmente dos parámetros: SPOTIFY_CLIENT_ID y SPOTIFY_CLIENT_SECRET. Estos los obtienes desde el portal de spotify para developers, creando una nueva aplicación en https://developer.spotify.com/dashboard/applications donde se te pedirá loguearte con las mismas credenciales que con tu cuenta en Spotify.

Screenshot: Dashboard developer en sitio web de Spotify

Una vez logueado encontrarás un dashboard donde podrás crear y gestionar tus aplicaciones creadas. Tienes que dar clic en el botón “Create an app” para establecer una nueva aplicación y asignarle un nombre y una descripción.

Screenshot: Crear una nueva aplicación en Spotify

Inmediatamente entonces podrás ver los dos parámetros que necesitamos, tanto el ID de cliente, como Client secret. Evidentemente yo edité la imagen que pongo de ejemplo a continuación jeje, pero los tuyos deberían aparecerte ambos completos.

Screenshot: Client ID y Client secret en una nueva aplicación en Spotify

El autor del package “spotifyr” en su repositorio nos hace saber lo siguiente, cito:

Para determinadas funciones y aplicaciones, deberá iniciar sesión como usuario de Spotify. Para hacer esto, su aplicación en Spotify Developer debe tener un callback URL. Una buena opción predeterminada es http:// localhost:1410/

Es decir, por último, tienes que añadir ese callback url (http://localhost:1410/), dando clic en el botón verde “Edit settings” que encontrarás ahí mismo y procederás a guardar los cambios.

Screenshot: Establecer callback url en nueva aplicación en Spotify

Excelente, ahora tienes todo listo para comenzar a hacer uso de “spotifyr”. En tu script en R primeramente deberás ejecutar una función para autorizarlo con Spotify.

# ESTABLECER CONEXIÓN CON API SPOTIFYSys.setenv(SPOTIFY_CLIENT_ID = 'AQUÍ_VA_TU_CLIENT_ID')
Sys.setenv(SPOTIFY_CLIENT_SECRET = 'AQUÍ_VA_TU_CLIENT_SECRET')
get_spotify_authorization_code()

Una vez ejecutada la función “get_spotify_authorization_code()”, estarás viendo una nueva ventana en tu browser donde tu aplicación estará solicitándote permisos.

Screenshot: Aceptar permisos aplicación en Spotify

Al aceptar, inmediatamente verás un texto señalándote que la autenticación fue satisfactoria, por lo que ya puedes cerrar esa ventana, para regresar a trabajar en R.

Screenshot: Autenticación completa de tu aplicación en Spotify

¿Todo bien hasta aquí? Perfecto, entonces ahora sí, puedes aprovechar todos los alcances que “spotifyr” tiene para ti desde R.

¿Cuáles son los tracks menos populares que escuchas dentro de alguna de tus playlists en específico?

Puedes dar un primer acercamiento a los datos que puedes obtener con “spotifyr”, al mismo tiempo que das respuesta a esta pregunta. Estoy muy seguro que al igual que yo, estimado lector, tienes una o más playlists que haz creado ya sea con tus canciones favoritas, o tus géneros preferidos, o para aquellas ocasiones especiales. Logueado en tu cuenta en spotify, elige cualquiera de tus playlist de tu librería, ingresa a ella y copia el identificador único de su url.

Screenshot: Playlist en Spotify en el browser

Por ejemplo, yo tengo una playlist con canciones que le he dedicado exclusivamente a mi novia con mucho amor, tomaré de ejemplo esa playlist, pero tú puedes hacerlo con cualquiera. Para ello es que necesitas ese identificador que mencionaba, además de tu username, para pasarlos como parámetros y hacer uso de la función “get_playlist_audio_features()”, con la cual estarás obteniendo un montón de información de esa playlist generando un nuevo data frame.

# OBTENER FEATURES DE PLAYLIST EN ESPECÍFICOplaylist_username <- 'cosmoduende'
playlist_uris <- c('2benX1jIgvvbLpYWuMYipX')
playlistMiAmor <- get_playlist_audio_features(playlist_username, playlist_uris)

Detenernos a ver cada variable que contiene este nuevo data frame nos llevaría muchísimo tiempo, te sugiero eches un vitazo a su contenido en R detenidamente después. Te sorprenderás de la valiosa data con la que puedes jugar.

Volviendo a la pregunta inicial, una de las variables con las que puedes responderla es con “track.popularity”, que contiene la popularidad de cada track en una escala de 0 a 100. Considerando esto, puedes establecer que los tracks menos populares son aquellos que van de 0 a 25 y visualizar cuáles son para Spotify esas rarezas menos populares que escuchas dentro de tu playlist.

# PLOT DE TRACKS CON MENOR POPULARIDAD EN PLAYLIST EN ESPECÍFICOplaylistMiAmor %>% 
group_by(track.popularity) %>%
filter(track.popularity <= "25" ) %>%
ggplot(aes(x = track.name, y = track.popularity)) +
geom_col(aes(fill = track.album.name)) +
labs(x= "Título del track", y= "Popularidad") +
ggtitle("¿Cuáles son las canciones menos populares que escucho en Spotify?", "Popularidad < 25 en una playlist específica") +
theme(axis.text.x = element_text(angle = 90))

Como resultado obtendrás un plot similar al siguiente, en donde podrás reparar en cuáles son esas canciones menos populares de la playlist que escogiste. Claramente dependiendo de qué tan grande sea tu playlist puede que obtengas una mayor o menor cantidad de tracks.

Análisis y visualización de datos de tu historial en Spotify — Plot de tracks menos populares en playlist específico

¿Cuál es tu top 10 de artistas favoritos, basado en tus tracks añadidos como “Me gusta”?

Habrás notado que al igual que muchas aplicaciones, con Spotify no es ajeno el dar “likes” a.k.a. “♥” a las canciones, o incluso a álbumes completos que escuchas. Ya sea desde tu aplicación de escritorio, desde la app o desde la versión web, siempre está disponible.

Screenshot: “Like” en track de Iggy Pop

Esto le permite en gran medida a Spotify poder mejorar su algoritmo de recomendaciones también, por si te lo habías preguntado, para poder hacerte nuevas sugerencias sobre qué más podrías escuchar con base en tus gustos.

Puedes dar un vistazo general a todos esos tracks que has añadido a lo largo del tiempo en tu cuenta en Spotify en https://open.spotify.com/collection/tracks.

Screenshot: Colección de canciones a las que has dado “like” en Spotify

Es hora usar la función “get_my_saved_tracks()” para obtener toda la información respecto a esta colección completa de canciones a las que en algún momento has dado “like”, generando un nuevo data frame con mucha y nueva información. Spotify establece un límite de solicitudes, puedes obtener hasta 50 elementos por solicitud pero puedes conseguir más mediante “offset”, para saltar elementos y obtener más.

# OBTENER TRACKS AÑADIDOS COMO "LIKED"myFavTracks <- ceiling(get_my_saved_tracks(include_meta_info = TRUE)[['total']] / 50) %>%
seq() %>%
map(function(x) {
get_my_saved_tracks(limit = 50, offset = (x - 1) * 50)
}) %>%
reduce(rbind) %>%
write_rds('raw_myFavTracks.rds')

Sería interesante que obtuvieras y recordaras cuál fue ese primer track al que le diste “like” desde que abriste tu cuenta en Spotify. Usarás el package “lubridate” para manejar la fecha, para convertir la fecha en clase de caracteres, a clase date.

# OBTENER PRIMER TRACK AÑADIDO COMO "LIKED"myFavTracks %>%
mutate(added_at = ymd_hms(added_at)) %>%
arrange(added_at) %>%
head(1, wt = added_at) %>%
select(track.name, track.album.name, added_at) %>%
kable()

Por ejemplo en mi caso, puedo ver que la primer canción fue de Vicentico en 2015, vocalista de “Los Fabulosos Cadillacs”, una de mis bandas favoritas de rock en español.

Screenshot: Consola mostrando primer track añadido como “liked”

La variable “track.artists” se almacena como una lista, hay que tener en cuenta que no todas las canciones están hechas por un solo artista, entonces necesitas extraer de listas en listas. Seleccionarás el “id” como la marca del artista en este caso para evitar nombres duplicados y luego, agregarás “n”, como columna de número de pistas. Finalmente puedes crear el plot para visualizar los resultados obtenidos. Para evitar alterar el orden del grupo de frecuencias, sugeriría convertir las variables de categoría como variables de factor.

# OBTENER TOP ARTISTAS FAVORITOS, BASADO EN LIKESfavTracksArtist <- myFavTracks %>%
select(track.artists) %>%
reduce(rbind) %>%
reduce(rbind) %>%
select(id, name)
trackNumArtist <- favTracksArtist %>%
count(id, sort = TRUE) %>%
left_join(favTracksArtist, by = 'id',.) %>%
unique() %>%
select(-id) %>%
top_n(10, n)
# PLOT TOP 10 ARTISTAS FAVORITOS BASADO EN LIKED TRACKSplotMyFavs <- trackNumArtist %>%
mutate(freq = case_when(n > 100 ~ '> 100 tracks',
between(n, 50, 99) ~ '50-99 tracks',
between(n, 20, 49) ~ '20-49 tracks',
TRUE ~ '< 20 tracks')) %>%
mutate(freq = factor(freq, levels = c('> 100 tracks', '50-99 tracks', '20-49 tracks', '< 20 tracks'))) %>%
ggplot(mapping = aes(x = reorder(name, -n), y = n, fill = freq)) +
geom_col() +
scale_fill_brewer(palette="Dark2") +
labs(x= "Nombre del Artista", y= "Número de tracks", fill = NULL) +
ggtitle("¿Cuáles son mis artistas favoritos?", "Basado en mis tracks añadidos como liked ó ♥") +
theme(axis.text.x = element_text(angle = 90))
plotMyFavs

Obtendrás como resultado un plot similar al siguiente, en el que podrás observar tu top 10 de artistas favoritos, segmentado por la cantidad de tracks de cada uno a los que has dado “like”. Sí, se nota que soy fan de Bunbury, por ejemplo.

Análisis y visualización de datos de tu historial en Spotify — Plot de top 10 artistas favoritos basado en liked tracks

Dime a quién escuchas… y te diré cómo eres

Nos sentimos atraídos especialmente por ciertos artistas o ciertos géneros musicales porque nos sentimos identificados, por lo que lo volvemos parte de nosotros y de nuestra cultura personal. En mi opinión, especialmente la música puede revelar mucho de tu personalidad.

Continuando con la información obtenida anteriormente, sería interesante además poder ver qué sentimiento en su mayoría expresan tus artistas favoritos en sus creaciones musicales. ¿Transmiten paz, alegría, enojo, tristeza? Pues esto lo puedes averiguar valiéndote de dos medidas que ha establecido Spotify: La valencia y la energía. Definido por Spotify, la valencia (valence) la define de la siguiente manera:

Medida de 0.0 a 1.0 que describe la positividad musical que transmite un track. Los tracks con valencia alta suenan más positivas (por ejemplo, feliz, alegre, eufórico), mientras que las pistas con valencia baja suenan más negativas (por ejemplo, triste, deprimido, enojado).

Por otro lado, la energía (energy) la define de la siguiente forma:

Es una medida de 0.0 a 1.0 y representa una medida perceptiva de intensidad y actividad. Por lo general, las pistas enérgicas se sienten rápidas y ruidosas. Por ejemplo, el death metal tiene mucha energía, mientras que un preludio de Bach tiene una puntuación baja en la escala. Las características de percepción que contribuyen a este atributo incluyen rango dinámico, volumen percibido, timbre, frecuencia de inicio y entropía general.

Con estas dos medidas, puedes crear un cuadrante con un diagrama de dispersión que revele dicha información. Puedes hacer uso esta ocasión de la función “get_artist_audio_features()” que básicamente espera como parámetro el nombre de tu artista, para regresarte un montón de información sobre sus álbumes y tracks, incluyendo la valencia y energía. Para ejemplificar, toma sólo los primeros cuatro artistas favoritos de tu top 10 anteriormente obtenido, para posteriormente crear y viualizar en un “cuadrante emocional” los resultados obtenidos.

# OBTENER FEATURES DE PRIMEROS CUATRO ARTISTAS DEL TOP 10favArtist1 <- get_artist_audio_features(artist= "Bunbury")
favArtist2 <- get_artist_audio_features(artist= "Kevin Johansen")
favArtist3 <- get_artist_audio_features(artist= "Vicentico")
favArtist4 <- get_artist_audio_features(artist= "Los Auténticos Decadentes")
topFourArtists <- rbind(favArtist1, favArtist2, favArtist3, favArtist4)# CUADRANTE EMOCIONAL DE TUS CUATRO ARTISTAS DEL TOP 10emotionalQuadrant <- ggplot(data = topFourArtists, aes(x = valence, y = energy, color = artist_name)) +
geom_jitter() +
geom_vline(xintercept = 0.5) +
geom_hline(yintercept = 0.5) +
scale_x_continuous(expand = c(0, 0), limits = c(0, 1)) +
scale_y_continuous(expand = c(0, 0), limits = c(0, 1)) +
annotate('text', 0.25 / 2, 0.95, label = "Angry / Turbulent") +
annotate('text', 1.75 / 2, 0.95, label = "Joyful / Happy") +
annotate('text', 1.75 / 2, 0.05, label = "Peaceful / Chill") +
annotate('text', 0.25 / 2, 0.05, label = "Depressing / Sad") +
labs(x= "Valence", y= "Energy") +
ggtitle("Emotional quadrant Top four favorite artists", "Based on energy and valence")
emotionalQuadrant

Como podrás observar, cada punto representa un track de un artista en específico, mostrando qué sentimiento expresa. Toma en cuenta que estás visualizando los tracks de toda la discografía de cada artista, o por lo menos de todos los álbumes de los que tiene registro Spotify. ¿Qué opinas, esto revela algo acerca de tu personalidad también?.

Análisis y visualización de datos de tu historial en Spotify — Plot de cuadrante emocional de primeros cuatro artistas de top 10 artistas favoritos basado en liked tracks

Muchas gracias por tu amable lectura. Del mismo modo que con la mayoría de mis artículos, te comparto un poco más estéticos los plots generados con plotly en un flexdashboard que armé: https://rpubs.com/cosmoduende/spotify-history-analysis

Y aquí puedes encontrar el código completo:

https://github.com/cosmoduende/r-spotify-history-analysis

¡Te agradezco haber llegado hasta el final, te deseo que tengas muy felices análisis, que puedas poner en práctica todo, y te sorprendas y diviertas tanto como yo con los resultados!

Otros artículos que he escrito

Si te ha gustado este artículo, te agradeceré mucho tus claps. Además te invito a visitar también otros artículos que he escrito, que podrían ser de tu interés:

¡Gracias y hasta la próxima!

Aprendiz constante, amante de la tecnología. #G3ekArmy, Web Developer & Data Enthusiast. Coordinador académico & Instructor en KMMX. Organizador de #KotlinCDMX.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store