Buscando el top 20 en Spotify México

La plataforma Spotify suele dar sus cifras semanalmente, pero si con algunos recursos de RStudio podemos obtener los datos de manera diracta

#Bajamos las librerías 

library(dplyr)
library(tidyr)
library(readr)
library(lubridate)
library(stringr) 
library(spotifyr) 
library(ggplot2)

Agregamos nuestras credenciales de Spotify.

Como vimos en clase: con el número de cliente y código. Luego, generamos un token.


#client <- "NÚMERO_DE_CLIENTE_SPOTIFY_4_DEVELOPERS"
#secret <- "CÓDIGO_SECRETO"

#Sys.setenv(SPOTIFY_CLIENT_ID = client)
#Sys.setenv(SPOTIFY_CLIENT_SECRET = secret)

#access_token <- get_spotify_access_token()

Identificamos el URL de donde se descargan los archivos.

url_prefix <- 'https://spotifycharts.com/regional/mx/daily/' #La mx identifica a México
url_suffix <- '/download' #Este sufijo es para todas las descargas.

Hay que crear función para extraer los datos de una fecha determinada, ya que nuestro url principal se basa en una fecha

pull_top200 <- function(date) {
  
  # URL por default con una cadena de texto
  url <- str_c(url_prefix,format.Date(date),url_suffix)
  
  # Extraemos los datos de Spotify
  top200_df <- read.csv(url, skip=1) # Hay que saltarse una línea para quitar los metadatos de Spotify.
  
  # A veces hay archivos que no existen, para ello debemos crear una excepción
  ifelse(all(colnames(top200_df) %in% col_names),
         top200_df <- top200_df %>% mutate(Date = date), # Creamos el atributo de fecha
         top200_df <- data.frame()) # Esto devuelve un data frame vacío si es invalido
  
  top200_df
}

Con los parámetros establecidos y la extracción definida, podemos establecer un rango extraemos el Top 200 por día de todo el 2021

#Estos son los datos que contienen nuestra base

glimpse(top200_df)
## Rows: 20,800
## Columns: 6
## $ Position   <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ~
## $ Track.Name <chr> "DÃ\201KITI", "BICHOTA", "Hawái", "LA NOCHE DE ANOCHE", "C~
## $ Artist     <chr> "Bad Bunny", "KAROL G", "Maluma", "Bad Bunny", "El Fantasma~
## $ Streams    <int> 1116657, 1092485, 594003, 542777, 491206, 469022, 465886, 4~
## $ URL        <chr> "https://open.spotify.com/track/4MzXwWMhyBbmu6hOcLVD49", "h~
## $ Date       <date> 2021-01-01, 2021-01-01, 2021-01-01, 2021-01-01, 2021-01-01~

Filtramos y añadimos graficamos nuestros resultados. Top 20 de artistas

top_20 <- top200_df %>%
  group_by(Artist) %>% 
  summarise(Total = sum(Streams)) %>% 
  arrange(desc(Total)) %>%
  top_n(20, Total) %>%
  ungroup() %>%
  ggplot() +
  geom_col(aes(x = reorder(Artist, Total), y = Total), fill = "forest green") +
  coord_flip()  + 
  xlab("Artista") + 
  ylab("Millones de reproducciones") + 
  ggtitle("Top 20 de temas en Spotify México") 

top_20

Ahora filtramos pero el top 20 de canciones

top_canciones <- top200_df %>%
  group_by(Track.Name) %>%
  summarise(Total_1 = sum(Streams)) %>%
  arrange(desc(Total_1)) %>%
  top_n(20, Total_1) %>%
  ungroup %>%
  ggplot() +
  geom_col(aes(x = reorder(Track.Name, Total_1), y = Total_1), fill = "forest green") +
  coord_flip() + 
  xlab("Canción") + 
  ylab("Millones de reproducciones") + 
  ggtitle("Top 20 de canciones en Spotify México") 


top_canciones