当前位置:   article > 正文

大数据毕业设计Python+Vue.js+Flask+Scrapy电影大数据分析 电影推荐系统 电影爬虫可视化 电影数据分析 协同过滤算法 计算机毕业设计 Django 知识图谱 机器学习 深度学习_数仓电影分析

数仓电影分析

开发技术
协同过滤算法、机器学习、vue.js、echarts、Flask、Python、MySQL
创新点
协同过滤推荐算法、爬虫、数据可视化
补充说明
两种Python协同过滤推荐算法集成 (ItemCF推荐算法 和 UserCF 推荐算法) 2.专业美工整体设计的细腻的酷黑主题,前后端分离一体化系统(爬虫→MySQL→Flask→Vue);
实现影片库搜索,多种Echarts图形分析、jieba分析;
完全移动端自适应,自动可以适配H5移动端;
实现的分析图:交互式时间轴、世界地图、词云、散点图、多种折线图、面积图、大数据图、动画柱状图、饼图、水滴图等。

题  目

基于Python和Spark的电影推荐系统设计与实现

学    院

传媒技术学院

专业班级

大数据B2002班

姓    名

刘旭

学    号

20403030234

指导教师

张雨昂

同组姓名

二〇二三年十二月

研究目标和解决的主要问题/背景与意义

研究目标:设计并实现一个基于Python和Spark的电影推荐系统。

背景:随着互联网的飞速发展,人们对于电影的数量需求越来越大。要怎么样依据用户的个人喜好,和历史观看以及搜索偏向,来向用户推荐符合他们要求的电影是当前的热点问题。但是,普通的推荐系统普遍面临着数据的低密度性,复位启动等通病。这类型的通病限制的推荐系统对用户习惯的精准把控,会影响系统的推荐精确度和效果。

意义:可以提高系统推荐的精准度的效率

国内外同类研究 /设计/ 创作的现状

在国内,一些互联网公司如腾讯、阿里巴巴、网易等,都在推荐系统方面进行了深入研究和实践。其中,腾讯的推荐系统在国内处于领先地位,其基于Python和Spark的推荐算法已经得到了广泛应用。此外,国内的一些研究机构和高校也在推荐系统方面进行了一些研究和探索。

在国外,一些大型互联网公司如Netflix、Amazon、YouTube等,都在推荐系统方面进行了大量投入和实践。其中,Netflix的推荐算法在全球范围内处于领先地位,其基于Python和Spark的推荐算法已经得到了广泛应用。此外,一些开源的推荐系统框架和库如TensorFlow、Scikit-Learn等,也为推荐系统的设计和实现提供了便利的工具和算法。

构思与(研究)方法

1.数据采集和处理:首先需要采集和处理电影推荐系统的相关数据,包括用户行为数据、电影元数据等。可以采用爬虫技术、数据交换等方式获取数据,并使用Python和Spark进行数据清洗、预处理和特征提取等操作。

2.模型选择和训练:根据采集到的数据,选择适合的推荐算法进行模型训练。可以采用传统的协同过滤算法、基于内容的推荐算法,也可以采用深度学习算法如神经网络等进行模型训练。同时,需要考虑如何优化模型性能,提高推荐准确度和精度。

3.分布式计算:由于电影推荐系统的数据量通常较大,需要进行分布式计算以提高计算效率和性能。可以使用Spark的分布式计算框架进行数据处理和模型训练,实现高效的并行计算。

4.用户画像和行为分析:通过对用户行为数据的分析,建立用户画像,了解用户兴趣和偏好,为推荐算法提供参考。可以采用聚类分析、关联规则等方法进行用户画像和行为分析。

5.推荐结果展示:将推荐结果以一定的方式展示给用户,包括电影列表、评分预测等。可以考虑采用可视化技术如图表、推荐理由等方式提高用户体验。

6.系统评估和优化:根据实际应用场景和用户反馈,对电影推荐系统进行评估和优化。可以采用准确率、召回率等指标对推荐算法进行评估,并通过调整模型参数、优化数据处理流程等方式对系统进行优化。

模块:

1.用户管理模块:这个模块负责处理用户信息的注册、登陆、退出以及用户权限的管理。

2.电影信息库模块:这个模块负责管理电影的基本信息,例如电影名称、导演、演员、类型等。

3.推荐模块:这是系统的核心模块,根据用户的行为和属性,利用推荐算法生成个性化的电影推荐列表。

4.搜索模块:用户可以通过关键词搜索电影,并查看搜索结果。

5.评论模块:用户可以对电影进行评论和评分。

6.统计模块:这个模块负责收集和分析系统的使用数据,例如用户的活跃度、电影的受欢迎程度等,用于优化推荐算法和提高系统性能。

7.通知模块:根据用户的观影历史和偏好,定期向用户推送个性化的电影推荐通知。

8.界面设计模块:负责系统的界面设计,提供友好和易于使用的用户界面。

技术要求/ 难点、关键及创新点

技术要求:

Python语言技能:熟悉Python语言的基本语法和常用库,如NumPy、Pandas等。

Spark使用技能:熟悉Apache Spark的基本操作和API,能够使用Spark进行大规模数据的处理和分析。

机器学习技能:了解并能够应用基本的机器学习算法,如协同过滤、内容过滤等。

数据挖掘技能:能够应用数据挖掘技术,如关联规则、聚类等,对用户行为和电影数据进行深入分析。

数据库和SQL技能:熟悉如何使用关系型数据库和SQL语言进行数据管理。

Web开发技能:了解并能够应用基本的Web开发技术,如HTML、CSS、JavaScript等,进行界面设计。

难点:

大规模数据处理:电影推荐系统需要处理大量的用户行为数据和电影数据,如何在保证性能的前提下处理这些数据是一个挑战。

个性化推荐算法:如何设计一个有效的个性化推荐算法,根据用户的行为和偏好生成个性化的电影推荐列表,是一个难题。

用户行为分析:如何从大量的用户行为数据中提取有用的信息,如用户的兴趣爱好、观影习惯等,需要深入的数据分析和挖掘。

界面设计:如何设计一个友好、易用的界面,让用户能够方便地进行电影搜索、评论和查看推荐列表,也是一个挑战。

关键点:

数据预处理:正确地收集和处理用户行为数据和电影数据是构建电影推荐系统的关键。

算法选择:选择适合的电影推荐算法,如协同过滤、内容过滤等,能够大大提高推荐系统的性能。

参数调优:对于选定的推荐算法,需要进行参数调优,以提高推荐的准确性和多样性。

实时更新:为了提供准确的个性化推荐,系统需要能够实时更新用户行为数据和电影数据。

可扩展性:系统需要能够处理日益增长的用户和数据,因此需要设计可扩展的系统架构。

创新点:

混合推荐模型:结合多种推荐算法,如协同过滤、内容过滤、关联规则等,以提高推荐的准确性和多样性。

深度学习模型的应用:使用深度学习模型,如神经网络或卷积神经网络,对用户行为和电影内容进行更深入的分析,以提高推荐的准确性。

用户反馈机制:根据用户的反馈,不断调整和优化推荐算法,提高用户满意度。

进度安排 / 实施计划、进度、论文大纲

(一)进度安排/实施计划

2023年11月:毕设选题汇总、审核、完成开题报告。

2023年12月:开题答辩。

2024年1月:完成毕业设计作品。

20242-4月:完成毕业设计报告并通过知网查重。

2023年5月:完成毕展和毕业设计答辩。

  (二) 论文大纲:

1.引言

介绍项目的背景和意义* 描述项目的目标和需求

2.相关工作和文献综述

介绍相关的研究工作和已有的成果* 阐述本项目的创新点和贡献

3.数据收集和处理

描述数据来源和收集过程* 介绍数据清洗和预处理的方法和技术

4.特征提取和选择

描述电影特征和用户特征的提取方法* 介绍特征选择的方法和算法

5.模型设计和实现

描述选择的推荐算法和模型设计思路* 详细介绍模型的实现过程、参数设置和优化方法等   6.系统集成和测试结果分

参考作品与文献

核心算法代码分享如下:

  1. package com.sql
  2. import org.apache.spark.sql.SparkSession
  3. import org.apache.spark.sql.types._
  4. import org.junit.Test
  5. import java.util.Properties
  6. class MoocSpark2024_FixBug {
  7. val spark = SparkSession.builder()
  8. .master("local[6]")
  9. .appName("在线教育课程数据实时计算V1.0")
  10. .getOrCreate()
  11. //课程数仓CSV 模式
  12. val ods_courses_Schema = StructType(
  13. List(
  14. StructField("kw", StringType),
  15. StructField("cid", StringType),
  16. StructField("url", StringType),
  17. StructField("title",StringType),
  18. StructField("img", StringType),
  19. StructField("tag", StringType),
  20. StructField("school",StringType),
  21. StructField("teacher", StringType),
  22. StructField("mans", IntegerType),
  23. StructField("brief", StringType),
  24. StructField("status", StringType),
  25. StructField("price", StringType),
  26. StructField("chapters", StringType),
  27. StructField("comments_score", FloatType),
  28. StructField("comments", StringType)
  29. )
  30. )
  31. val ods_courses_Df = spark.read.option("header", "false").schema(ods_courses_Schema).csv("hdfs://192.168.227.166:9000/mooc2024/ods_courses/edu_course.csv")
  32. //网评数仓CSV 模式
  33. val ods_comments_Schema = StructType(
  34. List(
  35. StructField("kw", StringType),
  36. StructField("cid", StringType),
  37. StructField("title", StringType),
  38. StructField("nickname",StringType),
  39. StructField("ctime", StringType),
  40. StructField("csv_txt", StringType),
  41. StructField("ke",IntegerType),
  42. StructField("star", IntegerType),
  43. StructField("url2", StringType),
  44. StructField("sentiments", FloatType),
  45. StructField("province", StringType)
  46. )
  47. )
  48. val ods_comments_Df = spark.read.option("header", "false").schema(ods_comments_Schema).csv("hdfs://192.168.227.166:9000/mooc2024/ods_comments/edu_comments.csv")
  49. @Test
  50. def init(): Unit = {
  51. //school_province_score_Df.show()
  52. //ods_courses_Df.show()
  53. ods_comments_Df.show()
  54. //school_special_score_Df.show()
  55. //school_Df.show()
  56. //ruanke_rank_Df.show()
  57. //qs_world_Df.show()
  58. }
  59. // ----剩余使用spark_sql完成
  60. // ---指标8:课程特色占比
  61. @Test
  62. def tables08(): Unit = {
  63. ods_courses_Df.createOrReplaceTempView("ods_courses")
  64. val df2 = spark.sql(
  65. """
  66. select tag ,count(1) num
  67. from ods_courses
  68. group by tag
  69. """)
  70. df2
  71. // .show(50)
  72. .coalesce(1)
  73. .write
  74. .mode("overwrite")
  75. .option("driver", "com.mysql.cj.jdbc.Driver")
  76. .option("user", "root")
  77. .option("password", "123456")
  78. .jdbc(
  79. "jdbc:mysql://bigdata:3306/hive_mooc2024?useSSL=false",
  80. "table08",
  81. new Properties()
  82. )
  83. }
  84. // ---指标9:网络水军词云预警(黑名单)
  85. @Test
  86. def tables09(): Unit = {
  87. ods_comments_Df.createOrReplaceTempView("ods_comments")
  88. val df2 = spark.sql(
  89. """
  90. select nickname,count(1) num
  91. from ods_comments
  92. where sentiments <0.5
  93. group by nickname
  94. order by num desc
  95. limit 20
  96. """)
  97. df2
  98. // .show(50)
  99. .coalesce(1)
  100. .write
  101. .mode("overwrite")
  102. .option("driver", "com.mysql.cj.jdbc.Driver")
  103. .option("user", "root")
  104. .option("password", "123456")
  105. .jdbc(
  106. "jdbc:mysql://bigdata:3306/hive_mooc2024?useSSL=false",
  107. "table09",
  108. new Properties()
  109. )
  110. }
  111. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/885911
推荐阅读
相关标签
  

闽ICP备14008679号