基于 Flask 的音乐推荐与可视化分析系统,包含用户、创作者、管理员三种角色,集成 ECharts 进行数据可视化,采用混合推荐算法

音乐推荐与可视化分析系统

基于 Flask 的音乐推荐与可视化分析系统,包含用户、创作者、管理员三种角色,使用 SQLite 数据库,集成 ECharts 进行数据可视化,采用混合推荐算法。

功能特性

用户端功能

  • ✅ 用户注册与登录
  • ✅ 音乐浏览与搜索
  • ✅ 音乐详情查看
  • ✅ 音乐评分(1-5星)
  • ✅ 音乐收藏(收藏/取消收藏)
  • ✅ 音乐评论(发表评论)
  • ✅ 个性化推荐(基于混合推荐算法)
  • ✅ 推荐结果可视化

创作者端功能

  • ✅ 创作者登录
  • ✅ 上传音乐作品(音频+封面)
  • ✅ 查看作品统计(上传数量、播放量、平均评分、新增作品)
  • ✅ 数据可视化展示

管理员端功能

  • ✅ 管理员登录
  • ✅ 系统数据可视化(用户分布、音乐流派分布、系统运营数据)
  • ✅ 用户管理(查看列表、编辑信息、禁用/启用、删除用户)
  • ✅ 音乐管理(新增音乐、编辑音乐、删除音乐)
  • ✅ 收藏管理(查看列表、按用户筛选、搜索音乐、删除收藏)
  • ✅ 评论管理(查看列表、按用户筛选、搜索音乐、查看详情、删除评论)

数据可视化

  • ✅ ECharts图表展示
  • ✅ 用户角色分布饼图
  • ✅ 音乐流派分布柱状图
  • ✅ 创作者上传统计(数量、播放量、评分)
  • ✅ 响应式设计,适配不同屏幕

推荐算法说明

系统采用混合推荐算法,结合协同过滤和基于内容的推荐:

协同过滤(权重70%)

基于用户相似度进行推荐:

  • 计算用户之间的相似度(余弦相似度)
  • 找到与目标用户最相似的K个用户
  • 推荐这些相似用户喜欢但目标用户未听过的音乐

基于内容的推荐(权重30%)

根据用户的流派偏好进行推荐:

  • 统计用户听过的不同流派音乐
  • 计算每个流派的平均评分
  • 推荐用户喜爱流派中的高分音乐

混合推荐

将两种推荐结果按照70:30的权重进行融合,最终生成个性化推荐列表。

数据库模型

系统使用SQLite数据库,包含以下数据表:

User(用户表)

  • id: 用户ID(主键)
  • username: 用户名(唯一)
  • password: 密码(加密存储)
  • email: 邮箱(唯一)
  • role: 角色(user/creator/admin)
  • is_active: 是否激活
  • created_at: 创建时间

Music(音乐表)

  • id: 音乐ID(主键)
  • title: 歌曲标题
  • artist: 艺术家
  • album: 专辑
  • genre: 流派
  • duration: 时长(秒)
  • release_date: 发布日期
  • file_url: 音乐文件路径
  • cover_url: 封面图片路径
  • description: 描述
  • creator_id: 创作者ID(外键)
  • play_count: 播放次数
  • created_at: 创建时间

Rating(评分表)

  • id: 评分ID(主键)
  • user_id: 用户ID(外键)
  • music_id: 音乐ID(外键)
  • score: 评分(1-5)
  • created_at: 创建时间

Favorite(收藏表)

  • id: 收藏ID(主键)
  • user_id: 用户ID(外键)
  • music_id: 音乐ID(外键)
  • created_at: 创建时间

Comment(评论表)

  • id: 评论ID(主键)
  • user_id: 用户ID(外键)
  • music_id: 音乐ID(外键)
  • content: 评论内容
  • created_at: 创建时间
  • updated_at: 更新时间

Recommendation(推荐表)

  • id: 推荐ID(主键)
  • user_id: 用户ID(外键)
  • music_id: 音乐ID(外键)
  • score: 推荐分数
  • created_at: 创建时间

技术栈

  • 后端:Flask
  • 数据库:SQLite
  • 前端:HTML + Tailwind CSS
  • 可视化:ECharts 5
  • 推荐算法:Python(协同过滤 + 内容推荐)

项目结构

复制代码
.
├── app.py                  # Flask 主应用
├── models.py               # 数据库模型定义
├── recommendation.py       # 推荐算法实现
├── init_data.py           # 数据初始化脚本
├── requirements.txt       # Python 依赖
├── .coze                  # 项目配置
├── templates/             # HTML 模板
│   ├── base.html
│   ├── index.html
│   ├── login.html
│   ├── register.html
│   ├── user/
│   │   ├── dashboard.html
│   │   ├── music.html
│   │   └── recommendations.html
│   ├── creator/
│   │   ├── dashboard.html
│   │   └── upload.html
│   └── admin/
│       ├── dashboard.html
│       ├── users.html
│       ├── music.html
│       ├── favorites.html
│       └── comments.html
└── instance/              # SQLite 数据库文件

系统架构

前后端架构

  • 前端:使用HTML + Tailwind CSS构建响应式页面
  • 后端:Flask提供RESTful API接口
  • 数据库:SQLite存储用户、音乐、评分、收藏、评论等数据
  • 可视化:ECharts实现数据可视化展示

核心模块

  1. 认证模块

    • 用户注册与登录
    • 基于Flask-Login的会话管理
    • 角色权限控制
  2. 推荐模块

    • 协同过滤算法
    • 基于内容的推荐
    • 混合推荐结果融合
  3. 内容管理模块

    • 音乐上传与管理
    • 封面图片处理
    • 音频文件存储
  4. 交互模块

    • 评分系统
    • 收藏功能
    • 评论系统
  5. 数据可视化模块

    • 用户分布统计
    • 音乐流派分析
    • 系统运营数据展示

推荐流程

  1. 用户登录系统
  2. 浏览并评分至少2首音乐
  3. 系统计算用户相似度和流派偏好
  4. 混合算法生成推荐列表
  5. 前端展示推荐结果

使用指南

用户角色

  1. 登录系统(使用 user1 / 123456)
  2. 浏览音乐库,选择喜欢的音乐进行评分
  3. 查看个性化推荐(需要先评分至少2首音乐才能生成推荐)
  4. 根据推荐结果发现新音乐

创作者角色

  1. 登录系统(使用 zhangsan / 123456)
  2. 上传新的音乐作品
  3. 查看作品统计数据

管理员角色

  1. 登录系统(使用 admin / admin123)
  2. 查看系统数据可视化(用户分布、流派分布等)
  3. 管理用户账户(查看、编辑、激活/停用)
  4. 管理音乐内容(新增、编辑、删除音乐)
  5. 管理收藏记录(查看、筛选、删除收藏)
  6. 管理评论内容(查看、筛选、删除评论)

推荐算法说明

系统采用混合推荐算法,结合协同过滤和基于内容的推荐:

协同过滤(权重70%)

基于用户相似度进行推荐:

  • 计算用户之间的相似度(余弦相似度)
  • 找到与目标用户最相似的K个用户
  • 推荐这些相似用户喜欢但目标用户未听过的音乐

基于内容的推荐(权重30%)

根据用户的流派偏好进行推荐:

  • 统计用户听过的不同流派音乐
  • 计算每个流派的平均评分
  • 推荐用户喜爱流派中的高分音乐

混合推荐

将两种推荐结果按照70:30的权重进行融合,最终生成个性化推荐列表。

功能截图












常见问题

Q: 如何重置数据库?

A: 删除 instance/music_recommendation.db 文件,然后运行 python init_data.py

Q: 推荐功能为什么不显示结果?

A: 用户需要至少评分2首音乐才能生成推荐结果

Q: 如何上传音乐封面?

A: 确保封面图片格式为 PNG、JPG、JPEG、GIF 或 WEBP

Q: 音乐文件支持哪些格式?

A: 支持 MP3、WAV、FLAC 格式,最大文件大小50MB

Q: 如何修改管理员密码?

A: 直接在数据库中修改或通过API接口更新

Q: 系统支持的并发用户数?

A: 开发环境无限制,生产环境建议根据服务器配置优化

相关推荐
郝学胜-神的一滴1 天前
Linux线程使用注意事项:骈文技术指南
linux·服务器·开发语言·数据结构·c++·程序人生
此剑之势丶愈斩愈烈1 天前
mybatis-plus乐观锁
开发语言·python·mybatis
vibag1 天前
LangGraph全家桶使用
python·语言模型·langchain·大模型·langgraph
CC.GG1 天前
【Qt】常用控件----容器类控件(QGroupBox、QTabWidget )以及布局管理器
开发语言·qt
缘如风1 天前
Qt Creator 断点调试断点停不住
开发语言·qt
ghie90901 天前
MATLAB中实现基于高斯混合模型(GMM)的心电信号两级分类
开发语言·matlab·分类
勘察加熊人1 天前
python实现批量中英文文件翻译
开发语言·windows·python
福楠1 天前
模拟实现list容器
c语言·开发语言·数据结构·c++·list
listhi5201 天前
基于MATLAB实现高斯混合模型(GMM)与马尔可夫模型结合
开发语言·matlab