PandasAI连接LLM对MySQL数据库进行数据分析

PandasAI连接LLM对MySQL数据库进行数据分析

为什么你需要 PandasAI?先问大家一个问题:当你拿到一个 MySQL 数据库,里面有几百万行数据,你想快速知道"哪个地区的销售额最高?""最近三个月用户流失率趋势如何?",你会怎么做?传统做法是写 SQL 查询,然后导入 Pandas 做二次处理,再画图...... 这一套流程下来,少说也要半小时。而且如果你不熟悉 SQL 语法,或者数据库表结构复杂,光是 join 和 group by 就够你头疼的了。而 PandasAI 的出现,直接把"用自然语言问数据库"变成了现实。你只需要像跟人说话一样提问,它就能自动生成代码、执行查询、返回结果,甚至画出图表。本文就带你一步步实现 PandasAI 连接 LLM 对 MySQL 数据库进行数据分析。## PandasAI 是什么?PandasAI 是一个基于 Pandas 的 AI 增强库,它把大语言模型(LLM)的能力封装成简单的 API。你不需要写复杂的 pandas 操作,只需要传入自然语言问题,它会自动:- 理解你的问题意图- 生成对应的 Pandas 代码- 执行代码并返回结果或图表目前 PandasAI 支持多种 LLM 后端,包括 OpenAI、Azure OpenAI、Google Gemini 等。连接 MySQL 数据库时,它会把问题转换成 SQL 查询,再通过 SQLAlchemy 连接数据库执行。## 准备工作:安装与配置在开始之前,你需要确保以下几点:1. 已安装 Python 3.8+2. 有一个可访问的 MySQL 数据库(本地或远程均可)3. 已安装必要的库打开终端,执行以下命令安装依赖:bashpip install pandasaipip install sqlalchemy pymysql如果你使用 OpenAI 的模型,还需要设置 API Key。建议在环境变量中配置:bashexport OPENAI_API_KEY="你的API Key"## 连接 MySQL 数据库### 第一步:创建数据库连接我们使用 SQLAlchemy 来创建数据库连接。假设你的 MySQL 数据库名为 sales_db,用户名是 root,密码是 123456,主机是 localhost,端口是 3306pythonfrom sqlalchemy import create_engine# 创建数据库连接字符串# 格式:mysql+pymysql://用户名:密码@主机:端口/数据库名DATABASE_URI = "mysql+pymysql://root:123456@localhost:3306/sales_db"# 创建数据库引擎engine = create_engine(DATABASE_URI)# 测试连接是否成功with engine.connect() as conn: print("数据库连接成功!")### 第二步:初始化 PandasAI 并连接 LLM接下来,我们需要创建一个 PandasAI 实例,并指定 LLM 后端。这里以 OpenAI 为例:pythonfrom pandasai import SmartDataframefrom pandasai.llm import OpenAI# 初始化 LLM(使用 OpenAI 的 GPT-4 模型)llm = OpenAI(model="gpt-4")# 创建 SmartDataframe,传入 LLM 实例和数据库连接df = SmartDataframe( "SELECT * FROM orders", # 可以是一个 SQL 查询,也可以直接传表名 config={"llm": llm}, connection=engine)# 现在你可以用自然语言提问了response = df.chat("哪个区域的销售额最高?")print(response)看到没?你只需要把数据库连接引擎传给 SmartDataframe,然后就可以像聊天一样问问题了。它内部会自动把问题转换成 SQL 并执行。## 实战案例:分析销售数据### 场景描述假设我们有一个 orders 表,包含以下字段:- order_id:订单编号- customer_id:客户编号- region:销售区域(如华东、华南、华北)- amount:订单金额- order_date:订单日期- status:订单状态(已完成、已取消、待支付)我们想要分析:1. 各区域的销售总额2. 最近一个月的销售趋势3. 取消订单的比例### 代码示例:多轮对话分析pythonfrom pandasai import SmartDataframefrom pandasai.llm import OpenAIfrom sqlalchemy import create_engine# 配置数据库连接engine = create_engine("mysql+pymysql://root:123456@localhost:3306/sales_db")# 初始化 LLM 和 SmartDataframellm = OpenAI(model="gpt-4")df = SmartDataframe("SELECT * FROM orders", config={"llm": llm}, connection=engine)# 第一问:各区域的销售总额result1 = df.chat("按区域汇总销售总额,从高到低排序")print("各区域销售额:")print(result1)# 第二问:最近一个月的每日销售趋势result2 = df.chat("统计最近30天每天的销售总额,并画出趋势图")print("销售趋势:")print(result2)# 第三问:取消订单的比例result3 = df.chat("计算取消订单占总订单的比例")print("取消比例:")print(result3)运行这段代码,你会看到 PandasAI 自动完成了所有数据聚合、分组、排序等操作。如果你要求它画图,它还会自动生成 matplotlib 图表并展示。## 高级用法:自定义提示词与缓存有时候你可能希望对 LLM 的提问方式做更精细的控制。PandasAI 支持自定义提示词模板,还可以开启缓存避免重复查询。pythonfrom pandasai import SmartDataframefrom pandasai.llm import OpenAIfrom pandasai.prompts import PromptTemplate# 自定义提示词模板custom_prompt = PromptTemplate( question="请分析以下销售数据,重点关注高价值客户:{question}", instruction="使用简洁的中文回答,并附上关键数据指标。")# 开启缓存,避免相同问题重复执行查询config = { "llm": OpenAI(model="gpt-4"), "cache": True, # 开启缓存 "custom_prompt": custom_prompt, # 自定义提示词}df = SmartDataframe("SELECT * FROM orders", config=config, connection=engine)# 提问,会使用自定义提示词result = df.chat("找出消费金额最高的前5位客户")print(result)## 注意事项与优化建议1. 数据安全 :因为 LLM 会生成 SQL 查询,务必确保数据库账号只有只读权限,避免误操作导致数据损坏。2. 性能问题 :如果表数据量很大,建议先在 SQL 查询中限定范围(比如 WHERE 条件),或者使用采样数据。3. 模型选择 :GPT-4 效果最好但贵,如果预算有限可以先用 GPT-3.5-turbo,对于简单问题也够用。4. 错误处理:PandasAI 偶尔会生成错误的 SQL,建议对返回结果做类型检查,或者用 try-except 包裹。## 总结PandasAI 把 LLM 与数据库分析完美结合,让我们告别繁琐的 SQL 和 pandas 操作。你只需要像跟同事聊天一样提问,它就能自动完成数据查询、清洗、分析和可视化。本文从环境搭建到实战案例,完整演示了如何连接 MySQL 数据库,进行自然语言驱动的数据分析。当然,PandasAI 仍在快速迭代中,功能会越来越强大。但请记住,它目前更适合做快速探索性分析,对于生产环境的关键决策,建议还是配合人工审查。希望本文能帮助你打开 AI 数据分析的大门,让数据工作变得更加轻松高效。

相关推荐
回眸不遇1 小时前
详谈 QT 布局 QLayout::SizeConstraint 和 QSizePolicy 对 QWidget 尺寸的影响
数据库·qt·系统架构
2601_965798471 小时前
MTDb Movie & TV Database Script Setup, Caching, and SEO Guide
linux·服务器·数据库·php
zdl6861 小时前
EasyMarkets:“机器人商业化仍待验证”
数据库·机器人
Freak嵌入式2 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则
Elastic 中国社区官方博客2 小时前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
云和恩墨2 小时前
数据库一体机zData X 3.6.0以“性能、成本、韧性、生态”强化数据库基础设施价值主张
数据库
灯澜忆梦2 小时前
【MySQL7】多表查询
数据库·sql
Qlittleboy3 小时前
tp5网站链接不上slqserver,计算机积极拒绝了链接
数据库·sql
行业研究员3 小时前
腾讯云数据库:团队知识统一检索实践
数据库·云计算·腾讯云·腾讯云数据库·团队知识