Introducción al conjunto de datos MovieLens

Creación de motores de recomendación con PySpark

Jamen Long

Data Scientist at Nike

Conjunto de datos MovieLens

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

Creación de motores de recomendación con PySpark

Estadísticas de MovieLens

F. Maxwell Harper y Joseph A. Konstan. 2015
The MovieLens Datasets: History and Context.
ACM Transitions on Interactive Intelligent Systems (TiiS) 5, 4, Artículo 19 (diciembre de 2015), 19 páginas. DOI=http://dx.doi.org/10.1145/2827872
 
Valoraciones: 20.000.000+
Usuarios: 138.493
Películas: 27.278

Creación de motores de recomendación con PySpark

Explora los datos

df.show()
df.columns()
Creación de motores de recomendación con PySpark

Dispersión en MovieLens

fórmula de dispersión

Creación de motores de recomendación con PySpark

Dispersión: numerador

# Number of ratings in matrix
numerator = ratings.count()
Creación de motores de recomendación con PySpark

Dispersión: usuarios y películas

# Distinct users and movies
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()
Creación de motores de recomendación con PySpark

Dispersión: 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
Creación de motores de recomendación con PySpark

Dispersión

# 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
Creación de motores de recomendación con PySpark

El método .distinct()

ratings.select("userId").distinct().count()
671
Creación de motores de recomendación con PySpark

Método GroupBy

# Group by userId
ratings.groupBy("userId")
Creación de motores de recomendación con 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|
+------+-----+
Creación de motores de recomendación con PySpark

Método GroupBy min

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|
+----------+
Creación de motores de recomendación con PySpark

Método GroupBy max

# Max num of song plays by userId
ratings.groupBy("userId").count()
              .select(max("count")).show()
+----------+
|max(count)|
+----------+
|      1162|
+----------+
Creación de motores de recomendación con PySpark

Método GroupBy avg

# Avg num of song plays by userId
ratings.groupBy("userId").count()
              .select(avg("count")).show()
+----------+
|avg(count)|
+----------+
| 233.34579|
+----------+
Creación de motores de recomendación con 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|
+------+-----+
Creación de motores de recomendación con PySpark

¡Vamos a practicar!

Creación de motores de recomendación con PySpark

Preparing Video For Download...