はじめに
オンラインスクールの半年間で学んだ知識を実際に使ってみたいと思い、データセットを探すがなかなか見つからない中Spotify APIが面白そうだったので使ってみました☺︎
音楽プレイリストを作成するのに曲を選択することが億劫になることがあるのでデータセットをクラスタリングしてその時の気分でプレイリストを作成できるようにしたいと思います。
Spotify APIとは
音楽ストリーミングサービスSpotifyが提供している、曲一曲毎のデータが詰まっているAPIでアカウントを作成すれば簡単にデータが取得できるようになっています!
手順
今回は以下の順番で作業を行なっています
Spotify APIのスクレイピング&データセットの作成
↓
↓
まとめたデータセットの分析
↓
↓
分析結果をFlaskで簡単なプレイリスト作成アプリぽいものにする
使用している環境
PC → mac os
分析 → Anaconda, jupyternotebook
flask → Visual studio code
Spotify APIのスクレイピング
こちらのコードを参考にさせてただきスクレイピングをしていきます
今回は年代別洋楽のトップ100のプレイリストを、
2000年〜2022年までの22年分2200曲以上をスクレイピングしています(トップ100の枠からはみ出して100曲より多い年があります)
2000年〜2022年のプレイリストをCSVで保存します
ハードロックからポップスまでジャンルを全て詰め込まれたデータセットになってます
2022年までで保存した各プレイリストはconcatで2000年〜2022年までをひとまとめにして保存しました
作成したデータセットの分析
データを見ていくと、かなり細分化されていてデータ同士の最大値と最小値が全く異なります
こちらの記事を参考に、標準化してKmeans法でクラスター分析していきます
標準化はsklearnのpreprocessingライブラリを使用していきます
from sklearn import preprocessing
ss = preprocessing.StandardScaler()
a_standardscaler = ss.fit_transform(a)
a_ss = pd.DataFrame(a_standardscaler)
a_ss = a_ss.set_axis(['acousticness', 'danceability', 'energy', 'instrumentalness', 'key', 'length', 'liveness', 'loudness', 'mode', 'speechiness', 'tempo', 'time_signature', 'valence'], axis=1)
a_ss.head()
今回は気分でランダムにプレイリストを作成するアプリを作成したいので、クラスター分析で最適クラスターを見つけて検討していきます
エルボー法で最適クラスターを検討します
distortions = []
for i in range(1, 11):#クラスター数を10にした時
km = KMeans(n_clusters=i, init='k-means++', n_init=10, max_iter=300, random_state=0)
km.fit(X)
distortions.append(km.inertia_)
plt.plot(range(1, 11), distortions, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Distortion')
クラスター分析のためにエルボー法で最適クラスターを決めたところ、
4あたりから緩やかに下がっているような感じなのでクラスター数を4にして実行してみました
クラスター数を4にしたところ、以下のようにまとまりました
class0は、
modeが低く、danceabilityとenergy、valenceが高いマイナーコードのクラスター
class1は、
modeが高く、energyとtempoも高いメジャーコードのクラスター
class2は、
acousticnessのみが高く、danceability、energy、valenceは低いクラスター
class3は、
speechinessが高く、ラップ曲が多いクラスター
いい感じにまとまったので、
クラスターを割り振ってアプリにしていきます
アプリを作っていく
flaskでプレイリストアプリを作成しました
コードはgithubです
class0は、ダンスしたい時(dance)
class1は、ポジティブになりたい時(positive)
class2は、勉強する時(study)
class3は、ドライブする時(drive)
として、クラスターをこじつけて割り振ってリストから選ぶとランダムに20曲作成できるようにします
無事にランダムに表示できるようになりました。ページを再読み込みする度にプレイリストが変わる楽しみもできました☺︎
まとめ
クラスター分析の前に相関関係をみて、相関がないところは省きましたが偏りがあったので、データはそのまま使うことにしました
アプリの機能面で履歴残したりspotifyに反映できたりしたら面白いかなと思いました
まだまだ勉強中の身ですので、
特に工夫もなくそれっぽい感じになってしまったので、より多くのことを吸収して試行錯誤を続けていきたいです