欢迎光临
我们一直在努力

313-基于Python的保险行业数据可视化分析系统

保险行业数据可视化分析系统 — 技术文档

1. 项目概述

1.1 基本信息

项目属性值
项目编号 313
项目名称 保险行业数据可视化分析系统
项目类型 分析型(无预测目标列)
技术栈 Flask + Vue 3(前后端分离)
数据规模 30,000 行 × 30 列
后端端口 8000
前端端口 5173
数据库 MySQL 8.0(design_313_insurance)
管理员账号 admin / admin123

1.2 系统功能

本系统是一个面向保险行业的全维度数据可视化分析平台,提供以下核心能力:

  • 13 个数据分析页面:覆盖客户画像、产品分析、地域分布、渠道分析、保费保额、理赔分析、时间趋势、关联分析、统计检验、回归分析、异常检测、同比环比
  • 地图下钻分析:基于 ECharts 的全国省份 → 城市级地图下钻,支持多指标切换
  • 聚类分析:K-Means / DBSCAN 算法,最优 K 值分析,聚类画像
  • 时间序列分析:季节性分解、ARIMA 预测
  • 关联规则挖掘:Apriori 算法,频繁项集与关联规则发现
  • 报告导出:Excel / PDF 自动生成与下载
  • 用户与权限:JWT 认证,user / admin 双角色体系
  • 数据管理:CRUD 操作 + CSV 批量导入

2. 技术架构

2.1 整体架构

┌─────────────────────────────────────────────────────────┐
│ 浏览器客户端 │
│ http://localhost:5173 │
└────────────────────────┬────────────────────────────────┘

Vite Dev Proxy
/api/* → :8000

┌────────────────────────▼────────────────────────────────┐
│ Flask API 后端 │
│ http://localhost:8000 │
│ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ 路由层 │→ │ 数据转换层 │→ │ shared 核心模块 │ │
│ │ (app.py) │ │ (结构适配) │ │ (纯 Python 计算) │ │
│ └──────────┘ └──────────────┘ └──────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ database │ │ CSV 文件 │ │
│ │ .py │ │ (pandas) │ │
│ └────┬─────┘ └──────────┘ │
└───────┼─────────────────────────────────────────────────┘

┌─────▼─────┐
│ MySQL │
│ 用户/数据 │
└───────────┘

2.2 前端技术栈

技术版本用途
Vue 3 ^3.4.21 前端框架(Composition API + <script setup>)
Vue Router ^4.3.0 路由管理(History 模式)
Pinia ^2.1.7 状态管理
Element Plus ^2.6.1 UI 组件库
@element-plus/icons-vue ^2.3.1 图标库
ECharts ^5.5.0 数据可视化图表
Axios ^1.6.7 HTTP 请求
NProgress ^0.2.0 路由切换进度条
dayjs ^1.11.10 日期处理
Vite ^5.1.6 构建工具
TypeScript ^5.4.2 类型系统

2.3 后端技术栈

技术用途
Flask Web 框架(纯 JSON API)
Flask-CORS 跨域支持
Flask-JWT-Extended JWT 认证
PyMySQL MySQL 数据库驱动
Passlib + bcrypt 密码哈希
Pandas + NumPy 数据处理与分析
SciPy 统计检验(t检验、ANOVA、卡方、正态性)
scikit-learn K-Means、DBSCAN、Isolation Forest、标准化
statsmodels 回归分析、时间序列分解、ARIMA
mlxtend Apriori 关联规则挖掘
openpyxl Excel 报告生成
reportlab PDF 报告生成
PyYAML 配置文件解析

2.4 项目演示

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


3. 项目目录结构

313-基于Python的保险行业数据可视化分析系统/
├── insurance_data.csv # 原始数据集 (30,000 行 × 30 列)
└── code/ # 项目代码目录
├── run.py # 启动脚本(启动 Flask 后端)

├── backend/ # ===== 后端 =====
│ ├── app.py # Flask 主应用(1,267 行,所有 API 路由)
│ ├── database.py # 数据库操作层(422 行)
│ ├── config.yaml # 项目配置文件
│ ├── requirements.txt # Python 依赖
│ ├── data/
│ │ └── insurance_data.csv # 数据集副本
│ └── shared/ # 核心分析模块(不可修改)
│ ├── __init__.py
│ ├── analysis_core.py # 基础分析(分布、相关性)
│ ├── stats_core.py # 统计检验
│ ├── regression_core.py # 回归分析
│ ├── anomaly_core.py # 异常检测
│ ├── comparative_core.py # 同比环比
│ ├── clustering_core.py # 聚类分析
│ ├── timeseries_core.py # 时间序列
│ ├── association_core.py # 关联规则
│ └── report_core.py # 报告导出

├── frontend/ # ===== 前端 =====
│ ├── package.json
│ ├── vite.config.ts # Vite 配置(含 API 代理)
│ ├── env.d.ts
│ └── src/
│ ├── main.ts # 入口文件
│ ├── App.vue # 根组件
│ ├── assets/
│ │ └── theme.css # 全局主题样式(Element Plus 覆盖)
│ ├── components/
│ │ └── Layout.vue # 应用布局(导航栏 + 内容区 + 页脚)
│ ├── router/
│ │ └── index.ts # 路由定义 + 导航守卫
│ ├── stores/
│ │ ├── config.ts # 项目配置 Store
│ │ └── user.ts # 用户认证 Store
│ ├── utils/
│ │ └── request.ts # Axios 封装(拦截器 + JWT 注入)
│ ├── api/
│ │ ├── auth.ts # 认证 API
│ │ ├── config.ts # 配置 API
│ │ ├── analytics.ts # 分析/聚类/时间序列/关联/报告/地图 API
│ │ └── admin.ts # 管理员 API
│ └── views/
│ ├── Home.vue # 首页(Hero + KPI 卡片 + 功能卡片)
│ ├── Login.vue # 登录页(左右分栏布局)
│ ├── Register.vue # 注册页
│ ├── Profile.vue # 个人中心
│ ├── Analytics.vue # 分析总览(统计卡片 + 模块入口)
│ ├── AnalyticsPage.vue # 通用分析页(1,913 行,含所有分析类型)
│ ├── MapDrilldown.vue # 地图下钻(全国 → 省 → 城市)
│ ├── Clustering.vue # 聚类分析
│ ├── Timeseries.vue # 时间序列分析
│ ├── Association.vue # 关联规则挖掘
│ ├── Reports.vue # 报告导出
│ └── admin/
│ ├── Dashboard.vue # 管理后台首页
│ ├── Users.vue # 用户管理
│ └── Data.vue # 数据管理(CRUD + CSV 导入)

└── docs/ # ===== 项目文档 =====
├── 技术文档.md # 本文档
├── api.md # API 接口文档
├── design-system.md # 设计系统
├── dev-rules.md # 开发规范
├── acceptance-report.md # 验收报告
├── backend-log.md # 后端开发日志
└── frontend-log.md # 前端开发日志

3.1 代码量统计

模块文件数代码行数
后端 Python(app.py + database.py) 2 1,688
后端 shared 核心模块 9 2,243
前端 Vue 组件 14 5,386
前端 TS 逻辑(路由/状态/API/工具) 7 374
前端 CSS 主题 1 143
配置文件 3 ~420
总计 36 ~10,254

4. 数据集说明

4.1 数据集概况

  • 文件名:insurance_data.csv
  • 编码:UTF-8
  • 数据量:30,000 行
  • 特征数:30 列(12 数值型 + 8 分类型 + 10 文本型)
  • 空值:仅 代理人编号 列有 25,095 个空值(线上渠道无代理人)

4.2 字段定义

客户信息(6 列)
字段名类型说明值域
保单号 text 唯一标识 30,000 个唯一值
客户编号 text 客户 ID 15,000 个唯一值(一客多保单)
客户姓名 text 客户姓名 15,000 个唯一值
性别 categorical 性别 男, 女
年龄 numeric 年龄 18 ~ 80 岁
教育程度 categorical 学历 高中及以下, 大专, 本科, 硕士, 博士
职业与收入(2 列)
字段名类型说明值域
职业 categorical 职业类别 教师, 销售, 工程师, 自由职业, 学生, 个体经营, 退休人员, 医生, 企业职员, 公务员
收入水平 categorical 收入区间 3000以下, 3000-5000, 5000-8000, 8000-12000, 12000-20000, 20000-50000, 50000以上
地域信息(2 列)
字段名类型说明值域
省份 categorical 省份 北京, 上海, 广东, 浙江, 江苏, 山东, 福建, 湖北, 四川, 河南(10 省)
城市 text 城市/区 50 个城市(每省 5 个)
保单信息(8 列)
字段名类型说明值域
保险类型 categorical 险种分类 寿险, 健康险, 意外险, 车险, 财产险, 旅游险
产品名称 text 具体产品 30 个唯一值
保险期限_年 numeric 保障期限 1 ~ 30 年
起保日期 text 保单生效日期 2020 ~ 2024 年
终保日期 text 保单到期日期
销售渠道 categorical 销售来源 代理人, 银行渠道, 线上直销, 电销, 经纪公司, 第三方平台
代理人编号 text 代理人 ID 500 个唯一值(83.65% 空值)
缴费方式 categorical 缴费频次 年交, 季交, 月交, 趸交
财务指标(4 列)
字段名类型说明值域
保费 numeric 保费金额 44.17 ~ 38,992.45 元,均值 6,093.93
保额 numeric 保障金额 23,299 ~ 19,123,333 元,均值 1,623,885
理赔金额 numeric 理赔支出 0 ~ 11,766,697 元,均值 86,201
佣金 numeric 渠道佣金 1.33 ~ 5,848.87 元,均值 537.13
保单状态(4 列)
字段名类型说明值域
保单状态 categorical 保单有效性 有效, 退保, 满期, 理赔中, 失效
续保次数 numeric 续保轮数 0 ~ 5 次
出险次数 numeric 出险频率 0 ~ 3 次
理赔状态 categorical 理赔进度 未出险, 已报案, 审核中, 已赔付, 拒赔
客户评价与时间(4 列)
字段名类型说明值域
客户满意度 numeric 评分 3.5 ~ 5.0
投保年份 numeric 年份 2020 ~ 2024
投保季度 numeric 季度 1 ~ 4
投保月份 numeric 月份 1 ~ 12

5. 数据库设计

5.1 数据库配置

host: localhost
port: 3306
user: root
password: '123456'
database: design_313_insurance
charset: utf8mb4

5.2 数据表结构

系统仅使用 2 张数据表:

users 表(用户管理)

CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(100) UNIQUE NOT NULL, — 用户名
email VARCHAR(200) UNIQUE NOT NULL, — 邮箱
password_hash VARCHAR(255) NOT NULL, — bcrypt 哈希密码
role VARCHAR(20) DEFAULT 'user', — 角色: user / admin
status VARCHAR(20) DEFAULT 'active', — 状态: active / disabled
full_name VARCHAR(100) DEFAULT '', — 姓名
phone VARCHAR(30) DEFAULT '', — 电话
gender VARCHAR(20) DEFAULT '', — 性别
age INT NULL, — 年龄
department VARCHAR(100) DEFAULT '', — 部门
title VARCHAR(100) DEFAULT '', — 职位
bio TEXT NULL, — 个人简介
last_login_at DATETIME NULL, — 最近登录时间
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP — 注册时间
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

dataset_data 表(业务数据)

根据 config.yaml 的 features 配置动态生成,30 个字段均映射为 SQL 列:

  • numeric 类型 → DOUBLE
  • categorical / text 类型 → VARCHAR(200)
  • binary 类型 → INT

5.3 数据来源说明

数据操作数据来源说明
分析可视化 CSV 文件(pandas) 所有分析功能直接读取 CSV,无需导入数据库
数据管理 CRUD MySQL dataset_data 表 管理员在数据管理页面操作数据库
CSV 导入 CSV → MySQL 管理员可将 CSV 导入数据库
用户管理 MySQL users 表 注册、登录、权限管理

6. API 接口设计

6.1 接口总览

系统共 28 个 API 接口,统一返回格式:

{
"code": 0, // 0=成功, 1=失败
"message": "success",
"data": { }
}

认证方式:JWT Bearer Token(Authorization: Bearer <token>),有效期 24 小时。

6.2 接口清单

公开接口(无需认证)
方法路径说明
GET /api/config 获取项目配置(特征、分析页、模块)
POST /api/auth/login 用户登录,返回 JWT token
POST /api/auth/register 用户注册
认证接口(需登录)
方法路径说明
GET /api/auth/profile 获取当前用户资料
PUT /api/auth/profile 更新用户资料
POST /api/auth/change_password 修改密码
分析接口(需登录)
方法路径说明
GET /api/analytics/overview 数据概览(总记录数、数值统计摘要)
GET /api/analytics/<page_route> 通用分析页(13 个分析路由共用)
GET /api/analytics/map_data 地图下钻数据(省份/城市维度聚合)
聚类分析接口
方法路径说明
GET /api/clustering/optimal 最优 K 值分析(Elbow + Silhouette)
POST /api/clustering/run 执行聚类(K-Means / DBSCAN)
时间序列接口
方法路径说明
POST /api/timeseries/decompose 时间序列分解(趋势 + 季节 + 残差)
POST /api/timeseries/forecast ARIMA 预测
关联规则接口
方法路径说明
GET /api/association/prepare 获取可用列与项集支持度
POST /api/association/mine Apriori 挖掘(支持度/置信度/top_n)
报告导出接口
方法路径说明
GET /api/reports 获取已生成报告列表
POST /api/reports/generate 生成 Excel/PDF 报告
GET /api/reports/download/<filename> 下载报告文件
数据管理接口
方法路径说明
GET /api/data 分页查询数据
POST /api/data 新增记录
GET /api/data/<id> 查看单条记录
PUT /api/data/<id> 更新记录
DELETE /api/data/<id> 删除记录
POST /api/data/import_csv CSV 批量导入
管理员接口(需 admin 角色)
方法路径说明
GET /api/admin/stats 系统统计(用户数、数据量、今日登录、7 天活跃)
GET /api/admin/users 用户列表
POST /api/admin/users 创建用户
PUT /api/admin/users/<id>/role 修改角色
PUT /api/admin/users/<id>/status 启用/禁用
POST /api/admin/users/<id>/reset_password 重置密码(重置为 123456)
DELETE /api/admin/users/<id> 删除用户

7. 前端页面设计

7.1 页面路由

路径页面权限说明
/ Home.vue 公开 首页(Hero + 统计卡片)
/login Login.vue 仅未登录 登录(左品牌 + 右表单)
/register Register.vue 仅未登录 注册
/analytics Analytics.vue 公开 分析总览仪表盘
/analytics/:route AnalyticsPage.vue 公开 13 个分析子页面
/map MapDrilldown.vue 需登录 地图下钻分析
/clustering Clustering.vue 需登录 聚类分析
/timeseries Timeseries.vue 需登录 时间序列分析
/association Association.vue 需登录 关联规则挖掘
/reports Reports.vue 需登录 报告导出
/profile Profile.vue 需登录 个人中心
/admin admin/Dashboard.vue admin 管理后台
/admin/users admin/Users.vue admin 用户管理
/admin/data admin/Data.vue admin 数据管理

7.2 分析页面类型

AnalyticsPage.vue 是一个 1,913 行的通用分析组件,通过 page_route 参数自动渲染对应类型的图表:

路由标题分析类型核心模块交叉分析
customer_profile 客户画像分析 通用分布 analysis_core 年龄×性别, 职业×收入, 教育×保险类型
product_analysis 产品分析 通用分布 analysis_core 保险类型×保费, 产品×保单状态, 险种×期限
region_distribution 地域分布分析 通用分布 analysis_core 省份保费排名, 省份×类型热力图, 城市TOP15
channel_analysis 渠道分析 通用分布 analysis_core 渠道×保费, 渠道×险种, 缴费×保费
premium_coverage 保费保额分析 通用分布 analysis_core 保费×保额散点, 保费分段分布, 佣金×保费
claims_analysis 理赔分析 通用分布 analysis_core 理赔状态×金额, 出险×理赔, 险种×理赔率
time_trend 时间趋势分析 通用分布 analysis_core 年度保费趋势, 月度分布, 险种×年度
correlation 关联分析 相关性 analysis_core 相关性热力图
stat_tests 统计检验 statistical stats_core 描述性统计, 正态性, t检验, ANOVA, 卡方
regression_analysis 回归分析 regression regression_core 线性回归, 残差图, 系数
anomaly 异常值检测 anomaly anomaly_core IQR, Z-Score, Isolation Forest
period_compare 同比环比 comparative comparative_core 月度对比, 增长率, 移动平均

7.3 导航结构

首页 | 数据分析 ▼ | 地图下钻 | 聚类分析 | 时间序列 | 关联规则 | 报告导出 | 系统管理 ▼
├── 分析总览
├── 客户画像分析 (登录后显示) ├── 管理后台
├── 产品分析 ├── 用户管理
├── 地域分布分析 └── 数据管理
├── 渠道分析 (仅 admin)
├── 保费保额分析
├── 理赔分析
├── 时间趋势分析
├── 关联分析
├── 统计检验分析
├── 回归分析
├── 异常值检测
└── 同比环比分析

7.4 主题设计系统

设计变量值说明
主色 #1565C0 专业蓝
成功色 #2E7D32 深绿
警告色 #F57F17 琥珀
危险色 #C62828 深红
正文色 #303133 深灰
辅助文字 #909399 中灰
背景色 #f5f7fa 浅灰蓝
卡片圆角 12px 现代感
阴影 0 1px 3px rgba(0,0,0,0.05) 轻量级
导航栏 毛玻璃效果 backdrop-filter: blur(12px)

ECharts 全局配色数组:

['#1565C0', '#2E7D32', '#F57F17', '#C62828', '#0277BD', '#6A1B9A', '#00838F', '#AD1457', '#283593', '#558B2F']


8. 核心模块详解

8.1 shared 分析模块

所有 shared 模块为纯 Python 计算模块,不依赖 Flask,通过参数驱动,路由层负责数据结构转换。

analysis_core.py(246 行)

基础分析引擎,提供:

  • get_overview():数据集概览(行数、数值统计摘要)
  • get_distribution(columns):分类列频率分布 + 数值列直方图分箱
  • get_correlation(columns):数值特征间 Pearson 相关系数矩阵
  • get_category_stats(columns):分类列交叉统计
stats_core.py(249 行)

统计检验引擎:

  • descriptive_stats(columns):均值、中位数、标准差、偏度、峰度
  • normality_test(columns):Shapiro-Wilk / Kolmogorov-Smirnov 检验
  • t_test(col, group_col):独立样本 t 检验
  • anova_test(col, group_col):单因素 ANOVA 检验
  • chi_square_test(col1, col2):卡方独立性检验
regression_core.py(247 行)

回归分析引擎:

  • simple_regression(x, y):简单线性回归(斜率、截距、R²、p值)
  • multiple_regression(target, predictors):多元线性回归(系数、VIF、诊断)
  • 输出:系数表、残差图数据、预测值 vs 实际值散点
anomaly_core.py(228 行)

异常检测引擎:

  • iqr_detection(columns):四分位距法(1.5×IQR)
  • zscore_detection(columns, threshold=3):Z-Score 法
  • isolation_forest(columns):Isolation Forest 算法
  • 输出:异常点标记、异常比例、异常数据详情
comparative_core.py(233 行)

同比环比引擎:

  • period_comparison(date_col, value_cols, period):时段对比
  • growth_rate(date_col, value_cols):增长率计算
  • moving_average(date_col, value_col, window):移动平均线
clustering_core.py(245 行)

聚类分析引擎:

  • find_optimal_k(columns, max_k):Elbow 法 + Silhouette Score
  • kmeans_clustering(columns, k):K-Means 聚类
  • dbscan_clustering(columns, eps, min_samples):DBSCAN 密度聚类
  • get_cluster_profile(columns, labels):聚类画像(每簇均值对比)
timeseries_core.py(294 行)

时间序列引擎:

  • decompose(date_col, value_col):STL 分解(趋势 + 季节 + 残差)
  • arima_forecast(date_col, value_col, periods):ARIMA 预测
  • seasonal_pattern(date_col, value_col):季节性模式识别
association_core.py(195 行)

关联规则引擎:

  • prepare_transactions(columns):事务编码(One-Hot)
  • mine_rules(columns, min_support, min_confidence):Apriori 频繁项集
  • top_rules(columns, top_n, sort_by):Top-N 规则(按 lift 排序)
report_core.py(304 行)

报告导出引擎:

  • generate_excel():Excel 报告(多 Sheet,含统计图表)
  • generate_pdf():PDF 报告(中文排版,含统计摘要)

8.2 数据结构转换层

路由层(app.py)是 shared 模块与前端之间的桥梁,需要进行数据结构转换。主要转换类型:

转换类型示例说明
键名重命名 f_p_value → f_pvalue shared 返回键名与前端期望不同
列表 → 字典 coefficients: [{name, coef}] → {name: coef} 前端期望键值对形式
嵌套 → 扁平 result.data.items → result.items 减少前端嵌套访问
补算指标 DBSCAN 的 silhouette_score shared 未返回但前端需要

8.3 地图下钻

ECharts 地图实现方案:

  • GeoJSON 来源:阿里云 DataV CDN(geo.datav.aliyun.com),按需加载
  • 全国级:100000_full.json,10 省着色
  • 省级:{adcode}_full.json,下钻到区/市
  • 指标切换:投保数量、保费/保额/理赔/佣金的总额与均值
  • 配色映射:#E3F2FD → #0D47A1(蓝色渐变 6 级 visualMap)

省份 adcode 映射表:

省份adcode城市数
北京 110000 5 区
上海 310000 5 区
广东 440000 5 市
浙江 330000 5 市
江苏 320000 5 市
山东 370000 5 市
福建 350000 5 市
湖北 420000 5 市
四川 510000 5 市
河南 410000 5 市

9. 认证与权限

9.1 认证流程

用户提交用户名+密码


Flask 验证(bcrypt 比对)


生成 JWT Token(有效期 24h)


前端存入 localStorage


后续请求 Axios 拦截器自动注入 Authorization: Bearer <token>


Flask @jwt_required() 校验 Token → 获取 user_id

9.2 角色权限矩阵

功能游客useradmin
查看首页
查看分析页面
聚类/时间序列/关联/报告
地图下钻
个人中心
管理后台
用户管理
数据管理(CRUD + CSV 导入)

9.3 路由守卫

前端 Vue Router 守卫规则:

  • meta.guest: true:仅未登录可访问(登录页、注册页),已登录跳转 /
  • meta.auth: true:需要登录,未登录跳转 /login?redirect=当前路径
  • meta.role: 'admin':需要 admin 角色,非 admin 跳转 /

10. 部署与运行

10.1 环境要求

环境版本要求
Python 3.8+
Node.js 16+
MySQL 5.7+ / 8.0
npm 8+

10.2 数据库初始化

CREATE DATABASE design_313_insurance CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

数据库表会在首次启动后端时自动创建,默认管理员账号 admin / admin123 自动写入。

10.3 后端启动

cd code/backend

# 安装 Python 依赖
pip install -r requirements.txt

# 启动 Flask(方式一:直接运行)
python -c "from app import app; app.run(host='localhost', port=8000, debug=True)"

# 启动 Flask(方式二:使用启动脚本)
cd code
python run.py

后端启动后监听 http://localhost:8000。

10.4 前端启动

cd code/frontend

# 安装 Node 依赖
npm install

# 开发模式启动
npm run dev

前端启动后访问 http://localhost:5173,Vite 自动代理 /api/* 请求到后端 8000 端口。

10.5 生产构建

cd code/frontend

# 构建生产版本
npm run build

产出 dist/ 目录,可部署到 Nginx。生产环境需配置 Nginx 反向代理:

server {
listen 80;
server_name your-domain.com;

# 前端静态文件
location / {
root /path/to/dist;
try_files $uri $uri/ /index.html;
}

# API 代理
location /api/ {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}


11. 配置说明

11.1 config.yaml 结构

project: # 项目基本信息
id: '313'
name: 保险行业数据可视化分析系统
stack: flask_vue
db_name: design_313_insurance
port: 8000
theme_color: '#1565C0'

dataset: # 数据集配置
file: insurance_data.csv
features: [] # 30 个特征定义(key, label, type, options, range)

modules: # 功能模块开关
auth: true
analytics: true
data_manage: true
statistical_analysis: true
regression: true
anomaly_detection: true
comparative: true
clustering: true
timeseries: true
association_rules: true
report_export: true

analysis_pages: [] # 13 个分析页面配置

clustering: # 聚类参数
columns: [年龄, 保费, 保额, ]
max_k: 10

timeseries: # 时间序列参数
date_column: 起保日期
value_columns: [保费, 理赔金额]

association: # 关联规则参数
columns: [性别, 教育程度, 职业, ]

11.2 Vite 代理配置

// frontend/vite.config.ts
server: {
host: '0.0.0.0',
port: 5173,
proxy: {
'/api': {
target: process.env.VITE_API_URL || 'http://127.0.0.1:8000',
changeOrigin: true,
},
},
}


12. 关键设计决策

12.1 为什么分析数据读 CSV 而非数据库?

  • 数据集 30,000 行完全可以放入内存,pandas 处理速度极快
  • CSV 是原始数据来源,避免导入过程中的数据类型转换损失
  • shared 核心模块设计为纯 pandas 驱动,与数据库解耦
  • 数据库仅用于用户管理和 CRUD 操作

12.2 为什么使用单一 AnalyticsPage.vue?

  • 13 个分析页面共享相同的布局模式(页头 + 图表网格 + 表格)
  • 通过 page_route 参数动态切换分析类型和图表组合
  • 避免 13 个几乎相同的 Vue 文件导致的代码膨胀和维护负担
  • 不同分析类型(statistical、regression、anomaly、comparative)通过条件渲染分支处理

12.3 GeoJSON 按需加载策略

  • 全国地图 GeoJSON 约 500KB,10 个省份 GeoJSON 各 50~150KB
  • 首次加载全国 GeoJSON,点击省份时才加载对应省级 GeoJSON
  • 已加载的 GeoJSON 通过 echarts.registerMap() 缓存,不重复请求
  • 使用阿里云 DataV CDN,国内访问速度有保障

12.4 JWT 而非 Session 的选择

  • 前后端分离架构,API 无状态更适合 JWT
  • Token 存储在 localStorage,前端 Axios 拦截器自动注入
  • 24 小时过期策略平衡安全性与用户体验
  • Flask-JWT-Extended 提供成熟的 JWT 生命周期管理
赞(0)
未经允许不得转载:171主机测评 » 313-基于Python的保险行业数据可视化分析系统
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址