计算机毕业设计:基于Python的音乐推荐与情感分析系统 Flask框架 LSTM 可视化 Scrapy爬虫 协同过滤算法 歌曲 歌词 数据分析(建议收藏)✅
1、项目介绍
技术栈
Python 语言、Flask 后端框架、Vue 前端框架、MySQL 数据库、基于用户协同过滤推荐算法、基于物品协同过滤推荐算法、LSTM 情感分析、Echarts 可视化库、Scrapy 爬虫框架
功能模块
- 音乐数据爬取模块
- 数据可视化分析大屏模块
- 音乐评论情感分析模块
- 协同过滤音乐推荐模块
- 歌曲热度分析模块
- 词云分析模块
- LSTM 情感预测模块
- 用户认证模块
项目介绍
本系统基于 Python 与 Flask 框架开发,结合 Vue 前端与 Scrapy 爬虫技术,构建音乐信息分析与可视化推荐平台。系统通过 Scrapy 爬取网易云音乐的歌曲、歌手、歌词、评论等数据,存储于 MySQL 数据库。平台集成基于用户与基于物品的协同过滤算法,通过用户对歌曲的喜欢行为动态调整评分,实现个性化音乐推荐。可视化模块借助 Echarts 展示版权分析、翻唱情况、歌曲热度、词云等多维度图表。LSTM 深度学习模型用于音乐评论情感分析,判断评论情感倾向。系统支持用户注册登录,通过点击歌曲“喜欢”交互更新推荐结果,提供完整的音乐数据服务。
2、项目界面
(1)数据可视化分析大屏
该页面为美食数据分析可视化页面,通过多种图表展示美食品类相关数据分布,直观呈现各类美食的占比情况,同时整合数据统计与可视化展示功能,清晰反映不同品类美食的分布特征。
(2)音乐数据可视化分析
该页面是音乐大数据分析可视化系统的可视化大屏,可开展版权情况分析与翻唱情况分析,展示热门歌手作品发行相关时间维度数据,同时系统还具备词云分析、歌曲热度分析、情感预测等数据分析可视化功能模块。

(3)音乐评论情感分析
该页面是音乐大数据分析可视化系统的主页,依托相关算法实现音乐个性化推荐,展示精选乐评并呈现乐评的好评差评相关数据占比,同时系统还具备词云分析、歌曲热度分析、情感预测、情感分析等数据分析可视化功能模块。

(4)基于协同过滤推荐算法推荐模块
该页面是音乐大数据分析可视化系统的主页,依托相关算法实现音乐热门推荐,展示歌曲的歌手、专辑、时长、类型等基础信息,提供歌曲详情查看和乐评情感分析入口,同时系统还配备词云分析、歌曲热度分析、情感预测等数据分析可视化功能模块。

(5)歌曲热度分析
该页面是音乐大数据分析可视化系统的可视化大屏,核心实现歌曲热度分析功能,以图表形式展示不同歌手的歌曲热度相关数据及时序变化,同时展示具体歌曲的名称、专辑和对应热度信息,系统还兼具词云分析、情感预测等数据分析可视化功能模块。

(6)词云分析
该页面为音乐大数据分析可视化系统的词云分析界面,通过生成词云图直观呈现音乐相关高频关键词,同时结合图表展示对应数据分布,可清晰查看各类音乐信息的出现频次与分布特征,辅助完成音乐数据的文本特征分析。

(7)情感分析情感预测模块------LSTM深度学习算法
该页面是音乐大数据分析可视化系统的情感分析界面,通过多种图表展示音乐相关评论的情感分布与占比情况,直观呈现不同情感类型的占比特征,同时结合整体数据进行统计展示,实现对音乐评论情感倾向的可视化分析。

(8)注册登录模块
该页面为音乐大数据分析可视化系统的情感预测界面,可对音乐相关内容进行情感倾向预测,通过图表直观呈现预测结果分布,同时展示相关数据对比情况,实现对音乐信息情感走向的分析与可视化呈现。

(9)项目架构图
该页面是音乐大数据分析可视化系统的登录注册界面,提供用户账号密码登录与新用户注册功能,可完成身份验证与账号创建,保障系统访问安全,为后续使用音乐数据查询、可视化分析、情感预测等功能提供账号权限支持。


3、项目说明
一、技术栈简要说明
系统后端采用 Python 语言与 Flask 框架构建,前端使用 Vue 框架实现响应式交互,数据库选用 MySQL 进行数据存储。数据采集基于 Scrapy 爬虫框架抓取网易云音乐歌曲、歌手、歌词、评论等信息。推荐模块采用基于用户与基于物品的协同过滤算法,情感分析模块使用 LSTM 深度学习模型,可视化部分通过 Echarts 图表库实现多种图形渲染。
二、功能模块详细介绍
· 音乐数据爬取模块
基于 Scrapy 爬虫框架,对网易云音乐网站的歌曲、歌手、歌词、评论等数据进行定向抓取,经清洗处理后存储于 MySQL 数据库,为后续分析与推荐提供数据基础。
· 数据可视化分析大屏模块
以可视化大屏形式展示音乐数据的多维度分析结果,包含版权情况分析、翻唱情况分析、热门歌手作品发行时间分布等,通过图表直观呈现音乐数据特征。
· 音乐评论情感分析模块
展示精选乐评内容,并呈现乐评的好评与差评数据占比,帮助用户快速了解歌曲评论的情感倾向分布。
· 协同过滤音乐推荐模块
集成基于用户与基于物品的协同过滤算法,用户可通过点击歌曲“喜欢”按钮动态调整对歌曲的评分,系统根据评分数据计算相似用户或相似物品,生成个性化音乐推荐列表。
· 歌曲热度分析模块
以图表形式展示不同歌手的歌曲热度相关数据及时序变化趋势,同时展示具体歌曲的名称、专辑和对应热度信息,反映歌曲的受欢迎程度。
· 词云分析模块
通过生成词云图直观呈现音乐相关高频关键词,展示各类音乐信息的出现频次与分布特征,辅助完成音乐文本数据的特征分析。
· LSTM 情感预测模块
基于 LSTM 深度学习算法,对音乐相关内容进行情感倾向预测,通过图表直观呈现预测结果分布与情感走向,实现对音乐评论情感的分析与预判。
· 用户认证模块
提供用户账号密码登录与新用户注册功能,完成身份验证与账号创建,保障系统访问安全,为后续使用音乐数据查询、可视化分析、情感预测等功能提供账号权限支持。
三、项目总结
本系统基于 Python 与 Flask 框架开发,结合 Vue 前端与 Scrapy 爬虫技术,构建音乐信息分析与可视化推荐平台。系统通过 Scrapy 爬取网易云音乐的歌曲、歌手、歌词、评论等数据,存储于 MySQL 数据库。平台集成基于用户与基于物品的协同过滤算法,通过用户对歌曲的喜欢行为动态调整评分,实现个性化音乐推荐。可视化模块借助 Echarts 展示版权分析、翻唱情况、歌曲热度、词云等多维度图表。LSTM 深度学习模型用于音乐评论情感分析,判断评论情感倾向。系统支持用户注册登录,通过点击歌曲“喜欢”交互更新推荐结果,提供完整的音乐数据服务。
4、核心代码
import json
import os
import random
import time
from flask import Flask, send_from_directory, request
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from api.alipayApi import payBp
from api.baiduApi import idocr
from api.musicApi import musicBp
from api.orderApi import orderBp
from base.core import JSONEncoder
from base.response import ResMsg
from api.userApi import userBp
import logging
# Flask配置
from deeplearning.predict_lstm import sentimentalAnalysis_single
from utils.smsutil import Sms
app = Flask(__name__)
# 注册用户相关的方法
app.register_blueprint(userBp, url_prefix='/user')
app.register_blueprint(payBp, url_prefix='/alipay')
app.register_blueprint(orderBp, url_prefix='/order') # 订单接口
# 具体业务
app.register_blueprint(musicBp, url_prefix='/music')
# 数据库配置信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3306/flask_music_b'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['JSON_AS_ASCII'] = False
app.config['SECRET_KEY'] = 'KJDFLSjfldskj'
UPLOAD_FOLDER="upload"
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
basedir = os.path.abspath(os.path.dirname(__file__))
ALLOWED_EXTENSIONS = set(['txt','png','jpg','xls','JPG','PNG','gif','GIF'])
# 日志系统配置
handler = logging.FileHandler('error.log', encoding='UTF-8')
logging_format = logging.Formatter(
'%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
handler.setFormatter(logging_format)
app.logger.addHandler(handler)
# 返回json格式转换 使用这个的话就不需要每次都写json返回了,简化代码
app.json_encoder = JSONEncoder
# SQLAlchemy 为ORM框架,即用来简化操作数据库的包,具体内容需要学习ORM相关知识
db = SQLAlchemy(app)
# Marshmallow 是用来封装返回SQLAlchemy 的返回结果的,通过这个包可以直接把数据转成JSON,从而返回给前端使用
ma = Marshmallow(app)
# 一个测试的方法,可以测试服务器是否启动了
# @app.route('/test')
# def test(): # put application's code here
# res = ResMsg()
# test_dict = dict(name="zhang", age=19)
# res.update(data=test_dict, code=0)
# return res.data
#
@app.errorhandler(500)
def special_exception_handler(error):
app.logger.error(error)
return '请联系管理员', 500
#判断文件后缀
def allowed_file(filename):
return '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS
@app.route('/file/upload', methods=['POST'], strict_slashes=False)
def api_upload():
res = ResMsg()
file_dir=os.path.join(basedir, app.config['UPLOAD_FOLDER'])
if not os.path.exists(file_dir):
os.makedirs(file_dir)
f = request.files['myfile']
if f and allowed_file(f.filename):
fname = f.filename
# fname = secure_filename(f.filename)
print(fname)
ext = fname.rsplit('.', 1)[1]
unix_time = int(time.time())
new_filename = str(unix_time)+'.'+ext
f.save(os.path.join(file_dir, new_filename))
res.update(data=new_filename, code=0)
return res.data
@app.route('/file/idocr', methods=['POST'], strict_slashes=False)
def api_id_ocr():
res = ResMsg()
file_dir=os.path.join(basedir, app.config['UPLOAD_FOLDER'])
if not os.path.exists(file_dir):
os.makedirs(file_dir)
f = request.files['myfile']
if f and allowed_file(f.filename):
fname = f.filename
# fname = secure_filename(f.filename) 有中文这个会有问题
# print(fname)
ext = fname.rsplit('.', 1)[1]
unix_time = int(time.time())
new_filename = str(unix_time)+'.'+ext
f.save(os.path.join(file_dir, new_filename))
idno = idocr(new_filename)[0]
name = idocr(new_filename)[1]
res.update(data=dict(idno=idno,pic=new_filename,name=name), code=0)
return res.data
@app.route('/file/download/<filename>/')
def api_download(filename):
# print('下载..' + filename)
return send_from_directory('upload', filename, as_attachment=False)
#阿里云短信接口
@app.route('/sms/sendSms', methods=['POST'])
def sendSms():
res = ResMsg()
phone = request.json['phone']
code = random.randint(100000, 999999)
response = json.loads(Sms().sendCode(phone, code))
if response['Code'] == "OK":
res.update(msg="发送成功", code=0, data=code)
else:
res.update(msg="发送失败", code=-1)
return res.data
# 深度学习情感分析接口
@app.route('/deeplearning/senti_single', methods=['POST'])
def senti_single():
res = ResMsg()
data = request.json['data']
datas = [data]
print(datas)
result = sentimentalAnalysis_single(datas)
res.update(msg="成功", code=0, data=result)
return res.data
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0',port=5000)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)