基于协同过滤算法的图书个性化系统的设计与实现_第1页
基于协同过滤算法的图书个性化系统的设计与实现_第2页
基于协同过滤算法的图书个性化系统的设计与实现_第3页
基于协同过滤算法的图书个性化系统的设计与实现_第4页
基于协同过滤算法的图书个性化系统的设计与实现_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章绪论1.1课题研究的背景和现状我们身处“5G降至,4G漫布”的网络中,我们的生活也越来越离不开网络,互联网是座无形的桥梁,连接着上亿上亿的人们,以飞秒之速传播着无以计数的信息,这是信息大爆炸的时代,人们获取信息不再像以前的缓慢和困难,相反,面对着网络中的海量信息数据,我们经常应顾不暇,反应速度远远无法跟上信息的传播速度,大量冗余信息影响人们准确地抉择。面对过载信息,如何从中知识发现[4]以及如何筛选出有用的信息成为人们普遍关注的问题,因此,信息过滤成为时代不可或缺的重要机制,搜索引擎的出现一定程度上解决了信息过载的问题,可以针对用户输入的关键字从海量的信息中进行筛选。但如何筛选?如何排序?这些问题被“商业机密”包围,百度公司曾长期将搜索结果以竞价排名形式呈现,造成极差的用户体验,另外当用户无法准确描述需求时,搜索结果显得不如人意[5]。在此背景下,个性化推荐系统应运而生。个性化推荐系统能良好的解决上述问题,它能收集用户特征资料并根据用户特征,如兴趣偏好,为用户主动作出个性化的推荐。而且,系统给出的推荐是可以实时更新的,即当系统中的商品库或用户特征库发生改变时,给出的推荐序列会自动改变。个性化推荐系统主要算法有:基于关系型规则的推荐、基于内容的推荐[6]、人口统计时的推荐、协同过滤式的推荐[7],本文主要基于协同过滤算法设计与实现图书的分析与个性化推荐系统。与传统推荐算法相比协同过滤算法推荐可以达到个性化推荐[8],不需要对内容进行分析,可以发现用户新的兴趣点,自动化程度高,推荐更具有新颖性。1.2课题研究的目标与意义1.2.1目标(1)根据图书信息可以呈现有效的可视化数据分析结果,当用户输入的信息可以有效的推荐用户感兴趣的图书信息,以及由图书信息可以寻求更多的志同道合和发现兴趣点。(2)巩固Python、Spark、数据分析、数据处理等已学知识的实践,加深对协同过滤算法的认识,锻炼自己动手搭建推荐系统的能力。1.2.2意义基于上面的背景可知,推荐系统是人们人们浏览网络信息必不可少的一部分,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对他感兴趣的人群中,从而实现信息提供商与用户的双赢。本推荐系统可以为用户提供方便,可以让用户看到图书数据的可视化结果,可以根据用户推荐针对他们胃口的图书信息,可以根据他们提供的图书信息,展现出志同道合的用户以及发现更多兴趣。除此之外,本推荐系统界面用户体验好,操作易上手。1.3本文的主要工作在此项目中,本人根据下载的图书数据,进行了数据处理,数据清洗,数据分析,实现了可视化数据分析结果,通过Qtdesigner完成了推荐系统界面及功能的设计与实现,完成了登录模块、注册模块、个性推荐模块、志同道合模块等功能模块的设计与实现,使用协同过滤推荐算法使推荐结果和界面控件相结合。1.4论文结构本论文主要包括以下几个部分:第一部分:项目背景和研究意义;第二部分:系统开发所采用的技术以及开发环境;第三部分:图书个性化推荐系统需求分析;第四部分:个性化推荐系统设计;第五部分:系统实现与测试;第六部分:工作总结和展望。第2章相关技术概论第2章相关技术概述2.1图书个性化推荐系统开发技术2.1.1前台(1)PyQtPyQt是一个创建GUI应用程序的工具包。它是Python编程语言和Qt库的成功融合,Qt库是目前最强大的库之一。PyQt是由PhilThompson开发。安装前提需要实现安装Pycharm,下载SIP、PyQt5、Qt,配置Qtdesigner、PyUIC。设计前端的过程中先使用可视化Qt控件拖拉设计UI,在配合Pycharm实现信号和槽的连接和绑定。(2)PandasPandas是Python的数据处理包,全名:PythonDataAnalysisLibrary,Pandas是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取、转换、过滤、分析等一系列操作。Pandas库是基于Numpy库来创建的,Numpy主要用于矩阵操作,而Pandas主要用于数据处理。Pandas支持多种数据格式,以及Excel和SQL数据库,对数据对齐,缺失数据处理,数据排序等常规数据整理操作尤为便利。图2.1Python数据分析包(3)MatplotlibMatplotlib是提供数据绘图功能的python第三方2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。(4)Pyecharts

ECharts是EnterpriseCharts的缩写,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。

支持地图等12类图表,同时提供标题,详情气泡、图例、值域、数据区域、时间轴、工具箱等7个可交互组件,支持多图表、组件的联动和混搭展现。pyecharts,可以实现用python调用echatrs。pyecharts是一个用于生成Echarts图表的类库。2.1.2后台(1)SparkMLlibSpark的核心是RDD(ResilientDistributedDataset)弹性分布式数据集,由AMPLab实验室所提出的概念,属于一种分布式的内容,目标是将批处理、交互式处理、流式处理、各种机器学习算法、图形计算、SQL查询等全部融合在一个软件栈中。Spark主要的优势来自RDD本身的特性,提供以RDD为基础的机器学习模块,发挥in-memory与分布式运算,大幅提升需要迭代的机器学习模块的执行效率,功能强大。图2.2SparrkMLlib(2)SQLiteSQLite进行数据的存储。SQLite是一种小型的数据库,占用资源少,效率良好,比较轻便,易学上手快,可以直接在pycharm中操作,数据的存储和取数据速度都比较快,性能比较好。2.2图书个性化推荐系统开发及运行环境该系统是在Window10操作系统中,利用Pycharm、JupyterNotebook、Qtdesigner工具进行开发,结合SQLite数据库,Spark大数据处理技术实现协同过滤算法推荐功能。1、硬件环境(1)CPU:i5或更高(2)硬盘:40G或更高(3)内存:2G或更高2、软件环境(1)操作系统:Windows10(2)开发环境:PyCharm2018.3.2、spark-2.3.0-bin-hadoop2.6(3)数据库:SQLite(4)开发语言:Python3.5.2、Scala-2.12.8(5)其他辅助软件:MicrosoftWord、StarUML第3章系统需求分析第3章图书个性化推荐系统需求分析3.1系统的功能需求3.1.1系统功能模块需求分析本推荐系统的运行环境为微软的Window操作系统,用户界面比较友好,操作容易,和用户的交互性非常的好,适合各种人群的使用。表3.1用户业务分析业务功能模块功能描述注册游客注册成为普通用户登录用户通过用户名和密码登录推荐系统地区分布游客可查看全球范围内读者地区分布的数据分析读者年龄游客可查看读者年龄分布的数据分析趋势图书评分游客可查看全球范围内读者图书评分的数据分析猜你想看系统为用户推荐图书评分为10的6部图书信息志同道合根据用户提供的图书信息推荐6位相似用户信息个性推荐根据用户信息个性推荐6部图书信息3.1.2系统业务流程分析图书分析以及个性话题推荐系统的客户主要包括游客和用户。推荐系统的图3.1推荐系统业务用例图业务是面向游客和用户服务的。3.1.3系统业务流程描述每个业务用例的细节,可以进一步用活动图进行描述。活动图中的活动是展示整个业务用力的控制流(及其操作数),执行的步骤可以是并发的或顺序的。推荐系统业务用例图中共有9种业务用例,3种业务角色,系统游客可以浏览图书数据分析可视化结果,系统用户可以根据输入信息查看个性化推荐图书的内容。下面是主要业务用例的描述:注册用户图3.2注册活动图用户登录地区分布图3.3志同道合活动图读者年龄读书评分志同道合图3.4志同道合活动图3.1.4系统状态图状态图通过建立类对象的生存周期模型来描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应的。所有对象都有状态,推荐系统游客“访问”系统页面后输入用户名以及密码“注册”成为用户,输入用户名及密码“登录”访问推荐界面。如图3.6所示。图3.5系统状态图3.2数据需求经过分析后得知系统中所需的类和各类之间的关系,利用概念类图进行描述。在根据已定义的对象累及其联系,以及对象类的多重性、角色、导航等性质,可以画出对象类土,适用对象图的目的是分析系统的瞬间状态,以便进一步了解系统的结构和行为。图中系统主页类提供对地区分布、读者年龄、图书评分的各类操作。推荐界面类提供对个性推荐、志同道合、猜你想看的各类操作。如下图所示:图3.6系统分析类图3.3系统非功能性需求3.3.1spark大数据处理技术Spark使用弹性分布式数据集RDD实现数据存储。RDD是spark的核心数据结构,用户可以使用RDD将一部分数据集缓存在内存中,使其能在并行操作中被有效的重复使用。Spark为RDD提供了一系列丰富操作的函数。用于对RDD中的数据进行操作和转换。更好的帮助用户分析系统有哪些功能,以及让用户明确系统内部和系统外部(也就是角色)之间是如何交互的。第4章系统设计第4章个性化推荐系统设计4.1个性化推荐系统的概念个性化推荐系统应用广泛,主要用于电子商务领域,根据用户的兴趣点和购买行为向用户提供推荐感兴趣的商品和信息。本系统主要根据图书信息可以呈现有效的可视化数据分析结果,当用户输入的信息可以有效的推荐用户感兴趣的图书信息,以及由图书信息可以寻求更多的志同道合和发现兴趣点。如图4.1是推荐系统通用模型。图4.1推荐系统通用模型4.2个性化推荐系统算法的分类常见的推荐算法如下:基于关系型规则的推荐基于内容的推荐人口统计式的推荐协同过滤式的推荐4.3推荐系统的模块设计4.3.1总体功能模块设计系统的总体功能模块图,如图4.2所示,整个系统包括系统主页和推荐界面,系统主页有用户登录注册,查看地区分布,读者年龄,图书评分的可视化数据分析结果;推荐界面包括对用户输入图书信息及用户信息的个性推荐、志同道合以及猜你想看模块。图4.2系统总功能模块结构图(1)登录注册的主要流程图,如图4.3所示,用户进入主页面点击注册/登录,如果注册则输入用户名密码后判断是否合法注册,然后跳转登录界面,如果是登录,则输入用户名以及密码审核是否匹配,正确则进入推荐界面。图4.3系统登录注册流程图(2)地区分布流程图,如图4.4所示,游客可直接点击地区分布按钮查看地区分布数据化分析可视化结果。图4.4地区分布流程图(3)个性推荐流程图,如图4.5所示,先判断用户是否登录成功,如果未成功登录则先登录或注册,若登录成功则判断输入的信息是否有效,如果是则输出个性推荐结果,推荐成功,否则重新输入相关信息。图4.5个性推荐流程图4.3.2游客功能模块游客在本推荐系统可以浏览图书数据分析可视化结果,有如下几个功能模块:首页、地区分布、读者年龄、图书评分,如表4.1所示:表4.1前台用户功能表功能列表功能说明首页查看首页图书信息地区分布查看读者地区分布可视化结果读者年龄浏览读者年龄趋势分布图图书评分图书评分情况可视化结果4.3.3用户功能模块用户登录系统后进入推荐界面,用户在推荐界面享有如下几个功能模块:个性推荐、志同道合、猜你想看;如表4.2所示:表4.2后台管理员功能表功能列表功能说明个性推荐根据输入信息,推荐用户感兴趣的书籍志同道合根据输入信息,推荐同样对该图书感兴趣的用户猜你想看书荒时,推荐给用户图书评分高的图书信息4.4推荐算法设计4.4.1相似矩阵相似度是比较两个事物之间的相似程度。相似矩阵[9]由事物所代表的数据点之间的相似性评分表示。一般通过计算两个事物特征之间的距离,距离越大,相似度越低,距离越小,相似度越高。以下是常用的相似度计算方法。欧几里得距离(EuclideanDistance)欧氏距离是最常用的距离计算公式,衡量的是多维空间中两点的真实距离。欧氏距离是向量元素之间平方差之和的平方根:欧氏距离标准化:皮尔逊相关系数(PearsonCorrelationCoefficient)皮尔逊相关系数度量的是两个向量之间的线性关系。皮尔逊相关系数是两个变量之间的协方差与标准差之商:皮尔逊相关系数范围从-1到1。值为1时表示X和Y之间数据变化同向而且之间具有完美的线性关系,-1表示X和Y之间的数据变化为反向关系,0表示X和Y之间无明显的线性关系。余弦相似度(CosineSimilarity)余弦相似度是度量向量空间中两个向量夹角的余弦值作为相似度的大小:其中,余弦值越大,说明两向量夹角越小,则两向量越相似;值为负,两向量负相关。另外,余弦距离更注重两向量在方向上的差异。4.4.2常用的协同过滤算法(1)基于用户的协同过滤算法基于用户的协同过滤算法基本原理是根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的其他用户,一般采用K-近邻算法;然后基于这K个用户的历史偏好信息,为当前用户进行推荐物品。基于用户协同过滤算法的基本原理如下图4.6给用户A进行个性化推荐,假如用户A喜欢物品W和物品X,用户B喜欢物品Y,用户C喜欢物品W,物品X和物品Z。从用户的偏好信息可以看出,用户A和用户C具有相似的偏好信息,又知道用户C还喜欢物品Z,所以将物品Z推荐给用户A。图4.6基于用户协同过滤算法基于物品的协同过滤算法基于物品协同过滤算法基本原理是根据用户过去喜欢的物品,为用户推荐与他过去喜欢的物品相似的物品。基于物品协同过滤算法的基本原理如下图4.7给用户A进行个性化推荐,用户A喜欢图书W,用户B喜欢物图书Y,用户C喜欢图书W假如,图书X和图书Z。要想实现对用户A的推荐,首先对图书的元数据建模,然后通过元数据发现图书间的相似度,发现图书W和图书Y都属于算法类书籍相似度最高,最后实现推荐,对于用户A,他喜欢看图书W,那么系统就可以给他推荐类似的图书Y。图4.7基于用户协同过滤算法4.4.3数据收集在海量数据中挑选出合适的数据集是完成项目的先决条件。下载数据根据项目图书分析以及个性化推荐系统的要求,项目中使用的数据可以访问rmatik.uni-freiburg.de/~cziegler/BX/下载。文件经过压缩处理,需要解压使用。了解数据 两个压缩文件中分别有三个CSV和SQL文件。分别为BX-Book-Ratings、BX-Books、BX-Users;其中CSV文件中每个文件均被逗号分隔符拆分。评分文件共有1048576行,逗号分隔符将其拆分为三列:User-ID;"ISBN";"Book-Rat-ing",即第一列为用户ID,第二列为图书ISBN,第三列为对应的评分。图书文件共有271380行,其中主要为图书相关信息的数据,逗号分隔符将其拆分为以下八列:ISBN;"Book-Title";"Book-Author";"Year-Of-Publication";"Publisher";"Image-URL-S";"Image-URL-M";"Image-URL-L",即图书的ISBN,图书名,图书作者,出版年份,出版设,图书封面。用户文件共有276272行,其中主要为用户相关信息数据,逗号分隔符将其拆分为三列:User-ID;"Location";"Age",即用户ID,用户注册地,用户年龄。4.4.4数据预处理把错误的数据放进算法中,永远无法得到正确的答案。数据预处理主要防止“错进,错出”的问题。数据预处理一般包括三个步骤:格式化数据一般需要指定格式呈现。使用行业标准格式可以避免一些不必要的问题,例如本项目中主要使用CSV格式文件,所以不需要进行格式转换。清洗数据数据清洗[10]一般指去除、替换、修复损失或丢失的数据来对数据进行清洗。本步骤主要借助jupter工具,如下python关键语句脚本进行清洗数据。去除不合法数据处理用户数据:df=pd.read_csv("BX-Users",sep=";",header=None,names=["user_id","location","age"],encoding='gbk')df[(df.age=='41"')].index.tolist()#找出不合法数值所在行df=df.drop([1305])#删除那一行替换脏数据处理评分数据:csv1=open("BX-Book-Ratings.csv","r").read()forlinein'",,,.。??,': csv1=csv1.replace(line,'') forlinein'X': csv1=csv1.replace(line,'0')file1=open("rating.csv","w")#'w'覆盖写模式,文件不存在则创建,存在则完全覆盖file1.write(str(csv1))file1.close()处理数据处理数据以便ALS算法训练数据,因为ALS训练数据格式是RatingRDD数据类型,所以需先利用map运算以分号切分数据,再转换为相应的训练数据。ratings=rdd.map(lambdaline:line.split(";"))ratingsRDD=ratings.map(lambdax:(x[0],x[1],x[2]))数据采样4.4.5数据分析经过数据预处理,数据分析和可视化显示就显得容易得多。读者地区分布分析根据用户文件,通过以下python语言中pyecharts模块,可以呈现用户在世界地图中的地区分布可视化结果。frompyechartsimportMap图4.8读者地区分布根据热点图可以看出,加拿大、美国、澳大利亚以及欧洲地区的读者群体比较大,相对而言俄罗斯、以及亚洲读者群体比较小,非洲几乎没有读者群体。读者年龄段分析根据用户文件,通过python语言中matplotlib模块,呈现读者年龄可视化结果,python脚本如下:importmatplotlib.pyplotaspltdefage_pie():plt.rcParams['font.family']='SimHei'df=pd.read_csv("user.csv",sep=";",header=None,names=["user_id","location","age"],encoding='gbk')df[(df.age=='41"')].index.tolist()#找出不合法数值所在行df=df.drop([1305])#删除那一行df[['age']]=df[['age']].astype(float)labels=['10-20','20-30','30-40','40-50','50-60']sizes=[len(df[(df.age>=10)&(df.age<20)]),\len(df[(df.age>=20)&(df.age<30)]),\len(df[(df.age>=30)&(df.age<40)]),\len(df[(df.age>=40)&(df.age<50)]),\len(df[(df.age>=50)&(df.age<60)])]explode=(0,0.05,0,0,0)#0.1为第二个元素凸出距离colors=['tomato','lightskyblue','goldenrod','green','y']#饼图绘制函数plt.pie(sizes,explode=explode,labels=labels,colors=colors,\autopct='%1.1f%%',shadow=False,pctdistance=0.8,\startangle=90,textprops={'fontsize':16,'color':'w'})plt.title('读者年龄分布图')plt.axis('equal')plt.legend(loc='upperright')plt.show()图4.9读者年龄分布图诚如李大钊说“青年之文明,奋斗之文明,也是境遇奋斗,与时代奋斗,与经验奋斗。故青年者,人生之玉,人生之春,人生之华也。”根据饼状图可以看出年龄段在20-40岁的读者所占比例最高,高达64.3%,由此可见,读书充电的年龄,大家都在努力奋斗不断学习。读者图书评分情况分析图书评分为10的图书信息使用以下python脚本,找出图书评分为10的图书信息,可作为新用户初始登录图书推荐系统时猜你想看功能模块进行图书信息推荐。importpandasaspddf=pd.read_csv("rating.csv",sep=";",header=None,names=["user","book","rating"],encoding='gbk')df=df[(df.rating>9)]print(df.head())结果显示评分为10的图书ISBN以及用户ID信息。userbookrating92767453423105381030276760844068269710612767723499230933106227677235961514651085276788055310666010图书评分图根据评分文件,通过python语言中pandas以及matplotlib模块,生成图书评分柱状图。Python脚本如下:importpandasaspdimportmatplotlib.pyplotaspltplt.rcParams['font.family']='SimHei'df=pd.read_csv("rating.csv",sep=";",header=None,names=["user","book","rating"],encoding='gbk')df=df[(df.rating>=1)&(df.rating<=10)]#print(df.head())city=df.groupby('user').count()rating=df.groupby('rating').count()value=list(rating['user'])attr=list(rating.index)plt.bar(attr,value,color='g',alpha=0.7)plt.xticks(attr,rotation=0)plt.title('用户图书评分图')plt.xlabel("rating")plt.ylabel("book_number")plt.savefig('rating.png',dpi=600)plt.show()图4.10推荐系统冰心曾说“读书好,好读书,读好书。”根据评分柱状图,图书评分多为7-10分,可看出图书满足大多数人心理评估水平,相对图书而言,图书多为大家心目中的“好书”。4.4.6训练评分模型导入ALS模块frompyspark.mllib.recommendationimportALS#导入ALS训练模型使用ALS.train命令进行训练model=ALS.train(ratings,5,5,0.01)#使用ALS.train进行训练训练时会执行矩阵分解(MatrixFactorization),完成后会将原本矩阵分解成X(m*rank)矩阵与Y(rank*n)矩阵。<pyspark.mllib.recommendation.MatrixFactorizationModelobjectat0x0000023FFDF6AD30>4.4.7推荐系统建立推荐系统先是数据准备阶段,读取数据,经过处理后产生评分数据ratingsRDD,接着评分数据ratingsRDD经过ALS.train训练后产生模型Model,再存储模型Model在本地中,以便后续推荐信息使用,载入之前的存储模型Model后使用模型Model进行推荐,最后将推荐结果外部输出在推荐界面上。推荐系统的建立如图4.8所示:图4.11推荐系统4.5系统数据库设计4.5.1系统的E-R图E-R模型能够抽象化现实世界中的物质,E-R模型主要由实体、联系和属性组成。很多的应用环境都是建立在这三种成分的基础上的。本系统的实体和属性的有下面这些:用户表的实体属性如图4.9所示,包括主键ID、昵称、密码等等。图4.12用户表实体图4.5.2数据库逻辑及物理结构的设计在系统的开发过程中,数据库设计是十分重要的一个环节。数据库设计了系统数据的存储形式、用户数据访问形式。设计系统时应合理设计数据库,减少数据库的信息冗余,尽量避免重复的数据,并考虑效率和优化的问题。通过对论坛系统的业务及数据的分析,设计数据库表,如用户表:用户表主要用于存放用户的基本信息,包括登录的密码,用户ID等等;用户表的详细字段如表4.3所示:表4.3用户表(t_user)字段名数据类型长度允许NULL注释userIdSTRING20主键IDpasswordVARCHAR20密码sexVARCHAR10√性别emailVARCHAR20邮箱telVARCHAR11√手机regTimeDATETIME注册时间第5章系统实现第5章系统实现5.1系统功能模块的实现5.1.1登录注册功能实现(1)系统主页,用户可以通过登录/注册进入登录注册界面。系统主页界面的效果如图5.1所示:图5.1系统主页图(2)注册界面,用户只有注册后才能登录推荐系统界面,注册后直接跳转到系统的登录界面,注册的界面效如图5.2所示:图5.2注册界面图核心代码该代码是三个跟登录注册有关的函数,user_register(self)函数为注册成功跳转到登录界面,jump_to_login1(self)函数是跳转到登录界面的相,vert_register(self)函数是判断注册的用户账号和密码是否合法的方法。self.pushButton.clicked.connect(self.user_register)#点击信号槽触发函数

defuser_register(self):#注册成功跳转到登录界面

user_name=self.lineEdit.text()

user_pass=self.lineEdit_5.text()

user_pass2=self.lineEdit_4.text()#重新输入密码

if(self.vert_register()):

c.execute('insertintouser_loginvalues((user_name,user_pass,user_pass2));')

mit()

defvert_register(self):#注册验证

user_name=self.lineEdit.text()

user_pass=self.lineEdit_5.text()

user_pass2=self.lineEdit_4.text()#重新输入密码

if(user_name==""):

self.label_10.setText('用户名不能为空')

returnFalse

else:

if(len(user_pass)<3):

self.label_10.setText('')

self.label_5.setText('密码太简单')

elif(user_pass!=user_pass2):

self.label_7.setText("两次密码不一致")

else:

self.jump_to_login1()

self.exit()

returnFalse

returnTrue

defjump_to_login1(self):#跳转到登录界面

self.dialog.hide()

dialog1=QtWidgets.QDialog()

ui=BOOK_login1.Ui_Dialog()

ui.setupUi(dialog1)

dialog1.show()

dialog1.exec_()

self.dialog.show()

defexit(self):#退出该界面

self.dialog.close()

if__name__=='__main__':

importsys

app=QtWidgets.QApplication(sys.argv)

widget=QtWidgets.QWidget()

ui=Ui_Dialog()

ui.setupUi(widget)

widget.setWindowTitle('BOOK帮')

widget.show()

sys.exit(app.exec_())登录注册界面图5.3注册界面图核心代码该代码是三个跟登录注册有关的方法,jump_to_BOOK_1()方法跳转到登录界面和jump_to_register()方法跳转到注册假面,user_login()方法用来判断登录的用户账号密码是否正确的。

defuser_login(self):#用户登录

str_name=self.lineEdit.text()

str_pass=self.lineEdit_2.text()

c=cnn.cursor()

sql=c.execute('select*fromuser_loginwhereuser_name=?anduser_password=?',(str_name,str_pass))

if(len(sql.fetchall())):

self.jump_to_BOOK_1()

self.exit()

else:

self.lineEdit.setText('')

self.lineEdit_2.setText('')

self.label_5.setText("账号和密码错误")

defjump_to_BOOK_1(self):#跳转到登录后的主界面

self.dialog.hide()

dialog1=QtWidgets.QDialog()

ui=BOOK_1.Ui_Dialog()

ui.setupUi(dialog1)

dialog1.show()

dialog1.exec()

self.dialog.show()

defjump_to_register(self):#跳转到注册界面

self.dialog.hide()

dialog1=QtWidgets.QDialog()

ui=BOOK_register.Ui_Dialog()

ui.setupUi(dialog1)

dialog1.show()

dialog1.exec_()

self.dialog.show()5.1.2推荐功能实现(1)推荐界面,有个性推荐,志同道合,猜你想看如图5.3所示。图5.4志同道合核心代码该代码是实现个性推荐,志同道合,猜你想看的三个方法。方法user()实现个性推荐,方法实现book()志同道合,方法rating()实现猜你想看

defuser(self):#个性推荐

self.label_8.setText('')

self.label_9.setText('')

self.label_10.setText('')

self.label_11.setText('')

self.label_15.setText('')

self.label_16.setText('')

id_user=self.lineEdit.text()

try:

sc.stop()

except:

pass

frompysparkimportSparkContext

sc=SparkContext()

rdd=sc.textFile("rating2.csv")

ratings=rdd.map(lambdaline:line.split(";"))

#ratingsRDD=ratings.map(lambdax:(x[0],x[1],x[2]))

ratings.persist()

frompyspark.mllib.recommendationimportALS

model=ALS.train(ratings,5,5,0.01)

user_com=model.recommendProducts(int(id_user),6)

self.label_8.setText(str(user_com[0][1]))

self.label_9.setText(str(user_com[1][1]))

self.label_10.setText(str(user_com[2][1]))

self.label_11.setText(str(user_com[3][1]))

self.label_15.setText(str(user_com[4][1]))

self.label_16.setText(str(user_com[5][1]))

defbook(self):#志同道合

self.label_8.setText('')

self.label_9.setText('')

self.label_10.setText('')

self.label_11.setText('')

self.label_15.setText('')

self.label_16.setText('')

id_book=self.lineEdit.text()

try:

sc.stop()

except:

pass

frompysparkimportSparkContext

sc=SparkContext()

#sc.master

rdd=sc.textFile("rating2.csv")

ratings=rdd.map(lambdaline:line.split(";"))

ratingsRDD=ratings.map(lambdax:(x[0],x[1],x[2]))

ratings.persist()

##训练模型

frompyspark.mllib.recommendationimportALS

model=ALS.train(ratings,5,5,0.01)

#基于book推荐

user_com=model.recommendUsers(int(id_book),6)

self.label_8.setText(str(user_com[0][0]))

self.label_9.setText(str(user_com[1][0]))

self.label_10.setText(str(user_com[2][0]))

self.label_11.setText(str(user_com[3][0]))

self.label_15.setText(str(user_com[4][0]))

self.label_16.setText(str(user_com[5][0]))

defrating(self):#猜你想看

self.label_8.setText('')

self.label_9.setText('')

self.label_10.setText('')

self.label_11.setText('')

self.label_15.setText('')

self.label_16.setText('')

#id_book=self.lineEdit.text()

importpandasaspd

df=pd.read_csv("rating.csv",sep=";",header=None,names=["user","book","rating"],encoding='gbk')

df=df.sort(["rating"],ascending=False)

df=df.head(6)

df=df.values

self.label_8.setText(str(df[0]))

self.label_9.setText(str(df[1]))

self.label_10.setText(str(df[2]))

self.label_11.setText(str(df[3]))

self.label_15.setText(str(df[4]))

self.label_16.setText(str(df[5]))5.2系统测试5.2.1系统数据完整性测试在开发过程中和开发完成以后对系统进行了严格的测试。数据和数据库完整性测试目标:确保数据库访问方法和进程正常运行,数据不会遭到损坏。测试方法:调用各个数据库访问方法和进程,并在其中填充有效的和无效的数据或对数据的请求。检查数据库,确保数据已按预期的方式填充,并且所有数据库事件都按正常方式出现;或者检查所返回的数据,确保为正当的理由检索到了正确的数据。测试完成标准:所有数据库访问方法和进程都按照设计的方式运行,部分无效数据已删除。5.2.2系统功能测试系统功能测试目标:确保数据库访问方法和进程正常运行,数据不会遭到损坏。测试方法:利用有效的和无效的数据来执行各个用例、用例流或功能,以核实:在使用有效数据时得到预期的结果;在使用无效数据时显示相应的错误消息或警告消息;各业务规则都得到了正确的应用。测试完成标准:所计划的测试已全部执行;所发现的缺陷部分已解决。5.2.4测试报告测试完项目后,根据测试的过程写好了测试报告,测试报告包括以下内容:测试项目、测试的目的、测试的结果、原因、以及解决问题的进展和情况。测试的项目包括了用户的登录,用户的注册,个性推荐,志同道合,猜你想看。根据测试生成了一些测试结果,找到原因后开始解决,解决情况和测试的详细情况如表5.3所示:表5.3测试报告表测试项目测试目的测试结果原因解决情况用户登录确保系统的安全性安全存在其它因素仍在解决用户注册确保注册信息添加成功添加不成功SQL语句有问题已解决个性推荐确保个性推荐图书成功推荐推荐不成功工具包有问题已解决志同道合确保对相似用户的成功推荐程序运行正常猜你想看确保对图书成功推荐程序运行正常总结与展望第6章总结与展望6.1系统总结通过本次图书推荐系统的实现,从网站数据的查找与下载,到Python数据处理,数据分析,数据库建立与连接,然后spark协同过滤推荐算法的使用实现推荐功能,到pycharm、Qtcreator界面设计,最后合项目,我们收获很多。同样,本系统还有一些功能不太健全,使用起来不是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论