1 课题分析
1.1 课题背景
在大数据化和互联网+的今天,用户很难清楚自己到底需要什么。然而推荐系统的出现就极大改变了这种尴尬的情况,推荐系统改变了人们的生活方式,它可以根据设计的算法从用户的历史数据中得到用户现阶段可能想要的东西,从而使用户在浩瀚的数据中找到他们想要的,所以推荐系统会给用户带来很好的用户体验。
随着社会的不断发展,人们的生活水平显著提高,娱乐方式也多种多样。看电影目前是一种很受人们喜爱的娱乐方式。基于用户的协同过滤算法的电影推荐能根据用户的行为,在成千上万的电影中给用户制定个性化推荐电影表单。
基于用户的协同过滤推荐系统的基本原则是分析用户与用户之间的兴趣相似的关系。然后以物以类聚,人以群分的思想,系统会认为用户可能喜爱看的电影,是与他有较高相似度的人认为好看的电影。然而,这种情况会出现因为某个与他相似度最高的用户来决定推荐什么电影给用户的现象,这种现象只使用了一个与用户相似度最高的人来推荐相关电影,也即单点对结果的影响较大,所以这种推荐是片面的。因此,我们对该算法进行了改进,我们把所有的用户对电影的评分给予相关权重,然后对电影进行综合评分,这样就消除了因为某个单点而影响推荐结果。
如果关于用户对电影评级的信息越多,则推荐准确度将越高,也即看的越多,推荐效果越好。
当今时代,我们的生活方方面面都有推荐系统的身影,推荐系统正在逐渐代替传统的推荐引擎,甚至改变了人们的相关决策。智能推荐可以从海量的数据中直接提供给使用者想要的结果。
1.2 题目描述
本项目是针对于市场电影数据进行分析,然后得出结果,并根据用户喜好进行推荐。主要以下两个模块。
1.2.1 电影统计排名模块
1、根据提供的源数据,然后先利用mapreduce进行分组、求平均值、排序三个步骤,得出用户需要的电影排名数据。
2、利用pandas将mapreduce的分组、求平均值、排序进行实现,并对相关量之间的关系进行可视化展示。
1.2.2 电影推荐模块
1、使用mapreduce利用协同过滤算法,计算出用户与用户之间的相似度。此过程需要五步,对电影ID进行分组、求用户与用户之间的相似度、对用户ID进行分组、求用户的推荐评分、对推荐评分进行排序。
2、第一步可以直接使用pandas进行分组,模拟mapreduce的实现过程,并对相关量进行可视化展示,第二步是需要用mapreduce生成的用户与用户之间相似度的数据,然后进行数据清洗、预处理等操作,最后将结果直观地展示给用户,必要时可以进行可视化展示,第三步与第一步类似处理,第四步是将上两步的结果进行汇总,然后进行数据清洗等操作,获得用户需要的数据集。第五步排序就可以直接利用pandas进行,得到结果可视化展示给用户。
1.3 开发语言及开发环境
1.3.1 Java简介
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。
1.3.2 python简介
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
1.3.3 MapReduce简介
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
1.3.4 Pandas库简介
pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
2 流程分析
2.1 系统总体结构设计
1、电影总体排名系统总体架构图如图2.1和2.2所示:
图2.1 mapreduce处理电影排名总体架构图
图2.2 pandas处理电影排名总体架构图
2、电影总体推荐系统总体架构图如图2.3和2.4所示:
图2.3 mapreduce处理电影推荐总体架构图
图2.4 pandas处理电影推荐总体架构图
2.2 系统功能设计
本课程设计采用HDFS、MapRduce、以及协同过滤的相关函数、pandas预处理与可视化等相关技术实现了电影推荐和排名系统。功能比较简单,主要是实现推荐算法,没有设计前端页面,但是后台使用的推荐算法经典且严谨,借鉴了相关成功的案例,结合实际情况设计出了推荐效果较为理想的电影推荐系统。
本课程设计主要实现了两个功能模块:电影排名模块,个性化电影推荐模块。
2.3 系统实现机制
2.3.1 电影排名模块实现机制
1、系统先将采集到的用户的评分相关的数据集保存到HDFS分布式文件系统中,然后通过mapreduce先进行分组,然后基于同一部电影的所有评分算出这部电影的平均分,最后在进行排序。
2、系统利用pandas将mapreduce的分组、求平均值、排序进行实现,并对相关量之间的关系进行可视化展示。
2.3.2 个性化电影推荐模块实现机制
1、系统先将采集到的用户的评分相关的数据集保存到HDFS分布式文件系统中,经过MapReduce基于用户的协同过滤算法,通过用户的历史数据得到相关用户与其的相似度,然后以相似度为权重计算出用户对电影的预测打分,最后根据预测打分对每一位用户进行推荐排序,得出最后结果。
2、系统利用pandas对mapreduce的实现过程进行复原,中间涉及到算法的部分则是采用mapreduce已生成的结果进行数据处理得到用户需要的格式,并且对相关量进行比较分析和可视化展示结果。
3 实现方法
3.1 技术简介
3.1.1 分布式文件系统HDFS
Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分HDFS由多种类型的节点组成的,其中有一个NameNode节点、一个SecondaryNameNode节点和多个DataNode节点以及其它相关节点。
3.1.2 MapReduce编程
MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:
1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
2)MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理。
3.1.3 Pandas数据预处理与可视化
pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
matplotlib库是专门用于开发2D图表(包括3D图表)的,突出优点:使用起来极为简单。以渐进、交互式方式实现数据可视化。表达式和文本使用LaTeX排版。对图像元素控制力强。可输出PNG、PDF、SVG和EPS等多种格式。
3.1.4 电影排名实现
基于排序的算法,是评测物品好坏程度的较为简单的一种算法。
图3.1 电影排名示意图
(1)电影分组计算
通过源数据可以对电影进行分组,方便下面计算机电影平均值。
(2)电影分组求平均分计算
通过先求出电影的总分除以评价该电影的人数得出电影的平均分。
(3)根据平均分进行排序
通过电影的平均分进行降序排序,得到电影TOP N的排行榜。
3.1.5 个性化电影推荐实现
基于用户的协同过滤算法是推荐算法中最早应用的推荐算法。该推荐算法最初1992年被提出并应用于邮件过滤系统,之后被应用于新闻过滤。基于用户的协同过滤推荐算法是推荐系统中应用比较多的的一种推荐算法。基于用户的协同过滤的主要思想是通过分析不同的用户对物品的评分即喜爱情况来寻求各用户之间的相似性,从而进行相关推荐。
协同过滤常常被用于分辨某位特定顾客可能感兴趣的东西,这些结论来自于对其他相似顾客对哪些产品感兴趣的分析。协同过滤以其出色的速度和健壮性,在全球互联网领域炙手可热。
此次课程设计我们采用的是基于用户的协同过滤&