💖💖作者:IT跃迁谷毕设展
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
Java实战项目集
微信小程序实战项目集
Python实战项目集
安卓Android实战项目集
大数据实战项目集
💕💕文末获取源码
文章目录
基于Hadoop的电影可视化推荐系统-选题背景
在信息时代,电影推荐系统已成为数字媒体消费的重要一环。电影产业的不断发展和数字化转型使我们面临着海量电影内容的挑战。观众常常感到不知所措,难以找到符合其兴趣和品味的电影。这背后的挑战是如何有效地处理和分析大规模的电影数据。因此,基于Hadoop的电影可视化推荐系统的研究变得至关重要。这个系统的目标是通过利用大数据技术和可视化工具来提供更智能、精确和个性化的电影推荐,满足观众需求。
尽管已经存在一些电影推荐系统,但它们仍然存在许多问题。传统的基于协同过滤的系统可能会受限于数据稀疏性和冷启动问题,无法为新用户提供准确的推荐。此外,这些系统通常忽略了电影元数据的潜力,如演员、导演、类型等。而大数据技术,尤其是Hadoop,具有处理和分析大规模数据的潜力,可以改变现有电影推荐系统的局限性。因此,研究基于Hadoop的电影可视化推荐系统具有迫切的必要性。
通过综合利用大数据分析和可视化技术,这个系统有望为观众提供更丰富、有趣且满足其兴趣的电影选择。此外,本课题还可以推动电影产业的数字化转型,促进更多电影制作和发行公司采用智能推荐技术,提高电影的曝光和市场份额,最终满足观众的需求,提高其竞争力。
基于大数据的电影可视化推荐系统-技术选型
大数据技术:Hadoop、Spark、Hive
开发技术:Python、Django框架、Vue、Echarts、机器学习
软件工具:Pycharm、DataGrip、Anaconda、VM虚拟机
基于大数据的电影可视化推荐系统-图片展示
基于大数据的电影可视化推荐系统-登录
基于大数据的电影可视化推荐系统-大屏
基于大数据的电影可视化推荐系统-代码展示
from pyspark.sql import SparkSession
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import CountVectorizer
import pyspark.sql.functions as F
from pyspark.mllib.feature import HashingTF
from pyspark.ml.feature import HashingTF, IDF, Tokenizer
from pyspark.sql import SparkSession,SQLContext
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from queue import Queue
spark = SparkSession \
.builder \
.appName("score_date") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
# 写入数据库时的配置文件
prop = {}
prop['user'] = 'root'
prop['password'] = 'root'
prop['driver'] = "com.mysql.jdbc.Driver"
# 读取电影数据集为dataframe
# df=pd.read_csv()
df = spark.read.format('jdbc').options(
url='jdbc:mysql://192.168.152.128',
dbtable='douban.movies_detail',
user='root',
password='root'
).load()
mid = []
for i in df.collect():
mid.append(i[14])
#将缺失值替换为unkown
df=df.fillna('unkown')
print("----------------------------------")
df.show(20,False)
# 2.将dataframe分为 电影id和电影特征 两列
df.createOrReplaceTempView("data1")
df=spark.sql("select dataID,concat_ws(' ',directors, writer, actors, style1, style2, style3, country, language,date) as FullTag from data1 where directors !='unkown' and writer != 'unkown' and actors !='unkown' ")
#分词
print("----------分词------------")
tokenizer = Tokenizer(inputCol="FullTag", outputCol="tag")
wordsData = tokenizer.transform(df)
wordsData.show()
# 单词频数计算
from pyspark.ml.feature import CountVectorizer,CountVectorizerModel
cv = CountVectorizer(inputCol="tag", outputCol="features", vocabSize=800000, minDF=1.0)
# 训练模型
model = cv.fit(wordsData)
# 测试模型
print("----------测试模型------------")
result = model.transform(wordsData)
result.show(20,False)
# idf模型计算
print("----------idf模型计算------------")
idf = IDF(inputCol="features", outputCol="features2")
idfModel = idf.fit(result)
rescaledData = idfModel.transform(result)
rescaledData.select("dataID","tag","features", "features2").show(20,False)
# LSH 局部敏感哈希
from pyspark.ml.feature import BucketedRandomProjectionLSH, MinHashLSH
train = rescaledData.select(['dataID', 'features2'])
train.show(20,False)
print("----------BucketedRandomProjectionLSH获取所有相似对------------")
# 1.BucketedRandomProjectionLSH
brp = BucketedRandomProjectionLSH(inputCol='features2', outputCol='hashes', numHashTables=4.0, bucketLength=10.0)
model = brp.fit(train)
# 欧式距离:EuclideanDistance
similar = model.approxSimilarityJoin(train,train, 16.0, distCol='EuclideanDistance')
similar.filter(similar.datasetA != similar.datasetB).show(10)
#similar.filter(similar.datasetA != similar.datasetB).filter(similar.datasetA.dataID == '25845392').show()
#2.MinHashLSH
#brp = BucketedRandomProjectionLSH(inputCol='features2', outputCol='hashes', numHashTables=4.0, bucketLength=10.0)
#model = brp.fit(train)
# 杰卡德距离:JaccardDistance 最远距离限制10.0
#similar = model.approxSimilarityJoin(train,train, 10.0, distCol='JaccardDistance ')
#similar.filter(similar.datasetA != similar.datasetB).show(10)
#存入数据库中
similar.createOrReplaceTempView("similar1")
similar2 = spark.sql("select datasetA.dataID as uid, datasetB.dataID as mid , EuclideanDistance as similar from similar1 where datasetA != datasetB ")
similar2.select("uid","mid","similar").write.jdbc("jdbc:mysql://192.168.152.128:3306/douban",'cb_likes_similar','append', prop)
基于大数据的电影可视化推荐系统-文档展示
基于大数据的电影可视化推荐系统-结语
💕💕
Java实战项目集
微信小程序实战项目集
Python实战项目集
安卓Android实战项目集
大数据实战项目集
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。