当前位置:首页>python>124-基于Python的航空旅客满意度数据可视化分析系统

124-基于Python的航空旅客满意度数据可视化分析系统

  • 2026-10-11 08:01:56
124-基于Python的航空旅客满意度数据可视化分析系统

航空旅客满意度数据可视化分析系统 - 技术文档

1. 项目概述

1.1 项目名称

航空旅客满意度数据可视化分析系统(Airline Passenger Satisfaction Visualization & Analysis System)

1.2 项目简介

本系统是一个基于 Python Flask 框架的 Web 数据可视化分析平台,针对航空旅客满意度调查数据(约 13 万条记录)进行多维度分析与可视化展示。系统涵盖数据概览、满意度分析、旅客画像、航班特征、服务评分卡、深度洞察、预测分析、数据查询共 8 大功能模块,提供 28 个交互式图表和 1 个可筛选分页数据表。

1.3 项目目标

  • 对航空旅客满意度数据进行全面的多维分析
  • 通过可视化图表直观呈现数据规律和趋势
  • 利用机器学习模型识别影响满意度的关键因素
  • 提供可交互的数据查询功能,支持按条件筛选

2. 系统架构

2.1 整体架构

┌─────────────────────────────────────────────────────┐│                    浏览器 (Browser)                    ││  ┌───────────┐  ┌──────────┐  ┌──────────────────┐  ││  │  HTML/CSS  │  │   JS     │  │    ECharts 5.5   │  ││  │  (Jinja2)  │  │ (原生)   │  │   (图表渲染)     │  ││  └─────┬─────┘  └────┬─────┘  └──────────────────┘  ││        │              │                               ││        └──────────────┘                               ││                 │ AJAX (fetch API)                     │└─────────────────┼─────────────────────────────────────┘                  │┌─────────────────┼─────────────────────────────────────┐│           Flask Server (port 5080)                     ││  ┌─────────────────────────────────────────────────┐  ││  │                   app.py                         │  ││  │  ┌──────────┐  ┌──────────────┐  ┌───────────┐ │  ││  │  │ 路由控制  │  │  Session认证  │  │ API接口层 │ │  ││  │  └──────────┘  └──────────────┘  └───────────┘ │  ││  └────────────────────┬────────────────────────────┘  ││                       │                                ││  ┌────────────────────┼────────────────────────────┐  ││  │                    ▼                             │  ││  │  ┌──────────────┐  ┌──────────────────────────┐ │  ││  │  │   models.py   │  │    data_analysis.py      │ │  ││  │  │  (用户管理)   │  │    (数据分析引擎)        │ │  ││  │  └──────┬───────┘  └────────────┬─────────────┘ │  ││  │         │                       │               │  ││  │         ▼                       ▼               │  ││  │  ┌──────────────┐  ┌──────────────────────────┐ │  ││  │  │  SQLite DB   │  │  Pandas + scikit-learn   │ │  ││  │  │  (users.db)  │  │  (CSV数据处理)           │ │  ││  │  └──────────────┘  └──────────────────────────┘ │  ││  └─────────────────────────────────────────────────┘  │└───────────────────────────────────────────────────────┘

2.2 架构风格

  • 前后端半分离架构
    :后端通过 Flask 路由提供页面和 JSON API,前端为单页应用(SPA)模式
  • 数据驱动
    :分析数据来源于 CSV 文件,通过 Pandas 在内存中加载和处理
  • 懒加载模式
    :CSV 数据在首次请求时加载到内存,后续请求复用缓存的 DataFrame

3. 技术栈

3.1 后端技术

技术
版本
用途
Python
3.x
主要开发语言
Flask
3.1.1
Web 框架,提供路由、模板渲染、Session 管理
Pandas
2.2.3
数据加载、清洗、统计分析
NumPy
-
数值计算支持
scikit-learn
1.3.2
机器学习(逻辑回归分类模型)
SQLite3
内置
用户数据存储
hashlib
内置
密码 SHA-256 加密

3.2 前端技术

技术
版本
用途
HTML5
-
页面结构
CSS3
-
样式(暗色科技主题、CSS 变量、动画)
JavaScript
ES6+
交互逻辑(原生,无框架)
ECharts
5.5.1 (CDN)
数据可视化图表库
Jinja2
Flask 内置
服务端模板引擎
Fetch API
-
前后端数据交互

3.3 开发工具

工具
用途
pip
Python 包管理
CDN
ECharts 前端资源加载

3.4 依赖清单 (requirements.txt)

flask==3.1.1pandas==2.2.3scikit-learn==1.3.2numpy

4. 数据库设计

4.1 数据库类型

  • SQLite3
    :用于存储用户账户和操作日志
  • CSV 文件
    :作为分析数据源(airline_passenger_satisfaction.csv,约 129,880 条记录)

4.2 数据库表结构

4.2.1 用户表 (users)

字段
类型
约束
说明
id
INTEGER
PRIMARY KEY AUTOINCREMENT
用户唯一标识
username
TEXT
UNIQUE NOT NULL
用户名
password
TEXT
NOT NULL
密码(SHA-256 加盐哈希,盐值:airline2024)
nickname
TEXT
DEFAULT ‘’
用户昵称
avatar
TEXT
DEFAULT ‘’
头像(Base64 Data URI 格式存储)
created_at
REAL
NOT NULL
注册时间(Unix 时间戳)

4.2.2 操作日志表 (data_records)

字段
类型
约束
说明
id
INTEGER
PRIMARY KEY AUTOINCREMENT
记录唯一标识
user_id
INTEGER
NOT NULL (FK → users.id)
关联用户 ID
action
TEXT
NOT NULL
操作类型(如 login、logout)
detail
TEXT
DEFAULT ‘’
操作详情
created_at
REAL
NOT NULL
操作时间(Unix 时间戳)

4.2.3 CSV 数据字段说明

数据来源:airline_passenger_satisfaction.csv

字段名
类型
取值范围
说明
ID
整数
唯一标识
旅客编号
Gender
分类
Male / Female
性别
Age
整数
7-85
年龄
Customer Type
分类
First-time / Returning
客户类型
Type of Travel
分类
Business / Personal
出行目的
Class
分类
Business / Economy / Economy Plus
舱位等级
Flight Distance
整数
31-4983
飞行距离(km)
Departure Delay
整数
0-1592
出发延误(分钟)
Arrival Delay
浮点数
0-1584(含缺失值)
到达延误(分钟)
Departure and Arrival Time Convenience
整数
1-5
出入港时间便利性评分
Ease of Online Booking
整数
1-5
在线预订便捷性评分
Check-in Service
整数
1-5
值机服务评分
Online Boarding
整数
1-5
在线登机评分
Gate Location
整数
1-5
登机口位置评分
On-board Service
整数
1-5
机上服务评分
Seat Comfort
整数
1-5
座椅舒适度评分
Leg Room Service
整数
1-5
腿部空间评分
Cleanliness
整数
1-5
清洁度评分
Food and Drink
整数
1-5
餐饮评分
In-flight Service
整数
1-5
机上服务评分
In-flight Wifi Service
整数
1-5
机上 WiFi 评分
In-flight Entertainment
整数
1-5
机上娱乐评分
Baggage Handling
整数
1-5
行李处理评分
Satisfaction
分类
Satisfied / Neutral or Dissatisfied
总体满意度

4.3 E-R 关系图

┌──────────┐       1:N       ┌───────────────┐│  users   │ ─────────────── │ data_records  ││          │                 │               ││ id (PK)  │◄───────────────│ user_id (FK)  ││ username │                 │ id (PK)       ││ password │                 │ action        ││ nickname │                 │ detail        ││ avatar   │                 │ created_at    ││ created_at│                └───────────────┘└──────────┘

5. 功能模块详细说明

5.1 用户认证模块

5.1.1 登录功能

  • 页面
    :login.html
  • 路由
    :GET/POST /login
  • 认证方式
    :Session-based Authentication
  • 密码加密
    :SHA-256 加盐哈希(盐值:airline2024)
  • 特性
    :粒子动画背景、表单验证、错误提示

5.1.2 注册功能

  • 页面
    :register.html
  • 路由
    :GET/POST /register
  • 验证规则
    :用户名唯一性检查、密码强度校验
  • 注册成功后
    :自动跳转登录页

5.1.3 用户资料管理

  • 页面
    :profile.html
  • 路由
    :GET/POST /profile
  • 功能
    : 
    • 修改昵称
    • 上传头像(Base64 编码存储)
    • 修改用户名
    • 修改密码

5.1.4 管理员功能

  • GET /api/admin/users
    :查看所有用户列表
  • POST /api/admin/delete_user
    :删除指定用户

5.2 数据概览模块 (Dashboard)

  • 前端文件
    :dashboard.js
  • API
    :GET /api/overview
  • 功能
    : 
    • 8 个 KPI 指标卡片:总旅客数、满意/不满意人数、满意度率、平均年龄、平均飞行距离、平均出发延误、平均到达延误
    • 3 个环形饼图:满意度分布、舱位分布、性别分布
    • 1 个柱状图:年龄段分布

5.3 满意度分析模块

  • 前端文件
    :satisfaction.js
  • 图表数量
    :6 个
  • 功能
    :
图表
API
说明
雷达图
/api/satisfaction/radar
14 个服务维度的平均评分对比
水平条形图
/api/satisfaction/factors
影响满意度的关键因素排名(满意与不满意群体的均值差异)
堆叠柱状图(按舱位)
/api/satisfaction/by_class
不同舱位的满意度分布
堆叠柱状图(按客户类型)
/api/satisfaction/by_customer_type
首次/回头客的满意度对比
堆叠柱状图(按出行目的)
/api/satisfaction/by_travel_type
商务/个人出行的满意度对比
分组柱状图
/api/satisfaction/rating_by_class
各服务维度按舱位分组的评分对比

5.4 旅客画像模块 (Population)

  • 前端文件
    :population.js
  • 图表数量
    :4 个
  • 功能
    :
图表
API
说明
堆叠柱状图
/api/population/age_vs_satisfaction
各年龄段的满意度分布
堆叠柱状图
/api/population/gender_vs_satisfaction
不同性别的满意度对比
柱状图
/api/population/age
旅客年龄分布(7 个分段)
饼图
/api/population/gender
性别比例

年龄分段规则:<18、18-25、26-35、36-45、46-55、56-65、65+

5.5 航班特征模块 (Flight)

  • 前端文件
    :flight.js
  • 图表数量
    :6 个图表 + 1 个数据表
  • 功能
    :
图表
API
说明
4 个延误 KPI 卡片
/api/flight/delay_gauge
平均延误时间、准点率、严重延误率等
柱状图
/api/flight/distance_vs_satisfaction
飞行距离与满意度的关系(6 个距离段)
柱状图
/api/flight/delay_vs_satisfaction
延误时间与满意度的关系(7 个时间段)
分组柱状图
/api/flight/delay_distribution
出发/到达延误分布对比
仪表盘
/api/flight/delay_gauge
准点率仪表盘
散点图
/api/analysis/scatter
年龄与延误的散点关系(随机抽样 2000 条)
箱线图
/api/analysis/boxplot
各舱位的飞行距离分布(含异常值检测)

距离分段规则:0-500、501-1000、1001-1500、1501-2000、2001-3000、3000+

延误分段规则:0(准时)、1-15、16-30、31-60、61-120、121-240、240+(分钟)

5.6 服务评分卡模块 (Service)

  • 前端文件
    :service.js
  • 图表数量
    :4 个
  • 功能
    :
图表
API
说明
水平条形图(带合格线)
/api/service/scorecard
14 个服务维度的平均评分(含 3.5 分合格线)
分组柱状图
/api/service/scorecard
各维度的高分(≥4)/低分(≤2)占比
柱状图
/api/service/scorecard
各维度评分标准差(波动程度)
漏斗图
/api/analysis/funnel
旅客漏斗:全部→无延误→短途→中途→长途

5.7 深度洞察模块 (Insights)

  • 前端文件
    :insights.js
  • 图表数量
    :4 个
  • 功能
    :
图表
API
说明
双向条形图
/api/satisfaction/factors
满意/不满意群体各维度评分对比
热力图
/api/satisfaction/correlation
14×14 服务维度皮尔逊相关系数矩阵
热力图
/api/flight/distance_heatmap
年龄×飞行距离的满意度率矩阵
矩形树图
/api/analysis/segments
客户细分(客户类型×舱位×出行目的三维交叉分析)

5.8 预测分析模块 (Prediction)

  • 前端文件
    :prediction.js
  • 图表数量
    :4 个
  • 功能
    :
图表
API
说明
4 个模型指标 KPI
/api/prediction/model
准确率、精确率、召回率、F1 分数
水平条形图
/api/prediction/model
特征重要性排名(逻辑回归系数绝对值)
直方图
/api/prediction/model
预测概率分布(5% 步长分箱)
热力图
/api/prediction/model
混淆矩阵(2×2)

5.9 数据查询模块 (DataTable)

  • 前端文件
    :flight.js(initDataTable 函数)
  • API
    :GET /api/data/table
  • 筛选条件
    :性别、年龄范围、客户类型、舱位等级、满意度
  • 功能
    :服务端分页、条件筛选、HTML 表格展示

6. 机器学习模型

6.1 模型概述

项目
说明
算法
逻辑回归(Logistic Regression)
库
scikit-learn 1.3.2
目标
二分类(Satisfied = 1,其余 = 0)
训练方式
每次 API 调用时实时训练(不持久化模型)

6.2 特征工程

输入特征(18 个):

类型
特征
数值型
Age、Flight Distance、Departure Delay、Arrival Delay
评分型 (1-5)
Departure and Arrival Time Convenience、Ease of Online Booking、Check-in Service、Online Boarding、Gate Location、On-board Service、Seat Comfort、Leg Room Service、Cleanliness、Food and Drink、In-flight Service、In-flight Wifi Service、In-flight Entertainment、Baggage Handling

6.3 数据预处理

  1. 缺失值填充:fillna(0)
  2. 特征标准化:StandardScaler(零均值单位方差)
  3. 数据集划分:训练集 70% / 测试集 30%(random_state=42)

6.4 模型参数

LogisticRegression(max_iter=1000, random_state=42)

6.5 评估指标

  • 准确率 (Accuracy)
    :整体预测正确率
  • 精确率 (Precision)
    :预测为满意中实际满意的比例
  • 召回率 (Recall)
    :实际满意中被正确预测的比例
  • F1 分数
    :精确率和召回率的调和平均
  • 混淆矩阵
    :TP、TN、FP、FN
  • 特征重要性
    :逻辑回归系数绝对值排序
  • 预测概率分布
    :以 5% 为步长的直方图

6.6 统计分析方法

方法
应用场景
皮尔逊相关系数
14 个服务维度的相关性矩阵
均值差异分析
满意/不满意群体各维度评分差异
四分位数分析
箱线图(Q1、中位数、Q3、IQR 异常值检测)
标准差
服务评分波动程度
交叉分析
年龄×距离满意度率、客户细分三维交叉

7. API 接口文档

7.1 页面路由

方法
路径
说明
认证要求
GET
/
主仪表盘页面
需登录
GET/POST
/login
登录页面
无
GET/POST
/register
注册页面
无
GET
/logout
退出登录
无
GET/POST
/profile
个人资料页面
需登录

7.2 用户管理 API

方法
路径
说明
请求参数
返回格式
GET
/api/profile
获取当前用户信息
-
JSON
POST
/api/change_password
修改密码
old_pwd, new_pwd
JSON
POST
/api/change_username
修改用户名
new_username
JSON
GET
/api/logs
获取操作日志
-
JSON
GET
/api/admin/users
获取所有用户列表
-
JSON
POST
/api/admin/delete_user
删除用户
user_id
JSON

7.3 数据分析 API

所有分析 API 均为 GET 请求,返回 JSON 格式数据。

7.3.1 数据概览

GET /api/overview返回:{  total: 总旅客数,  satisfied: 满意人数,  dissatisfied: 不满意人数,  satisfaction_rate: 满意度率(%),  avg_age: 平均年龄,  avg_distance: 平均飞行距离,  avg_departure_delay: 平均出发延误,  avg_arrival_delay: 平均到达延误}

7.3.2 满意度分析

GET /api/satisfaction/distribution        → 满意/不满意人数分布GET /api/satisfaction/radar               → 14 维度平均评分GET /api/satisfaction/by_class            → 按舱位统计满意度GET /api/satisfaction/by_customer_type    → 按客户类型统计满意度GET /api/satisfaction/by_travel_type      → 按出行目的统计满意度GET /api/satisfaction/rating_by_class     → 各维度按舱位分组评分GET /api/satisfaction/factors             → 影响因素排名GET /api/satisfaction/correlation         → 14×14 相关系数矩阵

7.3.3 旅客画像

GET /api/population/age                   → 年龄分布GET /api/population/gender                → 性别分布GET /api/population/age_vs_satisfaction   → 年龄×满意度GET /api/population/gender_vs_satisfaction → 性别×满意度GET /api/population/class_distribution    → 舱位分布

7.3.4 航班特征

GET /api/flight/distance_vs_satisfaction  → 距离×满意度GET /api/flight/delay_distribution        → 延误分布GET /api/flight/delay_vs_satisfaction     → 延误×满意度GET /api/flight/delay_gauge               → 准点率/延误指标GET /api/flight/distance_heatmap          → 年龄×距离满意度热力图GET /api/data/table                       → 分页数据表(支持筛选)

7.3.5 服务评分卡

GET /api/service/scorecard                → 14 维度评分统计

7.3.6 深度洞察

GET /api/analysis/scatter                 → 散点图数据GET /api/analysis/boxplot                 → 箱线图数据GET /api/analysis/funnel                  → 漏斗图数据GET /api/analysis/segments                → 客户细分数据

7.3.7 预测分析

GET /api/prediction/model                 → 模型训练结果

8. 前端页面设计

8.1 页面结构

系统采用 SPA(单页应用)架构,通过侧边栏导航在 8 个虚拟页面间切换:

┌──────────────────────────────────────────────────────┐│                    index.html                         ││  ┌────────────┐  ┌────────────────────────────────┐  ││  │            │  │                                │  ││  │  侧边栏    │  │       内容区域                  │  ││  │  导航菜单  │  │  ┌──────────────────────────┐  │  ││  │            │  │  │  dashboard / satisfaction │  │  ││  │  · 数据概览│  │  │  / population / flight    │  │  ││  │  · 满意度  │  │  │  / service / insights     │  │  ││  │  · 旅客画像│  │  │  / prediction / datatable │  │  ││  │  · 航班特征│  │  └──────────────────────────┘  │  ││  │  · 服务评分│  │                                │  ││  │  · 深度洞察│  │                                │  ││  │  · 预测分析│  │                                │  ││  │  · 数据查询│  │                                │  ││  └────────────┘  └────────────────────────────────┘  │└──────────────────────────────────────────────────────┘

8.2 UI 设计风格

  • 主题
    :暗色科技风格(Dark Sci-Fi Theme)
  • 主色调
    :青色 (#00b4ff)
  • 背景
    :深色网格背景 + 扫描线动画
  • 面板
    :毛玻璃效果(Glassmorphism)
  • 字体
    :等宽字体
  • 动画
    :CSS 过渡动画、粒子效果(登录/注册页)

8.3 图表统计

共使用 28 个 ECharts 实例,涵盖以下图表类型:

图表类型
数量
使用页面
环形饼图 (Donut Pie)
3
Dashboard
柱状图 (Bar)
5
Dashboard、Population、Flight
雷达图 (Radar)
1
Satisfaction
水平条形图 (Horizontal Bar)
4
Satisfaction、Service、Insights、Prediction
堆叠柱状图 (Stacked Bar)
4
Satisfaction、Population
分组柱状图 (Grouped Bar)
3
Satisfaction、Service、Prediction
仪表盘 (Gauge)
1
Flight
散点图 (Scatter)
1
Flight
箱线图 (Boxplot)
1
Flight
热力图 (Heatmap)
3
Insights、Prediction
矩形树图 (Treemap)
1
Insights
漏斗图 (Funnel)
1
Service

8.4 文件清单

文件
职责
main.js
导航切换、ECharts 主题注册、页面初始化调度
dashboard.js
数据概览页:KPI 卡片 + 饼图 + 柱状图
satisfaction.js
满意度分析页:雷达图 + 条形图 + 堆叠柱状图
population.js
旅客画像页:年龄/性别分布与满意度交叉
flight.js
航班特征页:延误分析 + 距离分析 + 数据表
service.js
服务评分卡页:评分排名 + 高低分占比 + 漏斗图
insights.js
深度洞察页:因素对比 + 相关矩阵 + 热力图 + 树图
prediction.js
预测分析页:模型指标 + 特征重要性 + 混淆矩阵
style.css
主仪表盘全局样式(暗色主题)

9. 安全设计

9.1 认证安全

  • 密码使用 SHA-256 加盐哈希存储(盐值:airline2024)
  • 基于 Flask Session 的会话管理
  • Secret Key 每次服务启动随机生成(os.urandom(24))

9.2 接口安全

  • 所有 API 接口检查登录状态,未登录返回 401
  • 管理员接口需要额外权限验证
  • 密码修改需验证旧密码

9.3 数据安全

  • 密码不明文存储
  • 头像以 Base64 编码存储在数据库中
  • SQL 查询使用参数化查询防止 SQL 注入

10. 部署与运行

10.1 环境要求

  • Python 3.8+
  • pip 包管理工具

10.2 安装步骤

# 1. 进入项目目录cd fly# 2. 安装依赖pip install -r requirements.txt# 3. 启动服务python app.py

10.3 访问地址

  • 服务启动后监听端口 5080
  • 浏览器访问:http://localhost:5080

10.4 文件结构说明

fly/├── airline_passenger_satisfaction.csv   # 分析数据源(约 12.3MB)├── app.py                               # Flask 主应用(路由、API)├── data_analysis.py                     # 数据分析引擎(Pandas 处理)├── models.py                            # 数据库模型(用户、日志)├── requirements.txt                     # Python 依赖清单├── users.db                             # SQLite 数据库文件├── static/│   ├── css/│   │   └── style.css                    # 仪表盘样式│   └── js/│       ├── main.js                      # 主控制脚本│       ├── dashboard.js                 # 数据概览│       ├── satisfaction.js              # 满意度分析│       ├── population.js                # 旅客画像│       ├── flight.js                    # 航班特征 + 数据表│       ├── service.js                   # 服务评分卡│       ├── insights.js                  # 深度洞察│       └── prediction.js               # 预测分析└── templates/    ├── index.html                       # 主 SPA 页面    ├── login.html                       # 登录页    ├── register.html                    # 注册页    └── profile.html                     # 个人资料页

11. 数据流说明

11.1 请求处理流程

用户操作 → 浏览器 JS → fetch API 请求    → Flask 路由匹配        → 页面路由:渲染 Jinja2 模板返回 HTML        → API 路由:调用 data_analysis.py 分析函数            → Pandas 读取/处理 CSV 数据            → 返回 JSON 数据        → 前端 JS 解析 JSON → ECharts 渲染图表

11.2 数据加载策略

  • CSV 数据采用懒加载模式:首次请求时通过 get_df() 加载到全局变量 _df
  • 后续请求直接使用内存中的 DataFrame,避免重复 I/O
  • 每次 API 调用基于完整 DataFrame 进行实时计算

11.3 机器学习流程

API 请求 → 加载 DataFrame → 特征提取 (18 维)    → 缺失值填充 (fillna(0))    → StandardScaler 标准化    → 训练集/测试集划分 (70/30)    → LogisticRegression 训练    → 预测 + 评估    → 返回指标 + 特征重要性 + 混淆矩阵 + 概率分布

12. 局限性与改进方向

12.1 当前局限

方面
说明
数据存储
分析数据存储在 CSV 文件中,未导入数据库,不适合大数据量场景
模型持久化
机器学习模型每次请求重新训练,未做缓存或持久化
并发性能
Pandas 单线程处理,高并发场景下性能受限
认证机制
Session-based 认证不支持分布式部署
前端框架
使用原生 JS,组件化程度低
配置管理
数据库路径、端口等硬编码,无配置文件

12.2 可改进方向

  • 将 CSV 数据导入关系型数据库(如 MySQL/PostgreSQL),提升查询性能
  • 引入模型缓存机制,避免重复训练
  • 前端引入 Vue.js / React 提升组件化和可维护性
  • 增加更多机器学习算法(随机森林、XGBoost 等)进行对比
  • 添加数据导出功能(Excel、PDF 报告)
  • 支持数据定时更新和增量分析
  • 容器化部署(Docker)

最新文章

随机文章