paint-brush
Spotify Wrapped Hack: Tạo số liệu thống kê của riêng bạn trước khi phát hành chính thức từ tác giả@lukaskrimphove
10,148 lượt đọc
10,148 lượt đọc

Spotify Wrapped Hack: Tạo số liệu thống kê của riêng bạn trước khi phát hành chính thức

từ tác giả Lukas Krimphove5m2023/11/27
Read on Terminal Reader

dài quá đọc không nổi

Đây là một cách để xem trước số liệu thống kê Spotify của bạn trước khi Spotify Wrapped phát hành chính thức. Tìm hiểu cách sử dụng lịch sử phát trực tuyến của bạn để khám phá các bài hát, nghệ sĩ và album mà bạn đã nghe nhiều nhất.
featured image - Spotify Wrapped Hack: Tạo số liệu thống kê của riêng bạn trước khi phát hành chính thức
Lukas Krimphove HackerNoon profile picture
0-item

Giới thiệu

Hàng năm, người dùng Spotify háo hức chờ đợi sự ra mắt của Spotify Wrapped, một bản đánh giá được cá nhân hóa trong năm giới thiệu các bài hát, nghệ sĩ và thể loại được nghe nhiều nhất của họ. Điều gì sẽ xảy ra nếu tôi nói với bạn rằng có một cách để xem trước số liệu thống kê Spotify của bạn trước khi phát hành chính thức?


Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách hack Spotify Wrapped cho phép bạn tạo số liệu thống kê được cá nhân hóa của riêng mình bằng cách sử dụng dữ liệu phát trực tuyến Spotify. Bằng cách này, bạn sẽ không cần phải đợi Spotify Wrapped và bạn cũng có thể tạo các số liệu thống kê mà Spotify sẽ không hiển thị cho bạn.

Điều kiện tiên quyết

Tương tự như một trong những dự án trước đây của tôi , chúng tôi sẽ sử dụng Jupyter Notebook cho dự án này. Đó là một công cụ tuyệt vời để thử nghiệm và làm việc với dữ liệu.


Nếu bạn chưa cài đặt Jupyter Notebook, hãy làm theo hướng dẫn trên của họ. Sau khi cài đặt, bạn có thể tạo Notebook Jupyter mới và sẵn sàng đi sâu vào số liệu thống kê Spotify của mình.

Thu thập và làm sạch dữ liệu

Để bắt đầu, bạn cần yêu cầu dữ liệu phát trực tuyến Spotify của mình. Bạn có thể thực hiện việc này (đảm bảo bạn yêu cầu “Lịch sử phát trực tuyến mở rộng”). Sẽ mất một thời gian để Spotify gửi dữ liệu của bạn cho bạn. Chỉ yêu cầu “Dữ liệu tài khoản” sẽ nhanh hơn và cũng sẽ cung cấp cho bạn lịch sử phát trực tuyến của năm ngoái. Tuy nhiên, nó ít chi tiết hơn và bạn sẽ phải điều chỉnh mã.


Khi bạn có dữ liệu, chúng tôi có thể nhập dữ liệu đó. Bạn sẽ nhận được nhiều tệp JSON. Mỗi tệp bao gồm một mảng đối tượng chứa thông tin về một bài hát hoặc tập podcast đã phát:
 { "ts": "2024-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 }
Điều này cho phép bạn không chỉ biết bạn đã nghe bài hát khi nào và trên thiết bị nào mà còn cung cấp cho bạn thông tin như liệu bạn có bỏ qua bài hát đó hay không và khi nào.


Chúng tôi sẽ chỉ hợp nhất tất cả chúng vào một khung dữ liệu Pandas duy nhất:
 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)


Sau đó, chúng tôi sẽ tinh chỉnh nó bằng cách xóa podcast, lọc thời lượng phát ngắn và chuyển đổi dấu thời gian sang định dạng dễ đọc hơn:
 # 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()

Phân tích và trực quan hóa số liệu thống kê Spotify của bạn

Những bài hát hay nhất mọi thời đại

Hãy bắt đầu mọi thứ bằng cách khám phá những bài hát yêu thích nhất mọi thời đại của bạn. Chúng tôi có thể dễ dàng tiết lộ các bản nhạc hàng đầu của mình dựa trên lịch sử phát trực tuyến của bạ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)

Bài hát hàng đầu năm 2023

Tò mò về xu hướng âm nhạc năm nay? Chúng ta có thể sử dụng chức năng này để tiết lộ những bài hát hàng đầu của năm 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) 

Bài hát hàng đầu của tôi 2023

Tương tác với Widget

Điều đó đã hoạt động rất tốt rồi, nhưng tại sao lại phải chấp nhận điều đó? Chúng ta có thể sử dụng các tiện ích tương tác để tùy chỉnh các truy vấn bằng cách sử dụng các thành phần giao diện người dùng. Điều này cho phép chúng tôi dễ dàng tìm ra các bài hát hàng đầu của bạn trong bất kỳ khoảng thời gian cụ thể nà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) 

Những bài hát hay nhất của tôi trong sáu tháng qua

Phân phối theo thời gian và ngày trong tuần

Bây giờ chúng ta đã biết những bài hát hàng đầu, nghệ sĩ hàng đầu và album hàng đầu, chúng ta có thể tiến xa hơn một chút. Ví dụ: khám phá những ngày trong tuần chúng tôi hoạt động tích cực nhất trên 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() 

Phân phối ngày trong tuần của tôi

Cách tự làm

Bạn đã sẵn sàng đi sâu vào số liệu thống kê Spotify của riêng mình chưa? Hãy xem của tôi để tìm tất cả mã, bao gồm nhiều chức năng hơn nữa để khám phá số liệu thống kê về khả năng nghe của bạn.

Phần kết luận

Việc tạo số liệu thống kê Spotify trước khi phát hành chính thức không chỉ mang lại yếu tố thú vị mà còn cung cấp thông tin chi tiết về thói quen nghe độc đáo của bạn. Khi chúng tôi háo hức mong đợi Spotify Wrapped, tại sao bạn không bắt đầu cuộc phiêu lưu phân tích âm nhạc của mình?


Hãy sẵn sàng tận hưởng trải nghiệm Spotify Wrapped được cá nhân hóa của bạn!
바카라사이트 바카라사이트 온라인바카라