Spotifyr을 이용한 데이터 수집

Dahee Lee
7 min readFeb 14, 2020

--

Photo by Sincerely Media on Unsplash

Spotify TOP 200의 데이터를 다 스크랩 하고나니

그 다음에 또 궁금한건 각 트랙의 특징이었다.

(사람의 욕심은 역시 끝이 없는 것?)

사실 요즘 회사에서 점심시간에 Python을 활용하여 예측 모델에 대해 공부하고 있는데

왠지 Spotify 데이터를 활용해보고 싶었고 이전에 스크랩한Spotify TOP 200의 데이터 만으로는 분석을 위한 feature가 좀 부족하다고 판단이 되어

언제나 그렇듯 분석의 확장성을 위해 더 스크랩할 수 있는 부분이 무엇이 있을까 하다가

이전에 구글링하다가 발견한 R의 패키지 중 하나인 spotifyr 패키지에 대해 알아보기 시작했다.

spotifyr

Charlie Thompson 님 외 3분이 만들었고 아티스트, 트랙 등의 정보로 전반적인 음악 데이터를 추출할 수 있다.

get_track_audio_features

패키지의 49가지의 토픽 중에서 Spotify ID로 오디오 특징을 뽑아오는 get_track_audio_features를 사용해보기로 했다.

Get audio feature information for a single track identified by its unique Spotify ID.

아래와 같이 사용하면 되고

get_track_audio_features(ids, authorization = get_spotify_access_token()

이 코드를 돌리면 아래와 같은 데이터를 확인할 수 있다.

duration_ms, key, mode, time_signature, acousticness, danceability, energy, instrumentalness, liveness, loudness, speechiness, valence, tempo

각 항목별 자세한 내용은 아래 링크에서 확인하면 된다.

1. Spotify ID 리스트 추출

먼저 Spotify TOP 200의 데이터에서 Spotify ID 리스트가 필요하다.

그 곡 들의 audio feature에 대한 정보를 추출할 것이기 때문이다.

URL 필드를 보면 가장 마지막 슬래시(‘/’) 뒤에 있는 부분이 각 트랙별 유니크한 Spotify ID 이다.

URL : https://open.spotify.com/track/0nbXyq5TXYPCO7pr3N8S4I

먼저 Spotify TOP 200 데이터 프레임에서 Unique한 URL만 먼저 가져와 SPOTIFY_URL 리스트에 저장한다.

총 62600 개이다.

SPOTIFY_URL <- unique(SPOTIFY$URL)
length(SPOTIFY_URL) #62600

이제 SPOTIFY_URL에 있는 모든 항목을 strsplit을 이용하여 ‘/’ 를 기준으로 자르고 반복문을 통해서 각 원소의 5번째 성분을 가져와 spotify_id 리스트에 저장한다.

다 가져왔는지 개수를 한번 다시 체크해본다.

(흠… 6시간 정도 걸렸는데 반복문이 최선인지는 좀 더 찾아봐야하는 부분이다)

for (i in 1: length(SPOTIFY_URL)) {
spotify_id[i] <- strsplit(as.character(SPOTIFY_URL),'/')[[i]][5]
print(i) #몇번째까지 되었는지 확인하기 위해 추가
i = i + 1
}
length(spotify_id) #62600

2. Spotifyr Installation

이제 spotifyr을 이용해 볼 차례이다.

spotifyr패키지를 설치하고 로딩한다.

install.packages('spotifyr')
library(spotifyr)

3. Authentication

Web API를 이용하기 위해서는 먼저 인증이 필요하다.

아래 링크에서 계정을 만든다.

Client ID and Client Secret을 확인하고 이를 R에서 이용할 것이다.

위에서 확인한 Client ID and Client Secret을 아래 코드에 각각 입력한 뒤, 접근 토큰을 받으면 이제 Web API 사용이 가능하다!

Sys.setenv(SPOTIFY_CLIENT_ID = '')
Sys.setenv(SPOTIFY_CLIENT_SECRET = '')
access_token <- get_spotify_access_token()

인증이 완료되었다.

4. Usage

이제 원하는 데이터를 뽑아볼 수 있다.

spotifyr 패키지 중 get_track_audio_features 를 이용해 볼 차례이다.

마찬가지로,

반복문을 이용하여 각 Spotify ID를 변수로 넣어 각각 출력된 행들을 rbind 하여 데이터 프레임에 저장한다.

(돌리다보니 NULL로 추출되는 것들도 몇개 있어서 trycatch 문으로 오류잡는 코드도 추가했다.)

for (i in 1:length(spotify_id)) {
tryCatch({
track_audio_features <- get_track_audio_features(spotify_id[i])
track_audio_features_full <- rbind(track_audio_features_full,track_audio_features)
print(i)
i = i + 1
}, error = function(e) message(paste("track_id does not seem to exist:", spotify_id[i])) )
}
view(track_audio_features_full)

이로써,

필요한 데이터셋 2개 모두 준비가 완료 되었다!

1. Spotify TOP 200 (Web Scraping)

2. Audio Features by Track (Web API)

다음은

R로 수집한 데이터를 가지고

Python을 이용하여

데이터 모델링, 데이터 분석, 예측 분석 모델 적용 등을 해볼 것이다.

드디어 Python !

저의 커리어는 Linkedin 에서

데이터 시각화는 Tableau Public 에서

라이프스타일은 Instagram 에서 확인하실 수 있습니다:)

글과 관련하여 궁금한 점은 댓글 또는 daheelee1114@gmail.com 로 주세요!

--

--