基于 Python 的印度犯罪数据可视化分析系统技术文档
1. 项目概述
1.1 项目名称
基于 Python 的印度犯罪数据可视化分析系统
1.2 项目定位
本系统面向课程设计、数据分析展示和基础管理场景,围绕 india_crime.csv 数据集构建一个集数据清洗、数据库存储、统计分析、趋势预测、热点推荐、用户认证与后台维护于一体的 Web 可视化平台。
系统既关注"图表展示",也强调"分析处理逻辑":
- 在前台提供多页面、多维度的犯罪数据分析能力
- 在后台提供用户管理、主数据管理和内容管理能力
- 在分析层提供趋势预测与治理建议功能
- 在展示层提供中文对照、主题化 UI、本地图片轮播和公告卡片等能力
1.3 建设目标
本项目的核心目标包括:
- 将英文原始犯罪数据清洗后导入 MySQL,形成可复用的结构化分析底座。
- 基于 FastAPI 提供统一的页面路由和数据接口。
- 基于 Bootstrap + ECharts 构建多页面专题分析界面。
- 支持交叉筛选、联动分析、月度趋势预测和治理推荐。
- 提供后台管理功能,使系统不仅能"看数据",还能"管数据"和"管内容"。





























2. 技术栈说明
2.1 后端技术栈
| 技术 | 作用 |
|---|---|
| FastAPI | Web 框架,负责页面路由、接口路由、表单提交与依赖注入 |
| Uvicorn | ASGI 服务启动器 |
| SQLAlchemy 2.x | ORM 与数据库访问层 |
| PyMySQL | MySQL 驱动 |
| pandas | 数据清洗、统计分析、透视表与时间序列处理 |
| NumPy | 预测计算中的线性拟合与数值运算 |
| passlib | 用户密码哈希与校验 |
| Starlette SessionMiddleware | 会话登录态管理 |
| Jinja2 | 服务端模板渲染 |
2.2 前端技术栈
| 技术 | 作用 |
|---|---|
| Bootstrap 5.3.3 | 页面布局、表单、按钮、表格和响应式基础样式 |
| ECharts 5.5.1 | 柱状图、折线图、热力图、散点图、树图、饼图等可视化呈现 |
| 原生 JavaScript | 图表渲染、下拉筛选、接口调用和页面联动 |
| CSS 自定义主题 | "印度城市夜景 + 犯罪情报板"视觉风格 |
2.3 数据库与存储
| 组件 | 说明 |
|---|---|
| MySQL | 业务主库 |
| 数据库名 | design_117_crime |
| 主机 | localhost |
| 用户名 | root |
| 密码 | 123456 |
2.4 当前核心依赖版本
项目 requirements.txt 中已声明的主要版本如下:
fastapi==0.116.1uvicorn==0.24.0sqlalchemy==2.0.23pymysql==1.4.6pandas==3.0.2jinja2==3.1.2
3. 系统总体架构
系统采用"前后端分层但不完全分离"的实现方式:
- 后端使用 FastAPI 同时提供 HTML 页面与 JSON 数据接口
- 前端页面由 Jinja2 模板生成基础结构
- 页面中的图表由浏览器端 JS 调用
/api/*接口获取数据后用 ECharts 渲染 - MySQL 作为唯一持久化数据源
- pandas 作为分析计算引擎
整体流程如下:
- 系统启动。
- 自动检查并创建数据库。
- 自动建表。
- 若案件数据表为空,则从 CSV 清洗并导入 MySQL。
- 建立分析缓存 DataFrame。
- 用户访问页面。
- 页面通过接口获取分析结果。
- ECharts 将结果绘制为图表。
- 管理员在后台修改数据或内容后,系统刷新分析缓存,使前台图表同步更新。
4. 项目目录结构
text
code/
├─ app/
│ ├─ analytics.py # 分析引擎与统计、预测、推荐逻辑
│ ├─ config.py # 配置项与数据库连接参数
│ ├─ data_loader.py # CSV 清洗、字段派生、后台表单标准化
│ ├─ database.py # 引擎、会话工厂、建库逻辑
│ ├─ display.py # 中英对照显示映射
│ ├─ main.py # FastAPI 入口
│ ├─ models.py # ORM 数据模型
│ ├─ security.py # 登录、鉴权、密码校验、会话处理
│ ├─ site_data.py # 默认管理员、轮播图、公告初始化
│ ├─ web.py # 模板上下文、静态资源版本号、公共页面上下文
│ ├─ routers/
│ │ ├─ api.py # JSON 分析接口
│ │ ├─ auth.py # 登录、注册、退出
│ │ ├─ admin.py # 后台管理
│ │ └─ pages.py # 前台页面
│ ├─ static/
│ │ ├─ css/app.css # 全局主题样式
│ │ ├─ js/*.js # 各分析页图表脚本
│ │ └─ images/hero/ # 本地轮播图与主题图片
│ └─ templates/ # Jinja2 页面模板
├─ data/
│ └─ india_crime.csv # 原始案件数据集
├─ tests/
│ ├─ test_app.py # 接口、页面、后台流程测试
│ └─ browser_acceptance.py # 浏览器级验收脚本
├─ run.py # 启动脚本
├─ README.md
└─ 项目技术文档.md
5. 系统功能模块
5.1 前台分析模块
系统当前包含 7 个核心分析页面:
- 全景概览
- 时间深挖
- 城市对比
- 犯罪类型
- 人群与处置
- 交叉分析
- 预测与推荐
每个页面都围绕一个主维度深挖,同时通过筛选、热力图、结构图或散点图实现跨维度分析。
5.2 账户模块
- 登录
- 注册
- 退出登录
- 个人中心
5.3 后台管理模块
- 后台首页
- 用户管理
- 数据管理
- 内容管理
5.4 内容展示模块
- 首页轮播图
- 顶部警务通报卡片
- 主题图片本地化展示
- 中文化标签和图表文本
6. 数据集与业务建模
6.1 原始数据集特点
当前系统的数据源为 data/india_crime.csv。该数据集具有以下特点:
- 以案件记录为粒度,一行表示一条案件记录
- 涵盖城市、罪种、领域、受害者信息、武器、警力与结案状态
- 同时包含报案时间、案发时间和结案时间
- 原始
Date of Occurrence字段存在日月格式混用问题
因此,系统在导入前必须进行统一清洗和字段标准化。
6.2 核心数据表设计
系统主要包含 4 张业务表。
6.2.1 crime_records
案件主数据表,是系统的分析核心。
| 字段 | 含义 |
|---|---|
id |
主键 |
report_number |
案件编号,唯一 |
reported_at |
报案时间 |
occurrence_at |
案件发生时间 |
occurrence_reference_at |
经过格式修正后的参考案发时间 |
occurrence_date_raw |
原始案发日期字段 |
occurrence_time_raw |
原始案发时间字段 |
city |
城市 |
crime_code |
犯罪编码 |
crime_description |
犯罪描述 |
crime_domain |
犯罪领域 |
victim_age |
受害者年龄 |
age_group |
年龄分组 |
victim_gender |
性别 |
weapon_used |
使用武器 |
police_deployed |
出警人数 |
case_closed |
是否结案 |
closed_at |
结案时间 |
closure_days |
结案耗时天数 |
report_delay_hours |
报案延迟小时数 |
reported_year |
报案年份 |
reported_month |
报案月份 |
reported_month_label |
报案年月标签 |
reported_weekday |
报案星期 |
occurrence_year |
发生年份 |
occurrence_month |
发生月份 |
occurrence_month_label |
发生年月标签 |
occurrence_weekday |
发生星期 |
occurrence_hour |
发生小时 |
occurrence_hour_bucket |
发生时段分桶 |
6.2.2 users
用户表,用于登录认证与角色管理。
| 字段 | 含义 |
|---|---|
id |
主键 |
username |
用户名 |
email |
邮箱 |
password_hash |
密码哈希 |
role |
角色,支持 admin、analyst、viewer |
is_active |
是否启用 |
created_at |
创建时间 |
last_login_at |
最近登录时间 |
6.2.3 site_slides
首页轮播图配置表。
| 字段 | 含义 |
|---|---|
title |
主标题 |
subtitle |
副标题 |
badge |
角标 |
image_path |
本地图片路径 |
cta_text |
按钮文本 |
cta_link |
跳转链接 |
sort_order |
排序 |
is_active |
是否启用 |
6.2.4 site_announcements
顶部警务通报公告表。
| 字段 | 含义 |
|---|---|
title |
公告标题 |
content |
公告内容 |
level |
公告级别,如 info、warning、danger、success |
is_active |
是否启用 |
created_at |
创建时间 |
7. 数据清洗与标准化逻辑
数据清洗主要由 app/data_loader.py 完成。
7.1 时间字段解析
系统中定义了两类主要时间格式:
DAY_FORMAT = "%d-%m-%Y %H:%M"MONTH_FIRST_FORMAT = "%m-%d-%Y %H:%M"
其中:
Date Reported和Time of Occurrence使用日优先格式解析Date of Occurrence同时尝试两种格式
7.2 混合日期修正策略
parse_occurrence_reference() 的处理逻辑如下:
- 同时尝试按日优先和月优先解析原始日期。
- 如果只解析出一个结果,则直接使用该结果。
- 如果两种方式都解析成功,则以
occurrence_at为锚点,选择与其时间差最小的结果。
这一步的目标是尽量降低原始日期字段格式混乱带来的分析偏差。
7.3 衍生字段计算
系统会为每条案件记录自动派生以下字段:
age_groupclosure_daysreport_delay_hoursreported_yearreported_month_labeloccurrence_month_labeloccurrence_weekdayoccurrence_houroccurrence_hour_bucket
其中时段分桶规则为:
00-05:凌晨06-11:上午12-17:下午18-23:晚间
7.4 后台新增与编辑数据的一致性处理
后台新增和编辑案件时,不直接写入原始表单值,而是调用 normalize_record_payload() 进行标准化,再写入数据库。这保证了:
- 后台手工录入的数据与 CSV 批量导入数据采用同一计算口径
- 所有衍生字段都能自动补齐
- 前台统计逻辑不需要为"手工录入数据"和"原始导入数据"分别处理
8. 数据库初始化与启动流程
8.1 启动入口
系统通过 run.py 启动,核心调用为:
uvicorn.run("app.main:app", host=settings.app_host, port=settings.app_port, reload=False)
8.2 应用启动生命周期
app/main.py 使用 FastAPI 的 lifespan 机制,在应用启动时执行以下操作:
- 初始化分析引擎
analytics_engine.initialize() - 自动建立数据库和数据表
- 如案件表为空,则导入 CSV 数据
- 初始化默认管理员、默认轮播图和默认公告
8.3 自动建库逻辑
app/database.py 中的 ensure_database_exists() 会先连接 MySQL 服务级地址,再执行:
CREATE DATABASE IF NOT EXISTS design_117_crime CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
因此系统首次运行时可自动创建数据库。
9. 分析引擎设计
分析逻辑集中在 app/analytics.py 中,由 AnalyticsEngine 统一管理。
9.1 核心职责
分析引擎主要负责:
- 数据表初始化和首次数仓导入
- 从数据库加载数据到 pandas DataFrame
- 全局筛选条件处理
- 页面分析数据计算
- 趋势预测
- 推荐结果生成
9.2 缓存机制
系统在启动和后台数据变更后会执行 refresh_cache(),将 crime_records 全表加载为 DataFrame 缓存在内存中。
该设计的优点是:
- 页面分析接口响应更快
- pandas 透视表与聚合计算更方便
- 课程设计场景下数据量适中,内存缓存可接受
当管理员在后台对案件数据执行新增、编辑、删除后,会调用 _refresh_analytics_cache(),从而保证前台图表与数据库内容同步。
9.3 通用筛选机制
系统定义了 FilterParams 结构,支持如下筛选条件:
- 城市
city - 领域
domain - 罪种
crime - 性别
gender - 武器
weapon - 年龄段
age_group - 年份
year - 是否结案
case_closed
apply_filters() 会基于这些条件过滤 DataFrame,为交叉分析、预测与推荐等页面提供统一入口。
10. 可视化页面功能设计
10.1 全景概览
路由:/
主要作用:
- 展示全局统计指标
- 给出月度趋势、年度趋势、领域分布
- 展示高发城市和高发罪种
核心输出包括:
summarymonthly_trendyearly_trenddomain_distributiontop_citiestop_crimes
10.2 时间深挖
路由:/time-analysis
主要作用:
- 分析月度变化
- 分析星期分布
- 分析小时段分布
- 对比报案时间和案发时间
- 构建"星期 × 小时"热力图
核心图表包括:
- 按领域堆叠月度趋势图
- 星期分布图
- 时段分布图
- 报案时间与发生时间双序列图
- 周期热力图
10.3 城市对比
路由:/city-analysis
主要作用:
- 评估城市案件规模
- 对比城市结案率和平均警力
- 比较头部城市的犯罪大类构成
- 识别城市与高发罪种的共振关系
核心图表包括:
- 城市案件量 / 结案率 / 平均警力表格
- 城市领域堆叠图
- 城市 × 罪种热力图
- 案件量 / 结案率 / 警力散点图
10.4 犯罪类型
路由:/crime-analysis
主要作用:
- 对罪种做排名分析
- 展示罪种与领域的树图结构
- 观察武器与罪种的联动
- 分析年龄段与犯罪领域之间的关系
核心图表包括:
- 罪种明细表
- 领域树图
- 武器 × 罪种热力图
- 年龄段 × 领域热力图
10.5 人群与处置
路由:/victim-analysis
主要作用:
- 构建受害者年龄和性别画像
- 分析不同领域的处置效率
- 对比武器与性别之间的分布
核心图表包括:
- 年龄分布图
- 性别分布图
- 性别 × 领域堆叠图
- 武器 × 性别堆叠图
- 领域处置效率表
10.6 交叉分析
路由:/cross-analysis
主要作用:
- 支持用户按多个条件自定义筛选
- 实现答辩场景中的"钻取式分析"
支持的联动筛选维度包括:
- 城市
- 年份
- 领域
- 罪种
- 性别
- 武器
- 年龄段
- 是否结案
当筛选结果为空时,系统会返回空结构和友好提示,而不是让前端报错。
10.7 预测与推荐
路由:/forecast
主要作用:
- 基于历史月度案件量做未来 3 个月预测
- 对城市或领域做下周期压力展望
- 输出热点治理建议
这一页实际上由两部分数据组成:
- 预测数据:
forecast_payload() - 推荐数据:
recommendations_payload()
11. 预测与推荐算法逻辑
11.1 月度预测逻辑
预测方法采用"线性趋势 + 近期均值"的混合方式。
具体步骤如下:
- 按月统计案件量序列。
- 使用
np.polyfit()拟合一条线性趋势线。 - 计算最近 3 个月均值。
- 对未来值按
0.65 * 趋势值 + 0.35 * 近期均值做加权融合。 - 将预测值限制为不小于 0。
该方法的特点是:
- 实现简单,适合课程项目
- 能体现时间趋势概念
- 相比纯线性拟合更平滑
- 不依赖重型机器学习框架
11.2 细分对象展望
若用户已固定某个城市,则系统按领域预测。
若用户未固定城市,则系统按城市预测。
这样可以在"全局看城市"和"城市内部看领域"之间自动切换,更适合展示层面的交互逻辑。
11.3 热点推荐逻辑
推荐逻辑基于最近 12 个月数据,按如下维度分组:
citycrime_domainoccurrence_hour_bucket
对每个组合统计:
- 案件量
- 结案率
- 平均警力
- 平均结案耗时
并计算优先级分数:
priority_score = cases * 领域权重 * (1.15 - closure_rate)
其中领域权重为:
Violent Crime = 1.35Traffic Fatality = 1.2Fire Accident = 1.1Other Crime = 1.0
11.4 推荐警力计算
系统还会基于平均警力、案件量和结案率生成建议警力:
recommended_police = avg_police + min(6, cases / 120) + max(0, 0.6 - closure_rate) * 10
这不是严格业务规则,而是课程项目中的解释型启发式模型,目的是把统计结果转换成更直观的"治理建议"。
12. 中文化展示实现
由于原始数据库内容以英文为主,系统专门实现了中英对照显示层。
12.1 中文化映射模块
app/display.py 中维护了多组映射字典,包括:
- 城市映射
CITY_LABELS - 罪种映射
CRIME_LABELS - 领域映射
DOMAIN_LABELS - 武器映射
WEAPON_LABELS - 性别映射
GENDER_LABELS - 年龄段映射
AGE_GROUP_LABELS - 星期映射
WEEKDAY_LABELS - 时段映射
HOUR_BUCKET_LABELS
12.2 应用方式
系统中的中文展示并不是修改数据库原值,而是采用"原值存储 + 显示映射"的方式:
- 数据库存英文原值,便于筛选和统计一致
- 接口输出和页面显示时转换为"中文 / 英文"双语标签
例如:
Delhi显示为德里 / DelhiViolent Crime显示为暴力犯罪 / Violent CrimeFRAUD显示为诈骗 / FRAUD
12.3 图表与下拉框中文化
系统不仅对图表标题和表格文本做中文化,也对筛选下拉框做了中英对照输出。
接口 filter_options() 会返回:
- 原始值列表,如
cities - 前端下拉项列表,如
city_options
其中 city_options 的结构为:
json
[
{ "value": "Delhi", "label": "德里 / Delhi" }
]
前端 common.js 中的 populateSelect() 会优先渲染 label,从而保证筛选组件也具备中文对照能力。
13. 页面路由与接口设计
13.1 页面路由
| 路由 | 页面 |
|---|---|
/ |
全景概览 |
/time-analysis |
时间深挖 |
/city-analysis |
城市对比 |
/crime-analysis |
犯罪类型 |
/victim-analysis |
人群与处置 |
/cross-analysis |
交叉分析 |
/forecast |
预测与推荐 |
/profile |
个人中心 |
/login |
登录页 |
/register |
注册页 |
/admin |
后台首页 |
/admin/users |
用户管理 |
/admin/data |
数据管理 |
/admin/content |
内容管理 |
13.2 JSON 数据接口
| 接口 | 功能 |
|---|---|
/api/health |
系统数据健康信息 |
/api/meta/filters |
获取筛选器元数据 |
/api/overview |
概览页数据 |
/api/time-analysis |
时间页数据 |
/api/city-analysis |
城市页数据 |
/api/crime-analysis |
犯罪类型页数据 |
/api/victim-analysis |
人群与处置页数据 |
/api/cross-analysis |
交叉分析数据 |
/api/forecast |
预测数据 |
/api/recommendations |
推荐数据 |
所有接口统一返回格式:
json
{
"status": "ok",
"data": {}
}
这种统一格式可以降低前后端对接成本,避免图表因字段封装不一致而渲染失败。
14. 登录认证与权限控制
14.1 会话认证
系统使用 SessionMiddleware 维护登录态,登录成功后在 Session 中写入:
user_iduser_roleusername
14.2 密码安全
密码通过 passlib 的 pbkdf2_sha256 进行哈希,不以明文形式存储在数据库中。
14.3 当前演示版本的账号策略
为了便于课程演示和后台管理,当前版本约定:
- 默认管理员账号:
admin - 默认管理员密码:
123456 - 普通用户统一默认密码:
123456
并且系统启动时会执行默认数据初始化逻辑,将现有用户密码统一重置为 123456。这一策略适合课程项目演示,但正式生产环境不建议这样处理。
14.4 权限控制规则
- 未登录用户不能访问个人中心
- 未登录用户不能进入后台
- 非管理员用户访问后台时会被重定向回首页
- 管理员不能停用自己当前登录的账号
15. 后台管理设计
15.1 后台首页
后台首页主要展示:
- 用户数量
- 轮播图数量
- 公告数量
- 数据行数
- 最近注册用户
它的作用是为管理员提供全局管理概览。
15.2 用户管理
用户管理支持:
- 查看全部用户
- 修改用户角色
- 启用/停用用户
角色包括:
adminanalystviewer
15.3 数据管理
数据管理是系统当前的重要增强模块,支持对案件主数据进行维护。
功能包括:
- 按关键词检索
- 按城市、领域、年份筛选
- 分页查看案件记录
- 新增案件
- 编辑案件
- 删除案件
为了避免数据表与编辑表单并排导致横向滚动,当前实现采用"列表在上、表单在下"的布局。这一设计比侧边栏并列式更适合高列数数据表展示。
15.4 内容管理
内容管理负责维护首页展示内容,包括:
- 轮播图管理
- 公告管理
同样采用"列表在上、表单在下"的结构,使列表宽度完整保留,便于查看。
15.5 本地图片资源管理
首页轮播图和主题图片采用本地静态资源方式展示,图片目录为:
app/static/images/hero/
后台在创建轮播图时,图片路径直接来自本地可选资源,从而保证展示稳定,不依赖外链。
16. 前端主题与交互设计
16.1 主题风格
系统采用"印度城市夜景 + 犯罪情报板"的视觉方向,主要表现为:
- 暗色主背景
- 琥珀色、橙色、蓝色作为强调色
- 强对比卡片风格
- 首页本地图片轮播
- 顶部公告卡片化展示
16.2 顶部警务通报
原先的横向滚动设计已改为卡片分布式布局,主要原因包括:
- 更利于多条公告同时阅读
- 不依赖滚动即可获取信息
- 更符合后台可维护的内容型展示方式
16.3 下拉菜单可读性优化
针对深色主题下推荐筛选框"白底白字不可读"的问题,系统已统一对 .form-select 与 option 设置黑底白字样式,并启用深色 color-scheme,保证筛选组件在主题下可读。
16.4 静态资源版本号机制
为避免浏览器缓存导致样式更新不生效,系统在 web.py 中根据 app.css 的修改时间生成 asset_version,并在模板中以 ?v=... 的方式引用:
- CSS
- 公共 JS
- favicon
这样每次样式更新后浏览器都会重新拉取最新资源。
17. 测试与验收
17.1 自动化测试
项目当前包含以下测试文件:
tests/test_app.pytests/browser_acceptance.py
17.2 已覆盖测试内容
tests/test_app.py 已覆盖以下内容:
- 主要页面是否返回
200 - 分析接口是否返回正确结构
- 登录、注册、退出是否可用
- 未登录访问受限页面是否跳转
- 普通用户访问后台是否被拦截
- 管理员登录是否可用
- 用户角色修改与停用流程
- 数据管理的新增、编辑、删除流程
- 内容管理的轮播图新增/启停流程
- 内容管理的公告新增/启停流程
- 首页轮播图和静态图片是否可访问
17.3 浏览器级验收
tests/browser_acceptance.py 会:
- 启动 FastAPI 服务
- 使用本机 Chrome Headless 打开页面
- 检查关键页面的 DOM 关键字是否存在
它主要用于验证:
- 页面是否在真实浏览器环境下可渲染
- 首页轮播、预测页、登录页是否能正确打开
17.4 当前测试意义
这套测试覆盖了:
- 页面层
- 接口层
- 权限层
- 后台操作流
- 静态资源层
对于课程设计项目而言,已经具备较完整的功能验收价值。
18. 运行方式与环境要求
18.1 基本环境
- Python 3.8 及以上
- MySQL 8.x 或兼容版本
- 本地可访问
localhost:3306
18.2 默认配置
系统配置位于 app/config.py,默认值如下:
- 应用地址:
127.0.0.1 - 应用端口:
8000 - 数据库名:
design_117_crime - 用户名:
root - 密码:
123456
18.3 启动命令
bash
python run.py
启动后默认访问:
text
http://127.0.0.1:8000
18.4 可配置环境变量
系统支持通过环境变量覆盖默认配置,例如:
CRIME_APP_HOSTCRIME_APP_PORTCRIME_DB_HOSTCRIME_DB_PORTCRIME_DB_NAMECRIME_DB_USERCRIME_DB_PASSWORDCRIME_SECRET_KEY
19. 兼容性与实现说明
19.1 Python 3.8 兼容
为了适配 Python 3.8,项目中已采用如下策略:
- 使用
Optional[T]、List[T]等写法,避免T | None - 模板响应采用兼容旧版 Starlette 的
TemplateResponse(name, context)调用方式
这使得系统能在较常见的课程实验环境中稳定运行。
19.2 数据一致性策略
系统采用"数据库存原始英文值,接口输出中英对照值"的方式,这样既能保持分析逻辑稳定,也能满足中文展示需求。
19.3 非生产化约定
当前项目以教学、展示和课程设计为目标,因此存在以下非生产化约定:
- 所有用户默认密码统一
- 预测采用启发式模型而非正式机器学习模型
- 分析缓存采用全表内存 DataFrame
这些设计是为了优先保证演示效果、开发效率和功能完整性。
20. 后续可扩展方向
如果继续完善,本系统可以扩展为以下方向:
- 增加 CSV 导入 / 导出功能
- 增加案件批量删除和批量修正功能
- 增加更正式的日志、审计记录和操作留痕
- 引入更严格的 RBAC 权限模型
- 增加地图可视化或 GIS 定位能力
- 将预测算法升级为 ARIMA、Prophet 或机器学习模型
- 增加移动端适配和更完整的响应式布局优化
- 增加数据质量监控页面
21. 文档结论
本系统已经从单一数据展示页面,演进为一个较完整的课程设计型数据可视化平台,具备以下特征:
- 有稳定的数据底座:CSV 清洗、MySQL 入库、结构化字段派生
- 有清晰的分析能力:多页面专题分析 + 交叉钻取
- 有扩展性的智能模块:趋势预测 + 热点推荐
- 有完善的后台能力:用户、数据、内容三类管理
- 有主题化的前端展示:中文对照、深色情报风格、本地轮播与公告卡片
从教学和课程答辩角度看,该系统已经不仅是"图表展示项目",而是一个包含数据治理、可视化分析、预测研判和后台运营能力的完整 Web 应用。