PandasAI連接LLM進行智能數據分析

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_urlself.api_key = api_keyself.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"]@propertydef 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官方文檔 ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93066.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring之【Bean的生命周期】

目錄 1、生成BeanDefinition BeanDefinitionRegistry接口 DefaultListableBeanFactory實現類 2、合并BeanDefnition AbstractBeanFactory類 3、BeanFactoryPostProcessor的方法回調 AbstractApplicationContext類 PostProcessorRegistrationDelegate類 4、BeanPostPro…

搜狐新聞直播間適配HarmonyOs實現點贊動畫

01背景介紹隨著新聞客戶端鴻蒙單框架系統適配工作的推進,從原來的基礎功能到現在已經適配全功能的85%以上。與此同時,我們也在持續深入挖掘鴻蒙系統的特性,以提升整體應用的質量與用戶體驗。在這一過程中,動畫作為增強交互與視覺體…

83、設置有人DTU設備USR-M100采集傳感器數據,然后上傳阿里云服務

基本思想:設置M100 采集傳感器數據 一、首先將DTU設備USR-M100連接路由器上,然后使用python代碼搜索同一局域網設備, import platform import sys import os import time import threadinglive_ip = 0def get_os():os = platform.system()if os == "Windows":re…

P1019 [NOIP 2000 提高組] 單詞接龍

題目描述單詞接龍是一個與我們經常玩的成語接龍相類似的游戲,現在我們已知一組單詞,且給定一個開頭的字母,要求出以這個字母開頭的最長的“龍”(每個單詞都最多在“龍”中出現兩次),在兩個單詞相連時&#…

詳解力扣高頻SQL50題之1633. 各賽事的用戶注冊率【簡單】

傳送門:1633. 各賽事的用戶注冊率 題目 用戶表: Users -------------------- | Column Name | Type | -------------------- | user_id | int | | user_name | varchar | -------------------- user_id 是該表的主鍵(具有唯一值的列)。 該表中的每行包…

FROM stakater/java8-alpine 構建cocker鏡像

在 Dockerfile 中,FROM stakater/java8-alpine 是第一條也是最核心的指令,它定義了構建新鏡像所基于的「基礎鏡像」。以下是逐層解析:🔍 關鍵字拆解 1. FROM —— 起點指令 ? 作用:聲明當前鏡像的起點(父鏡…

Word2Vec模型訓練全流程解析:從數據預處理到實體識別應用

請添加圖片描述 訓練Word2Vec模型 概述 問題 我們如何訓練Word2Vec模型?在特定數據集上訓練Word2Vec模型何時是有利的? 目標 理解在自有數據上訓練Word2Vec模型而非使用預訓練模型的優勢 Colab環境配置 運行以下代碼以啟用輔助函數并重新讀取數據…

在Ubuntu上使用QEMU學習RISC-V程序(2)gdb調試

文章目錄一、準備工作二、基本調試流程1. 設置斷點2. 執行程序3. 查看源代碼/匯編三、查看寄存器1. 查看通用寄存器2. 查看特殊寄存器四、查看內存1. 內存查看命令2. 內存修改命令五、調試實戰示例六、高級調試技巧1. 條件斷點2. 自動顯示3. 內存斷點(觀察點&#x…

不止于“亮”:一盞智慧路燈的技術進化史——塔能科技用“落地性”定義行業標準

在凌晨3點的園區道路之上,路燈會隨著車輛的靠近而自動亮起,待車輛逐漸遠去之后,又會緩緩地調暗下來;當電纜意外被觸碰的時候,系統能夠在短短3秒之內自動發出報警信息,并且推送出維修工單;而當一…

Redis的String數據類型底層實現

redis就是用c語言寫,但redis的string并沒有直接用c語言的string,而是自己搞了一個 SDS 結構體來表示字符串。SDS 的全稱是 Simple Dynamic String,中文叫做“簡單動態字符串”。想知道為什么這么做,我們先看看c語言的string是什么…

【音視頻學習】四、深入解析視頻技術中的YUV數據存儲方式:從原理到實踐

文章目錄 引言 1. YUV 基礎:為什么它比 RGB 更適合視頻? 1.1 YUV 與 RGB 的核心區別 1.2 YUV色度下采樣簡介 2. YUV 的三大存儲方式 方式一:平面格式(Planar) 方式二:半平面格式(Semi-Planar ) 方式三:打包格式(Packed YUV) 三種存儲方式對比: 3. 如何選擇合適的 Y…

前端項目組成

一、前端項目常見模塊及功能(以 Vue/React 通用結構為例) 前端項目的模塊本質是「按功能拆分的代碼文件/文件夾」,就像蓋房子的「磚、梁、窗」各司其職:模塊類型功能說明(大白話)舉個例子pages(…

聚觀早報 | 猿編程推動中美青少年AI實踐;華為Pura 80數字版售價公布;iPhone 17 Air電池曝光

聚觀早報每日整理最值得關注的行業重點事件,幫助大家及時了解最新行業動態,每日讀報,就讀聚觀365資訊簡報。整理丨肖羽7月24日消息猿編程推動中美青少年AI實踐華為Pura 80數字版售價公布iPhone 17 Air電池曝光亞馬遜收購AI初創公司Bee蜂巢半固…

unittest 案例執行順序詳解

unittest 案例執行順序詳解在 unittest 框架中,測試用例的執行順序有默認規則,也可通過自定義方式調整。以下是具體說明:一、默認執行順序規則unittest 對測試用例的執行順序遵循 “按測試方法名的 ASCII 碼排序” 原則,具體邏輯如…

【web大前端】001_前端開發入門:創建你的第一個網頁

前端開發入門:創建你的第一個網頁 在當今數字化時代,網頁已經成為人們獲取信息和交流的重要平臺。對于想要學習編程的人來說,前端開發往往是一個不錯的起點。本文將帶你通過簡單的兩步,創建屬于你的第一個網頁程序。 點擊這里去…

HTTP性能優化終極指南:從協議原理到企業級實踐

前言:為什么性能優化是Web開發的生命線?根據Google研究數據,當頁面加載時間從1秒增加到3秒時,跳出率提升32%;當達到5秒時,轉化率下降90%。本文將通過七層優化體系,帶您掌握HTTP性能優化的核心技…

Python 數據分析(二):Matplotlib 繪圖

目錄 1. 簡介2. 繪圖 2.1 折線圖 2.1.1 單線2.1.2 多線2.1.3 子圖 2.2 散點圖2.3 直方圖2.4 條形圖 2.4.1 縱置2.4.2 橫置2.4.3 多條 2.5 餅圖 1. 簡介 Matplotlib 是 Python 提供的一個繪圖庫,通過該庫我們可以很容易的繪制出折線圖、直方圖、散點圖、餅圖等豐…

Scrapy分布式爬蟲數據統計全棧方案:構建企業級監控分析系統

引言:數據統計在分布式爬蟲中的戰略價值在分布式爬蟲系統中,??數據統計與分析??是系統優化的核心驅動力。根據2023年爬蟲工程調查報告:實施專業統計方案的爬蟲系統性能提升??40%以上??數據驅動的優化策略可減少??70%??的資源浪費…

計劃任務(at和cron命令介紹及操作)

簡介計劃任務主要做一些周期性的任務,目前最主要的是定期備份數據分類at:一次性調度執行cron:循環調度執行at簡介at 是一個用于安排一次性任務的命令行工具,適合在指定時間點執行單次任務語法at 時間 選項若要提交,通過…

[2025CVPR:圖象合成、生成方向]WF-VAE:通過小波驅動的能量流增強視頻 VAE 的潛在視頻擴散模型

論文概述? 這篇論文提出了一種名為WF-VAE(Wavelet Flow VAE)?的新型視頻變分自編碼器(Video VAE),旨在解決潛在視頻擴散模型(LVDM)中的關鍵瓶頸問題,包括高計算成本和潛在空間不連續性。WF-VAE利用小波變換(Wavelet Transform)來分解視頻信號,并通過能量流路徑優…