私は音楽が好きなのですが、自分の好みを客観的に知りたいです。
客観的に知るためには、やはりデータ分析ですね。
どうやって音楽のデータを手に入れるのか。
SpotifyがAPIでデータを提供してくれています。
それを使って、自分の好みの音楽を分析したいと思います。
SpotifyAPIからプレイリスト情報を取得する
まずはプレイリストの情報を取得することから始めます。
spotipyというライブラリがあるので、それを使います。
こちらのページを参考にさせていただいてます。
私は毎週プレイリストを作っているので、そのプレイリストのデータを取得したいと思います。
↓code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# from google.colab import files | |
import pandas as pd | |
import spotipy | |
from spotipy.oauth2 import SpotifyClientCredentials | |
import time | |
client_id = 'SPOTIPY_CLIENT_ID' | |
client_secret = 'SPOTIPY_CLIENT_SECRET' | |
client_credentials_manager = SpotifyClientCredentials(client_id, client_secret) | |
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager) | |
def getTrackIDs(user, playlist_id): | |
ids = [] | |
playlist = sp.user_playlist(user, playlist_id) | |
for item in playlist['tracks']['items']: | |
track = item['track'] | |
ids.append(track['id']) | |
return ids | |
ids = getTrackIDs('USER_ID', 'PLAYLIST_ID') | |
def getTrackFeatures(id): | |
meta = sp.track(id) | |
features = sp.audio_features(id) | |
# meta | |
name = meta['name'] | |
album = meta['album']['name'] | |
artist = meta['album']['artists'][0]['name'] | |
release_date = meta['album']['release_date'] | |
length = meta['duration_ms'] | |
popularity = meta['popularity'] | |
# features | |
acousticness = features[0]['acousticness'] | |
danceability = features[0]['danceability'] | |
energy = features[0]['energy'] | |
instrumentalness = features[0]['instrumentalness'] | |
mode = features[0]['mode'] | |
liveness = features[0]['liveness'] | |
loudness = features[0]['loudness'] | |
speechiness = features[0]['speechiness'] | |
tempo = features[0]['tempo'] | |
time_signature = features[0]['time_signature'] | |
valence = features[0]['valence'] | |
track = [name, album, artist, release_date, length, mode, popularity, danceability, acousticness, | |
energy, instrumentalness, liveness, loudness, speechiness, tempo, time_signature, valence] | |
return track | |
tracks = [] | |
for i in range(len(ids)): | |
time.sleep(.5) | |
track = getTrackFeatures(ids[i]) | |
tracks.append(track) | |
df = pd.DataFrame(tracks, columns=['name', 'album', 'artist', 'release_date', 'length', 'mode', 'popularity', 'danceability', | |
'acousticness', 'energy', 'instrumentalness', 'liveness', 'loudness', 'speechiness', 'tempo', 'time_signature', 'valence']) | |
df.head() | |
df.to_csv("01weeks2022.csv", sep=',') | |
files.download('01weeks2022.csv') |
これを実行するとcsvでダウンロードできます。
このcsvには、プレイリスト中のアーティスト・曲名・リリース日・曲の長さなどが入っています。
このコードはちょっとおかしい部分やエラーが出ていますが、一応ほしい情報は手に入りまいした。
今後Pythonを勉強しながらエラーをなくしていきたいと思います。
Spotifyのプレイリストデータをspotipyで取得したいhttps://t.co/AYsg9NvWXG
— radiospj (@radiospj) January 19, 2022