MovieLens veri kümesine giriş

PySpark ile Öneri Motorları Oluşturma

Jamen Long

Data Scientist at Nike

MovieLens veri kümesi

F. Maxwell Harper ve Joseph A. Konstan. 2015
The MovieLens Datasets: History and Context.
ACM Transitions on Interactive Intelligent Systems (TiiS) 5, 4, Makale 19 (Aralık 2015), 19 sayfa. DOI=http://dx.doi.org/10.1145/2827872

PySpark ile Öneri Motorları Oluşturma

MovieLens özet istatistikler

F. Maxwell Harper ve Joseph A. Konstan. 2015
The MovieLens Datasets: History and Context.
ACM Transitions on Interactive Intelligent Systems (TiiS) 5, 4, Makale 19 (Aralık 2015), 19 sayfa. DOI=http://dx.doi.org/10.1145/2827872
 
Puanlar: 20.000.000+
Kullanıcı: 138.493
Film: 27.278

PySpark ile Öneri Motorları Oluşturma

Veriyi keşfet

df.show()
df.columns()
PySpark ile Öneri Motorları Oluşturma

MovieLens seyreklik

seyreklik formülü

PySpark ile Öneri Motorları Oluşturma

Seyreklik: pay

# Matristaki puan sayısı
numerator = ratings.count()
PySpark ile Öneri Motorları Oluşturma

Seyreklik: kullanıcı ve film

# Farklı kullanıcılar ve filmler
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()
PySpark ile Öneri Motorları Oluşturma

Seyreklik: payda

# Matristaki puan sayısı
numerator = ratings.count()

# Farklı kullanıcılar ve filmler
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()

# Boş hücre olmasaydı matrisin alabileceği puan sayısı denominator = users * movies
PySpark ile Öneri Motorları Oluşturma

Seyreklik

# Matristaki puan sayısı
numerator = ratings.count()

# Farklı kullanıcılar ve filmler
users = ratings.select("userId").distinct().count()
movies = ratings.select("movieId").distinct().count()

# Boş hücre olmasaydı matrisin alabileceği puan sayısı
denominator = users * movies

# Seyrekliği hesaplama
sparsity = 1 - (numerator*1.0 / denominator)
print ("Sparsity: "), sparsity
Sparsity: .998
PySpark ile Öneri Motorları Oluşturma

.distinct() yöntemi

ratings.select("userId").distinct().count()
671
PySpark ile Öneri Motorları Oluşturma

GroupBy yöntemi

# userId'e göre grupla
ratings.groupBy("userId")
PySpark ile Öneri Motorları Oluşturma

GroupBy yöntemi

# Kullanıcı başına şarkı çalma sayısı
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|
+------+-----+
PySpark ile Öneri Motorları Oluşturma

GroupBy yöntemi min

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

# Kullanıcı başına minimum şarkı çalma sayısı
msd.groupBy("userId").count()
              .select(min("count")).show()
+----------+
|min(count)|
+----------+
|         1|
+----------+
PySpark ile Öneri Motorları Oluşturma

GroupBy yöntemi max

# Kullanıcı başına maksimum şarkı çalma sayısı
ratings.groupBy("userId").count()
              .select(max("count")).show()
+----------+
|max(count)|
+----------+
|      1162|
+----------+
PySpark ile Öneri Motorları Oluşturma

GroupBy yöntemi avg

# Kullanıcı başına ortalama şarkı çalma sayısı
ratings.groupBy("userId").count()
              .select(avg("count")).show()
+----------+
|avg(count)|
+----------+
| 233.34579|
+----------+
PySpark ile Öneri Motorları Oluşturma

Filter yöntemi

# 20'den az puanı olan kullanıcıları çıkarır
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|
+------+-----+
PySpark ile Öneri Motorları Oluşturma

Hadi pratik yapalım!

PySpark ile Öneri Motorları Oluşturma

Preparing Video For Download...