প্রতি বছর, Spotify ব্যবহারকারীরা সাগ্রহে Spotify Wrapped-এর প্রকাশের জন্য অপেক্ষা করে, একটি ব্যক্তিগতকৃত বছরের-পর্যালোচনা যা তাদের সবচেয়ে বেশি শোনা গান, শিল্পী এবং ঘরানার প্রদর্শন করে। যদি আমি আপনাকে বলি যে অফিসিয়াল রিলিজের আগে আপনার Spotify পরিসংখ্যানে এক ঝলক দেখার একটি উপায় আছে?
এই নির্দেশিকায়, আমি আপনাকে একটি স্পটিফাই র্যাপড হ্যাকের মাধ্যমে নিয়ে যাবো যা আপনাকে আপনার স্পটিফাই স্ট্রিমিং ডেটা ব্যবহার করে নিজের ব্যক্তিগতকৃত পরিসংখ্যান তৈরি করতে দেয়। এইভাবে আপনাকে Spotify Wrapped এর জন্য অপেক্ষা করতে হবে না এবং আপনি এমন পরিসংখ্যানও তৈরি করতে পারবেন যা Spotify আপনাকে দেখাবে না।
আমার আগের একটি প্রকল্পের মতো, আমরা এটির জন্য জুপিটার নোটবুক ব্যবহার করব। এটি পরীক্ষা করার এবং ডেটা নিয়ে কাজ করার জন্য একটি দুর্দান্ত সরঞ্জাম।
আপনি যদি এখনও জুপিটার নোটবুক ইনস্টল না করে থাকেন তবে তাদের অফিসিয়াল ওয়েবসাইটের নির্দেশাবলী অনুসরণ করুন। একবার ইনস্টল হয়ে গেলে, আপনি একটি নতুন জুপিটার নোটবুক তৈরি করতে পারেন এবং আপনার স্পটিফাই পরিসংখ্যানে ডুব দেওয়ার জন্য প্রস্তুত হতে পারেন।
শুরু করতে, আপনাকে আপনার Spotify স্ট্রিমিং ডেটার জন্য অনুরোধ করতে হবে। আপনি এখানে এটি করতে পারেন (নিশ্চিত করুন যে আপনি "বর্ধিত স্ট্রিমিং ইতিহাস" অনুরোধ করেছেন)। আপনাকে আপনার ডেটা পাঠাতে Spotify-এর কিছু সময় লাগবে। শুধুমাত্র "অ্যাকাউন্ট ডেটা" অনুরোধ করা দ্রুততর হবে এবং আপনাকে গত বছরের স্ট্রিমিং ইতিহাসও দেবে। যাইহোক, এটি কম বিস্তারিত এবং আপনাকে কোডটি মানিয়ে নিতে হবে।
একবার আপনার কাছে ডেটা থাকলে, আমরা এটি আমদানি করতে পারি। আপনি একাধিক JSON ফাইল পাবেন। প্রতিটি ফাইলে একটি বাজানো গান বা পডকাস্ট পর্বের তথ্য সম্বলিত অবজেক্টের একটি অ্যারে থাকে:
{ "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 }
এটি আপনাকে শুধুমাত্র কখন এবং কোন ডিভাইসে আপনি একটি গান শুনেছেন তা খুঁজে বের করার অনুমতি দেয় না তবে আপনি এটি কখন এবং কখন এড়িয়ে গেছেন তার মতো তথ্যও দেয়৷
আমরা কেবল একটি একক পান্ডাস ডেটা ফ্রেমে তাদের সকলকে একত্রিত করব:
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)
পরে, আমরা পডকাস্টগুলি সরিয়ে, ছোট খেলার সময়কাল ফিল্টার করে এবং টাইমস্ট্যাম্পগুলিকে আরও পাঠযোগ্য বিন্যাসে রূপান্তর করে এটিকে স্যানিটাইজ করব:
# 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()
আসুন আপনার সর্বকালের প্রিয় গানগুলি অন্বেষণ করে জিনিসগুলি শুরু করি৷ আপনার স্ট্রিমিং ইতিহাসের উপর ভিত্তি করে আমরা সহজেই আমাদের সেরা ট্র্যাকগুলি উন্মোচন করতে পারি:
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 সালের সেরা গানগুলি প্রকাশ করতে আমরা এই ফাংশনটি ব্যবহার করতে পারি:
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)
যে ইতিমধ্যেই খুব ভাল কাজ করে, কিন্তু কেন যে জন্য নিষ্পত্তি? আমরা UI উপাদান ব্যবহার করে ক্যোয়ারী কাস্টমাইজ করতে ইন্টারেক্টিভ উইজেট ব্যবহার করতে পারি। এটি আমাদের যেকোনো নির্দিষ্ট সময়সীমার মধ্যে অনায়াসে আপনার সেরা গানগুলি খুঁজে বের করতে দেয়:
@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)
এখন যেহেতু আমরা আমাদের সেরা গান, সেরা শিল্পী এবং সেরা অ্যালবামগুলি জানি, আমরা একটু এগিয়ে যেতে পারি৷ উদাহরণস্বরূপ, সপ্তাহের কোন দিনগুলি আমরা 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()
আপনার নিজস্ব Spotify পরিসংখ্যানে ডুব দিতে প্রস্তুত? আপনার শোনার পরিসংখ্যান অন্বেষণ করার জন্য আরও ফাংশন সহ সমস্ত কোড খুঁজে পেতে আমার GitHub সংগ্রহস্থলটি দেখুন।
অফিসিয়াল রিলিজের আগে আপনার Spotify পরিসংখ্যান তৈরি করা শুধুমাত্র মজার উপাদান যোগ করে না বরং আপনার অনন্য শোনার অভ্যাসের অন্তর্দৃষ্টিও প্রদান করে। আমরা যেমন আগ্রহের সাথে স্পটিফাই র্যাপডের প্রত্যাশা করছি, কেন আপনার সঙ্গীত বিশ্লেষণের অ্যাডভেঞ্চার শুরু করবেন না?
আপনার ব্যক্তিগতকৃত স্পটিফাই র্যাপড অভিজ্ঞতার জন্য প্রস্তুত হন!