OSHINAGAKI
はじめに
そもそもR言語の授業を取ったきっかけは「とりま統計やっとけば役に立つだろ」というものであった。
実際理学部に進学するので、データ処理はやっておいて損はないし、何となく触れておけばよさそうだし。
そして、テーマは「」とした。
これはSpotifyAPIを触ったことがあり、音楽にも興味があるので丁度いいと思ったからだ。
まあどうせ受験終わって土日は暇だし、他の課題に比べて楽しそうなのでまずこれを片付けようということで。
前置きが長いが、以下本題に入る。
工程
今回は、以下のような方法で様々な曲を分析していく。
1.年代ごとのヒットシングルをスクレイピングで取得する。
2.取得した曲をAPIで検索し、その曲調を取得する。
3.得たデータをR言語で分析する。
まあとりあえずこんな感じでやっていきます。
ヒットシングルを取得しよう
以下Pythonで書いていきます。
ヒットシングルはここから取得した。
まず、このページから1968~2022年それぞれのページのURLを取得する。
そして、それぞれのページから曲名とアーティスト名のペアを作る。
最後に、このペアをCSVファイルに入れればOK。
実行時間が半端ないのでこの間にTwitterのTLでも消化できればGOOD。
ただ、何かの拍子にエラー吐かれたら最初からやり直しなのでこまめにcsvファイルに書き込んでおくべき。
以下がヒットシングルを取得するソースコードである。
曲調を取得・リスト化しよう
いよいよSpotify APIを使ってみる。
まず、このサイトを参考にClient IdとClient Secretを取得すればOK。
あとはspotipyをインストールすれば準備完了。
ちなみに、Spotify APIではこんな要素を数値化してくれる。(詳しくはこちら)
とりあえずこれらの要素をSpotify APIから取得する。
そのソースコードを以下に示す。
前に取得した曲名とアーティスト名で検索すれば大体正しい曲が出てくるので、それのidを取得(30~36行)。
その後、その曲の曲調を取得し、music_feature_listに格納(38~53行)。
それを適当なタイミングでmusic_feature_list.csvに上書きする。
たまにタイムアウトしてしまうので、その時はCSVファイルに読み込んだデータの数をmemoryに代入すればいいはず。
それでも気になれば、sleep()の値をいじればよさげかも。
何はともあれ、これで曲調まで取得できた。
図1 - music_feature_listのスクリーンショット
ただ、年代ごとに分析するためには、リストをより綺麗にする必要がある。
第一、あまりにも曲が多すぎるために実行に時間がかかる。
その上、R言語を用いてもこのリストだといまいち傾向が掴みづらい。
そこで、年代ごとでスコアの平均を取ることにした。
これで準備完了。
いよいよR言語を使っていく。
曲調をR言語で分析してみよう
ここからはRStudioを使っていく。
インストール方法などは省くとして、早速分析してみようと思う。
例えばこんな風に入力していくと、良い感じの分類木が現れる。
これはBPM(tempo)が何によって左右されるのかを調べるものである。
そのため、結果はこのように表示される。
図2 - BPMと年代の関係
これを見ると、最近の曲になるにつれてBPMが上昇傾向にあることがわかる。
ただ、1974~2005年は中央値は停滞しているため、波がありそうである。
こんな具合にして、様々な曲調の要素と年代を分析することができる。
予想
色々動かしてみる前に、予想を立ててみよう。
今回立てた予想は以下の4つである。
・最近の曲は喋りに近い(speechiness)
・最近の曲はダンスミュージックに近い(danceability)
・昔の曲はアコースティック感がありそう(acousticness)
・昔の曲はインストっぽさそう(instrumentalness)
というわけでそれぞれ検証してみよう。
結果
・最近の曲は喋りに近い(speechiness)
作成した分類木を図3に示す。
図3 - 喋りっぽさと年代の関係
これを見ると、たしかに最近の曲の方がspeechinessの値が大きいことがわかる。
体感としても歌詞の量が増えたように感じる。
その一方で四分位範囲も大きくなっており、幅広いジャンルが受け入れられているようにも思う。
・最近の曲はダンスミュージックに近い(danceability)
作成した分類木を図4に示す。
図4 - ダンスミュージックと年代の関係
最近の曲の方がダンスミュージックっぽいとはあまり言えなさそうである。
1974~1998年までは上昇しているがここから値が下がっているので、この付近でブームが起きたと思われる。
調べるとこの頃に電子音楽が普及したらしく、小室哲哉プロデュースの楽曲やEDMなどが流行したらしい。
・昔の曲はアコースティック感がありそう(acousticness)
作成した分類木を図5に示す。
図5 - アコースティックと年代の関係
昔の曲の方がアコースティックぽさが強く出ている。
1991~2006年と2006~2022年で中央値も平均値もあまり変化しておらず、安定している。
・昔の曲はインストっぽさそう(instrumentalness)
作成した分類木を図6に示す。
図6 - インストと年代の関係
時が経つにつれてインストっぽさは無くなっていくが、1991~1998年だけ範囲は大きいものの値が高い。
しかし、これもすぐに戻ってしまう。
これもダンスミュージックと同じようにブームが起きたためだと思われる。
考察
結果より、最近の曲の方がBPMは速く、喋りっぽくなっていることが分かった。
その一方で、昔の曲の方がアコースティックさは高かった。
ダンスミュージックやインストは傾向としては弱いものの、ブームとして現れていることがわかった。
これより、今後はBPMが速く、歌詞の密度が高い曲が好まれるような傾向が見られる。
しかし、ダンスミュージックやインストなど一時的なブームとしてあるジャンルが生まれることもある。
参考文献などなど
今回作成したCSVファイルは以下のリンクよりダウンロードすることができる。
music_feature_list.csv
music_feature_list2.csv
また、今回参考にしたサイトを以下にまとめておく。
音楽シングル‥歴代の年間ヒットしたCD・レコードって何?
【初心者向け】Spotify APIを利用するための方法
PythonでSpotify API [audio_features編]
ダンス・ミュージック - Wikipedia
書いた人
危機感を募らせながらも行動には移さない怠惰な日々を送る。
好きな言語はPHP。語尾にセミコロンを付ける癖があるためPythonで苦労している。