草庐IT

毕业设计-基于大数据的电影推荐系统-python

HaiLang_IT 2023-08-26 原文

目录

前言

课题背景和意义

实现技术思路

实现效果图样例


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯毕业设计-基于大数据的电影推荐系统

课题背景和意义

随着现代科技生产力的发展, 人们在空闲时间中逐渐开 始追求更高要求的娱乐活动, 而电影就是最为普遍的娱乐方 式之一。 不管是喜剧还是悲剧,都能勾起你纯真的眼泪;不管 是动作片还是恐怖片,都能让你的肾上腺大开大合;不管是科 幻片还是纪录片,都能让你云游古今中外。 不管是去电影院, 或是购买影碟,或是在网上观赏影片前,人们总是有选择性地 去寻找一些更符合自己喜好的、内容精致的、更受欢迎的电影 去观看。 但是,如今影片的拍摄逐渐走向高产化,佳片许多,烂 片也层出不穷,如果采用人工方法,在大量电影影片中找到自 己真正喜欢的电影是一个耗费精力的事情。 本文通过大数据挖掘技术构建了一个智能的电影推荐系 统,针对不同用户,提供多个与其过去的观影信息相似度较高 的符合该用户喜好的电影,满足用户的观影需求。 本文使用了 kaggle 网站中 TMDB 5000 Movie Dataset 的电影数据集, 主要 结合应用分类统计(Class Statistics)、样本相似度(Correlation) 分析等经典数据挖掘算法,剖析数据间的关系,从而完成电影 推荐系统的相关功能。 用户为系统提供一个电影的名称,该系 统提供与这部电影在类型、内容、受欢迎程度、年代等综合程 度最相似的五部影片。

实现技术思路

数据预处理

本文所使用的电影数据集,包含:电影类型(genres)、关键 字(keywords)、导 演(director)、演 员(actor)、发 行 公 司(company)、电影评分(IMDB)、成 本(budget)、评 分 人 数(count)、电 影 的发行年份(year)、发行国(country)、语 言(language)等 字 段, 共计 5000 多部电影详细信息。 本文的智能推荐系统主要依赖电影和电影之间的 “相似 度”(similarity)来为用户推荐电影,在计算相似度的过程中会 使用描述该电影的“关键字”(keywords)作为计算的主要因素 之一。 但是在这些关键字中有大量的低频词,会对计算过程产 生噪音影响; 关键词中还有大量的同义词, 如 “shadow”和 “dark”,同 根 词 ,如 “music”和 “musical”、 “train” 和 “training”、 “apple”和“apples”,在计算相似度应该被视为同一个词。因此, 我们使用以下的预处理方法对关键字进行了清洗。 ①本文应 用 python 的 NLTK package 合并了同义词和同根词。②本文对 频次小于五次或出现在少于三个电影的关键字进行了过滤。 数据集中有一些属性需要进行离散化处理, 如发行年份 (release date),本文应用了 EXCEL 的 YEAR()函数和ROUNDDOWN()函数以 10 年为间隔,将其分为了 1930s、1940s 一 直 到 2010s(代表 2010 年及以后)的年代制

电影推荐系统的设计

不同的人在挑选电影的时候往往有不同的选择, 但是大抵都会考虑以下几个方面。 电影的导演和演员以及制作公司 可能是观众会着重考虑的部分。 著名导演例如姜文、James Cameron,作品虽少但精品居多,他们的电影上映后可能会吸 引大量观众。 演员也是电影的一个重要载体,如 Robert Downey 这样拥有优秀的演技、 帅气外表的演员收揽了众多的狂热粉 丝,带来了票房大卖。 电影公司也在观众的选择中有着重要的 影响, 像 Marvel Studios、DC Entertainment 这类公司靠超级英 雄系列吸引了许多观众, 该系列的每一部新片上映都会快速 引起观影热潮。 我们称这部分因素为创作(cast)因素。 电影内 容、电影类型、发型年份、语言在不同程度上也是影响观众选 择电影时的因素之一,观众会优先去看符合自己口味的电影。 换句话说,一个喜欢看动作片的人,会在众多电影中选择如敢 死队、警察故事这类以动作取胜的影片;而一个人若喜欢爱情 片,泰坦尼克号这样唯美的作品将成为其首选。 我们称这部分 属性为内容(content)因素。 影片在同档期中的受欢迎程度、电 影评分、 评分人数也是决定观众是否选择这个电影的原因之 一。 我们称这部分因素为口碑(popularity)因素。 为了探究这些因素对于观众在选择电影时的影响, 本文 首先对某几个因素进行了定量分析。

电影类型

数据集中一部影片可能为多种电影类型, 本文统计了不 同类型电影的受欢迎程度。 首先,使用 EXCEL 的计数功能,统 计不同电影类型的样本数量。 统计结果显式,本数据集中主要 的电影类型有剧情片 (drama)(2297 部)、 喜 剧 片(comedy) (1722 部)、惊 悚 片(thriller)(1274 部 )、动 作 片 (action) (1154 部)、爱情片(romance)(894 部),除此之外还有冒险片(adventure)(790 部)、科幻 片(science fiction)(506 部)、动 画 片(animation)(234 部)等等。 然后,本文又使用了 EXCEL 的“分类汇 总”功能,将电影类型作为“分类字段”,将“电影评分”作为“汇 总方式”,使用“平均值”作为汇总项。 根据统计结果,受欢迎程度最高的三类影片是冒险片、动 画 片、科 幻 片;然 而,数 量 最 多 的 影 片 类 型——剧 情 片、喜 剧 片、惊悚片并不是最受欢迎的;反观,虽然奇幻片(fantasy)、推 理片(mystery)等类电影的数量并不占优势,但其受欢迎程度 依然较高。 因此,在电影市场中,并不是出现频率越高的电影 类型,就越受大众喜爱。 3.2 电影年代和电影成本 本文使用同 3.1 相似的统计方法,依据数据集,生成了从 1930~2017 年不同年代电影的平均预算以及受欢迎程度的折 线图,如图 1 所示。 根据图 1 可知,电影成本与受欢迎程度在 21 世纪前并没 有太大的关联性,而到了 21 世纪后便出现相当明显的正相关

关系。 结合实际情况分析可知, 早期的电影拍摄技术较为简 单,布景、道具也并不复杂,更多是以剧情表演展现其魅力。 因 此,影片投资金额并不会成为影响电影观感的重要影响因素。 加上 20 世纪战争偏多, 尤其 40 年代二战过后全球经济整体 倒退,娱乐方面的投资相对也低很多,所以成本都偏低。 纵观 21 世纪,随着计算机技术的蓬勃发展,观众也更爱看满屏特 效的大片, 这类电影的受欢迎程度自然上升且远超过去的作 品。 但特效的制作都需要许多的资金,换句话说,投入的资金 越多,特效的制作便越真实、酷炫,影片的观影体验越好,受欢 迎程度也会随之增长。 于是成本便和受欢迎程度不可割舍了, 也说明了成本在不同年代也体现了不同的价值.

相似度(similarity)

(1)用户给推荐系统提供一个自己喜欢的电影 j,取出电 影 j 的导演、三位最重要的演员、电影所属的各个电影类型、 各个预处理后的关键字。 (2)计算电影数据库中的每个电影和电影 j 的距离值,取 距离值最小的前 30 个电影。 在计算推荐候选电影 i 和用户所 选电影 j 的距离值 dij 时,首先我们根据 i 和 j 是否有相同的导 演、演员、制作公司、电影类型、关键 字,得到各个 a 的值。 举 例:如果 i 和 j 的导演相同,那 ai1 值为 1,否则 ai1 值值为 0;同 理其他属性的距离值 ai2,ai3,...,aik 也是这么求得。 然后使用欧几里得距离公式计算 dij,公式如下:

电影的综合质量

2 电影的综合质量(Quantity) 在得到于创作和内容上与用户所选电影 j 最相似的 Top 30 个电影之后,我们认为评判一个电影是否能带给用户最好 的享受,更取决于电影自身的优秀程度。 在本文中,我们使用 电影评分(IMDB)和打分人数(count),以及发行年代(year)作 为综合质量(Quantity)来表示进一步筛选电影,缩小范围。 首先,电影评分 IMDB 作为最具官方性的评分,其所占比 例自然最大, 我们函数中给予的影响也应最多,COUNT 所表 示的打分次数影响次之。 最后,发行年代在不同时期有着不同 价值,本文将利用高斯函数公式(3)来进行处理,用 YEAR 表 示这部分值。

其中,σ1=20,c 为所选电影 j 的发行年份。 从第一步中得到的 30 个电影中,找出 Quantity 得分最大 的 5 个电影,然后作为最终推荐给用户的电影。

 

实现效果图样例

 

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

有关毕业设计-基于大数据的电影推荐系统-python的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  5. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  6. ruby-on-rails - Rails 中的推荐引擎 - 2

    我想为我的Rails网络应用程序提供推荐功能。特别是,我想向新注册的用户推荐他可能想要关注的其他用户。Rails中是否有用于此目的的引擎/gem?如果没有,我应该从哪里开始构建它?谢谢。 最佳答案 有Coletivogemhttps://github.com/diogenes/coletivo我试了一下。在MySQL上运行。Neo4jhttp://neo4j.org真的很容易实现一个“跟随谁”。事实上,大多数展示其能力的样本都涉及“跟随谁”。快速提示-只有在JRuby上运行时,Neo4j.rb才会很酷。如果不是-使用Neograph

  7. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  8. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  9. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  10. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

随机推荐