paint-brush
Spotify Wrapped Hack: crie suas próprias estatísticas antes do lançamento oficialpor@lukaskrimphove
9,699 leituras
9,699 leituras

Spotify Wrapped Hack: crie suas próprias estatísticas antes do lançamento oficial

por Lukas Krimphove5m2023/11/27
Read on Terminal Reader

Muito longo; Para ler

Esta é uma forma de dar uma espiada nas estatísticas do Spotify antes do lançamento oficial do Spotify Wrapped. Aprenda como usar seu histórico de streaming para descobrir as músicas, artistas e álbuns que você mais ouviu.
featured image - Spotify Wrapped Hack: crie suas próprias estatísticas antes do lançamento oficial
Lukas Krimphove HackerNoon profile picture
0-item

Introdução

Todos os anos, os usuários do Spotify aguardam ansiosamente o lançamento do Spotify Wrapped, uma análise anual personalizada que apresenta suas músicas, artistas e gêneros mais ouvidos. E se eu lhe dissesse que existe uma maneira de dar uma espiada nas estatísticas do Spotify antes do lançamento oficial?


Neste guia, vou orientá-lo em um hack do Spotify Wrapped que permite que você crie suas próprias estatísticas personalizadas usando seus dados de streaming do Spotify. Dessa forma, você não precisará esperar pelo Spotify Wrapped e também poderá criar estatísticas que o Spotify não mostrará.

Pré-requisitos

Semelhante a um dos meus projetos anteriores , usaremos o Jupyter Notebook para este. É uma ótima ferramenta para experimentar e trabalhar com dados.


Se você ainda não instalou o Jupyter Notebook, siga as instruções no site oficial . Depois de instalado, você pode criar um novo Jupyter Notebook e se preparar para mergulhar nas estatísticas do Spotify.

Coleta e higienização de dados

Para começar, você precisará solicitar seus dados de streaming do Spotify. Você pode fazer isso aqui (certifique-se de solicitar o “Histórico de streaming estendido”). Levará algum tempo para que o Spotify envie seus dados para você. Solicitar apenas os “Dados da conta” será mais rápido e também fornecerá o histórico de streaming do ano passado. Porém, é bem menos detalhado e você terá que adaptar o código.


Assim que tiver os dados, podemos importá-los. Você obterá vários arquivos JSON. Cada arquivo consiste em uma série de objetos contendo informações sobre uma música reproduzida ou episódio 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 }

Isso permite que você não apenas descubra quando e em qual dispositivo você ouviu uma música, mas também fornece informações como se e quando você a ignorou.


Iremos simplesmente mesclar todos eles em um único quadro de dados do 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)


Depois disso, iremos higienizá-lo removendo podcasts, filtrando durações curtas de reprodução e convertendo carimbos de data/hora para um formato mais legível:

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

Analisando e visualizando suas estatísticas do Spotify

Melhores músicas de todos os tempos

Vamos começar explorando suas músicas favoritas de todos os tempos. Podemos revelar facilmente nossas principais faixas com base no seu histórico de streaming:

 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)

Melhores músicas de 2023

Curioso sobre as tendências musicais deste ano? Podemos usar esta função para revelar as melhores músicas 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) 

Minhas melhores músicas de 2023

Interatividade com widgets

Isso já funciona muito bem, mas por que se contentar com isso? Podemos usar widgets interativos para personalizar as consultas usando elementos da UI. Isso nos permite descobrir suas melhores músicas em qualquer intervalo de tempo específico sem esforço:

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

Minhas melhores músicas dos últimos seis meses

Distribuição temporal e durante a semana

Agora que conhecemos nossas principais músicas, principais artistas e principais álbuns, podemos ir um pouco mais longe. Por exemplo, explorando quais dias da semana estamos mais ativos no 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() 

Minha distribuição durante a semana

Como fazer você mesmo

Pronto para mergulhar nas suas próprias estatísticas do Spotify? Confira meu repositório GitHub para encontrar todo o código, incluindo ainda mais funções para explorar suas estatísticas de escuta.

Conclusão

Criar suas estatísticas do Spotify antes do lançamento oficial não apenas adiciona um elemento de diversão, mas também fornece insights sobre seus hábitos auditivos únicos. Como antecipamos ansiosamente o Spotify Wrapped, por que não começar sua aventura de análise musical?


Prepare-se para entrar na sua experiência personalizada do Spotify Wrapped!