はじめに
完成形はこちら。
動くグラフの生成自体はBar chart race generatorを使わせていただきました。
今回は必要なデータの加工方法を記載します。
データ加工はGoogle SpreadsheetとPythonを組み合わせて行いましたが、全部Pythonでもいけると思います。
手順
アーティスト名別で作成する場合の手順を記載します。曲名別で作成する場合も同様です。
-
Spotifyの再生履歴データをリクエストする
- アカウントのプライバシーにアクセス→「お客様のデータのダウンロード」
-
データが届いたらJSONからCSVに変換する
※アーティスト名や曲名が半角数字だけのものが含まれるとBar chart race generatorが誤作動するので、除外するかクォーテーション等で囲っておく -
dateとartist_name以外の列を削除する
-
query関数を使って、dateとartist_nameをキーにして1日ごとの再生回数を集計する
=QUERY(A:B, "SELECT A, B, COUNT(B) WHERE A IS NOT NULL GROUP BY A, B ORDER BY A ASC", 1)
-
【Python】各アーティストを聴いていない日があるとBar chart raceのグラフが0にリセットされてしまうため、日付×アーティスト名の組み合わせが網羅されるように加工する
Pythoncount_per_day = pd.read_csv('/content/drive/MyDrive/MachineLearning/Spotify/count_per_day.csv') # CSVから日付とアーティスト名をそれぞれ切り出して重複削除し、それらの全組み合わせを作成する date_artist_cross = pd.merge(count_per_day['date'].drop_duplicates(), count_per_day['artist_name'].drop_duplicates(), how='cross') # 各アーティストを聴いていない日は0回、聴いている日は元のCSVの回数をコピー count_per_day_filled = pd.merge(date_artist_cross, count_per_day, on=['date', 'artist_name'], how='left').fillna(0) # 加工後のデータをダウンロード from google.colab import files final.to_csv('count_per_day_filled.csv', encoding='utf_8_sig', index=False) files.download('count_per_day_filled.csv')
-
加工したCSVに対してSUMIFS関数を適用し、その日までの累計再生回数を集計する
=SUMIFS(C$2:C2, B$2:B2, B2, A$2:A2, "<="&A2)
-
6.のCSVから4.で集計した列を削除し、「date」「artist_name」「その日までの累計再生回数」の3列にする
-
7.のCSVをBar chart race generatorにアップロードし、アニメーションを生成する