บางทีคุณอาจจะชอบฟังเพลงของศิลปินคนนี้ก็ได้นะ ?

jumptothehell

Cat say meaw.

Posted on April 11, 2023

บางทีคุณอาจจะชอบฟังเพลงของศิลปินคนนี้ก็ได้นะ ?

เบื่อหรือเปล่ากับการหาฟังเพลงที่ถูกใจไม่ได้? ดังนั้นเราจึงได้ใช้ A recommendation algorithm โดยอ้างอิงจากพฤติกรรมการฟังของบุคคลในการเเนะนำศิลปินที่คุณน่าจะชื่นชอบ ในกรณีนี้เนื่องจาก dataset ต้องทำการรออาจจะถึง 30 วัน จึงใช้ dataset ที่มีไปก่อน จึงทำให้ข้อมูลที่ได้ค่อนข้างคลาดเคลื่อนอย่างมาก เนื่องจากมีข้อมูลที่ไม่เพียงพอ ;-;

บทความนี้ เราจะใช้ Google Colab ในการ Run Code โดย dataset ที่ใช้มาเป็นตัวอย่างก็จะเป็นประวิติการฟังเพลงจาก Spotify โดยในข้อมูลประกอบไปด้วยประวัติการฟังเพลงตั้งเเต่วันที่ 11 เมษายน 2565 จนถึง 19 มีนาคม 2566 เป็นจำนวน 10000 เพลง ข้อมูลประกอบไปด้วย 4 columns

[1] endTime: วันที่และเวลาที่สตรีมสิ้นสุดในเขตเวลาเชิงสากล
[2] artistName : ชื่อของ "ผู้สร้าง" สำหรับเเต่ละสตรีม (เช่น ชื่อศิลปิน หากเป็นแทร็กเพลง)
[3] trackName : ชื่อรายการที่ฟัง (เช่น ชื่อแทร็กเพลง หรือชื่อวิดีโอ พอสแคสต์)
[4] msPlayed : จำนวนมิลลิวินาทีที่ใช้ฟังในเเต่ละเเทร็ก

ขั้นตอนที่ 1: นำข้อมูลเข้า df

import pandas as pd
from google.colab import files
import io

# Load the dataset into a pandas dataframe
uploaded = files.upload()
df = pd.read_json(io.BytesIO(uploaded['StreamingHistory0.json']))
Enter fullscreen mode Exit fullscreen mode

เมื่อทำกด Run จะมี Choose Files Botton ขึ้นมา ให้เราทำการเลือก File ในเครื่องเรา โดยชื่อของไฟล์ต้องตรงกับ
df = pd.read_json(io.BytesIO(uploaded['StreamingHistory0.json']))

ตัวอย่างที่ได้จากโค้ด

print(df)
Enter fullscreen mode Exit fullscreen mode

Image description

ขั้นตอนที่ 2: ทำการวิเคราะห์ข้อมูล เพื่อหาศิลปินที่คุณชื่นชอบมากที่สุด

ในโค้ดนี้เราจะการจัดกลุ่มชื่อศิลปิน เเละผลรวมมิลลิวินาทีที่ใช้ฟังเเต่ละเทร็กเข้าด้วยกัน เเล้วทำการจัดข้อมูล เพื่อค้นหาว่าศิลปินคนไหนที่เราใช้เวลาในการฟังมากที่สุด นั้นเเหละศิลปินคนโปรดของคุณ

# Group the data by artistName and sum the miliseconds played
artist_plays = df.groupby('artistName')['msPlayed'].sum().reset_index()

# Sort the data by the miliseconds played in descending order
sorted_artists = artist_plays.sort_values('msPlayed', ascending=False)

# Get the name of the artist with the most miliseconds played
favorite_artist = sorted_artists.iloc[0]['artistName']

# Print the name of the favorite artist
print("Your favorite artist is:", favorite_artist)
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างที่ได้จากโค้ด

Image description

- BONUS -
ในกรณีที่คุณสงสัยว่าคุณฟังศิลปินคนโปรดไปทั้งหมดกี่มิลวินาที คุณสามารถที่จะ...

print("Top 5 favorite artists:")
print(sorted_artists.head(5))
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างที่ได้จากโค้ด

Image description

ขั้นตอนที่ 3: Top 5 ศิลปินแนะนำ
ทำการสร้าง Pivot_table เพื่อรวมจำนวนมิลลิวินาทีที่เราใช้ในการฟังเพลง เเละทำการคำนวณความถี่สัมพัทธ์เพื่อวัดความถี่ที่เราเลือกฟังเพลงศิลปิน ซึ่งสามารถตีความว่าเราน่าเลือกฟังศิลปินคนนี้มากกว่า จากนั้นใช้ cosine_similarity เพื่อคำนวณความคล้ายคลึงจากพฤติกรรมการฟัง จากนั้นทำการ Print Top 5 ศิลปินแนะนำ

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# Create a pivot table to get the number of times each track was played by user
pivot_table = pd.pivot_table(df, values='msPlayed', index=['artistName'], aggfunc=np.sum)

# Normalize the pivot table by column to get user listening behavior
user_behavior = pivot_table.apply(lambda x: x/x.sum(), axis=1)

# Calculate similarity matrix between users based on their listening behavior
user_similarity = cosine_similarity(user_behavior)

# Get the top 5 artists similar to the user's favorite artist
fav_artist = favorite_artist

artist_index = pivot_table.index.get_loc(favorite_artist)
similar_artists = user_similarity[artist_index].argsort()[:-6:-1]

# Print the recommended artists
print("Your recommended artists:")
for i in similar_artists[1:]:
    print(pivot_table.index[i])
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างที่ได้จากโค้ด

Image description

💖 💪 🙅 🚩
jumptothehell
Cat say meaw.

Posted on April 11, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related