paint-brush
Spotify ラップハック: 正式リリース前に独自の統計を作成@lukaskrimphove
11,084 測定値
11,084 測定値

Spotify ラップハック: 正式リリース前に独自の統計を作成

Lukas Krimphove5m2023/11/27
Read on Terminal Reader

長すぎる; 読むには

これは、Spotify Wrapped の正式リリース前に、Spotify の統計をこっそり見る方法です。ストリーミング履歴を使用して、最もよく聴いた曲、アーティスト、アルバムを見つける方法を学びます。
featured image - Spotify ラップハック: 正式リリース前に独自の統計を作成
Lukas Krimphove HackerNoon profile picture
0-item

導入

Spotify ユーザーは毎年、最もよく聴いた曲、アーティスト、ジャンルを紹介するパーソナライズされた年間レビューである Spotify Wrapped のリリースを心待ちにしています。正式リリース前に Spotify の統計情報をこっそり見る方法があると言ったらどうなるでしょうか?


このガイドでは、Spotify ストリーミング データを使用して独自のパーソナライズされた統計情報を作成できる Spotify Wrapped ハックについて説明します。こうすることで、Spotify Wrapped を待つ必要がなく、Spotify では表示されない統計情報を作成することもできます。

前提条件

私の以前のプロジェクトの1 つと同様に、このプロジェクトでは Jupyter Notebook を使用します。これは、データを実験したり操作したりするための優れたツールです。


Jupyter Notebook をまだインストールしていない場合は、公式 Web サイトの手順に従ってください。インストールしたら、新しい Jupyter Notebook を作成して、Spotify の統計情報を確認する準備を整えることができます。

データの収集とサニタイズ

始めるには、Spotify ストリーミング データをリクエストする必要があります。これはここで行うことができます (必ず「拡張ストリーミング履歴」をリクエストしてください)。 Spotify がデータを送信するまでに時間がかかります。 「アカウント データ」のみをリクエストすると処理が速くなり、昨年のストリーミング履歴も表示されます。ただし、詳細があまり詳しくないため、コードを調整する必要があります。


データを取得したら、インポートできます。複数の JSON ファイルが取得されます。各ファイルは、再生された曲またはポッドキャスト エピソードに関する情報を含むオブジェクトの配列で構成されます。

 { "ts": "2023-01-30T16:36:40Z", "username": "", "platform": "linux", "ms_played": 239538, "conn_country": "DE", "ip_addr_decrypted": "", "user_agent_decrypted": "", "master_metadata_track_name": "Wonderwall - Remastered", "master_metadata_album_artist_name": "Oasis", "master_metadata_album_album_name": "(What's The Story) Morning Glory? (Deluxe Remastered Edition)", "spotify_track_uri": "spotify:track:7ygpwy2qP3NbrxVkHvUhXY", "episode_name": null, "episode_show_name": null, "spotify_episode_uri": null, "reason_start": "remote", "reason_end": "remote", "shuffle": false, "skipped": false, "offline": false, "offline_timestamp": 0, "incognito_mode": false }

これにより、いつ、どのデバイスで曲を聴いたかを把握できるだけでなく、曲をスキップしたかどうか、いつスキップしたかなどの情報も得られます。


これらすべてを単一の Pandas データ フレームに単純にマージします。

 path_to_json = 'my_spotify_data/' frames = [] for file_name in [file for file in os.listdir(path_to_json) if file.endswith('.json')]: frames.append(pd.read_json(path_to_json + file_name)) df = pd.concat(frames)


その後、ポッドキャストを削除し、短い再生時間をフィルターで除外し、タイムスタンプをより読みやすい形式に変換することでサニタイズします。

 # drop all rows containing podcasts df = df[df['spotify_track_uri'].notna()] # drop all songs which were playing less than 15 seconds df = df[df['ms_played'] > 15000] # convert ts from string to datetime df['ts'] = pd.to_datetime(df['ts'], utc=False) df['date'] = df['ts'].dt.date # drop all columns which are not needed columns_to_keep = [ 'ts', 'date', 'ms_played', 'platform', 'conn_country', 'master_metadata_track_name', 'master_metadata_album_artist_name', 'master_metadata_album_album_name', 'spotify_track_uri' ] df = df[columns_to_keep] df = df.sort_values(by=['ts']) songs_df = df.copy()

Spotify 統計の分析と視覚化

オールタイムのトップソング

あなたのこれまでのお気に入りの曲を探索することから始めましょう。ストリーミング履歴に基づいて、人気のトラックを簡単に発表できます。

 df = songs_df.copy() df = df.groupby(['spotify_track_uri']).size().reset_index().rename(columns={0: 'count'}) df = df.sort_values(by=['count'], ascending=False).reset_index() df = df.merge(songs_df.drop_duplicates(subset='spotify_track_uri')) df = df[['master_metadata_track_name', 'master_metadata_album_artist_name', 'master_metadata_album_album_name', 'count']] df.head(20)

2023 年のトップソング

今年の音楽トレンドに興味がありますか?この関数を使用して、2023 年のトップソングを明らかにできます。

 def top_songs_in_year(year): df = songs_df.copy() df['year'] = df['ts'].dt.year df = df.loc[(df['year'] == year)] print(f"Time listened in {year}: {datetime.timedelta(milliseconds=int(df['ms_played'].sum()))}") df = df.groupby(['spotify_track_uri']).size().reset_index().rename(columns={0: 'count'}) df = df.sort_values(by=['count'], ascending=False).reset_index() df = df.merge(songs_df.drop_duplicates(subset='spotify_track_uri')) df = df[['master_metadata_track_name', 'master_metadata_album_artist_name', 'master_metadata_album_album_name', 'count']] return df.head(20) 

2023 年のマイ トップ ソング

ウィジェットとのインタラクティブ性

これはすでに非常にうまく機能していますが、なぜそれで満足するのでしょうか?インタラクティブなウィジェットを使用して、UI 要素を使用してクエリをカスタマイズできます。これにより、特定の時間範囲で人気の曲を簡単に見つけることができます。

 @interact def top_songs(date_range=date_range_slider): df = songs_df.copy() time_range_start = pd.Timestamp(date_range[0]) time_range_end = pd.Timestamp(date_range[1]) df = df.loc[(df['date'] >= time_range_start.date()) & (df['date'] <= time_range_end.date())] df = df.groupby(['spotify_track_uri']).size().reset_index().rename(columns={0: 'count'}) df = df.sort_values(by=['count'], ascending=False).reset_index() df = df.merge(songs_df.drop_duplicates(subset='spotify_track_uri')) df = df[['master_metadata_track_name', 'master_metadata_album_artist_name', 'master_metadata_album_album_name', 'count']] return df.head(20) 

過去6か月で私のトップソング

一時的および平日の分布

トップの曲、トップのアーティスト、トップのアルバムがわかったので、もう少し先に進むことができます。たとえば、Spotify で最もアクティブな曜日を調べます。

 def plot_weekday_distribution(): df = songs_df.copy() df['year'] = df['ts'].dt.year df['weekday'] = df['ts'].dt.weekday df = df.groupby(['year', 'weekday']).size().reset_index(name='count') fig, ax = plt.subplots(figsize=(12, 8)) for year, data in df.groupby('year'): ax.plot(data['weekday'], data['count'], label=str(year)) weekdays_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] plt.xticks(range(7), weekdays_order) plt.title('Weekday Distribution of Played Tracks Over Years') plt.xlabel('Weekday') plt.ylabel('Number of Played Tracks') plt.legend(title='Year') plt.show() 

私の平日の配信

自分で行う方法

自分の Spotify 統計を詳しく調べてみませんか?私のGitHub リポジトリをチェックして、リスニング統計を調査するためのさらに多くの関数を含むすべてのコードを見つけてください。

結論

正式リリース前に Spotify の統計情報を作成すると、楽しみの要素が追加されるだけでなく、独自のリスニング習慣についての洞察も得られます。私たちは Spotify Wrapped を心待ちにしているので、音楽分析の冒険を一足先に始めてみてはいかがでしょうか?


パーソナライズされた Spotify Wrapped 体験を満喫する準備をしましょう!