当前位置:   article > 正文

大数据毕业设计:音乐数据采集分析可视化系统 爬虫+深度学习+推荐算法+可视化(源码)✅_音乐数据采集可视化分析

音乐数据采集可视化分析

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总

1、项目介绍

(1)技术栈:
Flask框架+LSTM算法 Vue框架 scrapy爬虫、协同过滤推荐算法(基于用户+基于物品)音乐爬虫 机器学习、Echarts 深度学习神经网络LSTM算法(情感分析)

(2)系统设计架构图
在这里插入图片描述

2、项目界面

(1)音乐数据可视化大屏展示
在这里插入图片描述

(2)音乐数据版权情况分析、翻唱情况分析

在这里插入图片描述

(3)算法推荐–双协同过滤推荐算法
在这里插入图片描述

(4)音乐评论情感分析

在这里插入图片描述

(5)词云图分析

在这里插入图片描述

(6)歌曲热度分析

在这里插入图片描述
(7)音乐评论情感分析–深度学习LSTM算法

在这里插入图片描述

3、项目说明

(1)技术栈:Flask框架、Vue框架、scrapy爬虫、协同过滤推荐算法

网易云音乐数据采集分析可视化推荐系统是一个基于网易云音乐平台的应用,主要功能包括数据采集、数据分析和推荐系统。

  1. 数据采集:使用scrapy爬虫框架对网易云音乐平台进行数据采集,包括歌曲信息、歌手信息、用户信息等。通过爬取数据可以建立一个完整的音乐数据库。

  2. 数据分析:使用Python进行数据分析,对采集到的音乐数据进行处理和统计,得出各种有意义的指标和特征。可以分析歌曲的热度、用户的喜好等,为后续的推荐系统提供基础。

  3. 可视化:使用Vue框架构建前端界面,将数据分析的结果以可视化的方式展示给用户。可以使用各种图表和图形展示歌曲排行榜、用户喜好分布等信息,提高用户体验。

  4. 推荐系统:使用协同过滤推荐算法,根据用户的历史行为和其他用户的行为数据,为用户推荐相关的歌曲和歌手。可以根据用户的喜好进行个性化推荐,提高用户的满意度和粘性。

总结:通过使用Flask框架搭建后端服务器,Vue框架构建前端界面,scrapy爬虫进行数据采集,以及协同过滤推荐算法实现个性化推荐,可以打造一个功能完善的网易云音乐数据采集分析可视化推荐系统。用户可以通过该系统查看音乐排行榜、发现新歌曲、获取个性化推荐等,提升音乐的体验和发现乐趣。

(2)协同过滤推荐算法

在这里插入图片描述

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)



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/742291
推荐阅读
相关标签