paint-brush
Spotify Sarılmış Hack: Resmi Yayınlanmadan Önce Kendi İstatistiklerinizi Oluşturunile@lukaskrimphove
10,567 okumalar
10,567 okumalar

Spotify Sarılmış Hack: Resmi Yayınlanmadan Önce Kendi İstatistiklerinizi Oluşturun

ile Lukas Krimphove5m2023/11/27
Read on Terminal Reader

Çok uzun; Okumak

Bu, Spotify Wrapped'ın resmi olarak yayınlanmasından önce Spotify istatistiklerinize göz atmanın bir yoludur. En çok dinlediğiniz şarkıları, sanatçıları ve albümleri ortaya çıkarmak için akış geçmişinizi nasıl kullanacağınızı öğrenin.
featured image - Spotify Sarılmış Hack: Resmi Yayınlanmadan Önce Kendi İstatistiklerinizi Oluşturun
Lukas Krimphove HackerNoon profile picture
0-item

giriiş

Spotify kullanıcıları her yıl, en çok dinlenen şarkıları, sanatçıları ve türleri sergileyen kişiselleştirilmiş bir yıllık inceleme olan Spotify Wrapped'ın yayınlanmasını sabırsızlıkla bekliyor. Ya size resmi yayınlanmadan önce Spotify istatistiklerinize göz atmanın bir yolu olduğunu söylesem?


Bu kılavuzda, Spotify akış verilerinizi kullanarak kendi kişiselleştirilmiş istatistiklerinizi oluşturmanıza olanak tanıyan Spotify Wrapped hack'ini size anlatacağım. Bu sayede Spotify Wrapped'ı beklemenize gerek kalmayacak ve Spotify'ın size göstermeyeceği istatistikler de oluşturabileceksiniz.

Önkoşullar

Daha önceki projelerime benzer şekilde bu projede de Jupyter Notebook'u kullanacağız. Verilerle denemeler yapmak ve çalışmak için harika bir araçtır.


Jupyter Notebook'u henüz yüklemediyseniz resmi web sitesindeki talimatları izleyin. Kurulduktan sonra yeni bir Jupyter Notebook oluşturabilir ve Spotify istatistiklerinize dalmaya hazırlanabilirsiniz.

Verilerin Toplanması ve Temizlenmesi

Başlamak için Spotify akış verilerinizi istemeniz gerekir. Bunu buradan yapabilirsiniz (“Genişletilmiş yayın geçmişi”ni talep ettiğinizden emin olun). Spotify'ın sana verilerini göndermesi biraz zaman alacak. Yalnızca "Hesap verilerini" talep etmek daha hızlı olacak ve aynı zamanda size geçen yılın yayın geçmişini de verecektir. Ancak çok daha az ayrıntılıdır ve kodu uyarlamanız gerekecektir.


Verileri aldıktan sonra içe aktarabiliriz. Birden fazla JSON dosyası alacaksınız. Her dosya, çalınan bir şarkı veya podcast bölümü hakkında bilgi içeren bir dizi nesneden oluşur:

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

Bu, bir şarkıyı ne zaman ve hangi cihazda dinlediğinizi anlamanıza olanak sağlamanın yanı sıra, şarkıyı atlayıp atlamadığınız, ne zaman atladığınız gibi bilgileri de verir.


Hepsini tek bir Pandas veri çerçevesinde birleştireceğiz:

 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)


Daha sonra podcast'leri kaldırarak, kısa oynatma sürelerini filtreleyerek ve zaman damgalarını daha okunabilir bir formata dönüştürerek onu temizleyeceğiz:

 # 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 İstatistiklerinizi Analiz Etme ve Görselleştirme

Tüm Zamanların En Popüler Şarkıları

Tüm zamanların en sevdiğiniz şarkılarını keşfederek işe başlayalım. Yayın geçmişinize göre en iyi parçalarımızı kolayca açıklayabiliriz:

 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'ün En Popüler Şarkıları

Bu yılın müzik trendlerini merak mı ediyorsunuz? 2023'ün en popüler şarkılarını ortaya çıkarmak için bu işlevi kullanabiliriz:

 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) 

En Popüler Şarkılarım 2023

Widget'larla Etkileşim

Bu zaten çok işe yarıyor ama neden bununla yetinelim ki? Kullanıcı arayüzü öğelerini kullanarak sorguları özelleştirmek için etkileşimli widget'lar kullanabiliriz. Bu, herhangi bir zaman aralığındaki en iyi şarkılarınızı zahmetsizce bulmamıza olanak tanır:

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

Son altı aydaki en popüler şarkılarım

Zamansal ve Hafta İçi Dağılımı

Artık en iyi şarkılarımızı, en iyi sanatçılarımızı ve en iyi albümlerimizi bildiğimize göre biraz daha ileri gidebiliriz. Örneğin Spotify'da haftanın hangi günlerinde en aktif olduğumuzu keşfetmek:

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

Hafta içi dağıtımım

Kendiniz Nasıl Yapılır?

Kendi Spotify istatistiklerinize dalmaya hazır mısınız? Dinleme istatistiklerinizi keşfetmenizi sağlayacak daha fazla işlev de dahil olmak üzere tüm kodu bulmak için GitHub depoma göz atın.

Çözüm

Spotify istatistiklerinizi resmi yayınlanmadan önce oluşturmak yalnızca eğlence unsuru eklemekle kalmaz, aynı zamanda benzersiz dinleme alışkanlıklarınıza ilişkin bilgiler de sağlar. Spotify Wrapped'ı sabırsızlıkla beklerken müzik analizi maceranıza neden bir adım önde başlamıyorsunuz?


Kişiselleştirilmiş Spotify Wrapped deneyiminize katılmaya hazır olun!