Chaque année, les utilisateurs de Spotify attendent avec impatience la sortie de Spotify Wrapped, un bilan annuel personnalisé présentant leurs chansons, artistes et genres les plus écoutés. Et si je vous disais qu'il existe un moyen d'avoir un aperçu de vos statistiques Spotify avant la sortie officielle ?
Dans ce guide, je vais vous présenter un hack Spotify Wrapped qui vous permet de créer vos propres statistiques personnalisées à l'aide de vos données de streaming Spotify. De cette façon, vous n'aurez pas besoin d'attendre Spotify Wrapped et vous pourrez également créer des statistiques que Spotify ne vous montrera pas.
Semblable à l'un de mes projets précédents , nous utiliserons Jupyter Notebook pour celui-ci. C'est un excellent outil pour expérimenter et travailler avec des données.
Si vous n'avez pas encore installé Jupyter Notebook, suivez les instructions sur leur site officiel . Une fois installé, vous pouvez créer un nouveau bloc-notes Jupyter et vous préparer à plonger dans vos statistiques Spotify.
Pour commencer, vous devrez demander vos données de streaming Spotify. Vous pouvez le faire ici (assurez-vous de demander « Historique de streaming étendu »). Il faudra un certain temps à Spotify pour vous envoyer vos données. Demander uniquement les « Données du compte » sera plus rapide et vous donnera également l'historique de streaming de l'année dernière. Cependant, c'est beaucoup moins détaillé et vous devrez adapter le code.
Une fois que vous avez les données, nous pouvons les importer. Vous obtiendrez plusieurs fichiers JSON. Chaque fichier se compose d'un tableau d'objets contenant des informations sur une chanson ou un épisode de podcast joué :
{ "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 }
Cela vous permet non seulement de savoir quand et sur quel appareil vous avez écouté une chanson, mais vous donne également des informations telles que si et quand vous l'avez ignorée.
Nous allons simplement les fusionner tous dans une seule trame de données 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)
Ensuite, nous le nettoierons en supprimant les podcasts, en filtrant les courtes durées de lecture et en convertissant les horodatages dans un format plus lisible :
# 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()
Commençons par explorer vos chansons préférées de tous les temps. Nous pouvons facilement dévoiler nos meilleurs morceaux en fonction de votre historique de diffusion :
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)
Curieux de connaître les tendances musicales de cette année ? Nous pouvons utiliser cette fonction pour révéler les meilleures chansons de 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)
Cela fonctionne déjà très bien, mais pourquoi se contenter de cela ? Nous pouvons utiliser des widgets interactifs pour personnaliser les requêtes à l'aide d'éléments d'interface utilisateur. Cela nous permet de découvrir sans effort vos meilleures chansons dans une plage horaire spécifique :
@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)
Maintenant que nous connaissons nos meilleures chansons, nos meilleurs artistes et nos meilleurs albums, nous pouvons aller un peu plus loin. Par exemple, en explorant quels jours de la semaine nous sommes les plus actifs sur 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()
Prêt à plonger dans vos propres statistiques Spotify ? Consultez mon référentiel GitHub pour trouver tout le code, y compris encore plus de fonctions pour explorer vos statistiques d'écoute.
La création de vos statistiques Spotify avant la sortie officielle ajoute non seulement un élément de plaisir, mais donne également un aperçu de vos habitudes d'écoute uniques. Alors que nous attendons avec impatience Spotify Wrapped, pourquoi ne pas prendre une longueur d’avance dans votre aventure d’analyse musicale ?
Préparez-vous à plonger dans votre expérience Spotify Wrapped personnalisée !