1. 引言

Pandas是一个数据分析开源组件库,提供了高性能、易用的数据结构和数据分析工具。它的核心的功能是其DataFrame对象,这是一个带有行和列标签的二维表格数据结构,支持缺失数据处理、时间序列功能、灵活的数据输入输出方法、数据对齐和分组操作等特性。

PandasAI则通过结合Pandas和生成式AI技术,使用户能够以自然语言与数据进行交互,从而简化数据分析流程。它的核心目标是让数据分析变得更直观、高效,甚至无需编写复杂代码即可完成数据查询、清洗、可视化等任务。

2. 详述

Pandas进行数据分析的流程笔者不是很熟练,这里重点关注一个问题就是PandasAI如何连接现有的大模型比如DeepSeek来进行智能数据分析。

由于经验不足,笔者在测试PandasAI的时候,将相关的组件都安装在默认全局的Python环境中了,导致版本有点低,使用的是v2版本。现在普通推荐使用Anaconda这样的工具安装虚拟环境来进行Python的依赖管理。不过根据PandasAI官网文档[1]提示,PandasAI 3.0仍然是beta版本,并且推荐使用Poetry管理Python依赖。所以这里笔者也就没有想升级到3.0,暂时先用稳定一定的2.X版本。

解决掉PandasAI 2.X的版本依赖问题之后,通过PandasAI连接DeepSeek进行智能数据分析的案例代码实现如下:

import pandas as pd
from pandasai import SmartDataframe
from pandasai.llm.base import LLM
import requests # 自定义DeepSeek大模型
class DeepSeekLLM(LLM):
def __init__(self, api_url:str, api_key: str, model: str):
super().__init__()
self.api_url = api_url
self.api_key = api_key
self.model = model def call(self, instruction, context: dict = None, **kwargs) -> str:
"""
PandasAI 用来向 LLM 模型发起请求的接口入口。 Args:
instruction (str): PandasAI 传入的 prompt,可能是 string 或自定义对象,表示用户的问题。
context (dict, optional): 包含上下文信息(例如 DataFrame 元数据等),在部分 LLM 中可用。
**kwargs: 保留接口向前兼容(比如未来增加其他参数时也能传入)。 Returns:
str: 执行指令后的结果输出。
""" # 把复杂的 Prompt 对象变成字符串
if not isinstance(instruction, str):
instruction = str(instruction) # 请求头
headers = {
"Authorization": f"Bearer {self.api_key}", # DeepSeek身份验证
"Content-Type": "application/json"
} # 兼容 OpenAI 的 Chat Completion API的对话消息格式
messages = [
{
"role": "system", # 设定 LLM 的行为
"content": "You are a helpful AI assistant for data analysis."
},
{
"role": "user", # 是实际的问题
"content": instruction
}
] # 请求体
payload = {
"model": self.model,
"messages": messages,
"temperature": 0.0 # 值越低,回答的效果越稳定
} # 发送post请求
response = requests.post(self.api_url, headers=headers, json=payload) # 检查返回状态码,如果不是 200 则报错。
if response.status_code != 200:
raise Exception(f"DeepSeek API Error: {response.status_code}, {response.text}") # 解析返回结果
result = response.json()
return result["choices"][0]["message"]["content"] @property
def type(self):
return "deepseek-custom" # Sample DataFrame
sales_by_country = pd.DataFrame({
"country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
"sales": [5000, 3200, 2900, 4100, 2300, 2100, 2500, 2600, 4500, 7000]
}) # 用自定义的 DeepSeek LLM
llm = DeepSeekLLM(
api_url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
api_key="sk-xxx",
model="deepseek-r1") df = SmartDataframe(sales_by_country, config={"llm": llm}) result = df.chat('列出销售额最高的3个国家。') print(result)

如代码所示,关键的所在是需要自定义一个继承自LLM的能够连接DeepSeek的类DeepSeekLLM。其实PandasAI 2.X是可以使用提供了支持使用OpenAI的接口的,而连接DeepSeek的接口一般会兼容OpenAI。但是笔者尝试了之后不行,不能传入自定义的LLM地址。没办法只能自己自定义一个继承自LLMDeepSeekLLM类。

DeepSeekLLM类的关键就是call函数的实现,这是PandasAI用来向LLM模型发起请求的接口的入口。在这个函数实现中的关键就是通过兼容OpenAI的Chat API向自定义的DeepSeek服务发起post请求,具体的细节笔者已经在代码中进行注释,另外也可以查阅OpenAI API的相关文档。这里的实现并没有像《连接语言大模型(LLM)服务进行对话》一样使用openai模块或者LangChain框架,而是直接使用requests来发送HTTP请求,显得更加底层一点,不过原理都差不多。

最终运行的结果如下所示:

country  sales
0 China 7000
0 China 7000
1 United States 5000
2 Japan 4500

  1. PandasAI官方文档

PandasAI连接LLM进行智能数据分析的更多相关文章

  1. 阿里云:面向5G时代的物联网无线连接服务

    在4月24日落幕的2019中国联通合作伙伴大会“5G+物联网(IoT)论坛”上,阿里云高级运营专家李茁出席圆桌对话,分享了5G时代物联网如何更好地推动行业完成生产.管理和商业模式的创新,阿里云又会以何 ...

  2. app配置智能硬件的解决方案

    随着越来越多的智能硬件产品上市,越来越多的硬件都戴上了智能的帽子,什么智能插座,智能音箱,智能称等等.凡是所谓的智能,都是通过wifi或者蓝牙来连接互联网,其中蓝牙也只能算是手机的附属品吧.主要还是硬 ...

  3. 长连接锁服务优化实践 C10K问题 nodejs的内部构造 limits.conf文件修改 sysctl.conf文件修改

    小结: 1. 当文件句柄数目超过 10 之后,epoll 性能将优于 select 和 poll:当文件句柄数目达到 10K 的时候,epoll 已经超过 select 和 poll 两个数量级. 2 ...

  4. RabbitMQ镜像队列初始化连接时的“优化”

    之前发过一篇帖子应用.Net+Consul维护RabbitMq的高可用性,然后最近老大问我当初我这么搞是抽的什么想法- -然后顺便贴了两行C#代码: var factory = new Connect ...

  5. 5G工业智能网关助力智能制造开辟新赛道

    今年以来,物联网技术加速产业变革,制造业出现了不少新现象.从大规模到个性化.从"渠道为王"到"用户定义".从自有工厂到共享协同,智能化制造在很多地方颠覆了传统模 ...

  6. 基于ZigBee的家居控制系统的设计与应用

    基于ZigBee的家居控制系统的设计与应用 PPT简介:http://pan.baidu.com/s/1i38PC6D 摘  要 智能家居是未来家居的发展方向,其利用先进的网络技术.计算机技术和无线通 ...

  7. 大数据和Hadoop生态圈

    大数据和Hadoop生态圈 一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第1章 大数据和Hadoop ...

  8. 从0到1搭建AI中台

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | 宜信技术学院 作者 | 井玉欣 导读:随着“数据中台”的提出和成功实践,各企业纷纷在“大中台 ...

  9. 315道python面试题(参考答案)

    第一部分 Python基础篇 1:为什么学习Python 家里有在这个IT圈子里面,也想让我接触这个圈子,然后给我建议学的Python, 然后自己通过百度和向有学过Python的同学了解了Python ...

  10. 解析 Android Things 技术原理

    2012 年 6 月,由 IoT-GSI(Global Standards Initiative on Internet of Things)发布的白皮书“ITU-T Y.4000/Y.2060”[1 ...

随机推荐

  1. CentOS7.6安装RabbitMQ

    1.CentOS7.6安装RabbitMQ yum install -y socat yum install -y erlang 2.安装rabbitmq yum install rabbitmq-s ...

  2. 21C++数组(2)

    一.字符数组的输入与输出   (第65课 采访报道) 教学视频   大惊小怪报和小惊大怪报是两家全球性的报社,发表的文章全用英文.因风之巅小学的信息学社团开展得很出色,于是两家报社都派记者前来采访,大 ...

  3. 关于C#的Dynamic调用方法前的一些准备的小Demo

    using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Linq; us ...

  4. C# AggreateException

    在 C# 中,AggregateException 是一种特殊类型的异常,它允许在多个异步任务中捕获并组合多个异常.当在一个异步任务中同时执行多个子任务时,如果其中任何一个子任务抛出了异常,那么父任务 ...

  5. ElementPlus插件的安装和使用

    ElementPlus插件安装和使用 npm install element-plus --save src/main.ts新增 // 关键节点:全局注册 Element Plus,包含样式 impo ...

  6. RabbitMq使用中常见错误--python版

    用python的pika库错误集 一.pika.exceptions.ProbableAuthenticationError: ConnectionClosedByBroker: (403) 'ACC ...

  7. Django Web应用开发实战第二章

    一.基本配置信息 """ Django settings for myblog project. Generated by 'django-admin startproj ...

  8. 「Log」2023.8.22 小记

    序幕 早上不到七点到校,6bit 早就到了. 写博客写博客写博客. \(\texttt{8:21}\):把 LCT 的博客写查不多了,SAM 的还是再咕咕咕,先打代码. 学长讲题,LCT 的,讲完吃饭 ...

  9. (萌新向)对于nodejs原型链污染中merge函数的作用的个人理解

    merge函数 function merge(target,source){ for (let key in source){ if (key in source && key in ...

  10. 在MySQL中悲观锁及乐观锁的应用

    本文由 ChatMoney团队出品 在数据库管理系统中,锁机制是保证数据一致性和并发控制的重要手段.MySQL,作为广泛使用的数据库系统之一,提供了多种锁策略来处理并发访问时可能引发的数据不一致性问题 ...