3 步上线会聊天的数据分析应用:PandasAI + Streamlit 自然语言数据分析完整指南
【免费下载链接】pandas-aiChat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pandas-ai
周五下午四点,工作群弹出消息:“把本月各城市咖啡销量做成对比图,下班前发我。”往常这意味着打开表格、写公式、调图表样式,大半天就没了。如果这件事能压缩到十分钟呢?这篇文章带你用 PandasAI 和 Streamlit 搭一个自然语言数据分析的 Web 应用:丢进一份 CSV,用大白话提问,AI 生成代码、执行分析,直接把图表画到网页上。
方案全景:一个补分析,一个补界面
PandasAI 负责“分析”。它把 pandas 数据交给大模型,你输入一句自然语言问题,它就生成对应的 Python 代码并执行,返回表格、数字或图表——本质是一个“会聊天的数据分析引擎”。但它只在脚本里跑,界面是短板。
Streamlit 负责“界面”。这个开源库几行代码就能把 Python 脚本变成 Web 应用:一个输入框、一块图表区、一个按钮,全部由它渲染。但它不懂自然语言,不会做分析。
两者拼起来,链路就通了:你提问 → PandasAI 生成并执行代码 → 结果经 Streamlit 渲染到页面。衔接桥梁是一个叫StreamlitResponse的自定义响应解析器,原理与写法见 docs/v2/custom-response.mdx。
五步跑通最小应用
- 安装依赖(一条命令):
pip install pandasai streamlit- 准备数据:任意一份规范 CSV 放进
data/sales.csv。 - 项目结构保持精简,4 项够用:
app.py:主入口data/sales.csv:数据集config.py:API 密钥等配置utils/:自研组件(后文会用到)
- 写最小版
app.py:
import pandas as pd import streamlit as st from pandasai import SmartDatalake from pandasai.responses.streamlit_response import StreamlitResponse df = pd.read_csv("data/sales.csv") agent = SmartDatalake( [df], config={"verbose": True, "response_parser": StreamlitResponse}, ) question = st.text_input("想问数据的什么?") if st.button("开始分析") and question: with st.spinner("AI 正在分析..."): agent.chat(question)- 执行
streamlit run app.py,浏览器打开本地 8501 端口。到这里,一个能问答的应用已经跑起来了。
自然语言查询实战:从提问到出图
换一套全新数据感受一下:三座城市、三款饮品的月销量。
df = pd.DataFrame({ "city": ["北京", "上海", "广州"] * 3, "item": ["拿铁", "美式", "生椰"] * 3, "cups": [320, 210, 150, 410, 260, 190, 280, 300, 230], }) agent.chat("各城市拿铁销量对比,画柱状图") agent.chat("哪个城市总杯数最高?")第一句问题执行后,AI 先聚合数据再调绘图库,柱状图被StreamlitResponse捕获并渲染到页面,你能直接看到三个城市的柱高差异;第二句返回的是一个带说明的表格。整个过程你一行分析代码都没写。
它还能接住追问。比如出完图后再问“把销量最高的城市单独标出来”,上下文还在,AI 会继续基于同一份数据作答。
进阶能力拆解:自定义响应与对话记忆
自定义响应组件写法
默认解析器只负责把结果画出来。想加东西?继承它再覆盖一个方法即可。下面的例子在每次返回表格时,额外挂一个指标卡和提示语:
import streamlit as st from pandasai.responses.streamlit_response import StreamlitResponse class StreamlitResponseWithSummary(StreamlitResponse): def format_dataframe(self, result): super().format_dataframe(result) st.metric("结果行数", len(result["value"])) st.caption("AI 自动生成,可展开核对原始数据")初始化时把config里的response_parser换成新类就生效了。完整机制见 docs/v2/custom-response.mdx。
多轮对话记忆实现
记忆靠一个参数:初始化时传入memory_size(如 10),Agent 就会保留最近 10 轮对话。这样“刚才那个图里最高的柱子是哪个城市”这类问题才有据可依,参数用法可参考 docs/v2/skills.mdx 中的初始化示例。
本地启动与团队部署
本机运行就一条命令:
streamlit run app.py --server.port 8501要分享给同事,把应用放到一台内网服务器上,前面挂一层 Nginx 反向代理并配置 HTTPS 即可,路径映射到 8501 端口;多实例时由 Nginx 顺带做负载均衡。
再往后是插件化扩展:PandasAI 提供@skill装饰器,把任意 Python 函数注册成 Agent 的技能。比如写一个“检查某城市销量环比是否异常”的函数再挂上去,用户直接问“广州这个月有没有异常波动”就能触发它,业务逻辑随需求增量叠加,扩展思路见 docs/v2/skills.mdx。
接下来可以做的 3 件事
- 用一份真实订单表(哪怕只是一个月)替换演示数据,依次问“汇总”“对比”“趋势”三类问题,验证图表和数字都对得上,先建立对结果的信任。
- 把自定义响应组件落到
utils/里:加指标卡、导出按钮和结果说明,让页面从“能看”升级到“好交接”。 - 把数据源从单张 CSV 扩到多表:仓库里的 extensions/connectors/sql 提供了 SQL 连接示例,接上数据库后,这个应用就能覆盖跨表查询场景。
【免费下载链接】pandas-aiChat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pandas-ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考