基于Hadoop大数据音乐推荐系统的设计与实现

摘 要

各种主流的音乐平台都为用户提供了的大量的音乐,让他们时刻都能沉浸在音乐的海洋之中。然而,过多的音乐往往使用户眼花缭乱,很难发现他们真正所需要的。一套优秀的推荐系统,可以很好地解决这个问题,既能帮助用户找到自己喜欢的歌曲,又能提高用户对App的粘性,从而为平台方带来更多的流量和收益。
本系统的设计包括了后台管理系统、音乐推荐系统以及可视化系统。利用Python进行数据采集与离线分析,利用Hadoop的Map Reduce计算框架实现基于项目协同过滤算法,利用Django框架设计网页界面和后台管理界面。该音乐推荐系统使用了HDFS以及MySQL数据库,HDFS主要用于存储利用爬虫获取的海量的音乐数据,经过数据处理后,再通过Map Reduce计算框架进行计算,实现推荐算法后,将推荐结果保存在MySQL数据库中,以便于在前端页面展示中进行调用。

关键词:音乐推荐系统;大数据;协同过滤

管理员登录相关功能

(1)可以对音乐的信息进行查看、修改,并可以对于音乐进行增加删除操作。
(2)可以对用户的信息进行查看,但是不能查看涉及用户隐私的信息,也可以对于用户进行增加、删除操作。
在这里插入图片描述

图1系统功能模块图

数据库设计

2.1数据库设计原则
该系统采用的是MySQL数据库.在数据库的数据结构设计中,要确保数据库的实体和实体的关系紧密,在数据结构层次上不存在任何差错,避免了后期的纠错,而且要严格遵守数据库的第一范式、第二范式以及第三范式。
在数据库的设计中,使用了Navicat作为一个数据库管理工具,它可以建立多个连接,便于对各种数据库进行管理,同时也可以对特定的云数据库进行管理。
本系统所依靠的数据库是MySQL,它的前端网页显示的是依赖数据库内部的数据。所以,要对采集到的数据进行处理和提取,按照数据库的设计原理,尽量减少数据的冗余。
2.2表设计
在数据库中,需要对于表进行设计,包括用户表、音乐表、用户音乐收藏表以及音乐推荐表等。
在这里插入图片描述
E-R图设计
音乐实体是用来存储音乐信息的实体,里面记录了song_id、song_name、song_singer、song_time、song_album、song_language、song_img、song_file、song_type等信息,这些信息构成了song表的主要内容,主键为song_id。歌曲E-R图如图1所示。
在这里插入图片描述

图1歌曲E-R图
用户实体是存储用户信息的实体,其中记录了用户的user_id、user_name、user_age、user_area、user_phone、user_gender、user_password、user_email等信息,主键为user_id。用户E-R图如图2所示。
在这里插入图片描述

图2用户E-R图

通过以上歌曲、用户、管理员、收藏记录、推荐列表的五个实体设计以后,可以根据系统功能以及业务逻辑衍生出以下关系。系统ER图如下图3所示。
在这里插入图片描述

图3推荐系统E-R图

系统主页面

前端页面采用的基于python开发语言的Django框架设计的,通过运行pythonmanage.pyrunserver命令可以运行前端部分的代码,然后通过http://127.0.0.1:8000/的链接就可以进入系统的主页面,主页面展示如图所示。
在系统的主页面中,当前是以游客的身份进入的,可以进行音乐的查询以及热门音乐的查看和播放,也可以通过主页面中的用户中心来进行用户的注册和登录。
在这里插入图片描述

图4系统主页面展示

2注册登录页面
在系统的主页面中,可以通过主页面中的用户中心来进行用户的注册和登录,登录界面如图5所示。
在这里插入图片描述

图5用户登录页面展示

结论

本文设计实现的是基于Hadoop的大数据音乐推荐系统,设计之初是为了让广大音乐爱好者们有一个更好的平台来满足自己对于音乐的追求。随着人们的精神生活水平的不断提高,音乐在人们生活中的地位越来越重要。
系统的设计实现主要包含两部分:前端页面与后台系统。前端页面主要由游客登录、用户登录、管理员登录三部分组成,主要实现的功能如下:
(1)注册\登录模块:用户可以在系统主页面进行注册、登录,登录过程中若信息不符合要求则不能进入系统。
(2)音乐推荐模块:实现了在主页面中对于热门音乐的推荐,用户登录之后还可以根据用户的行为数据对其进行个性化音乐推荐功能。
(3)信息管理模块:系统管理员可以增添、修改、查看用户以及歌曲的信息。
(4)音乐收藏模块:用户可以对于自己喜欢的歌曲进行收藏,同时也可以作为数据进入推荐算法,为用户带来更优质的服务。
本项目的设计过程中使用Python进行数据爬取,爬取目标为网易云音乐网站,爬取过程中使用到了selenium爬虫和requests库,通过bs4库来解析源码。将爬取的数据存储到MySQL数据库中,使用Django框架搭建web页面,构建音乐网站,读取数据库爬取的数据进行展示。推荐算法部分采用Java语言实现基于物品的协同过滤算法,使用Map Reduce计算框架进行计算,并将数据存储到MySQL和HDFS中。
经过上述技术和算法的整合,项目开发已经取得成功,需求分析中所提及的内容都已实现,但是由于开发时间较紧,加之技术和环境的限制,系统功能并不完善,并没有达到理想的预期结果,需要通过今后不断地学习来完善和改进本系统。

参考文献

[1]刘帅,刘婵娟.音乐推荐系统综述[J].广州大学学报(自然科学版),2020,19(05):36-46+77.
[2]谭学清,何珊.音乐个性化推荐系统研究综述[J].现代图书情报技术,2014(09):22-32.
[3]陈雅茜.音乐推荐系统及相关技术研究[J].计算机工程与应用,2012,48(18):9-16+47.
[4]彭立涵.基于大数据平台的音乐推荐系统的设计与实现[D].哈尔滨理工大学,2021.
[5]黄川林,鲁艳霞.基于协同过滤和标签的混合音乐推荐算法研究[J].软件工程,2021,24(04):10-14.
[6]余明辉,张良均.《Hadoop大数据开发基础》[M].北京:人民邮电出版社,2018.2:1-144.
[7]嵩天,礼欣,黄天羽.《Python语言程序设计基础(第2版)》[M].北京:高等教育出版社,2017.2:1-309.
[8]张燕,唐振民,李燕萍.面向推荐系统的音乐特征抽取[J].计算机工程与应用,2011,47(05):130-133.
[9]黄立威,江碧涛,吕守业,刘艳博,李德毅.基于深度学习的推荐系统研究综述[J].计算机学报,2018,41(07):1619-1647.
[10]张国华,叶苗,王自然,周婷婷.大数据Hadoop框架核心技术对比与实现[J].实验室研究与探索,2021,40(02):145-148+176.
[11]华泽,叶雨航.协同过滤算法及在个性化音乐推荐中的应用[J].现代计算机,2021(22):43-46+54.[12]郝树魁.HadoopHDFS和Map Reduce架构浅析[J].邮电设计技术,2012(07):37-42.[13]王冉阳.基于Django和Python的Web开发[J].电脑编程技巧与维护,2009(02):56-58.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA遇到EasyConnect中的网络资源无法访问的问题

IDEA遇到EasyConnect中的网络资源无法访问的问题 摘要由CSDN通过智能技术生成 点击编辑IDEA的 启动配置,然后在启动器下面的新增一个请求参数然后重新启动项目, java.net.preferIPv4Stack true IDEA就能连接到EasyConnect代理的网络服务 wanshanyu_ 关…

IP研究 | 大数据洞察黄油小熊的爆火之路

一只来自泰国的小熊在国内红成了顶流。 今年,黄油小熊以烘焙店“打工人”的超萌形象迅速走红,2个月内火遍中国的社交媒体,泰国门店挤满飘洋过海求合影的中国粉丝,根据数说故事全网大数据洞察,黄油小熊2024年度的线上声…

分数求和ᅟᅠ        ‌‍‎‏

分数求和 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为…

5G中的随机接入过程可以不用收RAR?

有朋友提到了一种不用接收RAR的RA过程,问这个是怎么回事。其实在刚刚写过的LTM cell switch篇章中就有提到,这里把所有相关的内容整理如下。 在RACH-less LTM场景,在进行LTM cell switch之前就要先知道target cell的TA信息,进而才…

Ubuntu安装grafana

需求背景:管理服务器,并在线预警,通知 需求目的: 及时获取服务器状态 技能要求: 1、ubuntu 2、grafana 3、prometheus 4、https://img-home.csdnimg.cn/images/20230724024159.png?origin_urlhttps%3A%2F%2Fimg…

vue3获取、设置元素高度

前言 在web端常见的需求场景中,会经常遇到table表格需要根据页面可视区域使高度自适应的情况。 傻喵(作者本人)昨天在尝试使用vue3实现这个需求时,看了几篇网上写的回答,都不太全面,所以干脆自己写个总结吧.(第一次写&#xff0c…

美畅物联丨观看实时视频对服务器带宽有什么要求?

​随着互联网的迅猛发展,实时视频观看已然成为人们日常生活中不可或缺的一部分。不管是视频会议、在线教育,还是在线娱乐,实时视频都起到了极为重要的作用。不过,实时视频的流畅播放对服务器的带宽有着极高的要求。本文将深入探究…

MongoDB-固定集合(Capped Collection)

在 MongoDB 中,固定集合(Capped Collection)是一种具有特殊属性的集合。固定集合具有一个固定的最大大小,并且一旦达到该大小时,最早插入的文档将会被自动删除,以便为新的文档腾出空间。固定集合的这种特性…

EasyExcel注解使用

上接《Springboot下导入导出excel》,本篇详细介绍 EasyExcel 注解使用。 1. ExcelProperty value:指定写入的列头,如果不指定则使用成员变量的名字作为列头;如果要设置复杂的头,可以为value指定多个值order&#xff…

yolo-V3

1、研究背景及意义 1)对yolo进行创新,准确度更高。 2、创新点 1)主要是更换了主干网络,使用了多尺度特征融合。 3、网络结构 yolo-V3以Darket-Net-53为主干网络。网络输入一张尺寸为416416的图片,经过多层卷积分别…

零基础如何使用ChatGPT快速学习Python

引言 AI编程时代来临,没有编程基础可以快速上车享受时代的红利吗?答案是肯定的。本文旨在介绍零基础如何利用ChatGPT快速学习Python编程语言,开启AI编程之路。解决的问题包括:传统学习方式效率低、缺乏互动性以及学习资源质量参差…

重生之我在异世界学编程之C语言:枚举联合篇

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文枚举(Enum&#xff0…

MYSQL索引的分类和创建

目录 1、聚簇索引和非聚簇索引 tips: 小问题:主键为什么建议使用自增id? 2、普通索引 (常规索引)(normal) 3、唯一索引(UNIQUE ) 唯一索引和主键的区别: 唯一约束和唯一索引的区别&#…

Robust Depth Enhancement via Polarization Prompt Fusion Tuning

paper:论文地址 code:github项目地址 今天给大家分享一篇2024CVPR上的文章,文章是用偏振做提示学习,做深度估计的。模型架构图如下 这篇博客不是讲这篇论文的内容,感兴趣的自己去看paper,主要是分享环境&…

.NET 一款获取主机远程桌面端口的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

【开源】A066—基于JavaWeb的农产品直卖平台的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…

vue3+vite+ts 使用webrtc-streamer播放海康rtsp监控视频

了解webrtc-streamer webrtc-streamer 是一个使用简单机制通过 WebRTC 流式传输视频捕获设备和 RTSP 源的项目,它内置了一个小型的 HTTP server 来对 WebRTC需要的相关接口提供支持。相对于ffmpegflv.js的方案,延迟降低到了0.4秒左右,画面的…

C语言基础六:循环结构及面试上机题

Day06:循环结构 定义 代码的重复执行,就叫做循环 循环的分类 无限循环:其实就是死循环,程序设计中尽量避免无限循环。程序中的无限循环必须可控。有限循环:循环限定循环次数或者循环的条件。 循环的构成 循环条件循环体 当型循环的实现…

树莓集团:探索打造数字影像产业新发展

在当今数字化高速发展的时代背景下,树莓集团始终勇立潮头,坚定地踏上了探索打造产业新发展的非凡征程。 产业生态构建是树莓集团战略布局中的关键一环。集团积极与上下游企业开展广泛而深入的合作,建立起一个互利共赢、协同发展的产业生态系…

Linux 基础环境的开发工具以及使用(下)

1. make / Makefile 自动化构建的工具 1)引入 在我们进行一些大型的工程的时候,代码量是极其大,当我们代码在进行一系列的编译的时候,难免会出现一些错误,当我们对错误进行一系列的更改之后,难道我们需要…