Einführung in den MovieLens-Datensatz

Recommendation Engines mit PySpark erstellen

Jamen Long

Data Scientist at Nike

MovieLens-Datensatz

F. Maxwell Harper und Joseph A. Konstan. 2015
The MovieLens Datasets: History and Context.
ACM Transactions on Interactive Intelligent Systems (TiiS) 5, 4, Artikel 19 (Dezember 2015), 19 Seiten. DOI=http://dx.doi.org/10.1145/2827872

Recommendation Engines mit PySpark erstellen

MovieLens: Kennzahlen

F. Maxwell Harper und Joseph A. Konstan. 2015
The MovieLens Datasets: History and Context.
ACM Transactions on Interactive Intelligent Systems (TiiS) 5, 4, Artikel 19 (Dezember 2015), 19 Seiten. DOI=http://dx.doi.org/10.1145/2827872
 
Bewertungen: 20.000.000+
Nutzer:innen: 138.493
Filme: 27.278

Recommendation Engines mit PySpark erstellen

Daten erkunden

df.show()
df.columns()
Recommendation Engines mit PySpark erstellen

MovieLens-Sparsität

Sparsitätsformel

Recommendation Engines mit PySpark erstellen

Sparsität: Zähler

# Anzahl Bewertungen in der Matrix
numerator = ratings.count()
Recommendation Engines mit PySpark erstellen

Sparsität: Nutzer und Filme

# Unterschiedliche Nutzer und Filme
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()
Recommendation Engines mit PySpark erstellen

Sparsität: Nenner

# Anzahl Bewertungen in der Matrix
numerator = ratings.count()

# Unterschiedliche Nutzer und Filme
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()

# Anzahl möglicher Bewertungen ohne leere Zellen denominator = users * movies
Recommendation Engines mit PySpark erstellen

Sparsität

# Anzahl Bewertungen in der Matrix
numerator = ratings.count()

# Unterschiedliche Nutzer und Filme
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()

# Anzahl möglicher Bewertungen ohne leere Zellen
denominator = users * movies

# Sparsität berechnen
sparsity = 1 - (numerator*1.0 / denominator)
print ("Sparsity: "), sparsity
Sparsity: .998
Recommendation Engines mit PySpark erstellen

Die Methode .distinct()

ratings.select("userId").distinct().count()
671
Recommendation Engines mit PySpark erstellen

GroupBy-Methode

# Gruppieren nach userId
ratings.groupBy("userId")
Recommendation Engines mit PySpark erstellen

GroupBy-Methode

# Anzahl der Song-Abspielungen pro userId
ratings.groupBy("userId").count().show()
+------+-----+
|userId|count|
+------+-----+
|   148|   76|
|   243|   12|
|    31|  232|
|   137|   16|
|   251|   19|
|    85|  752|
|    65|  737|
|   255|    9|
|    53|  190|
|   133|  302|
|   296|   74|
|    78|  301|
|   108|  136|
|   155|    3|
|   193|  174|
|   101|    1|
+------+-----+
Recommendation Engines mit PySpark erstellen

GroupBy-Methode min

from pyspark.sql.functions import min, max, avg

# Minimale Anzahl an Song-Abspielungen pro userId
msd.groupBy("userId").count()
              .select(min("count")).show()
+----------+
|min(count)|
+----------+
|         1|
+----------+
Recommendation Engines mit PySpark erstellen

GroupBy-Methode max

# Maximale Anzahl an Song-Abspielungen pro userId
ratings.groupBy("userId").count()
              .select(max("count")).show()
+----------+
|max(count)|
+----------+
|      1162|
+----------+
Recommendation Engines mit PySpark erstellen

GroupBy-Methode avg

# Durchschnittliche Anzahl an Song-Abspielungen pro userId
ratings.groupBy("userId").count()
              .select(avg("count")).show()
+----------+
|avg(count)|
+----------+
| 233.34579|
+----------+
Recommendation Engines mit PySpark erstellen

Filter-Methode

# Entfernt Nutzer mit weniger als 20 Bewertungen
ratings.groupBy("userId").count().filter(col("count") >= 20).show()
+------+-----+
|userId|count|
+------+-----+
|   148|   76|
|    31|  232|
|    85|  752|
|    65|  737|
|    53|  190|
|   133|  302|
|   296|   74|
|    78|  301|
|   108|  136|
|   193|  174|
+------+-----+
Recommendation Engines mit PySpark erstellen

Lass uns üben!

Recommendation Engines mit PySpark erstellen

Preparing Video For Download...