「danceability=踊りやすさ」です。これは、高いほど踊れる楽曲という事です。明らかに2020年の曲はdanceabilityの値が高くなる傾向があります。次に、「liveness=ライブっぽさ」を見ていきましょう。高いほどライブ感が強い曲という指標です。ライブっぽさも2020年は高くなる傾向が見られます。次は、「valence=ポジティブさ」を見てみます。高いほどポジティブ感(幸福感、陶酔感)が強く、低いほどネガティブ感(悲壮感、怒り)が強いとされています。valenceも2020年は高い傾向が見られます。2020年の曲はポジティブ感が強めという事です。ここまでの結果をまとめてみましょう。2020年の曲は、2017年~2019年の曲と比較して「踊れて」「ライブ感が強く」、「ポジティブ感が強い」曲がヒットしています。コロナ禍で外出や実際のライブが制限される中、逆に曲の中だけでも踊ったり、ライブを感じたりしたいという思いがあるのかもしれません。いえば、日本でも星野源さんが「うちで踊ろう」という曲を配信して話題になりましたね。次は、楽曲そのものの性質を見てみましょう。tempo、key、modeの比較を見てみましょう。ちなみにkeyは0~11なので12分割、modeは0か1なので2分割で表現しています。2020年の曲はtempoが高い=速き曲になる傾向が見られます。keyはピッチクラスで表現されています。2020年のヒット曲はKey=4(E)、Key=5(F)が少なく、Key=6(F♯)、Key=7(G)が多い傾向があります。若干の差ですが、2020年の曲はmode=0(マイナー)が多く、mode=1(メジャー)の曲が多い傾向があります。楽曲面の結果をまとめてみましょう。「テンポが速くて」「キーがF#が多く」、「マイナー調が若干多い」という事が分かります。テンポが速いというのは、「踊れて」「ライブ感が強く」、「ポジティブ感が強い」という結果と類似しているように思われます。一方で差がでるのが予想外だったのが、2020年の曲は「キーはF#、Gが多く、E、Fが少ない」という結果です。知らべてみると、キーにはそれぞれ印象があるようです。Gは「雄大さ」や「元気さ」という印象に対し、EやFは「軽快さ」や「優しさ」という印象だそうです。このあたりも実は世相を反映しているようにもみえます。(以下のサイトを参考にさせていただきました。キーの特徴まとめ&調の選択について)今回、2020年の楽曲は2017年~2019年までの傾向から少しズレた傾向を示す事が分かりました。全てがコロナの影響とはいえないですが、大きな要因の一つであると推測されます。楽曲制作をしている方は、現在好まれている曲を知ることでヒット曲を作ることが出来るかもしれません。分析にいたるまでの方法を振り返っていきます。APIはSpotifyの所有しているバックデータを取得したり、Spotifyを操作したりできるAPIです。APIを使うには、Spotifyの登録が必要です。spotipyというライブラリを使っていくので、このインストールも必要です。1~に記載しているので、ご参照ください。準備編はこれで終了です。分析の方針を考えましょう。年ごとの曲を収集して分析を行います。具体的には、以下の流れで分析していきます。↓4:CSVファイルにまとめて分析3の「トラックの楽曲パラメータを抽出」は前回つくったプログラムを流用できそうです。順にやっていきましょう。4.楽曲分析取得プログラムをつくろう今回の本編です。2019」でやってみましょう。2019」)からトラックリストを抽出から始めます。前回までを参考に、プレイリストのURLからデータの取得と、APIの認証までです。spotipyライブラリの中から、playlist_tracksモジュールを使用しています。spotify.playlist_tracks(playlist_url)print(list_data)結果は省略しますが、膨大なデータが出てきました。{辞書}.keys()で、辞書型データのKeyを取得してみましょう。プログラムはこんな感じです。spotify.playlist_tracks(playlist_url)print(list_data.keys())結果は以下のように出力されます。'total'])いろいろとKeyがあることが分かります。省略しますが出力して調べていくと、「items」が楽曲データ、「total」がプレイリストの数であることが分かりました。「total」の方を出力してみましょう。#play_list_countprint(track_num)結果はこのようになります。2019」プレイリストの楽曲数も100なので正しそうです。手順2:トラックリストからトラック(曲)のURLを抽出に進みましょう。次に、楽曲データを取得してみます。list_data['total']print(list_data['items'])結果は省略しますが、膨大なデータが返ってきます。末尾だけ見てみましょう。None}}]末尾から分かるのは、リスト型のデータであるという事です。いう事でリストの数を数えてみましょう。「len(リスト)」でリストの要素をカウントできます。list_data['total']print(len(list_data['items']))結果はこうなります。100100トラックに100個のリスト。「トラックごとにリスト型のデータでまとめられている」と考えられます。例として先頭のリスト(0番目のリスト)を見てみましょう。list_data['total']print(list_data['items'][0])またもや膨大な結果が返ってきます。ここも末端だけ見てみましょう。None}}ここからわかるのは、「辞書型のデータである」という事。辞書型データのKeyを取得してみましょう。list_data['total']print(list_data['items'][0].keys())このように出力されました。'video_thumbnail'])みるからに「track」が楽曲のデータっぽいですね。list_data['total']print(list_data['items'][0]['track']省略しますが、辞書型のデータが返ってきます。key()を使って分析して解析をしました。(略)いろいろなデータがありますがここで取得したいのは、「トラックのURL」です。プログラムを書いてみます。list_data['total']print(list_data['items'][0]['track']['external_urls']結果はこのようになります。'https://open.spotify.com/track/2YpeDb67231RjR0MgVLzsG'}データが取得できました。keyが’spotify’の辞書型データになっています。このようにすればURL単体で取得できそうです。list_data['total']print(list_data['items'][0]['track']['external_urls']['spotify'])結果はこうなりました。https://open.spotify.com/track/2YpeDb67231RjR0MgVLzsGトラックのURLが取得できました。今のところ、0番目のトラックのURLを取得した段階です。プレイリストの全てのトラックのURLを取得して、リストにまとめてみましょう。urls_list.append(track_url)print(urls_list)結果は省略しますが、URLのリストが取得できています。手順3:トラックの楽曲パラメータを抽出に進みましょう。前回の記事を参考に曲のデータを取得してみます。0番目のトラックのデータのみを取得してみます。APIにアクセスする間隔は1秒間隔をあけるようにします。{val}')結果はこのようになります。audio_features細かいパラメーターの説明も前回に譲ります。現段階ではプレイリストの1曲目のデータを取得したにすぎません。今回はプレイリストの曲のデータを表の形でまとめたいと思います。「表といえばPandas」です。ep4~参照)前々回の記事でも似たような操作をしたので簡単ですね。『曲名』『アーティスト名』『URL』をまとめたいと思います。ignore_index=True)print(track_df)結果はこのようなります。https://open.spotify.com/track/2YpeDb67231RjR0...まずは1トラックのデータが取得できました。For文をつかって、全てのデータを取得しましょう。繰り返し回数=トラックURLの数です。ignore_index=True)print(track_df)結果はこのようになります。1トラックあたり1秒停止が挟まっているので、100トラックなら100秒、つまり1分40秒かかります。columns]全てのデータを取得できましたね。手順4:CSVファイルにまとめて分析に進みます。取得したデータをCSVに出力してみましょう。意外と時間がかかるので、CSVファイルに出力できたら、「Finish」と表示されるようにしました。区切りになるので、全プログラムを表示しています。csv.writer(f)print('finish')CSVファイルが出来ていますね。ファイルを開いてみましょう。データがCSVファイルにまとめられています!微妙に楽曲名が文字化けしてますが、解析には影響しないんで良しとしましょう。次はまとめられたデータを解析してみましょう。APIから離れて、取得したCSVファイルの解析に移ります。事前に、先に作成したプログラムを使って、2017年、2018年、2019年、2020年のデータを取得して、CSVファイルにまとめています。ここで、一つポイントがあります。プレイリストのトラック数の違いです。2020年のデータのみトラック数が50になっています。そのため、単純なデータ点数ではなく割合で分析することが必要です。データを描写するのには、「matplotlib」という外部ライブラリを使用します。プログラムを書いていきます。ここでは、過程を省略して結果のみ記載します。いくつかポイントがあります。ポイント1:CSVファイルのパス(保存場所)は人により異なるポイント2:ヒストグラムで分析ポイント3:ヒストグラムを正規化して表示(density=True)ポイント4:plot_dataを変えて分析対象を変える。#x軸ラベルax.legend()plt.show()結果は以下のようになります。うまくグラフが取得できていますね。ここで作成したプログラムを用いて、分析対象を変えてグラフを描写することで冒頭の分析を行いました。・グループ曲とソロ曲の傾向の違い分析などなどアイデア次第でいろんな分析が出来るツールになります。APIを使って様々な曲情報を取得していきます。音楽をプレイする方に有用な情報を集めます。エピローグ4回の戦いを終えての振り返りです。今後に向けた感想などなど。エピローグ4回にわたってやってきた「ビュフォンの針」のシミュレーション。統計、グラフ、Pandasも使っていきました。これで私もデータサイエンティスト。APIを使って、PythonでPythonの最新本を調査してみました。最終的にCSVファイルに出力します。APIを使って検索をしてみます。ep4~「ビュフォンの針」のシミュレーションを視覚的に表現してみます。Pandasを使って処理していきます。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。人口知能を作成し世界征服を目論みます。それまでは「無駄なもの」を作り続けます。人口知能を作成し世界征服を目論みます。それまでは「無駄なもの」を作り続けます。APIを使おう3.楽曲分析の方針4.楽曲分析取得プログラムをつくろう5.楽曲データ解析プログラムをつくろうタイトルとURLをコピーしました。