paint-brush
Spotify Wrapped Hack: crea tus propias estadísticas antes del lanzamiento oficialpor@lukaskrimphove
11,073 lecturas
11,073 lecturas

Spotify Wrapped Hack: crea tus propias estadísticas antes del lanzamiento oficial

por Lukas Krimphove5m2023/11/27
Read on Terminal Reader

Demasiado Largo; Para Leer

Esta es una forma de echar un vistazo a tus estadísticas de Spotify antes del lanzamiento oficial de Spotify Wrapped. Aprenda a utilizar su historial de transmisión para descubrir las canciones, artistas y álbumes que más ha escuchado.
featured image - Spotify Wrapped Hack: crea tus propias estadísticas antes del lanzamiento oficial
Lukas Krimphove HackerNoon profile picture
0-item

Introducción

Cada año, los usuarios de Spotify esperan ansiosamente el lanzamiento de Spotify Wrapped, un resumen anual personalizado que muestra sus canciones, artistas y géneros más escuchados. ¿Qué pasaría si te dijera que hay una manera de echar un vistazo a tus estadísticas de Spotify antes del lanzamiento oficial?


En esta guía, te guiaré a través de un truco de Spotify Wrapped que te permite crear tus propias estadísticas personalizadas utilizando tus datos de transmisión de Spotify. De esta manera no necesitarás esperar a Spotify Wrapped y también podrás crear estadísticas que Spotify no te mostrará.

Requisitos previos

Al igual que en uno de mis proyectos anteriores , usaremos Jupyter Notebook para este. Es una gran herramienta para experimentar y trabajar con datos.


Si aún no ha instalado Jupyter Notebook, siga las instrucciones en su sitio web oficial . Una vez instalado, puede crear un nuevo Jupyter Notebook y prepararse para sumergirse en sus estadísticas de Spotify.

Recopilación y desinfección de datos

Para comenzar, deberá solicitar sus datos de transmisión de Spotify. Puedes hacer esto aquí (asegúrate de solicitar el “Historial de transmisión extendido”). Spotify tardará algún tiempo en enviarte tus datos. Solicitar solo los “Datos de la cuenta” será más rápido y también te dará el historial de streaming del año pasado. Sin embargo, es mucho menos detallado y tendrás que adaptar el código.


Una vez que tenga los datos, podemos importarlos. Obtendrá varios archivos JSON. Cada archivo consta de una serie de objetos que contienen información sobre una canción reproducida o un episodio de podcast:

 { "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 }

Esto le permite no solo saber cuándo y en qué dispositivo escuchó una canción, sino que también le brinda información como si la omitió y cuándo.


Simplemente los fusionaremos todos en un único marco de datos de 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)


Luego, lo desinfectaremos eliminando podcasts, filtrando duraciones de reproducción cortas y convirtiendo marcas de tiempo a un formato más legible:

 # 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()

Analizar y visualizar sus estadísticas de Spotify

Las mejores canciones de todos los tiempos

Comencemos explorando tus canciones favoritas de todos los tiempos. Podemos revelar fácilmente nuestras pistas principales según su historial de transmisión:

 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)

Mejores canciones en 2023

¿Tienes curiosidad por las tendencias musicales de este año? Podemos utilizar esta función para revelar las mejores canciones 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) 

Mis mejores canciones 2023

Interactividad con widgets

Eso ya funciona muy bien, pero ¿por qué conformarse con eso? Podemos usar widgets interactivos para personalizar las consultas usando elementos de la interfaz de usuario. Esto nos permite encontrar tus mejores canciones en cualquier rango de tiempo específico sin esfuerzo:

 @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) 

Mis mejores canciones de los últimos seis meses.

Distribución temporal y entre semana

Ahora que conocemos nuestras mejores canciones, mejores artistas y mejores álbumes, podemos ir un poco más allá. Por ejemplo, explorar qué días de la semana estamos más activos en 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() 

Mi distribución entre semana

Cómo hacerlo usted mismo

¿Listo para sumergirte en tus propias estadísticas de Spotify? Consulta mi repositorio de GitHub para encontrar todo el código, incluidas aún más funciones para explorar tus estadísticas de escucha.

Conclusión

Crear tus estadísticas de Spotify antes del lanzamiento oficial no sólo añade un elemento de diversión sino que también proporciona información sobre tus hábitos de escucha únicos. Mientras anticipamos con impaciencia Spotify Wrapped, ¿por qué no empezar con ventaja tu aventura de análisis musical?


¡Prepárate para disfrutar de tu experiencia personalizada de Spotify Wrapped!