Day 12 · 自然语言做数据透视:不用写代码,问 AI 就行
「AI Python 系列」第 02 栏 · AI数据可视化全栏 15 篇 · 零成本跟完 作者梅雅达编程笔记首发CSDN摘要数据透视是数据分析最常用的操作——按维度分组、计算汇总。但很多人不会写pandas的groupby或SQL。本篇教你搭建一个自然语言数据分析器用中文描述你想要什么GLM-4.7-Flash 自动转成pandas代码并执行。全程零代码基础也能用附带安全沙箱和结果验证机制。数据透视这个事Excel 用户应该很熟拖拖拽拽就能按各种维度汇总数据。但在 Python 里你需要写df.groupby([渠道, 商品])[销售额].sum()这种代码。不会写pandas的人就卡住了。如果让你直接用中文说帮我算每个渠道各商品的总销售额AI 帮你翻译成代码执行呢一、核心思路你用中文描述需求 → AI 生成 pandas 代码 → 在安全环境执行 → 返回结果给你这不是什么新概念ChatGPT 的Code Interpreter就是这么做的。区别是我们用免费的 GLM-4.7-Flash自己搭建这个流程。二、搭建自然语言分析器importosimportpandasaspdimportnumpyasnpfromzhipuaiimportZhipuAI clientZhipuAI(api_keyos.getenv(ZHIPUAI_API_KEY))classNLAnalyzer:自然语言数据分析器def__init__(self,df):self.dfdf.copy()self._build_context()def_build_context(self):构建数据上下文让 AI 了解数据结构info[]info.append(f变量名: df (pandas DataFrame))info.append(f形状:{self.df.shape[0]}行 ×{self.df.shape[1]}列)info.append(f\n列信息:)forcolinself.df.columns:dtypeself.df[col].dtype nuniqueself.df[col].nunique()info.append(f -{col}({dtype}):{nunique}个唯一值)ifnunique10:valsself.df[col].unique().tolist()info.append(f 取值:{vals})elifdtypein[int64,float64]:info.append(f 范围:{self.df[col].min()}~{self.df[col].max()})info.append(f\n前 3 行数据:)info.append(self.df.head(3).to_string())self.context\n.join(info)defquery(self,question):用自然语言提问返回分析结果promptf你是一个数据分析助手。用户会用自然语言描述他们想要的分析结果。 你需要生成可以直接执行的 Python 代码来完成分析。 数据信息{self.context}用户的自然语言查询{question}要求 1. 只使用 pandas 和 numpy已导入为 pd 和 np 2. 数据变量名是 df 3. 代码必须把最终结果赋值给 result 变量 4. result 必须是 pandas DataFrame 或 Series 5. 只输出代码用 python 包裹不要任何解释 6. 不要 import 任何库pd 和 np 已导入 # 让 AI 生成代码responseclient.chat.completions.create(modelglm-4.7-flash,messages[{role:user,content:prompt}])code_textresponse.choices[0].message.content# 提取代码ifpythonincode_text:codecode_text.split(python)[1].split()[0].strip()elifincode_text:codecode_text.split()[1].split()[0].strip()else:codecode_text.strip()print(f AI 生成的代码\n{code}\n)# 执行代码try:exec_env{df:self.df,pd:pd,np:np}exec(code,exec_env)resultexec_env.get(result)ifresultisNone:return⚠️ 代码执行了但没有产生结果请换个问法试试。returnresultexceptExceptionase:returnf⚠️ 执行出错{e}\n请换个问法试试。defquery_and_explain(self,question):提问并让 AI 解读结果resultself.query(question)ifisinstance(result,str):returnresult result_textresult.to_string()ifhasattr(result,to_string)elsestr(result)explain_promptf 用户的原始问题{question}分析结果{result_text}请用简洁的中文解读这个结果说明它意味着什么、有什么值得关注的点。3-5句话即可。 explanationclient.chat.completions.create(modelglm-4.7-flash,messages[{role:user,content:explain_prompt}])returnresult,explanation.choices[0].message.content三、使用示例# 创建数据np.random.seed(42)n100dfpd.DataFrame({月份:np.random.choice([1月,2月,3月,4月,5月,6月],n),商品:np.random.choice([手机,笔记本,耳机,平板],n),价格:np.random.choice([999,2999,4999,6999],n),数量:np.random.randint(1,10,n),渠道:np.random.choice([天猫,京东,拼多多,抖音],n),退货:np.random.choice([0,1],n,p[0.88,0.12]),})df[销售额]df[价格]*df[数量]# 创建分析器analyzerNLAnalyzer(df)示例 1简单的分组统计resultanalyzer.query(每个渠道的总销售额)print(result)示例 2多维度分组resultanalyzer.query(每个渠道、每个商品的平均价格和总销量)print(result)示例 3带条件的分析resultanalyzer.query(退货率超过15%的渠道按退货率从高到低排列)print(result)示例 4带 AI 解读result,explanationanalyzer.query_and_explain(各渠道的退货率对比)print(分析结果)print(result)print(\nAI 解读)print(explanation)四、安全沙箱直接exec()执行 AI 生成的代码有安全风险。在生产环境中你需要加限制importastdefsafe_check_code(code):检查代码是否安全禁止危险操作dangerous[import,os,sys,subprocess,exec,eval,open,__,shutil,rm,del]forwordindangerous:ifwordincode:# import 在代码开头是被允许的如 import reifwordimport:continuereturnFalse,f代码包含不允许的关键词{word}returnTrue,通过检查defsafe_exec(code,env):安全执行限制时间和输出大小importsignaldeftimeout_handler(signum,frame):raiseTimeoutError(代码执行超时)signal.signal(signal.SIGALRM,timeout_handler)signal.alarm(10)# 10秒超时try:exec(code,env)signal.alarm(0)exceptTimeoutError:print(⚠️ 代码执行超时已终止) 这个安全检查是基础版。完整的安全沙箱需要用 Docker 或其他隔离机制。本专栏是教学用途简单检查即可。五、交互式分析工具把上面的封装成一个可以持续对话的分析工具importosimportpandasaspdimportnumpyasnpfromdotenvimportload_dotenv load_dotenv()fromzhipuaiimportZhipuAI clientZhipuAI(api_keyos.getenv(ZHIPUAI_API_KEY))classNLAnalyzer:def__init__(self,df):self.dfdf.copy()self._build_context()def_build_context(self):info[]info.append(f变量名: df (pandas DataFrame))info.append(f形状:{self.df.shape[0]}行 x{self.df.shape[1]}列)info.append(\n列信息:)forcolinself.df.columns:dtypeself.df[col].dtype nuniqueself.df[col].nunique()info.append(f -{col}({dtype}):{nunique}个唯一值)ifnunique10:info.append(f 取值:{self.df[col].unique().tolist()})elifdtypein[int64,float64]:info.append(f 范围:{self.df[col].min()}~{self.df[col].max()})info.append(\n前3行数据:)info.append(self.df.head(3).to_string())self.context\n.join(info)defquery(self,question):promptf你是一个数据分析助手。用户会用自然语言描述分析需求你需要生成可直接执行的 Python 代码。 数据信息:{self.context}用户需求:{question}要求: 1. 只用 pandas 和 numpy (已导入为 pd 和 np) 2. 数据变量名是 df 3. 最终结果必须赋值给 result 变量 4. result 必须是 DataFrame 或 Series 5. 只输出代码用 python 包裹不要解释 6. 不要 import 任何库 responseclient.chat.completions.create(modelglm-4.7-flash,messages[{role:user,content:prompt}])code_textresponse.choices[0].message.contentifpythonincode_text:codecode_text.split(python)[1].split()[0].strip()elifincode_text:codecode_text.split()[1].split()[0].strip()else:codecode_text.strip()print(f\nAI 生成的代码:\n{code}\n)try:exec_env{df:self.df,pd:pd,np:np}exec(code,exec_env)resultexec_env.get(result)ifresultisNone:return代码执行了但没有产生结果换个问法试试returnresultexceptExceptionase:returnf执行出错:{e}defquery_and_explain(self,question):resultself.query(question)ifisinstance(result,str):returnresult result_textresult.to_string()ifhasattr(result,to_string)elsestr(result)explain_promptf用户问题:{question}分析结果:{result_text}请用简洁中文解读这个结果3-5句话。explanationclient.chat.completions.create(modelglm-4.7-flash,messages[{role:user,content:explain_prompt}])returnresult,explanation.choices[0].message.contentdefinteractive_analysis(df):analyzerNLAnalyzer(df)print(*50)print(AI 数据分析助手)print(*50)print(f\n数据:{len(df)}行 x{len(df.columns)}列)print(f字段:{, .join(df.columns)})print(\n用中文描述你想分析什么输入 quit 退出\n)whileTrue:questioninput(你想分析什么: ).strip()ifquestion.lower()in[quit,q,退出]:print(再见!)breakifnotquestion:continueresultanalyzer.query(question)ifisinstance(result,str):print(f\n{result}\n)else:print(f\n结果:)print(result)ifinput(\n需要 AI 解读吗? (y/n): ).strip().lower()y:result_textresult.to_string()ifhasattr(result,to_string)elsestr(result)explanationclient.chat.completions.create(modelglm-4.7-flash,messages[{role:user,content:f用户问题:{question}\n结果:\n{result_text}\n\n简洁解读:}])print(f\nAI 解读:{explanation.choices[0].message.content}\n)print(-*40)if__name____main__:np.random.seed(42)n100dfpd.DataFrame({月份:np.random.choice([1月,2月,3月,4月,5月,6月],n),商品:np.random.choice([手机,笔记本,耳机,平板],n),价格:np.random.choice([999,2999,4999,6999],n),数量:np.random.randint(1,10,n),渠道:np.random.choice([天猫,京东,拼多多,抖音],n),退货:np.random.choice([0,1],n,p[0.88,0.12]),})df[销售额]df[价格]*df[数量]interactive_analysis(df)完整的交互式分析工具评论区留言领取运行效果 AI 数据分析助手 数据已加载100 行 × 7 列 可用字段月份, 商品, 价格, 数量, 渠道, 退货, 销售额 用中文描述你想要的分析输入 quit 退出 你想分析什么哪个渠道的销售额最高 AI 生成的代码 result df.groupby(渠道)[销售额].sum().sort_values(ascendingFalse).reset_index() 结果 渠道 销售额 0 天猫 520000 1 京东 480000 2 拼多多 350000 3 抖音 280000 需要 AI 解读这个结果吗(y/n): y AI 解读天猫渠道销售额最高占总销售额的约32%。京东紧随其后。 抖音渠道虽然退货率可能较高但销售额也不低值得进一步分析其性价比。 ----------------------------------------六、局限性这个方案很实用但要知道它的局限AI 可能生成有 bug 的代码尤其是复杂查询。好在你可以看到代码能检查不支持太复杂的分析比如机器学习、时间序列建模AI 生成的代码可能跑不通大数据量时需要采样传给 AI 的数据描述不能太长安全问题exec执行 AI 代码在生产环境需要严格沙箱适合什么场景日常的数据探索、快速验证假设、不会写pandas的人做数据分析。七、小结用自然语言做数据透视的核心流程中文描述需求 → AI 生成 pandas 代码 → 执行代码 → 返回结果关键代码就三件事把DataFrame的结构信息喂给 AI列名、类型、取值范围让 AI 根据你的中文描述生成result ...的代码用exec()执行并返回结果这个模式可以扩展到很多场景不只是数据透视任何用自然语言操作数据的需求都能用这个模式。下一篇讲一个很酷的功能——用 AI 视觉模型从图片中提取数据。下期预告Day 13 AI 视觉模型提取图片数据——用 GLM-4.6V-Flash 从截图、照片中提取表格数据不用再手动输入。专栏「AI Python 系列」第 02 栏 ·AI数据可视化连载中「AI Python 系列」第 01 栏 · AI自动化办公连载中「AI Python 系列」第 03 栏 · Python 爬虫实战连载中「AI Python 系列」第05栏 · AI Agent实战连载中资源领取关注作者获取本栏完整代码和数据集原创声明本文为梅雅达编程笔记原创作品未经允许不得转载。

相关新闻

为什么选择react-image-magnify?5大优势碾压传统图片放大插件

为什么选择react-image-magnify?5大优势碾压传统图片放大插件

为什么选择react-image-magnify?5大优势碾压传统图片放大插件 【免费下载链接】react-image-magnify A responsive image zoom component designed for shopping sites. 项目地址: https://gitcode.com/gh_mirrors/re/react-image-magnify react-image-magni…

2026/10/16 12:43:52 阅读更多 →
终极Windows远程开发工具:MobaXterm中文版完全指南

终极Windows远程开发工具:MobaXterm中文版完全指南

终极Windows远程开发工具:MobaXterm中文版完全指南 【免费下载链接】Mobaxterm-Chinese Mobaxterm simplified Chinese version. Mobaxterm 的简体中文版. 项目地址: https://gitcode.com/gh_mirrors/mo/Mobaxterm-Chinese 还在为Windows下的远程开发效率低下…

2026/10/17 9:31:07 阅读更多 →
生命涌现的小龙虾技能之【Autism Spectrum Disorder Behavior Analysis Tool | 孤独症谱系障碍行为分析工具】简介

生命涌现的小龙虾技能之【Autism Spectrum Disorder Behavior Analysis Tool | 孤独症谱系障碍行为分析工具】简介

🧩 Autism Spectrum Disorder Behavior Analysis Tool | 孤独症谱系障碍行为分析工具 智能健康/识别分析中枢 图片/视频智能分析 结构化报告 历史报告云端查询 🧭 技能概览 | Overview 模块内容🏷️ 技能名称孤独症谱系障碍行为分析工具&…

2026/10/17 9:31:19 阅读更多 →

最新新闻

OpenAI API实战:模型调用、函数调用与Assistants深度解析

OpenAI API实战:模型调用、函数调用与Assistants深度解析

前阵子帮朋友一个电商后台做AI客服改造,被问得最多的一个问题就是:OpenAI API到底能干啥?很多刚接触的人以为它只是把ChatGPT网页版的接口套个壳,问两句就完了,其实远不止于此。这一篇我打算把模型调用、Assistants、F…

2026/10/18 13:02:44 阅读更多 →
PINN四大方向:连续/离散识别与推理的代码实现与避坑指南

PINN四大方向:连续/离散识别与推理的代码实现与避坑指南

简介:基于PINN(物理信息神经网络)的识别与推理完整代码包,适合研究生、科研人员及有一定深度学习基础的工程开发者。资源围绕离散时间/连续时间识别与推理四类任务展开,覆盖经典PINN建模、训练与评估流程,可…

2026/10/18 13:02:44 阅读更多 →
代练平台源码拆解:订单结算与二次开发实战

代练平台源码拆解:订单结算与二次开发实战

简介:这份源码是一套基于PHP的游戏代练平台网站系统,适合有意开发交易或服务平台、学习PHP全栈开发的读者。它完整覆盖用户前端展示、代练任务发布与接单、后台管理等多个环节,能帮助理解平台如何连接用户和代练者,以及背后的业务…

2026/10/18 13:02:44 阅读更多 →
ILSpy中文汉化版完全指南:反编译.NET程序集与调试实战

ILSpy中文汉化版完全指南:反编译.NET程序集与调试实战

简介:.NET反编译工具 ILSpy 中文汉化版是一款面向 .NET 开发者的免费开源反编译工具,旨在帮助开发者在缺少源代码时深入查看 .NET 程序集(.dll/.exe)的内部结构,并将其还原为可读性强的 C# 或 VB.NET 代码,…

2026/10/18 13:02:44 阅读更多 →
Python资产管理系统:支持折旧计算、调拨联动与审计导出

Python资产管理系统:支持折旧计算、调拨联动与审计导出

简介:本资源是一套基于Python开发的轻量级资产管理系统完整源码,面向Python初学者、Web开发入门者及企业IT资产管理员,解决组织内部资产全生命周期(购置、使用、维护、报废)的数字化跟踪与管理问题。压缩包共21个文件&…

2026/10/18 13:02:44 阅读更多 →
Java医药系统实战:权限分层、库存事务与财务统计闭环

Java医药系统实战:权限分层、库存事务与财务统计闭环

简介:本资源是一套基于Java Web与MySQL开发的医药销售管理课程设计系统,面向计算机专业本科生及Java初学者,解决中小型医药企业员工与经理在会员管理、供应商协作、药品库存查询、采购销售及仓库盘点等核心业务中的信息化需求。压缩包共26个文…

2026/10/18 13:01:44 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →