Introductie van de Million Songs Dataset

Aanbevelingssystemen bouwen met PySpark

Jamen Long

Data Scientist at Nike

Expliciet vs impliciet

Expliciete beoordelingen duim omhoog/duim omlaag, 4 van 5 sterren, schaal met gekleurde stippen van slecht naar minst slecht

Aanbevelingssystemen bouwen met PySpark

Expliciet vs impliciet (vervolg)

Expliciete beoordelingen duim omhoog/duim omlaag, 4 van 5 sterren, schaal met gekleurde stippen van slecht naar minst slecht

Impliciete beoordelingen duim omhoog/duim omlaag, 4 van 5 sterren, schaal met gekleurde stippen van slecht naar minst slecht

Aanbevelingssystemen bouwen met PySpark

Impliciet opfrissen II

Expliciete beoordelingen duim omhoog/duim omlaag, 4 van 5 sterren, schaal met gekleurde stippen van slecht naar minst slecht

Impliciete beoordelingen duim omhoog/duim omlaag, 4 van 5 sterren, schaal met gekleurde stippen van slecht naar minst slecht verwijzing naar whitepaper

Aanbevelingssystemen bouwen met PySpark

Introductie van de Million Songs Dataset

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

Aanbevelingssystemen bouwen met PySpark

Nullen toevoegen — voorbeeld

ratings.show()
+------+------+---------+
|userId|songId|num_plays|
+------+------+---------+
|    10|    22|        5|
|    38|    99|        1|
|    38|    77|        3|
|    42|    99|        1|
+------+------+---------+
Aanbevelingssystemen bouwen met PySpark

Intro cross join

users = ratings.select("userId").distinct()
users.show()
+------+
|userId|
+------+
|    10|
|    38|
|    42|
+------+
songs = ratings.select("songId").distinct()
songs.show()
+------+
|songId|
+------+
|    22|
|    77|
|    99|
+------+
Aanbevelingssystemen bouwen met PySpark

Cross join — output

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|
+------+------+
Aanbevelingssystemen bouwen met PySpark

Originele beoordelingen terugjoinen

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|
+------+------+---------+
Aanbevelingssystemen bouwen met PySpark

Opvullen met nul

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|
+------+------+---------+
Aanbevelingssystemen bouwen met PySpark

Functie om nullen toe te voegen

def add_zeros(df):
    # Haalt unieke gebruikers op
    users = df.select("userId").distinct() 

    # Haalt unieke nummers op
    songs = df.select("songId").distinct() 

    # Voegt gebruikers en nummers samen, vult leeg met 0
    cross_join = users.crossJoin(items) \ 
                .join(df, ["userId", "songId"], "left").fillna(0)

    return cross_join
Aanbevelingssystemen bouwen met PySpark

Laten we oefenen!

Aanbevelingssystemen bouwen met PySpark

Preparing Video For Download...