系列导读:本篇将分享如何利用DeepSeek V4 API构建智能数据分析Agent,实现自动化数据处理、图表生成、洞察分析等功能。
文章目录
-
- 一、项目概述
-
- [1.1 功能设计](#1.1 功能设计)
- [1.2 技术架构](#1.2 技术架构)
- 二、环境配置
-
- [2.1 依赖安装](#2.1 依赖安装)
- [2.2 数据加载模块](#2.2 数据加载模块)
- [2.3 数据分析模块](#2.3 数据分析模块)
- 三、可视化生成模块
-
- [3.1 图表类型选择](#3.1 图表类型选择)
- 四、报告生成模块
-
- [4.1 智能报告生成](#4.1 智能报告生成)
- 五、完整示例
-
- [5.1 使用示例](#5.1 使用示例)
- [5.2 示例输出](#5.2 示例输出)
- 六、Web界面集成
-
- [6.1 Streamlit应用](#6.1 Streamlit应用)
- 七、部署与优化
-
- [7.1 Docker部署](#7.1 Docker部署)
- [7.2 性能优化](#7.2 性能优化)
- 八、总结
-
- [8.1 项目成果](#8.1 项目成果)
- [8.2 经验总结](#8.2 经验总结)
一、项目概述
1.1 功能设计
📊 智能数据分析Agent核心功能:
1. 数据理解
- 自动识别数据类型
- 理解数据含义
- 检测数据质量问题
2. 数据处理
- 数据清洗
- 数据转换
- 特征工程
3. 分析执行
- 描述性统计
- 相关性分析
- 趋势分析
4. 可视化生成
- 自动选择图表类型
- 生成图表代码
- 图表优化建议
5. 洞察报告
- 关键发现总结
- 业务建议
- 行动项推荐
1.2 技术架构
python
# 系统架构
class DataAnalysisAgent:
def __init__(self, llm):
self.llm = llm
self.data_loader = DataLoader()
self.analyzer = DataAnalyzer()
self.visualizer = ChartGenerator()
self.reporter = ReportGenerator()
def analyze(self, data_source, question):
# 1. 加载数据
df = self.data_loader.load(data_source)
# 2. 理解数据
data_info = self.analyzer.understand(df)
# 3. 执行分析
analysis_result = self.analyzer.execute(df, question)
# 4. 生成可视化
charts = self.visualizer.generate(df, analysis_result)
# 5. 生成报告
report = self.reporter.create(analysis_result, charts)
return report
二、环境配置
2.1 依赖安装
bash
pip install deepseek-api
pip install pandas
pip install numpy
pip install matplotlib
pip install seaborn
pip install plotly
pip install scikit-learn
2.2 数据加载模块
python
# data_loader.py
import pandas as pd
import os
class DataLoader:
def __init__(self):
self.supported_formats = ['csv', 'xlsx', 'json', 'parquet']
def load(self, file_path):
"""自动识别文件格式并加载"""
ext = os.path.splitext(file_path)[1].lower()
if ext == '.csv':
return pd.read_csv(file_path)
elif ext in ['.xlsx', '.xls']:
return pd.read_excel(file_path)
elif ext == '.json':
return pd.read_json(file_path)
elif ext == '.parquet':
return pd.read_parquet(file_path)
else:
raise ValueError(f"不支持的文件格式: {ext}")
def get_data_info(self, df):
"""获取数据基本信息"""
return {
"rows": len(df),
"columns": len(df.columns),
"column_types": df.dtypes.to_dict(),
"missing_values": df.isnull().sum().to_dict(),
"numeric_columns": df.select_dtypes(include=['number']).columns.tolist(),
"categorical_columns": df.select_dtypes(include=['object']).columns.tolist(),
}
2.3 数据分析模块
python
# data_analyzer.py
import pandas as pd
import numpy as np
from scipy import stats
class DataAnalyzer:
def __init__(self, llm):
self.llm = llm
def understand(self, df):
"""理解数据结构"""
info = {
"shape": df.shape,
"columns": list(df.columns),
"dtypes": df.dtypes.to_dict(),
"sample": df.head(3).to_dict(),
}
# 使用LLM解释每个字段
column_descriptions = {}
for col in df.columns:
prompt = f"解释这个数据列的含义:{col},数据类型:{df[col].dtype},样例值:{df[col].dropna().head(3).tolist()}"
description = self.llm.chat(prompt)
column_descriptions[col] = description
info["descriptions"] = column_descriptions
return info
def descriptive_stats(self, df):
"""描述性统计"""
numeric_df = df.select_dtypes(include=[np.number])
stats_result = {}
for col in numeric_df.columns:
stats_result[col] = {
"mean": float(numeric_df[col].mean()),
"median": float(numeric_df[col].median()),
"std": float(numeric_df[col].std()),
"min": float(numeric_df[col].min()),
"max": float(numeric_df[col].max()),
"q25": float(numeric_df[col].quantile(0.25)),
"q75": float(numeric_df[col].quantile(0.75)),
}
return stats_result
def correlation_analysis(self, df):
"""相关性分析"""
numeric_df = df.select_dtypes(include=[np.number])
if numeric_df.shape[1] < 2:
return "数据列不足,无法进行相关性分析"
corr_matrix = numeric_df.corr()
# 找出强相关的列对
strong_correlations = []
for i in range(len(corr_matrix.columns)):
for j in range(i+1, len(corr_matrix.columns)):
corr_value = corr_matrix.iloc[i, j]
if abs(corr_value) > 0.7:
strong_correlations.append({
"column1": corr_matrix.columns[i],
"column2": corr_matrix.columns[j],
"correlation": float(corr_value)
})
return {
"correlation_matrix": corr_matrix.to_dict(),
"strong_correlations": strong_correlations
}
def trend_analysis(self, df, time_column, value_column):
"""趋势分析"""
if time_column not in df.columns or value_column not in df.columns:
return "指定的时间列或数值列不存在"
df_sorted = df.sort_values(time_column)
# 简单线性回归
x = np.arange(len(df_sorted))
y = df_sorted[value_column].values
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
return {
"trend": "上升" if slope > 0 else "下降",
"slope": float(slope),
"r_squared": float(r_value**2),
"p_value": float(p_value),
"interpretation": f"每单位时间变化 {slope:.2f}"
}
三、可视化生成模块
3.1 图表类型选择
python
# chart_generator.py
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import pandas as pd
class ChartGenerator:
def __init__(self, llm):
self.llm = llm
def select_chart_type(self, df, analysis_goal):
"""智能选择图表类型"""
prompt = f"""
根据以下数据信息和分析目标,推荐最合适的图表类型:
数据概况:
- 行数:{len(df)}
- 列数:{len(df.columns)}
- 数值列:{df.select_dtypes(include=['number']).columns.tolist()}
- 分类列:{df.select_dtypes(include=['object']).columns.tolist()}
分析目标:{analysis_goal}
请推荐图表类型并解释原因。
"""
recommendation = self.llm.chat(prompt)
return recommendation
def generate_chart(self, df, chart_type, x_col, y_col, **kwargs):
"""生成图表"""
if chart_type == "bar":
fig = px.bar(df, x=x_col, y=y_col, **kwargs)
elif chart_type == "line":
fig = px.line(df, x=x_col, y=y_col, **kwargs)
elif chart_type == "scatter":
fig = px.scatter(df, x=x_col, y=y_col, **kwargs)
elif chart_type == "pie":
fig = px.pie(df, names=x_col, values=y_col, **kwargs)
elif chart_type == "histogram":
fig = px.histogram(df, x=x_col, **kwargs)
elif chart_type == "box":
fig = px.box(df, x=x_col, y=y_col, **kwargs)
elif chart_type == "heatmap":
numeric_df = df.select_dtypes(include=['number'])
corr = numeric_df.corr()
fig = px.imshow(corr, **kwargs)
else:
raise ValueError(f"不支持的图表类型: {chart_type}")
return fig
def generate_code(self, df, chart_type, x_col, y_col):
"""生成可复用的图表代码"""
template = f"""
import pandas as pd
import plotly.express as px
# 加载数据
df = pd.read_csv('your_data.csv')
# 生成{chart_type}图表
fig = px.{chart_type}(
df,
x='{x_col}',
y='{y_col}',
title='{x_col} vs {y_col}'
)
fig.show()
"""
return template
四、报告生成模块
4.1 智能报告生成
python
# report_generator.py
class ReportGenerator:
def __init__(self, llm):
self.llm = llm
def create(self, data_info, analysis_result, charts):
"""生成完整的分析报告"""
# 1. 汇总关键发现
findings = self.summarize_findings(analysis_result)
# 2. 生成业务建议
suggestions = self.generate_suggestions(findings)
# 3. 整理行动项
action_items = self.create_action_items(suggestions)
# 4. 组装报告
report = {
"executive_summary": self.generate_summary(findings),
"data_overview": data_info,
"key_findings": findings,
"business_suggestions": suggestions,
"action_items": action_items,
"charts": charts
}
return report
def summarize_findings(self, analysis_result):
"""汇总发现"""
prompt = f"""
请用通俗易懂的语言总结以下数据分析结果:
{analysis_result}
请列出3-5个关键发现。
"""
summary = self.llm.chat(prompt)
return summary
def generate_suggestions(self, findings):
"""生成业务建议"""
prompt = f"""
基于以下数据发现,提出具体的业务建议:
{findings}
请针对每个发现给出可行的建议。
"""
suggestions = self.llm.chat(prompt)
return suggestions
def generate_summary(self, findings):
"""生成执行摘要"""
prompt = f"""
请用2-3句话总结整个数据分析的核心结论:
{findings}
"""
summary = self.llm.chat(prompt)
return summary
五、完整示例
5.1 使用示例
python
# main.py
from deepseek import DeepSeekClient
from data_analysis_agent import DataAnalysisAgent
# 初始化
llm = DeepSeekClient(api_key="your-api-key")
agent = DataAnalysisAgent(llm)
# 执行分析
data_source = "sales_data.csv"
question = "分析销售数据,找出影响销售额的关键因素"
result = agent.analyze(data_source, question)
# 输出报告
print("=" * 50)
print("📊 数据分析报告")
print("=" * 50)
print(f"\n执行摘要:{result['executive_summary']}")
print(f"\n关键发现:{result['key_findings']}")
print(f"\n业务建议:{result['business_suggestions']}")
print(f"\n行动项:{result['action_items']}")
5.2 示例输出
==================================================
📊 数据分析报告
==================================================
执行摘要:
本月销售额同比增长15%,其中华东区表现亮眼。产品A销量稳步上升,但利润率略有下降。
关键发现:
1. 华东区销售额最高,占比40%,同比增长20%
2. 产品A销量增长30%,但价格战导致毛利下降5%
3. 线上渠道增速最快,环比增长25%
4. 客户复购率达到35%,表现优异
业务建议:
1. 加大华东区投入,巩固领先优势
2. 优化产品A定价策略,提升毛利
3. 继续投入线上渠道,把握增长红利
4. 维护老客户,提升复购率
行动项:
□ 与华东区团队沟通,制定下季度目标
□ 评估产品A成本,制定新的定价方案
□ 分析线上渠道用户画像,优化投放策略
□ 启动老客户回馈计划
六、Web界面集成
6.1 Streamlit应用
python
# app.py
import streamlit as st
from data_analysis_agent import DataAnalysisAgent
st.title("📊 智能数据分析Agent")
# 文件上传
uploaded_file = st.file_uploader("上传数据文件", type=['csv', 'xlsx'])
if uploaded_file:
# 保存文件
with open("temp_data.csv", "wb") as f:
f.write(uploaded_file.getbuffer())
# 分析问题
question = st.text_input("请输入您想了解的问题")
if st.button("开始分析"):
with st.spinner("分析中..."):
agent = DataAnalysisAgent(llm)
result = agent.analyze("temp_data.csv", question)
# 显示结果
st.success("分析完成!")
st.subheader("📝 执行摘要")
st.write(result['executive_summary'])
st.subheader("🔍 关键发现")
st.write(result['key_findings'])
st.subheader("💡 业务建议")
st.write(result['business_suggestions'])
st.subheader("✅ 行动项")
st.write(result['action_items'])
七、部署与优化
7.1 Docker部署
dockerfile
# Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8501
CMD ["streamlit", "run", "app.py", "--server.port=8501"]
7.2 性能优化
python
# 性能优化技巧
optimization_tips = {
"1. 数据采样": "大数据集先采样分析,再全量处理",
"2. 缓存结果": "相同查询直接返回缓存结果",
"3. 异步处理": "图表生成和数据处理并行",
"4. 增量分析": "只分析新增数据,而非全量",
"5. 限制返回": "控制报告长度,避免过长"
}
八、总结
8.1 项目成果
📊 智能数据分析Agent功能:
✅ 自动理解数据结构和含义
✅ 执行描述性统计和相关性分析
✅ 智能选择并生成可视化图表
✅ 生成业务洞察报告
✅ 提供可执行的行动建议
✅ Web界面,易于使用
🔧 技术栈:
- DeepSeek V4 API
- Python + Pandas
- Plotly可视化
- Streamlit Web界面
- Docker部署
8.2 经验总结
yaml
💡 开发经验:
1. 数据质量很关键
- 上游数据要清洗好
- Agent才能分析准确
2. 提示工程很重要
- 好的提示得到更好的分析
- 针对不同场景调整提示词
3. 可视化要简洁
- 图表不要过于复杂
- 关键信息要突出
4. 报告要 actionable
- 不仅要发现问题
- 更要给出解决方案
作者 :刘~浪地球
更新时间 :2026-05-02
本文声明:原创不易,转载需授权!