目录
Pandas
是 Python 中一个非常流行和成熟的数据分析库,而 PandasAI
是一个基于 Pandas 的人工智能工具,它可以帮助我们更轻松简单地进行较为简单的数据分析和简单的可视化工作。本文将介绍 PandasAI v3 的基本操作。
安装
环境和简述
你需要预先准备:
Python >= 3.8, < 3.12
- 一个 OpenAI 兼容的模型服务 或 OpenAI Key/PandaAI Key
常用库:
库名 | 描述 | PyPI |
---|---|---|
pandasai | PandasAI 基础库。1 | pip install "pandasai>=3.0.0b2" |
pandasai-litellm | LiteLLM 扩展,用于支持调用大量的三方 LLM。 | pip install pandasai-litellm |
pandasai-sql[sql_type] | SQL 扩展,用于支持直接以 SQL 连接作为数据源导入数据。方括号内书写所需的 SQL 类型(不支持 Oracle2) | pip install pandasai-sql[mysql] |
1: 3.0 版本与 2.x 版本有较大区别,文档仅针对 3.0.0b2 以后的版本。
2: Oracle 支持位于 EE 计划内,不包含在开源版本中。
安装
# 使用 PyPIpip install "pandasai>=3.0.0b2"# 若需使用第三方 LLM(除PandaAI和OpenAI),需要通过 LiteLLM 进行扩展# pip install pandasai-litellm
使用
示例代码
import pandasai as paifrom pandasai_litellm import LiteLLM
llm = LiteLLM( model="openai/QwQ-32B", # 以本地部署的 QWQ 为例,任意 OpenAI 兼容端点提供商都这么写 api_base="http://localhost:9997/v1", api_key="sk-xxx")
pai.config.set({ "llm": llm, # 传 LiteLLM 实例或字符串
# completion 有关配置应从 config.set 方法传入,模型提供商的模型设定应从 LiteLLM 实例传入 "temperature": 0.6, "top_p": 0.95, "max_tokens": 64000,})
# 从文件读取 DataFrame,通常可用 csv、xlsx。对于多 Sheet 的表,使用 Pandas 提供的方法读df = pai.read_csv("data.csv")
# 将 DataFrame(内存集)持久化到磁盘pai.create( path="org/data", # 格式是 组织名/数据集名,存储位置默认是 work-dir/datasets/org/data df=df, # 需要持久化的 DataFrame description="数据集描述", # 数据集描述 columns=[ { "name": "列名", "description": "列描述", "type": "string", # 列类型,string、integer、float、boolean }, ] # 列信息)
# 从持久化数据集读取df = Nonedf = pai.load("org/data")
# 在有了内存集与设定好的 PAI 之后就可以对话了,LLM 会自由选择应有的回答类型response = df.chat("五月份销售额最高的销售是谁?") # 文本回答print(response)
# df.chat("给我看看五月的数据") # 原始 DataFrame 回答# df.chat("一到五月销售额有什么变化趋势?") # 图表回答# df.chat("今年最高的销售额是多少?") # 数值回答# 除去以上四种回答,还会有 ERROR 回答,用于结构化地输出错误信息
上述代码基本已经涵盖了 PandasAI 的入门使用方法,下面我会对几个常用细节进行补充。
使用第三方模型服务
PandasAI 默认情况下内置支持了 PandaAI(一个PandasAI官方提供的自托管模型),你只需要设置 api_key
就可以直接使用:pai.api_key.set("api-key")
。
如果你要使用其他模型服务(比如自托管的模型),就需要通过 LiteLLM
进行扩展,对接的模型需要是一个支持阻塞模式的 OpenAI 兼容服务。
import pandasai as paifrom pandasai_litellm import LiteLLM
llm = LiteLLM( model="openai/Model", # 模型名称 api_base="http://localhost:9997/v1", # 模型服务地址 api_key="sk-xxx" # 模型服务密钥)
pai.config.set({ "llm": llm, # 在配置时传 LiteLLM 实例})
对数据进行数据转换
PandasAI 提供了一系列数据转换方法,能允许在分析前将数据进行两种阶段的转换——持久化集的转换/程序性的转换。所有可用的方法可以在这里查询。
在这里,我们仅使用一个简单的例子演示日期时间的程序性转换:
id,time,sales1,2023/02/01 11:11,1002,2023/02/15 12:13,2003,2023/02/26 11:44,2004,2023/03/01 8:36,5005,2023/04/13 15:56,150
# 省略引入和配置代码
# 读取数据tmp = pai.read_csv("data.csv")
df = pai.create( path="org/data", df=tmp, description="销售记录数据", columns=[ { "name": "id", "description": "销售记录 ID", "type": "integer", }, { "name": "time", "description": "销售时间", "type": "datetime", # 这里是 datetime 类型 }, { "name": "sales", "description": "销售额", "type": "integer", }, ], transformations=[ { "type": "to_datetime", "column": "time", # 需要转换的列 "format": "%Y/%m/%d %H:%M", # 原始数据的格式化字符串 }, ],)
# 这样创建的持久化数据集就存储为了 datetime 类型的时间数据# 读取时会读取为 2023-02-01 这样的仅日期的标准数据库日期
PandasAI 目前的数据转换方法并不全面,也有不少 Bug,例如上述演示的 to_datetime
是会截断时间的,导致无法使用时间进行数据分析。因此我们可以直接使用 Pandas 进行手动转换:
import pandas as pd # 需要引入 Pandasimport pandasai as pai# 省略配置代码
# 读取数据tmp = pai.read_csv("data.csv")tmp['time'] = pd.to_datetime(tmp['time'], format="%Y/%m/%d %H:%M") # 转换为 datetime 类型
# 随后再进行分析或持久化,此时列应为 2023-02-01 11:11:00 这样的格式(存储实际是 duckdb Timestamp)