Introduktion till Million Song Dataset

Bygg rekommendationsmotorer med PySpark

Jamen Long

Data Scientist at Nike

Explicita vs implicita betyg

Explicita betyg tummen upp/tummen ned, 4 av 5 stjärnor, skala med färgade punkter från sämst till bäst

Bygg rekommendationsmotorer med PySpark

Explicita vs implicita betyg (forts.)

Explicita betyg tummen upp/tummen ned, 4 av 5 stjärnor, skala med färgade punkter från sämst till bäst

Implicita betyg tummen upp/tummen ned, 4 av 5 stjärnor, skala med färgade punkter från sämst till bäst

Bygg rekommendationsmotorer med PySpark

Repetition av implicita betyg II

Explicita betyg tummen upp/tummen ned, 4 av 5 stjärnor, skala med färgade punkter från sämst till bäst

Implicita betyg tummen upp/tummen ned, 4 av 5 stjärnor, skala med färgade punkter från sämst till bäst referens till white paper

Bygg rekommendationsmotorer med PySpark

Introduktion till Million Song Dataset

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

Bygg rekommendationsmotorer med PySpark

Lägg till nollor – urval

ratings.show()
+------+------+---------+
|userId|songId|num_plays|
+------+------+---------+
|    10|    22|        5|
|    38|    99|        1|
|    38|    77|        3|
|    42|    99|        1|
+------+------+---------+
Bygg rekommendationsmotorer med PySpark

Introduktion till korskoppling

users = ratings.select("userId").distinct()
users.show()
+------+
|userId|
+------+
|    10|
|    38|
|    42|
+------+
songs = ratings.select("songId").distinct()
songs.show()
+------+
|songId|
+------+
|    22|
|    77|
|    99|
+------+
Bygg rekommendationsmotorer med PySpark

Resultat av korskoppling

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|
+------+------+
Bygg rekommendationsmotorer med PySpark

Koppla tillbaka ursprungliga betygsdata

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|
+------+------+---------+
Bygg rekommendationsmotorer med PySpark

Fyll i med nollor

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|
+------+------+---------+
Bygg rekommendationsmotorer med PySpark

Funktionen 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
Bygg rekommendationsmotorer med PySpark

Nu kör vi en övning!

Bygg rekommendationsmotorer med PySpark

Preparing Video For Download...