Введение в набор данных Million Songs

Построение рекомендательных систем с помощью PySpark

Jamen Long

Data Scientist at Nike

Явные и неявные оценки

Явные оценки большой палец вверх/вниз, 4 из 5 звёзд, шкала цветных точек от худшего к лучшему

Построение рекомендательных систем с помощью PySpark

Явные и неявные оценки (продолжение)

Явные оценки большой палец вверх/вниз, 4 из 5 звёзд, шкала цветных точек от худшего к лучшему

Неявные оценки большой палец вверх/вниз, 4 из 5 звёзд, шкала цветных точек от худшего к лучшему

Построение рекомендательных систем с помощью PySpark

Повторение: неявные оценки II

Явные оценки большой палец вверх/вниз, 4 из 5 звёзд, шкала цветных точек от худшего к лучшему

Неявные оценки большой палец вверх/вниз, 4 из 5 звёзд, шкала цветных точек от худшего к лучшему ссылка на white paper

Построение рекомендательных систем с помощью PySpark

Введение в набор данных Million Songs

Thierry Bertin-Mahieux, Daniel P.W. Ellis, Brian Whitman и Paul Lamere. The Million Song Dataset. В материалах 12-й Международной конференции по информационному поиску в музыке (ISMIR 2011), 2011.

Построение рекомендательных систем с помощью PySpark

Добавление нулей: исходные данные

ratings.show()
+------+------+---------+
|userId|songId|num_plays|
+------+------+---------+
|    10|    22|        5|
|    38|    99|        1|
|    38|    77|        3|
|    42|    99|        1|
+------+------+---------+
Построение рекомендательных систем с помощью PySpark

Введение в перекрёстное соединение

users = ratings.select("userId").distinct()
users.show()
+------+
|userId|
+------+
|    10|
|    38|
|    42|
+------+
songs = ratings.select("songId").distinct()
songs.show()
+------+
|songId|
+------+
|    22|
|    77|
|    99|
+------+
Построение рекомендательных систем с помощью PySpark

Результат перекрёстного соединения

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

Присоединение исходных данных об оценках

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

Заполнение нулями

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

Функция add_zeros

def add_zeros(df):
    # Extracts distinct users
    users = df.select("userId").distinct() 

    # Extracts distinct songs
    songs = df.select("songId").distinct() 

    # Joins users and songs, fills blanks with 0
    cross_join = users.crossJoin(items) \ 
                .join(df, ["userId", "songId"], "left").fillna(0)

    return cross_join
Построение рекомендательных систем с помощью PySpark

Давайте потренируемся!

Построение рекомендательных систем с помощью PySpark

Preparing Video For Download...