使用 CrewAI 自动分析 CSV
- Rifx.Online
- Programming , Data Science , Generative AI
- 19 Jan, 2025
在本博客中,我们将探讨如何使用CrewAI自动化分析CSV数据集的过程。我们将构建一个工作流程,其中包括用于数据集上下文推断、数据清理、可视化和报告的代理,并最终形成一个精美的Markdown报告。
1. 初始化环境
我们首先导入必要的库,并为工作流程初始化工具和环境。
import os
import pandas as pd
import chardet
from crewai import Crew, Task, Agent, LLM, Process
from crewai_tools import FileReadTool, BaseTool, CSVSearchTool
import matplotlib.pyplot as plt
import seaborn as sns
解释:
- 导入:用于数据处理的基本 Python 库(
pandas
)、可视化(matplotlib
、seaborn
)和 CrewAI 模块(Crew
、Task
、Agent
等)。 - CrewAI 工具:
FileReadTool
和CSVSearchTool
使文件处理和 CSV 分析成为可能。
2. 初始化 LLM
我们使用 LLM 模型让代理处理和生成自然语言洞察。
代码:
llm = LLM(
model='ollama/llama3.2-vision',
base_url='http://localhost:11434',
)
解释:
ollama/llama3.2-vision
模型作为核心 AI 引擎,运行在本地以实现高效的数据处理。- 它使代理能够上下文地处理数据并生成有意义的输出。
3. 定义工具
FileReadTool
用于读取 CSV 文件,这是分析的基础。
代码:
csv_tool = FileReadTool(file_path='scm.csv')
说明:
FileReadTool
: 读取指定的 CSV 文件(scm.csv
),为代理提供原始数据以供分析。
4. 定义代理
我们创建了四个专门的代理,每个代理都有不同的角色:
a) 数据集上下文专家
代码:
dataset_inference_agent = Agent(
role="数据集上下文专家",
goal=(
"通过分析列名、数据类型和一些样本行,推断数据集的上下文和目的。提取有关领域和提供的数据类型的见解。"
),
backstory=(
"一位擅长理解数据集并识别其目的的专家。您对数据科学、机器学习和数据分析有深刻的理解。"
),
tools=[csv_tool],
llm=llm,
verbose=True,
allow_code_execution=True
)
解释:
- 角色:理解数据集的结构和背景。
- 目标:识别列类型(数值型、类别型等)并推断数据集的实际应用。
b) 数据清洗专家
代码:
data_analysis_agent = Agent(
role="Data Cleaning Specialist",
goal=(
"分析数据集以识别缺失值、错误的数据类型和潜在的异常值。"
"生成统计摘要,如均值、中位数和变量之间的相关性。"
),
backstory=(
"专注于清理和准备数据以进行分析,具有数据清理和预处理的专业知识。"
),
tools=[csv_tool],
llm=llm,
verbose=True
)
说明:
- 角色:为分析准备数据集。
- 目标:检测缺失值、异常值和不正确的数据类型。计算统计摘要。
c) 可视化专家
visualization_agent = Agent(
role="Visualization Expert",
goal=(
"生成有意义的可视化,如直方图、散点图、折线图、条形图和热图,以提供数据洞察。将所有可视化保存到 'graphs/' 目录中。"
),
backstory=(
"专注于创建引人注目且信息丰富的可视化。您是 Python、pandas、matplotlib、seaborn 和数据可视化方面的专家,能够创建有影响力的数据故事。"
),
tools=[csv_tool],
llm=llm,
verbose=True,
allow_code_execution=True
)
说明:
- 角色:从数据集中创建可视化洞察。
- 目标:生成图表(直方图、热图、散点图)以突出数据中的关系和趋势。
d) 报告专员
代码:
markdown_report_agent = Agent(
role="Report Specialist",
goal=(
"将所有发现、分析和可视化内容汇总成结构化的markdown报告。"
"嵌入图表并为分析和总结提供清晰的部分。"
),
backstory="一位将数据洞察转化为精美报告的专家。",
tools=[csv_tool],
llm=llm,
verbose=True,
)
说明:
- 角色:生成精美的Markdown报告。
- 目标:整合所有发现并嵌入可视化,以实现专业和全面的输出。
5. 定义任务
每个任务对应一个代理的角色:
a) 数据集推断任务
代码:
dataset_inference_task = Task(
description="分析数据集以确定其上下文、目的和结构。",
expected_output="数据集结构和目的的描述性概述。",
agent=dataset_inference_agent
)
说明:
- 重点:分析列名和示例行以推断数据集的结构和目的。
b) 数据清理任务
代码:
data_analysis_task = Task(
description="对数据集进行全面分析,以识别缺失值、错误的数据类型和潜在的异常值。",
expected_output="缺失值的汇总、标准化的数据类型和统计指标。",
agent=data_analysis_agent
)
说明:
- 重点:清理和准备数据,提供有关数据质量的可操作见解。
c) 可视化任务
代码:
visualization_task = Task(
description="Generate visualizations dynamically based on the dataset's content.",
expected_output="A set of annotated graphs saved in the 'graphs/' directory.",
agent=visualization_agent
)
说明:
- 重点:生成可视化图表,揭示数据集中的趋势和关系。
d) Markdown 报告任务
代码:
markown_report_task = Task(
description="创建一个详细的markdown报告,总结所有分析和可视化。",
expected_output="一份精美的markdown报告,包含嵌入的图表和可操作的见解。",
agent=markdown_report_agent,
context=[dataset_inference_task, data_analysis_task, visualization_task],
output_file='report.md'
)
说明:
- 重点:将所有发现整合到一个Markdown文件中。
6. 组建船员
代码:
csv_analysis_crew = Crew(
agents=[
dataset_inference_agent,
data_analysis_agent,
visualization_agent,
markdown_report_agent
],
tasks=[dataset_inference_task, data_analysis_task, visualization_task, markdown_report_task],
process=Process.sequential,
verbose=True
)
说明:
- Crew 连接所有代理和任务,依次执行它们以实现流畅的工作流程。
7. 执行工作流
代码:
result = csv_analysis_crew.kickoff()
print("Crew Execution Complete. Final report generated.")
print(result)
说明:
- kickoff() 方法启动整个管道,生成最终的 Markdown 报告。
您可以在这里查看完整代码 : 代码
您也可以从 这里 查看我的 GitHub(如果您喜欢这些内容,请不要忘记关注)
我还展示了一些我的作品,您可以在 这里 查看。