CourseDesignTemplate/示例项目-AI数据分析师/README.md

315 lines
12 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.

# 📊 AI 数据分析师
一个基于 DeepSeek API + Streamlit 的智能数据分析平台,上传 CSV 数据即可获得 AI 驱动的深度洞察和可视化报告。
![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)
![Streamlit](https://img.shields.io/badge/Streamlit-1.28+-red.svg)
![DeepSeek](https://img.shields.io/badge/DeepSeek-API-green.svg)
![Difficulty](https://img.shields.io/badge/难度-⭐⭐⭐⭐-orange.svg)
## ✨ 功能特性
| 功能 | 描述 |
|:---|:---|
| 📈 **数据预览** | 数据表格展示、统计摘要、列信息分析 |
| 📊 **智能可视化** | 根据数据类型自动生成直方图、散点图、箱线图、热力图 |
| 🤖 **AI 深度分析** | 综合分析、相关性分析、异常检测三种模式 |
| 💬 **自然语言问答** | 用中文直接询问关于数据的任何问题 |
| 📝 **报告生成** | 一键生成完整的 Markdown 格式分析报告并下载 |
## 🖼️ 界面预览
```
┌────────────────────────────────────────────────────────────────────┐
│ 📊 AI 数据分析师 │
│ 上传数据,让 AI 帮你发现数据中的故事 │
├────────────────────────────────────────────────────────────────────┤
│ [📈 数据预览] [📊 智能可视化] [🤖 AI 分析] [💬 数据问答] [📝 生成报告] │
├────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ 100 │ │ 7 │ │ 0 │ │ 5 │ │
│ │ 数据行 │ │ 数据列 │ │ 缺失值 │ │ 数值列 │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 姓名 │ 部门 │ 年龄 │ 工龄 │ 月薪 │ 绩效评分 │ 满意度 │ │
│ │ 张三 │ 技术部 │ 28 │ 3 │ 15000 │ 85.5 │ 4.2 │ │
│ │ 李四 │ 市场部 │ 32 │ 5 │ 18000 │ 78.3 │ 3.8 │ │
│ │ ... │ ... │ ... │ ... │ ... │ ... │ ... │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────┘
```
## 🚀 快速开始
### 1. 进入项目目录
```bash
cd 示例项目-AI数据分析师
```
### 2. 创建虚拟环境(推荐)
```bash
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
```
### 3. 安装依赖
```bash
pip install -r requirements.txt
```
### 4. 配置 API Key
创建 `.env` 文件:
```bash
echo "DEEPSEEK_API_KEY=sk-your-api-key" > .env
```
或直接在应用界面的侧边栏输入 API Key。
### 5. 运行应用
```bash
streamlit run app.py
```
浏览器会自动打开 http://localhost:8501
## 📁 项目结构
```
示例项目-AI数据分析师/
├── app.py # 主程序 (~600行)
├── requirements.txt # 项目依赖
├── sample_data.csv # 示例数据(员工信息)
├── .env # 环境变量(需自行创建)
├── .gitignore # Git 忽略文件
└── README.md # 项目说明
```
## 🛠️ 技术架构
```
┌─────────────────────────────────────────────────────────┐
│ Streamlit UI │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │数据预览 │ │智能可视化│ │ AI分析 │ │数据问答 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │ │
├───────┼───────────┼───────────┼───────────┼─────────────┤
│ ▼ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Pandas DataFrame │ │
│ │ (数据处理与统计分析) │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────┐ ┌─────────────────────────────────────┐ │
│ │ Altair │ │ DeepSeek API │ │
│ │ (可视化)│ │ (AI 分析 / 问答 / 报告生成) │ │
│ └─────────┘ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
## 🔑 核心技术点
### 1. 数据处理与摘要生成
```python
def get_data_summary(df: pd.DataFrame) -> str:
"""生成数据摘要供 AI 分析"""
summary = []
# 基本信息
summary.append(f"数据集包含 {len(df)} 行和 {len(df.columns)} 列。")
# 数值列统计
numeric_cols = df.select_dtypes(include=['number']).columns
stats = df[numeric_cols].describe().to_string()
# ... 更多统计信息
return "\n".join(summary)
```
### 2. AI 分析的 Prompt 工程
```python
def analyze_with_ai(client, data_summary, analysis_type):
prompts = {
"general": """你是一个专业的数据分析师...
请从以下几个方面进行分析:
1. 📊 数据概况
2. 🔍 关键发现
3. 📈 建议可视化
4. ⚠️ 注意事项
5. 💡 进一步分析建议""",
"correlation": """分析变量之间的相关性...""",
"anomaly": """检测数据中的异常值..."""
}
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": prompts[analysis_type]},
{"role": "user", "content": f"数据摘要:\n{data_summary}"}
]
)
return response.choices[0].message.content
```
### 3. 自动可视化生成
```python
def create_visualizations(df):
"""根据数据类型自动选择合适的图表"""
charts = []
numeric_cols = df.select_dtypes(include=['number']).columns
cat_cols = df.select_dtypes(include=['object']).columns
# 数值分布 -> 直方图
if numeric_cols:
hist_chart = alt.Chart(df).mark_bar().encode(
x=alt.X(f'{col}:Q', bin=True),
y='count()'
)
charts.append(hist_chart)
# 多数值变量 -> 散点图 + 相关性热力图
# 分类+数值 -> 箱线图
# ...
return charts
```
### 4. 多轮对话的上下文管理
```python
def ask_data_question(client, data_summary, question, chat_history):
messages = [
{"role": "system", "content": "你是数据分析助手..."},
{"role": "user", "content": f"数据摘要:\n{data_summary}"},
{"role": "assistant", "content": "我已了解数据,请问您想知道什么?"}
]
# 添加历史对话
for msg in chat_history:
messages.append(msg)
# 添加当前问题
messages.append({"role": "user", "content": question})
return client.chat.completions.create(
model="deepseek-chat",
messages=messages
)
```
### 5. Session State 管理
```python
# 初始化状态
if "df" not in st.session_state:
st.session_state.df = None
if "analyses" not in st.session_state:
st.session_state.analyses = {}
if "qa_history" not in st.session_state:
st.session_state.qa_history = []
# 跨 Tab 共享数据
df = st.session_state.df
```
## 📊 使用的 Streamlit 组件
| 组件 | 用途 |
|:---|:---|
| `st.tabs` | 多标签页布局 |
| `st.columns` | 统计卡片布局 |
| `st.file_uploader` | CSV 文件上传 |
| `st.dataframe` | 交互式数据表格 |
| `st.altair_chart` | Altair 图表渲染 |
| `st.chat_message` | 问答对话界面 |
| `st.chat_input` | 聊天输入框 |
| `st.session_state` | 状态管理 |
| `st.download_button` | 报告下载 |
| `st.spinner` | 加载动画 |
| `st.expander` | 可折叠区域 |
## 🎨 Vibe Coding 开发过程
### 初始 Prompt
> "帮我创建一个 AI 数据分析师应用,使用 DeepSeek API 和 Streamlit。
>
> 功能需求:
> 1. 上传 CSV 文件,显示数据预览和统计
> 2. 自动根据数据类型生成可视化图表(用 Altair
> 3. AI 分析功能:综合分析、相关性分析、异常检测
> 4. 自然语言问答,可以问关于数据的问题
> 5. 生成 Markdown 格式的分析报告
>
> 技术要求:
> - 使用 st.tabs 做多标签页布局
> - 使用 st.session_state 管理状态
> - 界面要美观,使用自定义 CSS"
### 迭代优化
```
Prompt 1: "给数据预览页添加统计卡片,显示行数、列数、缺失值等"
Prompt 2: "让可视化更智能,根据数据类型自动选择图表类型"
Prompt 3: "问答功能要支持多轮对话AI 要记住之前的问题"
Prompt 4: "报告生成功能要把之前的分析结果都整合进去"
Prompt 5: "加一个示例数据选项,方便没有数据的用户体验"
```
## 🔧 扩展建议
如果你想进一步完善这个项目,可以考虑:
1. **支持更多文件格式**Excel、JSON、Parquet
2. **添加数据清洗功能**:缺失值处理、异常值处理
3. **更丰富的可视化**:时间序列图、地理图
4. **导出更多格式**PDF、HTML、Word
5. **添加数据筛选器**:让用户选择分析哪些列/行
6. **机器学习预测**:简单的回归/分类预测功能
## ⚠️ 注意事项
1. **数据大小**:大数据集(>10万行可能导致界面卡顿
2. **API 成本**:长文本分析和多轮问答会消耗更多 Token
3. **隐私安全**:敏感数据请在本地使用,不要上传到公共服务器
4. **API Key 安全**:不要将 `.env` 提交到代码仓库
## 📚 参考资料
- [Streamlit 官方文档](https://docs.streamlit.io)
- [Altair 可视化文档](https://altair-viz.github.io)
- [Pandas 数据分析](https://pandas.pydata.org/docs/)
- [DeepSeek API 文档](https://platform.deepseek.com/api-docs)
## 👤 作者
Python 程序设计课程设计 - 高级示例项目
---
**让数据说话,用 AI 倾听!** 📊🤖