您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

5、电影推荐系统

实验资源

u.user
u.item
u.data

实验环境

VMware Workstation
Ubuntu 16.04
Jupyter Notebook
Pyspark

实验内容

本实验使用其中三个文件,用户信息、影片信息、评分数据

用户信息 (u.user)

用户id年龄性别职业邮政编码

影片信息(u.item)

影片id影片名称发行日期链接other

评分数据(u.data)

用户id影片id评分值时间戳(UTC)

根据读入的三个文件,利用协同过滤算法,向用户推荐电影 。

实验步骤

1、读取u.user,生成DataFrame,并创建临时表

#读取用户数据
user_df=spark.read.text('/home/test/u.user') 
user_df.show(10)
#为用户数据添加 schema
from pyspark import Row
user_rdd=user_df.rdd.map(lambda x:x[0].split('|')).map(lambda x:Row(id=x[0],age=x[1],sex=x[2],job=x[3],code=x[4]))
user_rdd.take(5)
#创建用户 dataframe
user_df=spark.createDataFrame(user_rdd)
#注册临时表
user_df.registerTempTable("user")
spark.sql('select id,age,sex,job,code from user').show()

在这里插入图片描述

2、读取u.data,生成DataFrame,并创建临时表

#读取评分数据
rating_df=spark.read.text('/home/test/u.data') 
rating_df.show(5)
#为评分数据添加 schema
rating_rdd=rating_df.rdd.map(lambda x:x[0].split()).map(lambda x:Row(user_id=x[0],film_id=x[1],rating=x[2],time=x[3]))
rating_rdd.take(5)
#创建评分 dataframe 
rating_df=spark.createDataFrame(rating_rdd)
#注册评分临时表 
rating_df.registerTempTable('rating')
spark.sql("select user_id,film_id,rating,time from rating").show()

在这里插入图片描述

3、读取u.item,生成DataFrame,并创建临时表

#读取电影信息 
film_df=spark.read.text('/home/test/u.item') 
film_df.show(5)
#为电影数据添加 schema 
film_rdd=film_df.rdd.map(lambda x:x[0].split('|')).map(lambda x:Row(id=x[0],title=x[1],post_time=x[2],url=x[4])) 
film_rdd.take(5)
#创建电影 dataframe 
film_df=spark.createDataFrame(film_rdd)
#注册电影临时表 
film_df.registerTempTable('film') 
spark.sql('select * from film').show()

在这里插入图片描述

4、利用协同过滤算法进行电影推荐

#导入 Spark 机器学习包:协同过滤算法
from pyspark.mllib.recommendation import ALS
#ALS.trainImplicit中第一个参数RDD是固定格式(用户编号,电影编号,评分值)
rdd=rating_rdd.map(lambda x:(x[3],x[0],x[1]))
rdd.take(5)
#训练模型
model=ALS.train(rdd,10,10,0.01)
#使用模型进行推荐,参数为用户 id,推荐个数
user_film=model.recommendProducts(112,3)
print(user_film)

在这里插入图片描述

#显示推荐电影名称
for film in user_film:
    spark.sql("select id,title,post_time,url from film where id = "+str(film[1])).show()

在这里插入图片描述

#查看用户看过的电影
spark.sql("select a.user_id,b.title from rating a,film b where a.film_id=b.id and a.user_id=112").show()
#查看用户看过的电影
spark.sql("select a.user_id,b.title from rating a,film b where a.film_id=b.id and a.user_id=112").show()

在这里插入图片描述


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进