中国旅游用户数据可视化分析系统技术文档
1. 项目概述
1.1 项目名称
中国旅游用户数据可视化分析系统
1.2 项目定位
本项目是一个基于 Python Django 的旅游数据分析与可视化平台,围绕中国旅游用户数据,完成数据导入、数据库管理、旅游分析、用户收藏、个性化推荐、账号体系和品牌化前端展示。
系统的核心目标不是单纯展示若干图表,而是把旅游用户数据拆分为多个分析维度,形成一个具备业务逻辑、交互逻辑和可扩展能力的旅游数据分析网站。
1.3 项目目标
本项目主要解决以下问题:
- 将 CSV 格式的旅游数据规范导入 MySQL,构建结构化数据资产。
- 通过 Django + ECharts 对旅游数据进行多页面、多维度的实时分析展示。
- 提供收藏、推荐、账号管理等功能,使系统不仅有"看数据"的能力,也有"管理数据"和"使用数据"的能力。
- 构建更符合旅游主题的网站界面,而不是普通后台风格页面。
1.4 项目特点
- 所有分析图表都基于 MySQL 实时聚合查询生成。
- 分析维度完整,包含总览、时空节奏、客源画像、游览行为、消费结构、目的地洞察、口碑情感等模块。
- 系统同时具备业务功能模块,包括登录注册、找回密码、个人中心、收藏夹、推荐历史等。
- 页面采用 Django 服务端渲染,前端集成 Bootstrap 与 ECharts,开发和维护成本较低。
- 项目已提供本地 SVG 海报与视觉素材,具备较强的旅游品牌落地页风格。



































2. 技术栈
2.1 后端技术
| 技术 | 说明 |
|---|---|
| Python | 项目主要开发语言 |
| Django 4.2.8 | Web 框架,负责路由、视图、模板、ORM、认证、会话管理 |
| PyMySQL | Django 连接 MySQL 的驱动 |
| Django ORM | 用于模型管理、聚合查询、数据读写 |
2.2 前端技术
| 技术 | 说明 |
|---|---|
| Django Template | 服务端模板渲染 |
| Bootstrap 5.3.3 | 页面布局与基础组件 |
| ECharts 5.5.1 | 图表渲染 |
| 原生 JavaScript | 图表初始化、窗口缩放重绘 |
| 自定义 CSS | 旅游主题界面、品牌落地页、卡片样式、响应式布局 |
2.3 数据库与数据来源
| 项目 | 说明 |
|---|---|
| 数据库 | MySQL |
| 默认数据库名 | design_111_tourism |
| 数据文件 | data/dataset.csv |
| 默认编码 | gb18030 |
| 数据导入方式 | Django 自定义管理命令 |
2.4 开发与运行方式
| 项目 | 说明 |
|---|---|
| 项目入口 | manage.py |
| 配置文件 | config/settings.py |
| 路由入口 | config/urls.py |
| 主要业务应用 | dashboard |
| 静态资源目录 | static/ |
| 模板目录 | dashboard/templates/dashboard/ |
3. 系统总体架构
3.1 架构风格
本项目采用典型的 Django 单体式 Web 应用架构,整体可分为以下 5 层:
- 表现层:Django Template + Bootstrap + ECharts
- 控制层:
views.py负责请求分发、页面上下文构建、用户交互处理 - 分析层:
analytics.py负责聚合查询、推荐构建、统计汇总 - 数据层:
models.py负责数据模型定义,MySQL 负责数据存储 - 支撑层:
forms.py、utils.py、management/commands/负责表单、工具函数与数据导入
3.2 整体调用流程
text
用户浏览器
↓
Django URL 路由
↓
View 视图函数(dashboard/views.py)
↓
Analytics 分析层 / Utils 工具层
↓
Django ORM
↓
MySQL 数据库
↓
返回模板上下文
↓
Django Template 渲染 HTML
↓
ECharts 读取 json_script 数据并在前端绘图
3.3 前后端协作模式
本项目不是前后端分离架构,而是"后端渲染页面 + 前端渲染图表"的混合模式:
- 后端负责查询与生成图表数据。
- 模板通过
json_script将结构化数据输出到页面。 - 前端脚本
static/dashboard/js/site.js读取数据并调用 ECharts 渲染。
这种模式的优点是:
- 开发效率高。
- 部署简单。
- 对课程设计、毕业设计、原型系统非常合适。
4. 项目目录结构
text
tourism/
├─ config/ Django 项目配置
│ ├─ settings.py 全局配置、数据库配置、静态文件配置
│ ├─ urls.py 根路由
│ ├─ wsgi.py
│ └─ asgi.py
├─ dashboard/ 核心业务应用
│ ├─ management/commands/
│ │ └─ import_tourism_csv.py CSV 导入命令
│ ├─ migrations/ 数据库迁移
│ ├─ templates/dashboard/ 页面模板
│ ├─ admin.py Django Admin 注册
│ ├─ analytics.py 数据聚合与推荐核心逻辑
│ ├─ forms.py 登录、注册、推荐、密码相关表单
│ ├─ models.py 数据模型
│ ├─ tests.py 自动化测试
│ ├─ urls.py 应用级路由
│ ├─ utils.py 工具函数
│ └─ views.py 页面视图与交互逻辑
├─ data/
│ └─ dataset.csv 旅游原始数据文件
├─ static/
│ └─ dashboard/
│ ├─ css/site.css 全站视觉样式
│ ├─ js/site.js ECharts 初始化脚本
│ └─ images/ 本地 SVG 海报与视觉素材
├─ design_111_tourism.sql 数据库导出文件
├─ manage.py
├─ requirements.txt
├─ README.md
└─ 项目技术文档.md 当前技术文档
5. 数据库设计
5.1 数据库配置
项目默认使用如下 MySQL 连接配置:
python
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "design_111_tourism",
"USER": "root",
"PASSWORD": "123456",
"HOST": "127.0.0.1",
"PORT": "3306",
}
}
说明:
- 运行时默认库名为
design_111_tourism。 - 项目目录下同时存在
design_111_tourism.sql导出文件,若数据库名不一致,可通过修改config/settings.py统一。
5.2 核心数据表
系统主要包含 4 张核心业务表:
| 表名 | 对应模型 | 用途 |
|---|---|---|
tourism_records |
TourismRecord |
存储旅游原始明细记录 |
user_favorites |
UserFavorite |
存储用户收藏景点 |
recommendation_profiles |
RecommendationProfile |
存储用户推荐偏好 |
recommendation_snapshots |
RecommendationSnapshot |
存储推荐历史快照 |
5.3 主表 tourism_records
该表是整个系统的数据核心,字段可分为以下几类:
1. 游客基础属性
visitor_number:游客编号visitor_age:游客年龄visitor_gender:游客性别origin:来源地age_group:年龄段
2. 行程属性
travel_days:游玩时长travel_mode:旅游方式attraction_count:景点数量travel_date:游玩日期
3. 目的地属性
attraction_name:景点名称attraction_type:景点类型location:景点所在地province:所属省份scenic_intro:景区简介scenic_sales:景区销量
4. 消费属性
spending_amount:消费金额ticket_price:门票价格daily_spending_per_capita:人均日消费
5. 时间维度字段
yearmonthquarterdayweekday_rawweekday_numberweekday_nameyear_month
6. 评价属性
satisfaction_score:满意度评分sentiment:情感倾向
5.4 索引设计
项目对高频查询字段建立了索引:
province + travel_datetravel_mode + travel_dateattraction_type + sentiment
这样做的意义是:
- 提高省份与时间维度联合查询性能。
- 提高旅游方式趋势分析性能。
- 提高景点类型与情感分析性能。
5.5 用户业务表设计
user_favorites
作用:
- 记录用户收藏的景点
- 支持收藏备注
- 为扩展推荐提供基础数据
关键设计:
user与tourism_record建立外键关系- 通过唯一约束
uniq_user_favorite避免重复收藏
recommendation_profiles
作用:
- 保存用户推荐偏好
- 支持按省份、景点类型、旅游方式、年龄段和预算区间进行推荐
偏好存储方式:
- 多选偏好使用
JSONField - 预算上下限使用
DecimalField
recommendation_snapshots
作用:
- 保存每次推荐生成时的偏好快照
- 保存推荐结果快照
- 支持个人中心查看推荐历史
6. 数据导入设计
6.1 导入命令
项目使用 Django 自定义管理命令导入 CSV 数据:
powershell
python manage.py import_tourism_csv --flush
对应文件:
dashboard/management/commands/import_tourism_csv.py
6.2 导入特性
命令支持以下参数:
| 参数 | 说明 |
|---|---|
--file |
指定 CSV 文件路径 |
--encoding |
指定文件编码,默认 gb18030 |
--batch-size |
指定批量插入大小,默认 2000 |
--flush |
导入前清空表数据 |
--append |
追加导入 |
6.3 导入流程
- 检查 CSV 文件是否存在。
- 检查是否已经存在历史数据。
- 校验 CSV 必要列是否完整。
- 逐行解析数据。
- 将星期字段标准化。
- 使用
bulk_create分批写入 MySQL。 - 在事务中执行导入,保证一致性。
6.4 数据标准化处理
项目对部分字段进行了预处理:
游玩日期转为DateField星期通过normalize_weekday统一转为weekday_number与weekday_name- 金额、票价、满意度等数值字段转为
Decimal - 年龄段、景点类型、情感倾向等字符串字段去除空格
7. 功能模块设计
7.1 分析导航模块
当前主分析导航共 7 个页面:
- 总览
- 时空节奏
- 客源画像
- 游览行为
- 消费结构
- 目的地洞察
- 口碑情感
这 7 个页面对应 7 个不同分析维度,避免把所有图表塞在一个页面中,提升分析的层次性和准确性。
7.2 用户功能模块
系统除分析功能外,还包含:
- 登录
- 注册
- 找回密码
- 退出登录
- 个人中心
- 数据收藏
- 个性化推荐
7.3 演示用户回退机制
系统支持"未登录也可体验":
- 已登录用户:收藏、推荐和个人历史绑定真实账号
- 未登录用户:系统回退到演示用户空间
该机制降低了使用门槛,也便于项目展示和答辩演示。
8. 页面与功能详细说明
8.1 总览页 /
定位:
用于展示旅游市场全局情况,是系统首页和全局调度入口。
主要内容:
- 月度客流与消费趋势
- 季度节奏
- 省份贡献排名
- 景点类型价值对比
- 景区明信片
作用:
- 从宏观层面快速建立对旅游市场的整体认识
- 引导用户进入更细的分析页面
8.2 时空节奏页 /rhythm/
定位:
分析旅游活动在时间和行程节奏上的分布规律。
主要图表:
- 年月热度分布
- 月份满意度
- 季度 × 旅游方式
- 星期节奏
- 行程天数分布
- 月内日期脉冲
分析价值:
- 识别旅游旺季和淡季
- 观察周内与月内客流节奏
- 分析停留时长对旅游行为的影响
8.3 客源画像页 /profile/
定位:
从来源地、年龄层、性别和出游方式构建客源市场画像。
主要图表:
- 客源地规模与消费
- 客源地价值散点
- 年龄层 × 性别热力图
- 性别 × 情感倾向
- 核心客源地 × 旅游方式
分析价值:
- 找出核心客源城市或地区
- 识别高价值客源市场
- 描述不同游客群体的结构特征
8.4 游览行为页 /behavior/
定位:
分析游客出游方式、年龄层、性别和时间选择等行为特征。
主要图表:
- 旅游方式分布
- 年龄层消费与满意度
- 星期节奏
- 月份 × 旅游方式热力图
- 性别与旅游方式交叉分析
分析价值:
- 分析自由行、跟团、自驾等方式差异
- 识别高活跃年龄层与高价值人群
- 理解不同群体的出游模式
8.5 消费结构页 /consumption/
定位:
专门分析旅游消费结构、票价敏感度和预算强度。
主要图表:
- 旅游方式消费结构
- 门票价格带
- 省份消费价值散点
- 停留天数与消费强度
- 景点数量对预算的影响
分析价值:
- 识别高消费旅游方式
- 分析门票价格分层与满意度关系
- 观察行程长度与预算变化
8.6 目的地洞察页 /destinations/
定位:
从景区和目的地的角度分析旅游资源价值。
主要图表与内容:
- 省份吸引力散点图
- 景点类型结构
- 门票价格与满意度分布
- 重点景点清单
- 景点收藏入口
分析价值:
- 识别高吸引力省份
- 对比不同景点类型的市场表现
- 找出值得关注的重点景区
8.7 口碑情感页 /sentiment/
定位:
分析用户评价、满意度和服务风险。
主要图表:
- 情感结构
- 景点类型 × 情感倾向
- 高口碑省份
- 低口碑省份
- 年度情感走势
- 评分分布
- 热门负评景区
分析价值:
- 识别服务优势区域
- 识别存在负面评价风险的景区
- 分析满意度结构变化趋势
8.8 收藏页 /favorites/
定位:
用于沉淀用户重点关注的数据对象。
主要功能:
- 收藏景点
- 取消收藏
- 收藏备注
- 收藏结构图
- 基于收藏的扩展建议
业务价值:
- 形成用户个人数据池
- 为推荐系统提供偏好输入
8.9 推荐页 /recommendations/
定位:
基于用户偏好生成个性化景点推荐。
支持的偏好维度:
- 偏好省份
- 偏好景点类型
- 偏好旅游方式
- 偏好年龄段
- 日均预算上下限
主要功能:
- 保存偏好
- 实时生成推荐
- 展示推荐类型分布
- 将推荐项加入收藏
- 自动保存推荐历史快照
8.10 个人中心 /account/
定位:
用于账号资料与个人数据空间管理。
主要功能:
- 账号资料编辑
- 密码修改
- 偏好摘要
- 最近收藏
- 收藏时间线
- 推荐历史
- 快捷入口
8.11 认证页面
包含:
- 登录页
/login/ - 注册页
/register/ - 找回密码页
/password-reset/ - 重置链接提示页
- 设置新密码页
- 重置成功页
- 重置失效页
设计特点:
- 认证页不继承主站导航
- 使用独立品牌落地页布局
- 采用本地 SVG 海报与旅游品牌视觉
9. 核心实现机制
9.1 页面上下文统一构建
views.py 中的 build_page_context() 负责为各页面统一构建以下上下文:
- 页面标题、副标题、导语
- 指标卡数据
- 当前用户信息
- 演示用户状态
- 收藏数量
- 全站汇总信息
这样做的好处是:
- 统一页面风格
- 减少重复代码
- 便于新增页面
9.2 分析层聚合设计
dashboard/analytics.py 是项目最核心的分析模块。
主要职责:
- 执行 ORM 聚合查询
- 生成各页面图表所需结构化数据
- 构造景点卡片数据
- 生成推荐结果
- 构建个人中心概览
主要函数:
| 函数 | 作用 |
|---|---|
get_site_summary() |
获取全站总览指标 |
aggregate_attractions() |
聚合景区数据,生成可展示卡片 |
get_overview_data() |
首页分析数据 |
get_behavior_data() |
行为分析数据 |
get_rhythm_data() |
时空节奏分析数据 |
get_profile_data() |
客源画像分析数据 |
get_consumption_data() |
消费结构分析数据 |
get_destination_data() |
目的地洞察数据 |
get_sentiment_data() |
情感分析数据 |
get_favorites_data() |
收藏页数据 |
build_recommendations() |
推荐结果构建 |
get_account_overview() |
个人中心数据聚合 |
save_recommendation_snapshot() |
保存推荐历史快照 |
9.3 推荐算法设计
当前推荐逻辑属于规则型加权推荐,主要过程如下:
- 根据用户偏好对
TourismRecord进行筛选 - 聚合候选景点
- 计算综合推荐分
- 按分数排序,取前若干项返回
推荐分由以下 3 部分组成:
- 满意度权重
- 积极评价占比权重
- 游客热度权重
该方案的优点:
- 逻辑清晰
- 可解释性强
- 适合课程设计与原型系统
9.4 收藏联动机制
收藏不仅是简单保存,还承担推荐联动作用:
- 用户收藏景点后,系统提取收藏中的省份和景点类型
- 根据这些条件生成扩展建议
- 收藏页直接展示基于收藏的推荐候选
9.5 图表渲染机制
前端图表渲染通过 static/dashboard/js/site.js 实现统一封装。
核心逻辑:
- 使用
json_script输出后端数据 - 前端读取指定 DOM 中的 JSON 数据
- 根据页面定义构建 ECharts 配置
- 初始化图表实例
- 监听窗口缩放并自动重绘
这种设计避免了每个页面重复写初始化代码,增强了维护性。
9.6 表单与认证机制
forms.py 中封装了统一的表单样式与交互控件。
涉及表单:
- 登录表单
- 注册表单
- 推荐偏好表单
- 资料编辑表单
- 密码修改表单
- 找回密码表单
- 设置新密码表单
认证机制基于 Django 内置认证系统实现,并完成以下增强:
- 登录后跳转回原页面
- 注册成功自动登录
- 找回密码支持用户名或邮箱
- 控制台邮件后端用于开发环境调试
- 密码校验放宽,仅保留最小长度 6 位
10. 前端设计说明
10.1 界面风格
项目整体界面并未采用传统深色管理后台风格,而是偏向旅游内容网站:
- 色彩采用纸张色、松绿色、砂金色、陶土色
- 页面大量使用卡片式布局
- 首页与分析页加入明信片、图册、旅行手账等视觉语言
- 登录注册页采用品牌落地页式设计
10.2 静态资源设计
项目使用本地 SVG 资源构建品牌感:
主站海报
位于 static/dashboard/images/hero/
包括:
overview-poster.svgrhythm-poster.svgprofile-poster.svgbehavior-poster.svgconsumption-poster.svgdestinations-poster.svgsentiment-poster.svgfavorites-poster.svgrecommendations-poster.svgaccount-poster.svg
认证海报
位于 static/dashboard/images/auth/
包括:
login-poster.svgregister-poster.svgrecovery-poster.svgreset-poster.svginvalid-poster.svgcomplete-poster.svg
10.3 响应式设计
系统支持桌面端与移动端自适应:
- 导航栏在小屏下折叠
- 卡片、图表、认证页双栏在中小屏下自动转为单栏
- 图表高度在小屏下收缩
11. 后台管理与可维护性
11.1 Django Admin
项目已注册 Django Admin:
TourismRecordUserFavoriteRecommendationProfileRecommendationSnapshot
支持功能:
- 列表展示
- 条件筛选
- 关键词搜索
- 排序与分页
11.2 工具函数模块
utils.py 提供多个支撑函数:
- 星期标准化
- 性别与情感文本转换
- 年龄段排序
- 演示用户获取
- 当前业务用户判定
- 筛选项数据生成
这些函数将零散逻辑从视图中剥离,提升了代码整洁度。
12. 测试与验证
12.1 自动化测试
项目目前包含 14 个测试用例,主要覆盖:
- 星期字段标准化
- 核心页面渲染
- 登录页不显示主导航
- 首页导航维度检查
- 收藏新增与取消
- 推荐偏好保存与快照生成
- 注册、登录、退出流程
- 6 位密码注册
- 登录用户收藏绑定真实账号
- 个人中心权限保护
- 资料与密码修改
- 密码找回流程
执行命令:
powershell
python manage.py test dashboard
12.2 配置检查
可通过以下命令检查 Django 配置正确性:
powershell
python manage.py check
12.3 编译检查
powershell
python -m compileall manage.py config dashboard
13. 项目部署与运行说明
13.1 环境准备
建议环境:
- Python 3.10 或 3.11
- MySQL 8.x
- Windows / Linux 均可运行
13.2 安装依赖
powershell
pip install -r requirements.txt
13.3 创建数据库
sql
CREATE DATABASE IF NOT EXISTS design_111_tourism DEFAULT CHARACTER SET utf8mb4;
13.4 执行迁移
powershell
python manage.py migrate
13.5 导入数据
powershell
python manage.py import_tourism_csv --flush
13.6 启动服务
powershell
python manage.py runserver
13.7 访问地址
默认开发地址:
http://127.0.0.1:8000/
14. 当前项目的工程特点总结
从工程角度看,本项目具有以下特点:
- 已完成完整的 Web 系统闭环,不是单纯数据处理脚本。
- 已实现数据导入、数据分析、数据展示、用户交互、账户管理、推荐记录等完整流程。
- 后端采用 Django ORM 聚合查询,结构清晰,适合继续扩展筛选与 API。
- 前端采用模板渲染加 ECharts 图表,适合毕业设计与课程项目答辩展示。
- 视觉层已经具备一定品牌化表达,登录注册页和主站不是普通默认样式。
15. 当前不足与后续可扩展方向
虽然系统已经可以作为完整项目展示,但若继续深化,建议从以下方向扩展:
15.1 分析能力扩展
- 增加按年份、省份、景点类型、旅游方式联动筛选
- 增加地图可视化,例如中国地图省份热力图
- 增加导出报表功能,例如 Excel、PDF
15.2 推荐系统扩展
- 引入基于用户行为的协同过滤
- 引入内容相似度推荐
- 增加推荐结果解释模块
15.3 账户系统扩展
- 增加邮箱验证码与真实邮件发送
- 增加头像、个人简介、账号注销
- 增加操作日志与安全记录
15.4 工程化扩展
- 将 Bootstrap 和 ECharts 改为本地静态依赖,适配离线部署
- 增加环境变量配置,避免数据库账号写死在
settings.py - 增加日志、异常监控与部署脚本
- 增加 REST API,演进为前后端分离架构
16. 结论
中国旅游用户数据可视化分析系统已经完成了从原始 CSV 数据到可视化分析网站的完整实现。项目不仅实现了多维度旅游数据分析,而且补齐了账号体系、数据收藏、推荐历史、品牌化前端等完整网站能力。
从课程设计、毕业设计或项目展示的角度看,本系统已经具备较完整的产品形态与技术实现闭环;从后续工程扩展角度看,该项目也保留了较好的可维护性和可扩展性,适合继续深化。