# 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(""" """, 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