Introdução ao conjunto de dados MovieLens

Construindo mecanismos de recomendação com PySpark

Jamen Long

Data Scientist at Nike

Conjunto de dados MovieLens

F. Maxwell Harper e Joseph A. Konstan. 2015
The MovieLens Datasets: History and Context.
ACM Transitions on Interactive Intelligent Systems (TiiS) 5, 4, Artigo 19 (dezembro de 2015), 19 páginas. DOI=http://dx.doi.org/10.1145/2827872

Construindo mecanismos de recomendação com PySpark

Estatísticas do MovieLens

F. Maxwell Harper e Joseph A. Konstan. 2015
The MovieLens Datasets: History and Context.
ACM Transitions on Interactive Intelligent Systems (TiiS) 5, 4, Artigo 19 (dezembro de 2015), 19 páginas. DOI=http://dx.doi.org/10.1145/2827872
 
Avaliações: 20.000.000+
Usuários: 138.493
Filmes: 27.278

Construindo mecanismos de recomendação com PySpark

Explore os dados

df.show()
df.columns()
Construindo mecanismos de recomendação com PySpark

Esparsidade no MovieLens

fórmula de esparsidade

Construindo mecanismos de recomendação com PySpark

Esparsidade: numerador

# Number of ratings in matrix
numerator = ratings.count()
Construindo mecanismos de recomendação com PySpark

Esparsidade: usuários e filmes

# Distinct users and movies
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()
Construindo mecanismos de recomendação com PySpark

Esparsidade: denominador

# Number of ratings in matrix
numerator = ratings.count()

# Distinct users and movies
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()

# Number of ratings matrix could contain if no empty cells denominator = users * movies
Construindo mecanismos de recomendação com PySpark

Esparsidade

# Number of ratings in matrix
numerator = ratings.count()

# Distinct users and movies
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()

# Number of ratings matrix could contain if no empty cells
denominator = users * movies

#Calculating sparsity
sparsity = 1 - (numerator*1.0 / denominator)
print ("Sparsity: "), sparsity
Sparsity: .998
Construindo mecanismos de recomendação com PySpark

O método .distinct()

ratings.select("userId").distinct().count()
671
Construindo mecanismos de recomendação com PySpark

Método GroupBy

# Group by userId
ratings.groupBy("userId")
Construindo mecanismos de recomendação com PySpark

Método GroupBy

# Num of song plays by 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|
+------+-----+
Construindo mecanismos de recomendação com PySpark

GroupBy: mínimo

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

# Min num of song plays by userId
msd.groupBy("userId").count()
              .select(min("count")).show()
+----------+
|min(count)|
+----------+
|         1|
+----------+
Construindo mecanismos de recomendação com PySpark

GroupBy: máximo

# Max num of song plays by userId
ratings.groupBy("userId").count()
              .select(max("count")).show()
+----------+
|max(count)|
+----------+
|      1162|
+----------+
Construindo mecanismos de recomendação com PySpark

GroupBy: média

# Avg num of song plays by userId
ratings.groupBy("userId").count()
              .select(avg("count")).show()
+----------+
|avg(count)|
+----------+
| 233.34579|
+----------+
Construindo mecanismos de recomendação com PySpark

Método Filter

# Removes users with less than 20 ratings
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|
+------+-----+
Construindo mecanismos de recomendação com PySpark

Vamos praticar!

Construindo mecanismos de recomendação com PySpark

Preparing Video For Download...