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

12 KiB
Raw Blame History

📊 AI 数据分析师

一个基于 DeepSeek API + Streamlit 的智能数据分析平台,上传 CSV 数据即可获得 AI 驱动的深度洞察和可视化报告。

Python Streamlit DeepSeek Difficulty

功能特性

功能 描述
📈 数据预览 数据表格展示、统计摘要、列信息分析
📊 智能可视化 根据数据类型自动生成直方图、散点图、箱线图、热力图
🤖 AI 深度分析 综合分析、相关性分析、异常检测三种模式
💬 自然语言问答 用中文直接询问关于数据的任何问题
📝 报告生成 一键生成完整的 Markdown 格式分析报告并下载

🖼️ 界面预览

┌────────────────────────────────────────────────────────────────────┐
│  📊 AI 数据分析师                                                   │
│  上传数据,让 AI 帮你发现数据中的故事                                 │
├────────────────────────────────────────────────────────────────────┤
│ [📈 数据预览] [📊 智能可视化] [🤖 AI 分析] [💬 数据问答] [📝 生成报告] │
├────────────────────────────────────────────────────────────────────┤
│                                                                    │
│  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐                           │
│  │  100 │  │   7  │  │   0  │  │   5  │                           │
│  │ 数据行 │  │ 数据列 │  │ 缺失值 │  │ 数值列 │                           │
│  └──────┘  └──────┘  └──────┘  └──────┘                           │
│                                                                    │
│  ┌─────────────────────────────────────────────────────────────┐  │
│  │ 姓名   │ 部门   │ 年龄 │ 工龄 │ 月薪  │ 绩效评分 │ 满意度 │  │
│  │ 张三   │ 技术部 │  28  │  3   │ 15000 │  85.5   │  4.2   │  │
│  │ 李四   │ 市场部 │  32  │  5   │ 18000 │  78.3   │  3.8   │  │
│  │ ...    │ ...    │ ...  │ ...  │ ...   │  ...    │  ...   │  │
│  └─────────────────────────────────────────────────────────────┘  │
│                                                                    │
└────────────────────────────────────────────────────────────────────┘

🚀 快速开始

1. 进入项目目录

cd 示例项目-AI数据分析师

2. 创建虚拟环境(推荐)

python -m venv venv

# Windows
venv\Scripts\activate

# macOS/Linux
source venv/bin/activate

3. 安装依赖

pip install -r requirements.txt

4. 配置 API Key

创建 .env 文件:

echo "DEEPSEEK_API_KEY=sk-your-api-key" > .env

或直接在应用界面的侧边栏输入 API Key。

5. 运行应用

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. 数据处理与摘要生成

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 工程

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. 自动可视化生成

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. 多轮对话的上下文管理

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 管理

# 初始化状态
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 提交到代码仓库

📚 参考资料

👤 作者

Python 程序设计课程设计 - 高级示例项目


让数据说话,用 AI 倾听! 📊🤖