【Python+flask+mysql】网易云数据可视化分析(全网首发)

发布于:2025-05-16 ⋅ 阅读:(20) ⋅ 点赞:(0)

网易云数据可视化分析

项目概述

网易云数据可视化分析系统是一个基于Flask框架开发的Web应用,旨在对网易云音乐平台的用户、歌曲、专辑、歌单等数据进行全面的可视化分析。该系统通过直观的图表、表格和词云等形式,展示网易云音乐的数据分布特征,为用户提供数据洞察。

系统功能

1. 用户认证与权限管理

  • 用户登录/注册: 支持普通用户账号的创建和登录
    • 邮箱验证与密码规则检查
    • 自动识别用户类型,区分普通用户和管理员
    • 安全的密码存储机制
  • 管理员认证: 提供管理员账户注册和登录功能
    • 专属注册入口与验证码保护
    • 对管理员操作进行日志记录
  • 权限控制: 基于角色的访问控制,管理员可访问后台管理系统
    • 细粒度的访问权限设计
    • 操作权限动态检查
    • 敏感操作的二次验证

2. 数据可视化分析

2.1 首页概览
  • 数据量统计: 显示系统中收集的总数据量
    • 歌手、专辑、歌曲、评论等各类数据统计
    • 数据增长趋势分析
  • 热门数据概览: 展示粉丝最多的歌手、歌曲最多的专辑等信息
    • 热门歌手榜单与粉丝数量对比
    • 热门专辑排行与歌曲数量分布
  • 时间区间分析: 展示歌曲时长的分布区间
    • 不同时长区间的歌曲数量统计
    • 各区间受欢迎程度对比
  • 专辑发行年份分析: 通过柱状图展示不同年份专辑发行数量
    • 按年度和月度的发行数量分析
    • 发行高峰期与低谷期的对比研究
  • 歌曲时长分布: 通过饼图展示不同时长区间的歌曲分布
    • 基于时长区间的分类统计
    • 不同时长区间歌曲的受欢迎程度分析
2.2 专业分析图表
  • 用户所在地区分析: 通过地图可视化展示用户地理分布
    • 省级和市级用户分布热力图
    • 不同地区用户偏好对比
    • 地区活跃度分析
  • 粉丝数量分析: 展示不同歌手的粉丝数量对比
    • 按歌手类别(华语/欧美/日韩)的粉丝分布
    • 按歌手性别(男/女/组合)的粉丝数量对比
    • 粉丝增长趋势分析
  • 专辑发行时间分析: 分析专辑发行的时间趋势
    • 按年度发行量变化曲线
    • 不同发行公司的专辑数量对比
    • 季节性发行规律分析
  • 歌曲时长分析: 详细分析歌曲时长的分布特征
    • 不同风格歌曲的时长特征对比
    • 热门歌曲时长集中区间分析
    • 时长与受欢迎程度的相关性研究
  • 用户性别分析: 分析用户性别比例分布
    • 不同年龄段的性别比例
    • 不同地区的性别分布特征
    • 性别与音乐偏好的关联分析
  • 歌单收听量分析: 分析歌单的收听量数据分布
    • 高收听量歌单的共性特征
    • 收听量与歌单创建时间的关联
    • 收听量与歌单类型的关系分析
2.3 词云分析
  • 评论词云: 基于用户评论数据生成词云,直观展示热门评论关键词
    • 智能情感分析,区分正面和负面评论
    • 中英文评论分离处理
    • 评论热词随时间变化的趋势分析
  • 歌词词云: 基于歌曲歌词数据生成词云,展示热门歌词关键词
    • 中英文歌词的平衡处理与展示
    • 不同流派歌词特征对比
    • 歌词热词与社会热点的关联分析
2.4 搜索功能
  • 专辑搜索: 支持按关键词搜索专辑信息
    • 模糊匹配与精准搜索
    • 多维度过滤(发行年份、歌手、公司等)
    • 搜索结果排序与分页展示
  • 歌手搜索: 支持按歌手名称、流派、地区等维度搜索
    • 歌手详情实时展示
    • 相似歌手推荐
  • 歌曲搜索: 支持按歌名、歌词片段、风格等搜索
    • 歌曲属性多维度展示
    • 相关歌曲推荐
  • 用户搜索: 管理员可搜索系统用户信息
    • 用户活跃度分析
    • 用户偏好展示

3. 后台管理系统

  • 用户管理: 管理系统用户账号
    • 用户权限分配
    • 用户状态监控
    • 用户操作日志查询
  • 歌手管理: 管理歌手数据,支持编辑和查看
    • 歌手分类与标签管理
    • 歌手详细信息编辑
    • 歌手关联数据查看
  • 专辑管理: 管理专辑数据,支持编辑和详情查看
    • 专辑封面与信息管理
    • 专辑歌曲列表管理
    • 专辑发行信息编辑
  • 歌曲管理: 管理歌曲信息,包括歌词等详细数据
    • 歌词内容编辑与校正
    • 歌曲音频信息管理
    • 歌曲标签与分类编辑
  • 歌单管理: 管理用户歌单信息
    • 歌单内容审核
    • 歌单分类与推荐设置
    • 歌单流行度分析
  • 评论管理: 管理用户评论数据
    • 评论内容审核
    • 敏感评论过滤
    • 评论热度分析

4. 交互功能

  • 专辑详情展示: 展示专辑封面、发行信息等详细内容
    • 专辑封面高清展示
    • 专辑发行信息展示
    • 专辑歌曲列表交互
  • 分页浏览: 支持大量数据的分页浏览
    • 自适应分页控件
    • 页面大小动态调整
    • 数据缓存与预加载
  • AI助手集成: 底部集成了基于星火大模型的AI聊天助手
    • 音乐推荐智能问答
    • 数据分析结果解释
    • 个性化音乐推荐

技术实现

1. 开发环境与依赖

  • 后端框架: Flask 3.1.0
  • 数据库: MySQL (PyMySQL 1.1.1)
  • ORM框架: SQLAlchemy 2.0.40, Flask-SQLAlchemy 3.1.1
  • 模板引擎: Jinja2 3.1.6
  • 前端组件:
    • Bootstrap
    • jQuery
    • ECharts (数据可视化图表库)
    • MetisMenu (菜单控件)
    • Feather Icons (图标库)
  • 数据处理:
    • Pandas 2.2.3 (数据分析库)
    • NumPy 2.2.5 (科学计算库)
  • 可视化工具:
    • Matplotlib 3.10.1
    • WordCloud 1.9.4 (词云生成)
  • 其他依赖:
    • Flask-Admin 1.6.1 (后台管理模块)
    • Flask-WTF 1.2.2 (表单处理)
    • Redis 5.2.1 (缓存支持)
    • scikit-learn 1.4.1 (机器学习算法库)
    • BeautifulSoup 4.12.3 (HTML解析)
    • Requests 2.31.0 (HTTP请求库)
    • Crypto 1.4.1 (加密算法库)

2. 项目架构

2.1 代码结构
网易云可视化/
├── app.py                # 主应用入口
├── requirements.txt      # 项目依赖
├── templates/            # 前端模板
│   ├── index.html        # 首页模板
│   ├── login.html        # 登录页面
│   ├── register.html     # 注册页面
│   ├── admin/            # 管理后台模板
│   └── ...               # 其他页面模板
├── static/               # 静态资源
│   ├── css/              # 样式文件
│   ├── js/               # JavaScript文件
│   ├── image/            # 图片资源
│   ├── font/             # 字体文件
│   └── ...               # 其他静态资源
├── utils/                # 工具模块
│   ├── utils.py          # 通用工具函数
│   ├── query.py          # 数据库查询函数
│   ├── getIndexData.py   # 首页数据处理
│   ├── getAlbumData.py   # 专辑数据处理
│   ├── getWorldCouldData.py # 词云数据处理
│   ├── getRegionData.py     # 地区数据处理
│   ├── getGenderData.py     # 性别数据处理
│   ├── getFansData.py       # 粉丝数据处理
│   ├── getPlaylistData.py   # 歌单数据处理
│   ├── getSongsData.py      # 歌曲数据处理
│   └── getSearchData.py     # 搜索功能支持
├── data/                 # 数据文件
│   ├── origin_data/      # 原始数据
│   ├── filtered_data/    # 处理后的数据
│   └── progress/         # 爬虫进度记录
└── spider/               # 数据爬虫
    ├── crawl.py          # 爬虫核心功能
    ├── get_data.py       # 数据获取与存储
    └── read_headers.py   # 请求头处理
2.2 数据库设计

系统使用MySQL数据库,主要包含以下表结构:

  • user: 存储用户账号信息

    • id: 用户ID (主键)
    • email: 用户邮箱
    • password: 密码
    • role: 用户角色 (admin/user)
  • artists: 歌手表

    • artist_id: 歌手ID (主键)
    • artist_name: 歌手名称
    • artist_url: 歌手主页链接
    • fan_count: 粉丝数量
    • bio_TEXT: 歌手简介
  • albums: 专辑表

    • album_id: 专辑ID (主键)
    • album_name: 专辑名称
    • album_cover: 封面图片链接
    • album_url: 专辑链接
    • song_count: 歌曲数量
    • release_date: 发行日期
    • release_company: 发行公司
    • artist_id: 歌手ID (外键)
  • songs: 歌曲表

    • song_id: 歌曲ID (主键)
    • song_name: 歌曲名称
    • song_url: 歌曲链接
    • duration: 歌曲时长 (毫秒)
    • artist_id: 歌手ID (外键)
    • album_id: 专辑ID (外键)
    • lyrics: 歌词
    • commentThreadId: 评论ID
  • playlists: 歌单表

    • playlist_id: 歌单ID (主键)
    • playlist_name: 歌单名称
    • playlist_url: 歌单链接
    • create_date: 创建日期
    • listen_count: 收听次数
    • song_count: 歌曲数量
    • description: 歌单描述
    • user_id: 用户ID (外键)
  • comments: 评论表

    • comment_id: 评论ID (主键)
    • comment_content: 评论内容
    • like_count: 点赞数
    • comment_date: 评论日期
    • timeStr: 评论时间字符串
    • user_id: 用户ID (外键)
    • song_id: 歌曲ID (外键)

3. 核心实现细节

3.1 爬虫模块实现

爬虫模块是系统数据获取的核心,通过以下几个主要组件实现:

  • 数据加密与接口请求:
    • 采用与网易云音乐官方一致的AES加密算法处理请求参数
    • 模拟用户登录状态,获取包含完整数据的响应
    • 自动处理请求头与Cookie管理,防止被反爬
# AES加密实现示例
def get_params(data):
    first = enc_params(data, g)
    second = enc_params(first, i)
    return second

def enc_params(data, key):
    iv = "0102030405060708"
    data = to_16(data)
    aes = AES.new(key=key.encode("utf-8"), IV=iv.encode("utf-8"), mode=AES.MODE_CBC)
    bs = aes.encrypt(data.encode("utf-8"))
    return str(b64encode(bs), "utf-8")
  • 多维度数据采集:

    • 歌手采集: 按照华语、欧美、日韩等类别分类爬取
    • 专辑采集: 通过歌手ID获取其所有专辑信息
    • 歌曲采集: 从专辑中获取完整歌曲列表与详情
    • 歌词获取: 通过歌曲ID调用专门接口获取完整歌词
    • 评论抓取: 获取歌曲热门评论,包括点赞数、时间等信息
    • 用户信息: 从评论中提取用户ID并获取用户详情
    • 歌单数据: 获取用户创建的歌单及歌单详情
  • 断点续传与进度管理:

    • 使用本地文件记录已爬取的ID,支持中断后从断点继续
    • 采用增量更新策略,避免重复爬取相同数据
    • 实时记录爬取进度,便于监控与管理
  • 异常处理与容错机制:

    • 针对网络波动实现自动重试
    • 对不同类型的API错误实现分类处理
    • 数据缺失时采用优雅降级策略
  • 数据存储与清洗:

    • 采用CSV作为中间存储格式,支持数据增量更新
    • 使用Pandas进行数据清洗与标准化
    • 处理编码问题,确保中英文混合数据正确存储
3.2 数据处理与预处理

系统通过utils模块中的各种数据处理函数对原始数据进行清洗和转换:

  • 数据加载: 使用Pandas从MySQL数据库加载数据
  • 数据清洗: 处理缺失值、异常值,确保数据质量
  • 数据转换: 处理时间格式、类别标签等
  • 数据分组: 按照不同维度进行数据聚合分析

例如,处理歌曲时长分布:

df_songs_chart = df_songs.dropna(subset=['duration']).copy()
df_songs_chart['duration_min'] = df_songs_chart['duration'] / (1000 * 60)
df_songs_chart['duration_min'] = df_songs_chart['duration_min'].round(2)
bins = [0, 1, 2, 3, 4, 5, 6, float('inf')]
labels = ['0-1分钟', '1-2分钟', '2-3分钟', '3-4分钟', '4-5分钟', '5-6分钟', '6分钟以上']
df_songs_chart['duration_category'] = pd.cut(
    df_songs_chart['duration_min'],
    bins=bins,
    labels=labels,
    right=False
)
3.3 数据分析算法实现

系统使用多种数据分析算法处理音乐数据:

  • 文本分析算法:

    • 词云生成: 使用jieba分词和WordCloud库实现中英文混合词云生成
    def getLyrics():
        lyrics_df = df_songs.dropna(subset=['lyrics'])
        
        # 中英文平衡处理
        def is_chinese_dominant(text):
            chinese_chars = len(re.findall(r'[\u4e00-\u9fff]', text))
            english_chars = len(re.findall(r'[a-zA-Z]', text))
            return chinese_chars > 0.3 * (chinese_chars + english_chars)
        
        # 分类并合并歌词
        chinese_lyrics = []
        english_lyrics = []
        
        for lyrics in lyrics_df['lyrics']:
            if is_chinese_dominant(lyrics):
                chinese_lyrics.append(lyrics)
            else:
                english_lyrics.append(lyrics)
        
        # 平衡处理
        if len(chinese_lyrics) > 0 and len(english_lyrics) > 0:
            min_len = min(len(chinese_lyrics), len(english_lyrics))
            if len(chinese_lyrics) > min_len:
                import random
                random.shuffle(chinese_lyrics)
                chinese_lyrics = chinese_lyrics[:min_len*2]
            if len(english_lyrics) > min_len:
                import random
                random.shuffle(english_lyrics)
                english_lyrics = english_lyrics[:min_len*2]
        
        # 合并所有歌词
        combined_lyrics = ' '.join(chinese_lyrics + english_lyrics)
        return combined_lyrics
    
    • 情感分析: 使用词典匹配和机器学习模型分析评论情感倾向
    • 主题提取: 使用LDA模型对歌词进行主题聚类分析
  • 统计分析算法:

    • 地区分布分析: 使用地理数据聚合和热力图展示用户地区分布
    def getRegionData():
        regionList = df_users_chart['所属市']
        regionList = regionList.dropna().reset_index(drop=True)
        regionObj = {}
    
        # 统计每个区域出现的次数
        for region in regionList:
            if region not in regionObj:
                regionObj[region] = 1
            else:
                regionObj[region] += 1
    
        # 排序,按出现次数降序排列
        sorted_region = sorted(regionObj.items(), key=lambda item: item[1], reverse=True)
        top_region = dict(sorted_region)
    
        # 创建Echart数据
        regionEchartData = []
        for key, value in top_region.items():
            regionEchartData.append({
                'name': key,
                'value': value
            })
        return regionEchartData
    
3.4 可视化实现

系统主要使用ECharts库实现数据可视化:

  • 柱状图: 展示专辑发行年份分布
  • 饼图: 展示歌曲时长分布
  • 地图可视化: 展示用户地理分布
  • 表格展示: 展示专辑详细信息
  • 热力图: 展示用户活跃度分布
  • 雷达图: 多维度音乐特征对比
  • 关系图: 展示歌手合作网络

词云使用WordCloud库实现:

wordcloud = WordCloud(
    width=1000,
    height=400,
    background_color='white',
    font_path=font_path,
    max_words=200,
    collocations=False
).generate(lyrics_text)
3.5 用户认证与安全
  • 密码安全: 登录和注册时校验密码强度
    • 使用密码哈希存储而非明文
    • 密码强度实时检测与提示
    • 防止常见安全漏洞如SQL注入
  • 表单验证: 使用Flask-WTF进行表单验证
    • 服务端完整性验证
    • 客户端JavaScript预验证
    • 错误信息友好展示
  • CSRF保护: 防止跨站请求伪造攻击
    • 所有表单添加CSRF令牌
    • 敏感操作二次验证
    • 会话超时自动登出
  • 会话管理: 使用Flask session管理用户会话
    • 加密Cookie存储
    • 会话状态管理
    • 安全的登出机制
3.6 后台管理

使用Flask-Admin框架实现后台管理系统:

  • 模型视图: 为每个数据模型创建自定义管理视图
    • 自定义列表展示
    • 自定义表单验证
    • 自定义数据过滤器
  • 权限控制: 基于角色的访问控制
    • 访问权限检查钩子
    • 操作日志记录
    • 角色基础的界面定制
  • 数据展示: 自定义字段展示和格式化
    • 格式化日期、时间等字段
    • 封面图片预览功能
    • 歌词内容分段展示
  • 数据操作: 支持数据的增删改查
    • 批量操作支持
    • 数据导入导出功能
    • 操作确认与撤销机制
3.7 前端交互
  • 响应式设计: 适配不同屏幕尺寸
    • 基于Bootstrap的栅格系统
    • 媒体查询自适应布局
    • 移动端友好的交互设计
  • 分页功能: 实现数据的分页浏览
    • 异步加载分页内容
    • 自定义每页显示数量
    • 记住用户浏览位置
  • 动态加载: 使用AJAX技术实现部分内容的动态加载
    • 图表数据异步加载
    • 无刷新内容更新
    • 加载状态反馈
  • 表单交互: 实现表单提交和验证
    • 实时表单验证
    • 提交前数据预检
    • 提交结果即时反馈
3.8 AI助手集成

系统底部集成了基于星火大模型的AI聊天助手:

  • 实时对话: 提供即时响应
    • WebSocket实时通信
    • 流式响应生成
    • 打字机效果展示
  • 错误处理: 提供备用连接和错误处理机制
    • 自动重连机制
    • 超时与失败处理
    • 降级响应策略
  • 用户界面: 友好的聊天界面设计
    • 气泡式对话框
    • 历史消息滚动
    • 响应中状态指示

部署指南

MAC环境部署

  1. 克隆项目到本地
  2. 安装Python 3.x环境
  3. 安装依赖包:
    pip install -r requirements.txt
    
  4. 配置MySQL数据库:
    mysql -u root -p
    # 输入密码chuankangkk
    CREATE DATABASE net_music;
    # 导入数据 (根据实际情况导入)
    
  5. 启动应用:
    python app.py
    
  6. 访问 http://127.0.0.1:5001

Windows环境部署

  1. 克隆项目到本地
  2. 安装Python 3.x环境
  3. 安装依赖包:
    pip install -r requirements.txt
    
  4. 配置MySQL数据库:
    • 使用MySQL Workbench或命令行创建数据库
    • 导入数据
  5. 修改数据库连接配置(如有必要):
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:密码@localhost/net_music'
    
  6. 启动应用:
    python app.py
    
  7. 访问 http://127.0.0.1:5001

项目特色

  1. 全面的数据分析: 从多个维度对网易云音乐数据进行分析
  2. 直观的可视化效果: 使用各种图表形式直观展示数据特征
  3. 完善的用户权限控制: 区分普通用户和管理员权限
  4. 强大的后台管理功能: 提供完善的数据管理能力
  5. 良好的用户交互体验: 响应式设计和友好的界面
  6. AI助手支持: 集成智能对话助手,提升用户体验
  7. 先进的爬虫技术: 高效获取网易云音乐平台数据
  8. 精准的数据分析算法: 应用多种统计与机器学习算法
  9. 细致的数据可视化: 多种形式展示数据洞察结果
  10. 安全的系统架构: 注重数据安全与用户隐私保护

作者

B站/咸鱼: 万能程序员

截图:
首页

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

B站视频:
https://www.bilibili.com/video/BV1gNExzDEYX/


网站公告

今日签到

点亮在社区的每一天
去签到