# 使用 PandasAI 轻松入手数据分析和可视化

阅读约需 6 分钟
目录

Pandas 是 Python 中一个非常流行和成熟的数据分析库,而 PandasAI 是一个基于 Pandas 的人工智能工具,它可以帮助我们更轻松简单地进行较为简单的数据分析和简单的可视化工作。本文将介绍 PandasAI v3 的基本操作。

安装

环境和简述

你需要预先准备:

  • Python >= 3.8, < 3.12
  • 一个 OpenAI 兼容的模型服务OpenAI Key/PandaAI Key

常用库:

库名描述PyPI
pandasaiPandasAI 基础库。1pip install "pandasai>=3.0.0b2"
pandasai-litellm LiteLLM 扩展,用于支持调用大量的三方 LLM。pip install pandasai-litellm
pandasai-sql[sql_type]SQL 扩展,用于支持直接以 SQL 连接作为数据源导入数据。方括号内书写所需的 SQL 类型(不支持 Oracle2pip install pandasai-sql[mysql]

1: 3.0 版本与 2.x 版本有较大区别,文档仅针对 3.0.0b2 以后的版本。
2: Oracle 支持位于 EE 计划内,不包含在开源版本中。

安装

Terminal window
# 使用 PyPI
pip install "pandasai>=3.0.0b2"
# 若需使用第三方 LLM(除PandaAI和OpenAI),需要通过 LiteLLM 进行扩展
# pip install pandasai-litellm

使用

示例代码

example.py
import pandasai as pai
from 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 = None
df = 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 兼容服务。

LiteLLM 文档
PAI 相关文档

import pandasai as pai
from 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 提供了一系列数据转换方法,能允许在分析前将数据进行两种阶段的转换——持久化集的转换/程序性的转换。所有可用的方法可以在这里查询。

在这里,我们仅使用一个简单的例子演示日期时间的程序性转换:

data.csv
id,time,sales
1,2023/02/01 11:11,100
2,2023/02/15 12:13,200
3,2023/02/26 11:44,200
4,2023/03/01 8:36,500
5,2023/04/13 15:56,150
transform-example.py
# 省略引入和配置代码
# 读取数据
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 进行手动转换:

pandas-example.py
import pandas as pd # 需要引入 Pandas
import 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)

使用视图进行联表分析

请参阅官方文档


参考:
PandasAI 文档
PandasAI GitHub

写下此篇时暂时不是懒狗的星语

这是开发的责任感和前瞻性的问题。不兼容的改变不应该轻易被加入到有许多依赖代码的软件中。升级所付出的代价可能是巨大的。
—— 《语义化版本》


更多文章