154-基于Flask的抖音短视频数据可视化分析系统

基于 Flask 的抖音短视频数据可视化分析系统 - 技术文档

1. 项目概述

1.1 项目背景

随着短视频行业的快速发展,抖音作为国内领先的短视频平台,每天产生海量的视频数据。如何对这些数据进行有效的采集、存储、分析和可视化展示,成为数据科学领域的重要课题。本系统基于 Flask 框架构建,采用 B/S 架构,实现了对抖音短视频数据的多维度分析与可视化展示。

1.2 系统功能

系统包含以下核心功能模块:

模块 功能说明
数据大屏 KPI 卡片、分类分布、月度趋势、城市分布、互动漏斗、仪表盘、热力图
视频内容分析 树状图、箱线图、桑基图、时长分布、互动雷达图
作者分析 Top 作者柱状图、气泡图、散点图、认证分布、雷达图
时间分析 每日趋势、24 小时分布、周度发布、互动趋势、日历热力图、累计面积图
地理分析 中国地图热力图、城市排名柱状图、城市气泡图
话题分析 话题词云、桑基图、话题关系网络图、话题柱状图
商业分析 商业类型分布、GMV 漏斗、转化率、商业趋势
对比分析 多视频搜索选择、雷达对比图、柱状对比图
趋势预测 线性回归预测未来 7 天趋势、R-squared 拟合度指标
作者画像 搜索作者、KPI 卡片、分类饼图、月度趋势、Top 视频
话题热度排行 Top20 横向柱状图、词云、详情表格
数据异常检测 IQR 算法检测、散点图标记、异常类型饼图、异常明细表
全屏数据大屏 暗色主题、实时刷新、KPI、月度趋势、城市饼图、漏斗、Top5、滚动播报
数据管理 分页表格、搜索筛选、排序、新增/编辑/删除/批量删除、导入/导出
用户中心 修改密码、更新资料

1.3 技术栈

层级 技术 版本
后端框架 Flask 3.0.x
ORM Flask-SQLAlchemy 3.1.x
用户认证 Flask-Login 0.6.x
数据库 SQLite 内置
前端框架 Bootstrap 5.x
图标库 Bootstrap Icons 1.x
可视化 Apache ECharts 5.x
词云插件 echarts-wordcloud 2.x
Python Python 3.8+

2. 系统架构

2.1 整体架构

系统采用经典的 MVC 架构模式:

  • Model(模型层):models/ 目录,定义数据表结构和业务方法
  • View(视图层):templates/ 目录,Jinja2 模板引擎渲染 HTML
  • Controller(控制层):routes/ 目录,Flask Blueprint 路由处理请求

请求流程:

  1. 用户访问 URL
  2. Flask 路由匹配 (@app.route)
  3. @login_required 检查登录状态,未登录则重定向到 /login
  4. 渲染页面路由调用 render_template() 返回 HTML,或 API 路由通过 SQLAlchemy 查询后 jsonify() 返回 JSON
  5. 前端 fetch() 请求 API,ECharts 渲染图表

2.2 目录结构


3. 数据库设计

3.1 用户表 (user)

字段 类型 说明
id Integer, PK 用户 ID
username String(64), Unique 用户名
password_hash String(256) 密码哈希值
email String(120) 邮箱
role String(16) 角色(admin / user)

3.2 视频表 (video)

字段 类型 索引 说明
id Integer, PK - 自增主键
video_id String(64) - 抖音视频唯一 ID
title String(512) - 视频标题
author String(128) - 作者昵称
uid String(64) - 作者 UID
douyin_id String(64) - 抖音号
likes Integer - 点赞数
comments Integer - 评论数
favorites Integer - 收藏数
shares Integer - 转发数
publish_date String(32) - 发布日期
duration Float - 视频时长(秒)
fans Integer - 作者粉丝数
author_likes Integer - 作者总获赞
certification String(128) - 认证信息
bio String(512) - 作者简介
music String(256) - 背景音乐
topics String(512) - 话题标签
category String(256) - 分类(完整路径)
category_l1 String(64) Yes 一级分类
category_l2 String(64) Yes 二级分类
category_l3 String(64) - 三级分类
city String(64) Yes 城市
commerce_type String(128) - 小黄车类型
commerce_title String(256) - 小黄车标题
url String(512) - 视频分享链接
video_url String(512) - 视频播放地址
cover_url String(512) - 封面图地址
tags String(512) - 标签

3.3 分类拆分逻辑

category 字段格式为 一级|二级|三级,通过 Video.split_category() 静态方法拆分为 (L1, L2, L3) 元组。


4. 功能模块详细设计

4.1 用户认证模块

路由文件:routes/auth.py

路由 方法 说明
/login GET/POST 登录页面,验证用户名密码
/register GET/POST 注册页面,创建新用户
/logout GET 登出,清除会话

认证流程:

  1. 用户提交用户名和密码
  2. User.query.filter_by(username=username).first() 查询用户
  3. user.check_password(password) 验证密码哈希
  4. login_user(user) 创建登录会话
  5. 更新 last_login 时间戳

4.2 数据大屏模块

路由文件:routes/dashboard.py

API 路由 说明
/api/kpi 返回视频总数、点赞/评论/转发/收藏总数
/api/category_dist 返回 Top15 一级分类分布
/api/monthly_trend 返回月度发布趋势(数量 + 平均点赞)
/api/duration_dist 返回视频时长分布(5 个区间)
/api/top_cities 返回 Top10 城市视频数
/api/funnel 返回互动漏斗数据
/api/gauge 返回平均点赞数
/api/heatmap 返回发布时间热力图数据

图表实现:使用 ECharts 5.x 渲染所有图表,全局主题 ECHARTS_THEME 统一配色风格,每个图表支持全屏切换。

4.3 视频内容分析模块

路由文件:routes/analysis_video.py

API 路由 说明
/api/treemap 分类树状图(一级到二级层级)
/api/top_l2 Top20 二级分类柱状图
/api/category_boxplot 分类点赞箱线图(Q1/中位数/Q3)
/api/category_duration 分类平均时长
/api/category_interaction 分类互动数据堆叠柱状图
/api/sankey 分类到子分类桑基图

4.4 作者分析模块

路由文件:routes/analysis_author.py

API 路由 说明
/api/top_authors Top15 作者视频数柱状图
/api/author_bubble 粉丝数 vs 平均点赞气泡图
/api/author_scatter 粉丝数 vs 总获赞散点图
/api/author_radar 认证类型分布饼图

4.5 时间分析模块

路由文件:routes/analysis_time.py

API 路由 说明
/api/daily_trend 每日发布数量 + 平均点赞双轴图
/api/hourly 24 小时发布分布折线图
/api/weekday 周一到周日发布量柱状图
/api/interaction_trend 互动趋势多折线图
/api/calendar 日历热力图
/api/cumulative 累计视频数面积图

4.6 地理分析模块

路由文件:routes/analysis_geo.py

API 路由 说明
/api/city_map 中国地图热力图(省份维度)
/api/city_rank 城市排名柱状图
/api/city_scatter 城市气泡图(视频数 x 点赞数)

地图实现:加载 china.json 注册到 ECharts,使用 visualMap 组件实现热力映射。

4.7 话题分析模块

路由文件:routes/analysis_topic.py

API 路由 说明
/api/top_topics Top20 话题柱状图
/api/topic_wordcloud 话题词云
/api/topic_sankey 话题到分类桑基图
/api/topic_graph 话题关系网络图(共现分析)

词云实现:使用 echarts-wordcloud 插件,字号按出现次数线性映射。

4.8 商业分析模块

路由文件:routes/analysis_commerce.py

API 路由 说明
/api/commerce_type 商业类型分布饼图
/api/commerce_gmv 商业互动漏斗(GMV 转化)
/api/commerce_trend 商业视频月度趋势
/api/commerce_convert 转化率指标

4.9 对比分析模块

路由文件:routes/data_ext.py

API 路由 说明
/api/compare/search?q=keyword 搜索视频(标题/作者模糊匹配)
/api/compare/detail?ids=1,2,3 获取多视频详情(最多 6 个)

前端实现:搜索结果以可点击卡片展示,点击添加到选择列表;选择列表以标签形式展示,支持点击移除;对比结果渲染为雷达图(5 维:点赞/评论/收藏/转发/粉丝)+ 柱状图。

4.10 趋势预测模块

路由文件:routes/data_ext.py

API 路由 说明
/api/predict/trend 线性回归预测 + 历史数据

预测算法:最小二乘法线性回归

  • y = slope * x + intercept
  • slope = Sum((xi-mx)*(yi-my)) / Sum((xi-mx)^2)
  • intercept = my - slope * mx
  • 预测未来 7 天:predicted = slope \* i + intercept for i in range(n, n+7)

返回指标:

  • slope:斜率(正=上升趋势,负=下降趋势)
  • r2:R-squared 决定系数(越接近 1 拟合越好)
  • trend:趋势方向(rising / falling / stable)

4.11 数据异常检测模块

路由文件:routes/data_ext.py

API 路由 说明
/api/anomaly/detect IQR 算法检测异常数据

检测算法:四分位距法(IQR)

  • Q1 = likes_listn/4(第一四分位数)
  • Q3 = likes_list3n/4(第三四分位数)
  • IQR = Q3 - Q1(四分位距)
  • upper = Q3 + 1.5 * IQR(上界)
  • lower = Q1 - 1.5 * IQR(下界)
  • 点赞数 > upper 或 < lower 视为异常

可视化:散点图标记正常/异常数据,饼图展示异常类型分布,明细表格列出异常数据完整信息。

4.12 作者画像模块

路由文件:routes/data_ext.py

API 路由 说明
/api/author_profile/search?q=keyword 搜索作者(聚合统计)
/api/author_profile/detail?name=xxx 作者详情(KPI、分类、月度、Top 视频)

4.13 话题热度排行模块

路由文件:routes/data_ext.py

API 路由 说明
/api/topic_rank/list Top20 话题排行

实现逻辑:遍历所有视频的 topics 字段,按 # 分割提取话题标签,聚合统计每个话题的视频数/总点赞/总评论,按视频数降序排列取 Top20。

4.14 全屏数据大屏

路由文件:routes/data_ext.py

API 路由 说明
/api/screen/realtime 大屏实时数据

设计特点:

  • 独立页面,无侧边栏和导航栏
  • 深蓝渐变背景 + 径向光晕效果
  • KPI 卡片带图标 + 顶部渐变线 + 悬浮动画
  • 图表:面积折线图、玫瑰饼图、渐变漏斗、环形进度条、彩色柱状图
  • 底部滚动播报条(ticker)
  • 每 10 秒自动刷新数据
  • 数字动画(从 0 递增到目标值)

4.15 数据管理模块

路由文件:routes/data_manage.py + routes/data_ext.py

API 路由 方法 说明
/api/data/list GET 分页列表(支持搜索、排序)
/api/data/detail/ GET 单条详情
/api/data/add POST 新增记录
/api/data/update/ POST 更新记录
/api/data/delete/ POST 删除记录
/api/data/batch_delete POST 批量删除
/api/data/import POST CSV/Excel 批量导入
/api/data/export/csv GET 导出 CSV
/api/data/export/excel GET 导出 Excel
/api/video/detail/ GET 视频详情弹窗数据

导入功能:支持 CSV 和 Excel (.xlsx) 格式,自动匹配字段别名(如 likes/digg_count/点赞数),按 video_id 去重,自动拆分分类层级。

导出功能:CSV 带 BOM 的 UTF-8 编码(Excel 直接打开不乱码),Excel 红色表头 + 白色粗体 + 居中对齐。


5. 前端设计

5.1 布局结构

页面由三部分组成:左侧固定侧边栏(260px)、顶部导航栏(面包屑 + 用户信息)、右侧内容区(图表 + 表格 + 表单)。全屏大屏为独立页面,无侧边栏和导航栏。

5.2 样式系统

全局样式文件:static/css/style.css

CSS 变量:

--primary: #fe2c55(抖音红)

--primary-light: #ff6a81

--accent: #ff6a00(橙色强调)

--sidebar-width: 260px

--card-bg: #ffffff

--card-shadow: 0 2px 12px rgba(0,0,0,0.06)

组件样式:

  • .stat-card:KPI 统计卡片(4 种配色变体:红、橙、绿、青)
  • .chart-card:图表容器卡片
  • .data-table:数据表格
  • .sidebar:侧边栏导航
  • .animate-in:入场动画(淡入上移)

5.3 图表主题

全局 ECharts 主题 ECHARTS_THEME 定义了统一配色方案:

color: #fe2c55, #ff6a00, #ffd200, #38ef7d, #6366f1, #ec4899

所有图表共享此主题,确保视觉风格一致。


6. 部署与运行

6.1 环境要求

  • Python 3.8+
  • pip 包管理器

6.2 安装依赖

pip install Flask3.0.* Flask-SQLAlchemy3.1.* Flask-Login0.6.* Werkzeug3.0.*

6.3 启动应用

cd tiktok

python app.py

应用将在 http://127.0.0.1:5003 启动。

6.4 默认账号

首次运行时系统自动创建管理员账号:

  • 用户名:admin
  • 密码:admin123

6.5 数据库

  • 使用 SQLite,数据库文件为 instance/tiktok.db
  • 首次运行自动创建表结构(db.create_all())
  • 数据库路径可在 config.py 中修改

7. 项目统计

7.1 代码规模

类型 文件数 说明
Python 路由 11 各功能模块路由文件
Python 模型 2 User + Video
HTML 模板 18+ 页面模板
JavaScript 10+ 图表和交互逻辑
CSS 1 全局样式

7.2 图表统计

系统共包含 36+ 种可视化图表,涵盖:柱状图、折线图、饼图、散点图、气泡图、树状图、桑基图、雷达图、漏斗图、仪表盘、热力图、词云、地图、网络关系图、箱线图、面积图、玫瑰图、环形进度条等。


8. API 接口汇总

8.1 认证相关

接口 方法 说明
/login GET/POST 登录
/register GET/POST 注册
/logout GET 登出

8.2 数据大屏

接口 方法 说明
/api/kpi GET KPI 指标
/api/category_dist GET 分类分布
/api/monthly_trend GET 月度趋势
/api/duration_dist GET 时长分布
/api/top_cities GET 城市排名
/api/funnel GET 互动漏斗
/api/gauge GET 仪表盘
/api/heatmap GET 热力图

8.3 分析模块

接口 方法 说明
/api/treemap GET 树状图
/api/top_l2 GET 二级分类排名
/api/category_boxplot GET 箱线图
/api/category_duration GET 分类时长
/api/category_interaction GET 分类互动
/api/sankey GET 桑基图
/api/top_authors GET Top 作者
/api/author_bubble GET 作者气泡图
/api/author_scatter GET 作者散点图
/api/author_radar GET 作者雷达图
/api/daily_trend GET 每日趋势
/api/hourly GET 小时分布
/api/weekday GET 周度分布
/api/interaction_trend GET 互动趋势
/api/calendar GET 日历热力图
/api/cumulative GET 累计面积图
/api/city_map GET 地图热力图
/api/city_rank GET 城市排名
/api/city_scatter GET 城市气泡图
/api/top_topics GET 话题排名
/api/topic_wordcloud GET 话题词云
/api/topic_sankey GET 话题桑基图
/api/topic_graph GET 话题关系图
/api/commerce_type GET 商业类型
/api/commerce_gmv GET 商业漏斗
/api/commerce_trend GET 商业趋势
/api/commerce_convert GET 转化率

8.4 扩展功能

接口 方法 说明
/api/data/import POST 数据导入
/api/data/export/csv GET CSV 导出
/api/data/export/excel GET Excel 导出
/api/compare/search GET 对比搜索
/api/compare/detail GET 对比详情
/api/predict/trend GET 趋势预测
/api/author_profile/search GET 作者搜索
/api/author_profile/detail GET 作者详情
/api/topic_rank/list GET 话题排行
/api/anomaly/detect GET 异常检测
/api/video/detail/ GET 视频详情
/api/screen/realtime GET 大屏数据
/api/dashboard/stats GET 统计数据

8.5 数据管理

接口 方法 说明
/api/data/list GET 分页列表
/api/data/detail/ GET 详情
/api/data/add POST 新增
/api/data/update/ POST 更新
/api/data/delete/ POST 删除
/api/data/batch_delete POST 批量删除

8.6 用户中心

接口 方法 说明
/user/api/update_profile POST 更新资料
/user/api/change_password POST 修改密码