Files
AIcode/test/README.md
2026-04-02 17:16:19 +08:00

264 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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