paint-brush
Spotify ラップハック: 宣布リリース前に独立の統計を制作 に@lukaskrimphove
10,148 測定値
10,148 測定値

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 をまだインストールしていない場合は、の手順に従ってください。インストールしたら、新しい 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 統計を詳しく調べてみませんか?私のチェックして、リスニング統計を調査するためのさらに多くの関数を含むすべてのコードを見つけてください。

結論

真正リリース前に Spotify の統計情報を弄成すると、楽しみの基本原则が追加されるだけでなく、孤身のリスニング習慣についての探知も得られます。私たちは Spotify Wrapped を心待ちにしているので、音楽概述の冒険を一足先に始めてみてはいかがでしょうか?


パーソナライズされた Spotify Wrapped 体験を満喫する準備をしましょう!
바카라사이트 바카라사이트 온라인바카라