毕业设计-基于大数据的移动图书馆个性化推荐系统-python

news2025/1/17 0:48:18

目录

前言

课题背景和意义

实现技术思路

实现效果图样例


前言


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

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

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

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

🎯基于大数据的移动图书馆个性化推荐系统

课题背景和意义

大数据时代的来临为移动图书馆推荐服务带来了新的机遇和挑战。文章针对移动图书馆个性化推荐 服务的多源大数据需求与数据融合应用难点,基于 Hadoop 技术框架,从基础数据层、推荐计算层、应用服务 层 3 个层面,建立多源大数据驱动的移动图书馆个性化推荐系统架构,并设计具体工作流程; 进而以图书资源 推荐服务为例,综合应用机器学习、数据挖掘、画像建模等方法提出推荐系统技术实现方案,为大数据环境下 的移动图书馆个性化推荐系统构建提供新的思路与方法。

移动图书馆突破了传统图书馆在时间与空间上的限制,使读者能够随时随地通过移动终端设备使用图书馆的 服务,已成为数字图书馆发展的主要方向。由于移动图书馆具备更强的交互性、灵活性和情境感知性,因而更适 合为读者提供个性化推荐服务。推荐服务的开展主要建立在广泛的数据采集与画像构建基础之上,随着大数据 时代的来临,移动图书馆可获取的数据类型和维度不断丰富,为个性化推荐服务提供了更充分的数据支撑,使多 源大数据在移动图书馆服务变革与智能升级中日益受到业界和学界的广泛关注。面对更加复杂、立体的大数据环 境,如何基于先进的技术架构,有效实现多源大数据采集与深度融合,进而精准挖掘用户偏好特征,建立高效智 能的个性化推荐系统,是促进移动图书馆智慧服务发展的重要基础。

实现技术思路

数据采集

由于移动图书馆个性化推荐系统所需的用户大数据、情境大数据和资源大数据广泛分布在不同信息系统和终 端设备中,且结构各异,因此需要分别利用不同技术方法进行有效采集。一方面,应用 Sqoop、ODI 等结构化大 数据处理工具对数据库中的标准化数据进行批量式抽取; 另一方面,应用 Flume、Kattle 等非结构化大数据处理 工具对图书馆用户访问日志、情境数据、多媒体网络资源数据等进行有效采集。在采集过程中,针对前文所述的 数据跨系统调用接口缺失和标准不统一的难点,可应用 ODI 等工具构建数据交换平台作为 “中间件”,将个性化 推荐系统所需的数据属性抽取到数据交换平台或 “临时中间表”存储,从而满足跨系统数据调用请求。

def get_book_data(url):
    html = requests.get(url)
    soup = BeautifulSoup(html.text, 'lxml')
    book_list = soup.select('div.s-item-container')
    for book in book_list:
        title = book.select('h2')[0].text.strip()
        author = book.select('div.a-row a.a-size-small')[0].text.strip()
        price = book.select('span.a-size-base.a-color-price.s-price.a-text-bold')[0].text.strip()
        print(title, author, price)
 
get_book_data(url)

数据预处理

初始采集的数据往往杂乱无序,无法直接用于推荐计算,需要进一步利用 ETL 工具进行数据清洗、消歧、归 一化、特征提取等预处理操作,提高数据可用性。经过预处理后的数据将同步到个性化推荐系统中的 HDFS 数据 存储单元,为数据融合应用与深度挖掘提供基础支撑。与此同时,经过实时采集处理后的数据则同步到推荐系统 中的 Kafka 消息引擎系统,供在线推荐计算使用。Kafka 是一个分布式日志系统,可用于对 Web 日志、访问日志 等数据的处理。

import pandas as pd 

# 从csv文件读取书籍数据
book_data = pd.read_csv('book_data.csv')

# 检查书籍数据的缺失值
null_values = book_data.isnull().sum() 

# 对书籍数据的缺失值进行填充
book_data.fillna(0, inplace=True) 

# 给书籍数据的列添加标签
book_data.columns = ['book_name', 'author', 'category', 'rating', 'price']

# 对书籍数据的分类列进行数据标准化
category_mappings = {
    'Fiction': 0,
    'Non-fiction': 1,
    'Mystery': 2,
    'Romance': 3
}
book_data['category'] = book_data['category'].map(category_mappings)

推荐计算

在构建画像模型的基础上,推荐系统进一步通过召回、排序和优化,建立用户、情境、资源三者之间的内在 关联,实现个性化推荐。其中,召回阶段主要采用基于模型的推荐和基于内容的推荐两种形式,分别根据用户特 征标签初步筛选出与其特征相似的用户所喜爱的馆藏资源或与其以往偏好相似的馆藏资源,记录到 Hbase 数据库 的历史召回结果中; 排序阶段则以 Hbase 中存储的特征数据作为训练集和测试集,应用机器学习算法预测用户对 馆藏资源的偏好程度,然后进行推荐排序,进一步缩小召回阶段初筛结果的范围。而根据不同推荐场景对数据分 析时效性的要求,推荐系统既要考虑基于历史画像的离线计算,也要考虑基于用户实时点击、收藏、下载、阅览 等行为的在线计算,从而针对冷启动、网络加载超时等特殊情境,通过流量切分、超时截断、热门补足等方式对 推荐结果及时进行优化调整,提高用户的个性化推荐服务体验。

 

import pandas as pd 

#读取数据
data=pd.read_csv('book_rating.csv')

#计算用户评分的平均分
user_rating_mean=data.groupby('user_id')['rating'].mean()

# 对每一本书,计算它被评分的平均分
book_rating_mean=data.groupby('book_id')['rating'].mean()

#计算每一本书的用户评分总和
book_rating_sum=data.groupby('book_id')['rating'].sum()

#计算每本书的用户评分次数
book_rating_count=data.groupby('book_id')['rating'].count()

#计算每本书的评分均值,即每本书的平均分
book_rating_mean=book_rating_sum/book_rating_count

#对每一本书,计算它和用户评分均值之间的差值
diff_rating=book_rating_mean-user_rating_mean

#按照差值排序,选出个性化推荐图书
diff_rating.sort_values(ascending=False,inplace=True)

#最终得到个性化推荐图书
recommend_book_list=diff_rating.index[:10]

print('个性化推荐图书:',recommend_book_list)

实现效果图样例

 

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

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

最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法为何重要(《数据结构与算法图解》by 杰伊•温格罗)

本文内容借鉴一本我非常喜欢的书——《数据结构与算法图解》。学习之余,我决定把这本书精彩的部分摘录出来与大家分享。 写在前面 算法这个词听起来很深奥,其实不然。它只是解决某个问题的一套流程。 准备一碗麦片的流程也可以说是一种算法&#xff0…

谷歌将于2023年初在Android 13上推出隐私沙盒测试版

©网络研究院 互联网巨头谷歌表示,计划从明年年初开始,在运行Android 13的移动设备上推出安卓隐私沙盒测试版。 该公司表示:“隐私沙盒测试版将面向希望测试广告相关API作为其解决方案一部分的广告技术和应用开发者开放。” 为此,开发者…

解密 MySQL 的主备一致

MySQL 实现主备一致肯定是 binlog。毫不夸张的说,MySQL 能够成为现在最流行的开源数据库,binlog 功不可没。 MySQL主备的基本原理 ​ 主备流程图备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长…

漏洞深度分析|Pgadmin 命令执行漏洞

项目介绍 PostgreSQL是世界上第四大流行的开源数据库管理系统,它在各种规模的应用程序中得到了广泛的使用。而管理数据库的传统方法是使用命令行界面(CLI)工具。 PostgreSQL的图形化用户界面(GUI)工具则可以帮助用户对数据库实现更好的管理、操纵、以及可视化其数…

这些方法助你打好年终收官战

一、减少推文中的链接数量 研究表明,没有链接的推文更容易产生粉丝互动。所以你不必在每条推文中都包含链接。链接的精妙在于精而不在于杂。所以如果你限制包含链接的推文数量,你会发现你推文的粉丝参与度会增加。 少量的链接更有利于和粉丝建立信任&a…

【从零开始学习深度学习】27.卷积神经网络之VGG11模型介绍及其Pytorch实现【含完整代码】

目录1. VGG块介绍2. 构造VGG网络模型3. 获取Fashion-MNIST数据并用VGG-11训练模型4.总结AlexNet在LeNet的基础上增加了3个卷积层。但AlexNet对卷积窗口、输出通道数和构造顺序均做了大量的调整。虽然AlexNet模型表明深度卷积神经网络可以取得出色的结果,但并没有提供…

C++ Reference: Standard C++ Library reference: Containers: map: map: emplace

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/emplace/ 公有成员函数 <map> std::map::emplace template <class... Args> pair<iterator,bool> emplace (Args&&... args);构造并插入元素 如果元素的键是唯一的&#xff0c;…

【沙拉查词】沙拉查词配置教程——如何实现截图OCR翻译、截图翻译?

一、问题背景 2022年12月16日&#xff0c;沙拉查词仍然没有截图翻译的功能。 这个功能&#xff0c;在百度翻译上虽然能够实现&#xff0c;但是要额外下一个软件和挂在后台&#xff0c;总是觉得麻烦。 二、解决方法 如果你是一个quicker软件使用者&#xff0c;那么通过添加「…

python中的字典详解

目录 一.思考 二.字典定义 注意 三.字典数据的获取 注意 字典的嵌套 四.字典常用操作 1.新增、更新元素 2.删除元素 3.清空字典 4.获取全部Key 5.利用Key遍历字典 五.字典总结 六.字典实例 一.思考 为什么需要字典? 生活中的字典我们可以根据【字】来找到对应的【含…

QT-Linux安装

1、在虚拟机Ubuntu的环境安装好之后&#xff0c;详细看&#xff1a; QT Linux环境搭建——VM虚拟机和Ubuntu的安装_sgmcy的博客-CSDN博客 下面就可以直接安装linux环境下的QT了 2、唯一要注意的一点是&#xff0c;之前安装虚拟机的时候&#xff0c;磁盘空间一定要大一点&…

第十四届蓝桥杯集训——JavaC组第十四篇——嵌套循环

第十四届蓝桥杯集训——JavaC组第十四篇——循环嵌套 目录 第十四届蓝桥杯集训——JavaC组第十四篇——循环嵌套 循环嵌套是逻辑程序中的方法 对应嵌套的循环复杂度 嵌套循环示例&#xff1a; 名词解析&#xff1a; 笛卡尔积 循序命名 循环嵌套是逻辑程序中的方法 循环嵌…

“无人区”行驶8年,李诞的脱口秀路在何方?

刚从《脱口秀大会5》的舞台上下来的李诞&#xff0c;给自己找了份“新工作”——脱口秀直播带货。 12月10日晚&#xff0c;李诞入淘。讲段子、玩梗手到擒来&#xff0c;李诞将自己风趣幽默的脱口秀风格沿用到了这场“来个彩诞”直播首秀中&#xff0c;给交个朋友贡献了超3200万…

5.单点登录(Vue2.x)

概况 百度百科 单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。 关键词 token、session、cooki…

Java基础之《netty(13)—任务队列taskQueue》

一、任务队列 1、用户程序自定义的普通任务 2、用户自定义定时任务 3、非当前Reactor线程调用Channel的各种方法 例如在推送系统的业务线程里面&#xff0c;根据用户的标识&#xff0c;找到对应的Channel引用&#xff0c;然后调用Write类方法向该用户推送消息&#xff0c;就…

基于java+springmvc+mybatis+vue+mysql的养老院管理系统

项目介绍 管理员后台页面&#xff1a; 功能&#xff1a;主页、个人中心、护工管理、家属管理、楼房资料管理、房间资料管理、床位管理、老人入住管理、老人档案管理、身体状态管理、用药情况管理、转房登记管理、外出登记管理、药品信息管理、药品入库管理、药品出库管理、物品…

【C语言】整型的存储方式(大小端,原码,反码,补码)

目录 一、基本类型 二、原码&#xff0c;反码&#xff0c;补码 2.1 原&#xff0c;反&#xff0c;补的计算方式 2.1.1 正数的原&#xff0c;反&#xff0c;补 2.1.2 负数的原&#xff0c;反&#xff0c;补 2.2 为什么要用补码存放 2.3 大小端是什么&#xff1f; 2.3.1 …

明道云联合契约锁共建人事场景电子签约解决方案

背景介绍 在每个组织的人事管理工作中&#xff0c;从招聘、入职、在职、调岗到离职&#xff0c;整个过程中存在大量的合同、证明、函件、通知等文件需要签字盖章。HR每天都要在“核对文件、敲章、通知员工签合同、催进度、给外地员工寄合同、关注合同到期时间等”繁琐的签署工…

使用vite和Element Plus,实现部署后不修改代码/打包,新增主题/皮肤包

Web前端界面切换主题/皮肤&#xff0c;是一个常见的需求。如果希望在打包部署后实现皮肤的修改甚至增加皮肤&#xff0c;不需要修改源码或者重新打包&#xff0c;类似于我们常见的皮肤包扩展&#xff0c;又该如何实现呢&#xff1f; 我使用类似上一期多语言包功能中介绍的方法来…

基于Xlinx的时序分析与约束(3)----基础概念(下)

1、4种基本的时序路径 下图是一张典型的FPGA与上游器件、下游器件通信的示意图&#xff1a; 其可以划分为4条基本的数据路径&#xff0c;这4条路径也是需要进行时序约束的最基本路径。 &#xff08;1&#xff09;寄存器到寄存器 路径2&#xff0c;FPGA内部的寄存器到另一个寄存…

[附源码]Node.js计算机毕业设计高校医疗健康服务系统的设计与实现Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…