Spotify APIを使って好きなアーティストの曲を分析する
普段から利用しているSpotifyにAPIがあり,また全ての曲に様々な情報が付与されていることを知り,せっかくなので好きなアーティスト (TrySail) の分析をしてみることにしました.
目次
概要
Spotifyは定額制の音楽ストリーミングサービスです.登録されている曲にはそれぞれ多くの情報が付与されており,Spotify APIを使うことで情報を取得することができます.
他の方が行っている分析を見ると,多くがSpotiyの人気曲を見ることができるSpotify ChartsからCSVをダウンロードして行っていましたが,せっかくなので自分の好きなアーティストの分析を行うことにしました.
今回はTrySailに関する分析を行いました.TrySailは麻倉ももさん,雨宮天さん,夏川椎菜さんの3人で構成されている声優ユニットで,ユニットの活動の他にそれぞれソロ活動でも多くの曲を提供されています. TrySailと3人それぞれのソロの曲を分析することで,それぞれの特徴やユニットとソロでの違いについて調査してみました.
手順
API keyの取得
API keyはSpotify for Developersから発行します.ページ内で事前に登録してあるSpotifyアカウントを用いてログインした上でDASHBOARDに行くと,CREATE A CLIENT IDというボタンがあるので,ここで必要な情報を入力することでOAuth2認証に必要となるCliend IDとClient Secretを取得することができます.
Spotipyのインストール
PythonでSpotify APIの操作をできるようにするため,Python用ライブラリのSpotipyをインストールします.
$ pip install spotipy
アーティストの曲情報を取得
まず,下のような形でClient IDとClient Secretを記述し,Spotifyから情報を受け取れるようにします.
import pandas as pd import spotipy from spotipy.oauth2 import SpotifyClientCredentials import json import matplotlib.pyplot as plt import seaborn as sns sns.set() client_id = 'xxxxxxxxxx' client_secret = 'xxxxxxxxxx' client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret) spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
次に,任意のアーティストから曲情報を取得します.
まず# search artist and song id
で任意のアーティストを検索し,そのtrack情報を取得します.次に取得した情報の中にある各曲が持つidを基に# get song information
で曲情報を取得します.# drop unnecessary information
では後で分析しやすいように必要のない情報を削除しています.
# search artist and song id search = spotify.search("[Artist name]", limit=50, offset=0, type='track', market=None) song = pd.DataFrame.from_dict(search["tracks"]["items"]) song_name = pd.DataFrame(song["name"]) song = pd.DataFrame(song["id"]) # get song information song_info = pd.DataFrame() for url in song["id"]: df = pd.DataFrame.from_dict(spotify.audio_features(url)) song_info = song_info.append(df) # drop unnecessary information song_info = song_info.reset_index(drop=True) song_info_all = pd.concat([song_name, song_info], axis=1) song_info = song_info.drop(columns=["analysis_url","id","track_href","type","uri"])
Analysis
取得できる情報
各曲には,以下のような情報が付与されています(上で削除したidやurlなどを除く).今回はこれらの情報について分析を行いました.
KEY | VALUE DESCRIPTION |
---|---|
acousticness | 音響的かどうかの信頼度を0.0~1.0で表す. |
danceability | 踊りやすさに対する適合度を0.0~1.0で表す. |
duration_ms | 曲の長さ. |
energy | 1.0に近いほどエネルギッシュな曲であり,速く・大きく・騒々しく感じる. |
instrumentalness | 1.0に近いほどボーカルコンテンツが含まれていない可能性が高い. |
key | 12個の調性 (C, Db, D, ..., B) を0~11に表したもの. |
liveness | 曲のライブっぽさ.1に近いほどライブ音源の可能性がある. |
loudness | デジベル (dB).基本的に-60~0dBの範囲. |
mode | 長調なら1,単調なら0で表す. |
speechiness | ボーカルの話している感を表す.0.66以上なら話している感が強く,0.33~0.66なららっミュージックを含む会話と音楽の間,0.33未満なら音楽感が強い. |
tempo | BPM |
time_signature | 推定拍子 |
valence | 感情軸の一つ.1.0に近いほど幸せ・陽気・幸福感などポジティブに聞こえ,0に近いほど悲しい・落ち込んでいる・怒っているなどネガティブに聞こえる. |
取得した曲
上記の手法で曲の取得を行いましたが,上手く全ての曲を取得することができませんでした.なんでだ……
今回取得・分析した曲は以下の通りです.特に雨宮天さんに関しては曲の被りが入ってしまったほか,本人名義ではなく声優としてのキャラ名義の曲が多くなってしまいました.
また,TrySail・麻倉もも・夏川椎菜さんの曲は英語またはローマ字に変換されて管理されていた一方,雨宮さんの曲は日本語で管理されていました.
麻倉さんのエイムや雨宮さんの曲から予想すると,本人名義ではなく声優のキャラとして歌っている曲は日本語で管理されている,もしくは本人名義の曲は英語・ローマ字で管理されているような気がします.曲提供元のレーベルなんかも関係しているのでしょうか……?
Num. | TrySail | Shiina Natsukawa | Momo Asakura | Sora Amamiya |
---|---|---|---|---|
0 | Adrenaline!!! | gravity - Album Mix | エイム | 最高速 Fall in Love |
1 | High Free Spilits | Labli-Lubla | Koino Prelude | 奏(かなで) |
2 | Azure | Cheer Me Cheer You | Fanfare!! | Da-Da-Dash! |
3 | Senpai | Daisy Days - Album Mix | Travely Time | 最高速 Fall in Love - ミーアver. |
4 | Original | Parade | Tokubetsu Ichiban!! | 最高速Fall in Love |
5 | Kakawari | Yellow Flag | Hanani Akai Ito | My Sweet Feelings |
6 | Truth. | Sutetekureba | Run for You | キスミーだぁりん▽ |
7 | BraveSail | Kimitoglide | Pumpkin Meat Pie | My Sweet Feelings |
8 | Tail Wind | Naimonobakari | No Distance | Da-Da-Dash! |
9 | Coding | Shimaebaii | Colorful | 最高速 Fall in Love - I strumental |
10 | Wanted Girl | Fuwari, Korori, Karan, Koron | Ashitawa Kimito | キスミーだぁりん▽ |
11 | Try Again | First Plot | Zuttokimino kotogasukinandesu. | キスミーだぁりん▽ |
12 | Chip Log | Grapefruit Moon - Album Mix | Hoshizorao Omoeba | キスミーだぁりん▽ - Instrumental |
13 | Disco | Good Job! | Da-Da-Dash! - Instrumental | |
14 | Bang!Bang!Banzai!!! | 奏(かなで) - TV size ver. | ||
15 | Make Me Happy? | 奏(かなで) - Instrumental | ||
16 | Bokurano Symphony | Skyreach (Originally Performed by 雨宮天「アカメが斬る!... | ||
17 | Take a Step Forward | |||
18 | Sunset Kung Fu | |||
19 | Journey | |||
20 | Believe | |||
21 | Mirai Curation | |||
22 | Sampomichi | |||
23 | Matane. | |||
24 | High Free Spirits (Originally Performed by Try...) |
相関分析
まず,ピアソンの相関係数を用いてそれぞれ相関分析を行いました.
ソロの分析では,麻倉さんと雨宮さんはいずれもすべての曲の拍子が同じだったため,time_signature
は空白になっています.
結果を比較すると,強弱の差はありますがユニット・ソロ問わず似た傾向が見受けられました.例として,
正の相関
- danceability × valence
- acousticness × instrumentalness
- energy × loudness
負の相関
- danceability × tempo
- danceability × speechiness
- acousticness × energy
などが挙げられます.エネルギッシュさと力強さなど,言われればその通りだなというような関係が正しく示されていることが確認できました.
また,TrySailのユニットとしての分析結果を見ると,強い相関が表れている部分が左上に偏っていることが分かります.
ヒストグラム
次に,ヒストグラムでそれぞれの分布を見てみました.
結果として,それぞれ個性の出る結果となりました.
まずTrySailの結果を見ると,先ほど負の相関が確認できたacousticness
が0に近いものが多く,energy
が1に近いものが多いという結果が見られました.また,loudness
は0に近いものが多くなっています.このことから,TrySailとしての曲にはアコースティック感が弱く,にぎやかでエネルギッシュな曲が多いと言えます.また,valence
は幅広く分布しており,様々な感情的印象を与える曲があるということが言えます.
次にソロの結果を見ると,3人ともTrySailと同様acousticness
が0に近いものが多く,energy
が1に近いものが多く,Loudness
は-5より大きいものが多いという傾向が見られました.
個別で見ると夏川さんは独自性が強く,実際にはInstrumentalの曲は存在しませんが,instrumentalness
では幅広く分布しており,歌としてよりも音楽としての傾向が強い曲も多いのではないかと考えられます.また,dancebility
とliveness
は高いものが多く,tempo
もBPM125~200前後と比較的早いことから,ライブ向きのノリやすい曲が多いのではないかと推測できます. さらに,valence
は0.6前後に集中して分布しており,感情軸で見たとき中性的な曲が多いと推測できます.
麻倉さんや雨宮さんはspeechiness
が非常に小さい範囲に分布しており,喋りっぽさが非常に小さい曲が多いことが分かります.また,valence
は広く分布しており,様々な感情的印象を与える曲があることがわかります.
各曲のvalenceの分析
それぞれの曲についても分析を行いました.ここでは,valenceの結果について記載します.
曲ごと見てみましたが,こういう曲がvalence値高いみたいな傾向を見つけることはできませんでした……ただ,やはり夏川さんはユニットの時や他の二人と比べて値が低いネガティブな曲が無いようです.どうやってvalence値を決めているのか気になる……
上記以外の分析結果
ここに載せた以外に大きく見られた特徴として,以下のようなことが分かりました.
- TrySailの「またね。」は
acousticness
が0.528と高い. - TrySailの「Truth.」は
liveness
が0.8000と高い. - 夏川さんのステテクレバーは
liveness
が0.87と高い. - 夏川さんのラブリリブラ・ナイモノバカリ・シマエバイイは
instrumentalness
が0.6以上で高い.
まとめ
分析の結果をまとめると,以下のことが言えます.
ユニットとソロを比較した際,それぞれ傾向や特徴が出るのかと思っていましたが,予想に反して2人はユニット時と近い傾向という結果になりました.
ただ,これはあくまでSpotifyが用意したデータでの評価であり,実際聞いていると麻倉ももさんと雨宮天さんも大きく異なる曲を持っているように感じるので,評価指標や評価方法によって結果が変わることが予想されます.
さらに,今回取得できなかった曲が多くあったほか,雨宮天さんだけ声優としてのキャラ名義の曲が多くなってしまったなど,正確な比較検証ができたとは言いにくい結果であったため,そのあたりも改善できれば良かったかなと思います.
プログラム・分析詳細
今回のプログラム及び細かい分析データはGitHubに記載しています.