Million Songs Dataset'e giriş

PySpark ile Öneri Motorları Oluşturma

Jamen Long

Data Scientist at Nike

Açık vs örtük

Açık Puanlar başparmak yukarı/aşağı, 5 üzerinden 4 yıldız, en kötüden en iyiye renkli nokta ölçeği

PySpark ile Öneri Motorları Oluşturma

Açık vs örtük (devam)

Açık Puanlar başparmak yukarı/aşağı, 5 üzerinden 4 yıldız, en kötüden en iyiye renkli nokta ölçeği

Örtük Puanlar başparmak yukarı/aşağı, 5 üzerinden 4 yıldız, en kötüden en iyiye renkli nokta ölçeği

PySpark ile Öneri Motorları Oluşturma

Örtük hatırlatma II

Açık Puanlar başparmak yukarı/aşağı, 5 üzerinden 4 yıldız, en kötüden en iyiye renkli nokta ölçeği

Örtük Puanlar başparmak yukarı/aşağı, 5 üzerinden 4 yıldız, en kötüden en iyiye renkli nokta ölçeği beyaz kitaba atıf

PySpark ile Öneri Motorları Oluşturma

Million Songs Dataset'e giriş

Thierry Bertin-Mahieux, Daniel P.W. Ellis, Brian Whitman ve Paul Lamere. The Million Song Dataset. 12th International Society for Music Information Retrieval Conference (SIMIR 20122) Bildirileri, 2011.

PySpark ile Öneri Motorları Oluşturma

Sıfırlar ekle örneği

ratings.show()
+------+------+---------+
|userId|songId|num_plays|
+------+------+---------+
|    10|    22|        5|
|    38|    99|        1|
|    38|    77|        3|
|    42|    99|        1|
+------+------+---------+
PySpark ile Öneri Motorları Oluşturma

Cross join giriş

users = ratings.select("userId").distinct()
users.show()
+------+
|userId|
+------+
|    10|
|    38|
|    42|
+------+
songs = ratings.select("songId").distinct()
songs.show()
+------+
|songId|
+------+
|    22|
|    77|
|    99|
+------+
PySpark ile Öneri Motorları Oluşturma

Cross join çıktısı

cross_join = users.crossJoin(songs)
cross_join.show()
+------+------+
|userId|songId|
+------+------+
|    10|    22|
|    10|    77|
|    10|    99|
|    38|    22|
|    38|    77|
|    38|    99|
|    42|    22|
|    42|    77|
|    42|    99|
+------+------+
PySpark ile Öneri Motorları Oluşturma

Orijinal puanları geri birleştirme

cross_join = users.crossJoin(songs)
                  .join(ratings, ["userId", "songId"], "left")
cross_join.show()
+------+------+---------+
|userId|songId|num_plays|
+------+------+---------+
|    10|    22|        5|
|    10|    77|     null|
|    10|    99|     null|
|    38|    22|     null|
|    38|    77|        3|
|    38|    99|        1|
|    42|    22|     null|
|    42|    77|     null|
|    42|    99|        1|
+------+------+---------+
PySpark ile Öneri Motorları Oluşturma

Boşları sıfırla doldurma

cross_join = users.crossJoin(songs)
                  .join(ratings, ["userId", "songId"], "left").fillna(0)
cross_join.show()
+------+------+---------+
|userId|songId|num_plays|
+------+------+---------+
|    10|    22|        5|
|    10|    77|        0|
|    10|    99|        0|
|    38|    22|        0|
|    38|    77|        3|
|    38|    99|        1|
|    42|    22|        0|
|    42|    77|        0|
|    42|    99|        1|
+------+------+---------+
PySpark ile Öneri Motorları Oluşturma

Sıfır ekleme fonksiyonu

def add_zeros(df):
    # Benzersiz kullanıcıları çıkarır
    users = df.select("userId").distinct() 

    # Benzersiz şarkıları çıkarır
    songs = df.select("songId").distinct() 

    # Kullanıcılar ve şarkıları birleştirir, boşlukları 0 ile doldurur
    cross_join = users.crossJoin(items) \ 
                .join(df, ["userId", "songId"], "left").fillna(0)

    return cross_join
PySpark ile Öneri Motorları Oluşturma

Hadi pratik yapalım!

PySpark ile Öneri Motorları Oluşturma

Preparing Video For Download...