This commit is contained in:
2026-04-02 17:16:19 +08:00
parent 420bbac9d7
commit f77195a9d7
16 changed files with 1058 additions and 0 deletions

264
test/README.md Normal file
View File

@@ -0,0 +1,264 @@
# CardioAI - 心血管疾病智能辅助系统
## 项目概述
CardioAI是一个多模块应用系统集成了数据可视化、机器学习预测和AI语音问答功能用于心血管疾病的智能辅助分析和诊断。
### 系统模块
1. **Module 1: 数据可视化仪表板** (Streamlit) - 本模块
- 数据清洗与特征工程
- 交互式数据筛选
- 可视化分析图表
2. **Module 2: 机器学习预测器** (Flask + XGBoost)
- 心血管疾病风险预测模型
- RESTful API接口
- 实时预测服务
3. **Module 3: AI语音助手** (DeepSeek + CosyVoice)
- 自然语言问答
- 语音交互界面
- 疾病知识查询
## Module 1: 数据可视化仪表板
### 功能特性
-**数据加载与清洗**: 自动处理异常值和缺失数据
-**特征工程**: 年龄转换、BMI计算、类别编码
-**交互式筛选**: 侧边栏多维度数据筛选
-**可视化分析**: Plotly交互式图表
-**性能优化**: 使用缓存加速数据加载
### 数据处理流程
1. **数据加载**: 从Excel文件加载原始数据
2. **年龄转换**: 将天数转换为年数(四舍五入)
3. **BMI计算**: `BMI = 体重(kg) / (身高(m)^2)`
4. **异常值处理**:
- 删除舒张压 ≥ 收缩压的记录
- 删除收缩压不在[90, 250] mmHg范围的记录
- 删除舒张压不在[60, 150] mmHg范围的记录
5. **类别转换**:
- 胆固醇水平: 1=正常, 2=高于正常, 3=极高
- 血糖水平: 1=正常, 2=高于正常, 3=极高
- 性别: 1=女性, 2=男性
- BMI分类: <18.5=偏瘦, 18.5-24.9=正常, 25-29.9=超重, ≥30=肥胖
### 快速开始
#### 1. 环境配置
```bash
# 创建并激活conda虚拟环境
conda create -n cardioenv python=3.10
conda activate cardioenv
# 安装依赖包
pip install -r requirements.txt
```
#### 2. 数据准备
确保数据文件位于正确路径:
```
项目根目录/
├── data/
│ └── 心血管疾病.xlsx
└── module1_dashboard/
└── cardio_dashboard.py
```
#### 3. 启动仪表板
```bash
# 进入项目根目录
cd D:\Project\PythonProject\AIcode\test
# 激活conda环境
conda activate cardioenv
# 启动Streamlit应用程序
streamlit run module1_dashboard/cardio_dashboard.py
```
或者使用conda直接运行
```bash
"D:\software\anaconda\Scripts\conda.exe" run -n cardioenv streamlit run module1_dashboard/cardio_dashboard.py
```
#### 4. 访问应用
打开浏览器,访问: [http://localhost:8501](http://localhost:8501)
### 界面说明
#### 侧边栏筛选器
- **年龄范围**: 滑动选择器,筛选指定年龄范围的记录
- **性别**: 多选框,选择要分析的性别(女性/男性)
- **心血管疾病状态**: 多选框,选择疾病状态(有/无)
- **BMI分类**: 多选框选择BMI分类偏瘦/正常/超重/肥胖)
- **胆固醇水平**: 多选框,选择胆固醇水平
- **血糖水平**: 多选框,选择血糖水平
#### 主界面区域
1. **关键指标面板**
- 筛选后记录数
- 心血管疾病风险率
- 平均年龄
- 平均BMI
2. **数据可视化图表**
- 年龄分布与心血管疾病关系直方图
- BMI分类对心血管疾病影响的堆叠柱状图
- 血压关系散点图
- 胆固醇水平分布饼图
- 血糖水平分布饼图
3. **数据预览**
- 数据摘要(形状、类型、缺失值)
- 原始数据表格(可自定义显示的列)
### 配置文件说明
`.env` 文件包含以下配置项:
```ini
# 数据文件路径
DATA_PATH=./data/心血管疾病.xlsx
# Flask服务器配置
FLASK_APP=module2_predictor/app.py
FLASK_ENV=development
# Streamlit配置
STREAMLIT_PORT=8501
# AI模型API密钥需要替换为实际值
DASHSCOPE_API_KEY=your_dashscope_api_key_here
OPENAI_API_KEY=your_openai_api_key_here
# 模型文件路径
MODEL_PATH=./module2_predictor/models/xgb_model.pkl
```
### 依赖包说明
详细依赖见 `requirements.txt`
- **数据处理**: pandas, numpy, openpyxl
- **机器学习**: scikit-learn, xgboost, joblib
- **可视化**: streamlit, plotly
- **Web服务**: Flask
- **环境管理**: python-dotenv
- **AI集成**: langchain-openai, dashscope, requests
### 常见问题
#### Q1: 数据加载失败
**症状**: 应用程序无法启动,提示文件找不到或格式错误
**解决**:
1. 检查 `data/心血管疾病.xlsx` 文件是否存在
2. 确认文件格式为Excel 2007+ (.xlsx)
3. 检查文件编码,确保不是二进制损坏
#### Q2: 图表显示异常
**症状**: 图表不显示或显示错误
**解决**:
1. 检查Plotly是否正确安装`pip install plotly`
2. 确保数据经过正确清洗没有无限值或NaN
3. 检查筛选条件是否过于严格导致无数据
#### Q3: 应用程序运行缓慢
**症状**: 页面响应慢,筛选操作延迟
**解决**:
1. 利用 `@st.cache_data` 装饰器的缓存功能
2. 减少一次性加载的数据量
3. 优化图表复杂度,减少数据点数量
#### Q4: 中文显示乱码
**症状**: 中文文字显示为乱码
**解决**:
1. 确保系统支持中文字体
2. Streamlit默认支持UTF-8编码检查源代码文件保存为UTF-8
3. 在Windows系统上设置控制台编码为UTF-8
### 开发说明
#### 项目结构
```
D:\Project\PythonProject\AIcode\test\
├── data\ # 数据文件目录
│ └── 心血管疾病.xlsx
├── module1_dashboard\ # 数据可视化模块
│ ├── cardio_dashboard.py
│ └── test_data.py
├── module2_predictor\ # 机器学习预测模块
│ └── templates\
├── module3_voice_assistant\ # AI语音助手模块
│ └── templates\
├── requirements.txt # Python依赖包
├── .env # 环境配置
└── README.md # 项目文档
```
#### 代码结构
- `load_and_process_data()`: 数据加载和清洗主函数,使用 `@st.cache_data` 缓存
- `create_filters()`: 创建侧边栏筛选器组件
- `apply_filters()`: 应用筛选条件到数据框
- `display_metrics()`: 显示关键指标卡片
- `create_visualizations()`: 创建所有可视化图表
- `display_data_preview()`: 显示数据预览和摘要
#### 扩展开发
1. **添加新图表**
```python
def create_new_chart(df):
fig = px.scatter(df, x='column1', y='column2', color='cardio_str')
st.plotly_chart(fig, use_container_width=True)
```
2. **添加新筛选器**
```python
# 在create_filters函数中添加
new_filter = st.sidebar.selectbox("新筛选器", options=['选项1', '选项2'])
```
3. **自定义样式**
```python
st.markdown("""
<style>
.custom-class { color: blue; }
</style>
""", unsafe_allow_html=True)
```
### 性能优化建议
1. **数据缓存**: 所有数据处理函数使用 `@st.cache_data` 装饰器
2. **增量加载**: 对于大型数据集,考虑分页或懒加载
3. **图表优化**: 使用采样或聚合减少数据点数量
4. **异步处理**: 长时间操作使用异步函数避免阻塞UI
### 下一步计划
1. **Module 2开发**: 实现XGBoost预测模型和Flask API
2. **Module 3开发**: 集成DeepSeek和CosyVoice语音助手
3. **功能增强**: 添加数据导出、报告生成功能
4. **部署优化**: Docker容器化云平台部署
### 技术支持
- **问题反馈**: 检查GitHub Issues或联系开发团队
- **文档更新**: 随着功能迭代保持文档同步
- **版本管理**: 使用Git进行版本控制定期发布稳定版本
---
**版权所有 © 2024 CardioAI项目组**
**版本**: 1.0.0
**最后更新**: 2024-04-02