PandaAI:使用自然语言进行数据分析的利器
基本信息
PandaAI是一个开源的大模型智能体,主要利用自然语言进行数据处理和分析,能够将简单的自然语言输入转换为可执行代码,生成可视化图表。
快速开始
安装
pip install "pandasai>=3.0.0b2"
获取API KEY
登陆 https://app.pandabi.ai/ 注册
import pandasai as pai pai.api_key.set("your-key")
导入数据
df=pai.read_csv("filepath") dataset = pai.create("your-team/dataset-name", df) dataset.push()
基本用法
使用.chat方法即可进行对话。
dataset.chat('Which are the top 5 countries by sales?')
输出格式
PandaAI支持多种输出格式,包括: ○ DataFrame响应:用于表格数据。 ○ 图表响应:用于可视化结果。 ○ 文本响应:用于文本分析和解释。 ○ 数字响应:用于数值输出。 ○ 错误响应:用于错误信息。
PandaAI能够自行识别出问题最相符合的响应,并以对应形式返回答案。
对同一个数据集,用户的不同的问题将会导致不同的返回格式
import pandasai as pai df = pai.load("my-org/users") # 返回文本 response = df.chat("Who is the user with the highest age?") # 返回数值结果 response = df.chat("How many users in total?") # 返回DataFrame response = df.chat("Show me the data") # 返回图表 response = df.chat("Plot the distribution")
数据预处理
PandaAI提供了丰富的数据转换功能,可以对数据集进行特定的清洗,简化数据处理流程。基本的转换类型包括: ● 字符串转换:包括文本大小写转换、去除空白、截断文本、固定宽度填充、正则表达式提取等。 ● 数值转换:包括四舍五入、缩放、截断、归一化、标准化、确保正值、数据分组等。 ● 日期和时间转换:包括时区转换、日期格式化、转换为日期时间、日期范围验证等。 ● 数据清理转换:包括填充缺失值、替换值、删除重复项、电话号码规范化等。 ● 分类转换:包括类别的一热编码、值映射、分类标准化等。 ● 列重命名:将列名更改为新的名称。 ● 验证转换:包括电子邮件格式验证、外键引用验证等。 ● 隐私和安全转换:敏感数据匿名等。 ● 类型转换:将数据转换为数值类型等。
这些转换可以通过静态文件方式或编程方式指定。
静态文件方式
在schema配置文件中填入transformations相关的操作,只需要指定转换的类型和列名。
transformations: - type: to_lowercase params: column: product_name - type: strip params: column: product_name - type: truncate params: column: product_name length: 50
编程方式
该方法更加灵活,可以通过TransformationManager进行处理,该方法同样允许链式调用。
import pandasai as pai df = pai.read_csv("data.csv") manager = TransformationManager(df) result = (manager .validate_email("email", drop_invalid=True) .normalize_phone("phone") .validate_date_range("birth_date", "1900-01-01", "2024-01-01") .remove_duplicates("user_id") .ensure_positive("amount") .standardize_categories("company", {"Apple Inc.": "Apple"}) .df)
设置
基本设置
提供了以下配置参数: ○ llm:指定要使用的 LLM。 ○ save_logs:是否保存 LLM 的日志。 ○ verbose:是否在控制台打印日志。 ○ max_retries:失败时的最大重试次数。
import pandasai as pai pai.config.set({ "llm": "openai", "save_logs": True, "verbose": False, "max_retries": 3 })
模型设置
PandaAI支持多种LLM,默认使用由PandaAI团队开发的BambooLLM,同时还允许调用其他本地或在线模型。
1. OpenAI类的模型
import pandasai as pai from pandasai_openai import OpenAI llm = OpenAI(api_token="my-openai-api-key") # Set your OpenAI API key pai.config.set({"llm": llm})
2. Langchain接口的模型
import pandasai as pai from pandasai_langchain import LangchainLLM llm = LangchainLLM(openai_api_key="my-openai-api-key") pai.config.set({"llm": llm })
3. Ollama
import pandasai as pai from pandasai_local import LocalLLM ollama_llm = LocalLLM(api_base="http://localhost:11434/v1", model="codellama") pai.config.set({"llm": ollama_llm})
少样本学习
PandaAI允许使用少样本学习来增强在特定场景下的查询效果。
1. 指令训练
通过提供关于模型如何处理特定类型查询的通用指令来训练智能体。
import pandasai as pai from pandasai import Agent pai.api_key.set("your-pai-api-key") agent = Agent("data.csv") agent.train(docs="The fiscal year starts in April") response = agent.chat("What is the total sales for the fiscal year?") print(response) # The model will use the information provided in the training to generate a response
2. 问答训练
通过提供具体问题的预期答案来训练智能体(即问答对的方式),以增强模型性能和确定性。
from pandasai import Agent agent = Agent("data.csv") # Train the model query = "What is the total sales for the current fiscal year?" # The following code is passed as a string to the response variable response = '\n'.join([ 'import pandas as pd', '', 'df = dfs[0]', '', '# Calculate the total sales for the current fiscal year', 'total_sales = df[df[\'date\'] >= pd.to_datetime(\'today\').replace(month=4, day=1)][\'sales\'].sum()', 'result = { "type": "number", "value": total_sales }' ]) agent.train(queries=[query], codes=[response]) response = agent.chat("What is the total sales for the last fiscal year?") print(response) # The model will use the information provided in the training to generate a response
总结
PandaAI是一个典型的Text2SQL智能体,核心原理是利用大模型将自然语言查询转换为可执行的代码,通过封装的.chat方法,将问题、表头和 5-10 行数据传递给大模型,然后由模型生成最相关的代码(Python 或 SQL),同时生成的代码在本地执行,并把产生的结果按照最符合问题的形式进行返回。
基本上所有的Text2SQL都大同小异,而PandaAI额外支持了一些数据预处理的方法和自动选择特定格式进行输出,算是一些不错的亮点。
推荐阅读
MCP是由Anthropic推出的开源协议,目的是通过统一的连接方式,让大型语言模型(LLM)与外部数据源和工具无缝集成,减少重复造轮子的过程。

关于大模型注意力计算过程以及KV Cache原理介绍,通俗易懂,图文并茂
