RSpotify: Dados de Música com R

Se você me conhece, já deve saber que usei como exemplo o Raça Negra só pra usar o meme do garotinho e a planta no título. Sim, esse é o senso de humor desse que vos escreve. Mas dando continuidade a editoria de tutoriais dessa vez vou apresentar um tutorial do RSpotify, que me foi apresentado pelo brasileiro Tiago Dantas.

Eu acabei tendo que desenvolver algumas expertises com esse pacote por estar envolvido em uma campanha envolvendo cantores e precisar encontrar outros artistas com a mesma pegada dos que estou analisando( e digo que foi de grande ajuda) para segmentação de interesse/mídia.  🥤

Como dito no início do texto, esse tutorial usa os dados da banda Raça Negra, grupo de pagode que teve início nos anos 80 e foi responsável por marcar gerações com músicas como ‘Cheia de manias‘, ‘Cigana‘ e ‘É tarde demais‘.

Indo direto pro código:

# Eliminando dados anterior/salvo.
rm(list = ls())
 
# alterando o diretório de trabalho
setwd("INSERIR SEU DIRETÓRIO")
 
 
##########################
 
# Checando se os pacotes estão instalados, instalando os faltantes e executando todos os pacotes necessários
if(!require(devtools)){
  install.packages("devtools")
  library(devtools)
}
 
if(!require(Rspotify)){
  install_github("tiagomendesdantas/Rspotify")
  library(Rspotify)
}

Para fazer a requisição dos dados será necessário criar um app dentro da plataforma de desenvolvedores do Spotify (bastar ir em My Apps e criar o seu aplicativo). Gerado o seu app_id (na plataforma está como ‘Application Name’), client_id e client_secret podemos seguir para o pedido de autenticação.

# Acessando a API do Spotify
app_id <- "API_Toth" # aqui entra o nome que você deu para a aplicação
client_id <- "SEU CLIENT_ID" # Inserrir client_id
client_secret <- "SEU CLIENT_SECRET" #Inserir Client_secret
 
# Aglutinando as chaves de acesso
keys <- spotifyOAuth(app_id,client_id,client_secret)
 
# Ele abrirá como resposta o seu navegador para autenticação
# Waiting for authentication in browser...
# Press Esc/Ctrl + C to abort
# Authentication complete.

Como primeira busca vamos começar com algo mais simples: buscar por dados de um usuário.

# Buscando por um usuário
usuario <- getUser("12161883573",token=keys)
 
# display_name        id         followers
# Pedro Meirelles 12161883573        79
 
# Buscando por um usuário
usuario <- getUser("marinalalves",token=keys)
 
# display_name        id         followers
# Marina Alves    marinalalves       163
 
# Buscando por um usuário
usuario <- getUser("12161883573",token=keys)
 
#display_name         id         followers
#  Alves Fefê     12142930547       135

O RSpotify, e o Spotify em si, são bem didáticos e permitem uma busca de artistas:

procurando_artista <-searchArtist("Raca+negra",token=keys)
# Para nomes compostos é só usar o +. Ex: "Móveis+coloniais+de+Acaju".
# Lembre-se de não usar cedilha, acentos ou qualquer outro carácter que dê problema com o UTF-8

Como resultado dessa busca a API me retornou a seguinte tabela:

Dessa tabela iremos usar o Id da primeira linha (‘Raça Negra’), que representa o perfil oficial da banda na plataforma, para buscar apenas pelos dados da banda.

artista_info <- getArtistinfo("1RnHJ07H3jcpay9PrUPjnt",token=keys)
 
#           id              name       popularity followers               genres
# 1RnHJ07H3jcpay9PrUPjnt Raça Negra         67    181797  axe,pagode,sertanejo,sertanejo universitario

Usando o mesmo id iremos buscar todos os álbuns que estão disponibilizados na plataforma:

artista_albums <-getAlbums("1RnHJ07H3jcpay9PrUPjnt",token=keys)

Como resultado temos:

Pesquisando o álbum teremos a relação de todas as músicas que o compõem e mais algumas informações estruturais. No exemplo abaixo usei o álbum Raça Negra & Amigos II:

album_rn_amigos2 <-getAlbum("0hSUBFqEpxTYTXyYfVncOw",token=keys)

Para melhor visualização, foi ocultado a coluna ‘available_markets’ e ‘preview_url’.

Começamos a entrar na parte que eu considero mais interessante, talvez pela quantidade de dados ou pela oportunidade de combinações que podemos fazer, não sei dizer ao certo. Antes de continuar no tutorial é imprescindível ler essa página do Spotify, na qual é explicado cada uma das métricas atribuídas aos áudios disponíveis na plataforma.

O código abaixo faz a requisição dos dados por música. Usei como exemplo a música “Cigana“.

musica_info <- getFeatures("4vTI1wFRtzrk4GQNHjG8fx",token=keys)

Como retorno temos as seguintes métricas:

O próximo recurso apresentado é a base para a extração dos dados utilizada na visualização que está no fim desse post e consiste na busca pelas playlists que o usuário criou ou esta seguindo. Usei como exemplo novamente o Pedro Meirelles – que sempre uso em todos os meus testes (Pedro <3) :

# Verificando as playlist de um usuário
wh.playlist <- getPlaylist("12161883573",token=keys)

A próxima requisição tem como retorno a lista das musicas presentes em uma playlist, dado o name do usuário e o Id da playlist. Como exemplo estou usando o spotifycharts , esse é o usuário que o Spotify colocou como dono das listas de músicas mais tocadas:

playlist_info <- getPlaylistSongs("spotifycharts","37i9dQZEVXbMXbN3EUUhlg",token=keys)
 
# Como retorno temos as seguintes colunas:
#[1] "tracks"     "id"         "popularity" "artist"     "artistId"   "album"    
#[7] "albumId"

A requisição getRelated nos retorna os 20 artistas que o Spotify coloca como relacionado, ou com maior aproximação, a um artista analisado. Ela aparece na lateral inferior direita na página do artista quando se olha pela versão web ou desktop da plataforma. Essa funcionalidade foi uma das que achei mais interessante e a que mais usei.

# Busca por artistas relacionados dentro da plataforma
artista_related <-getRelated("raca+negra",token=keys)

Como exemplo prático, usei algumas requisições que já tinha obtido acima para criar um exemplo de como encontrar os artistas relacionados dos artistas mais tocados no Brasil.

# Requisição usando como exemplo a lista de 50 músicas mais tocadas do Brasil
playlist_info <- getPlaylistSongs("spotifycharts","37i9dQZEVXbMXbN3EUUhlg",token=keys)
 
# Esta função tem por objetivo pegar o nome do artista disponibilizado em playlist_info, fazer
# a busca pelos artistas relacionados e alocar num data frame por linha. O Rhenan Bartels me ajudou nessa função.
get_all_related <- function(artistas){
  related_frame <- c()
  for(artista in artistas){
    related_frame = rbind(related_frame, getRelated(artista, token=keys))
  }
  return(related_frame)
}
 
# Removendo caracteres estranhos para a busca do Spotify, como ç, ã, ô... (Obrigado pela ajuda, Eduardo Leoni)
playlist_info$artist <- stringi::stri_trans_general(playlist_info$artist,"Latin-ASCII")
 
# Aplicando a função criada acima e buscando os dados na API:
artistas_rel <- get_all_related(playlist_info[,4])
 
# Com o objetivo de gerar um csv para importar no Gephi foi criado uma repetição
# de 20 vezes cada linha( para bater que os artistas relacionados):
artistas_prin <- rep(playlist_info[,4],each=20)
 
# Criando um data frame com os dados para serem usados no Gephi
grafo_artistas_related <- cbind(artistas_prin,artistas_rel = as.character(artistas_rel$name))
 
# Exportando esses dados:
write.csv(grafo_artistas_related,"grafo_artistas_related.csv", row.names = FALSE)

O grafo abaixo é o resultado do csv importado no Gephi. O tamanho dos nós varia de acordo com o grau de entrada que, no caso apresentado, é a quantidade de vezes que são colocados como artistas relacionados no Spotify. Vale lembrar que infelizmente o Spotify só retorna o primeiro artista listado como cantor.

Clique na imagem para abrir o site!

https://trifenol.github.io/rede_rspotify/

Esse foi apenas um pequeno exemplo do uso do pacote RSpotify. Na semana que vem trarei ( e dou update aqui) uma análise completa da carreira de uma certa cantora, as mudanças da sua fase funk até a fase pop/internacional, utilizando os dados da requisição getFeatures.


Comentários

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *