技术

算得能复现,图才有说服力

拆解 Jupyter Notebooks 与 Visualize Data:Notebook 的结构与执行完成条件、图表契约的六个要素,以及为什么好看不能掩盖不可靠。

技术 #Data Agent#OpenAI#Agent Skills#Jupyter#数据可视化

Notebook 与图表构成的可复现分析工作台

同一张图,换个人重跑就变了;同一组数据,换个坐标轴又像另一个故事。Data Agent 的可信度,常常就在这些细节里掉下来。

Data Analytics Skills 把这段工作分成两个 Skill:Jupyter Notebooks 让计算能复现,Visualize Data 让表达不误导。前者负责“这数怎么来”,后者负责“这图能说明什么”。

Notebook 不是代码草稿堆

原文要求先锁定 Notebook 的模式和范围:它是分析报告、实验日志、诊断记录、质量检查、市场估算、模型探索,还是配套产物。读者是谁、支持什么决定、预期交接什么,都要先明确。

分析型 Notebook 的默认结构是:

## tl;dr
## Context & Methods
## Data
## Results
## Takeaways

关键约束是:tl;dr 和 takeaways 要在看过执行输出之后再写。摘要里要出现具体的观察值、可见的模式、行数或图表,而不是事先的假设。当假设影响正确性时,还要在 Context & Methods 下加一节 Key Assumptions。

这个顺序和很多人的习惯相反。常见做法是先写结论,再跑数验证;结果是结论和实际输出之间悄悄产生了偏差,而读者看不出偏差在哪里。

分离步骤,记录来源

原文要求把环境准备、导入、参数、数据加载、数据准备、计算、可视化和解读分开。如果同时使用 SQL 和 Python,复杂 SQL 应保留在 SQL 单元或独立查询文件中,而不是塞进 Python 长字符串。

代码单元要短、要单一职责:一个单元做一件事,前面配一句说明目的、假设和预期结果的 Markdown。多个表格或图表应拆到不同单元,而不是从一个单元里倾倒出所有输出。

对于支撑分析的每个已执行结果,原文要求记录来源:查询链接、请求 ID、源路径、看板链接、提取名称或其他来源产物。重查询要有过滤和边界,不要让 Notebook 变成对实时源的广泛扫描。

跑完,才谈得上复现

完成条件不是文件能打开,而是从头到尾成功执行。原文给出的命令是:

python -m jupyter nbconvert --execute --to notebook --inplace path/to/notebook.ipynb

如果受数据权限、依赖、内核或凭证限制无法执行,应明确说明,并给出在本地验证所需的确切命令、缺失依赖、凭证、数据访问或环境步骤。不能把旧缓存当成这次运行的证明。

这条规则的价值在于区分两种状态:“我跑过”和“现在能跑”。前者是历史,后者才是可复现性。

先确定比较关系,再选图

Visualize Data 的第一步不是选图,而是定义分析问题和一句话结论:这张图要回答什么,读者看完应该知道什么,最终出现在哪个载体上。

常见的选择线索是:时间变化用折线,类别比较用条形,分布用直方图或箱线图,两个数值变量的关系用散点。

但这些是线索,不是机械映射表。只有两三个时间点,不必硬画一条“趋势”;只有几个聚合点,也不该硬凑散点规律。图表的类型要服务于比较关系,而不是反过来。

给每张图一份小契约

原文要求在写绘图代码之前,先写一份紧凑的图表契约,包含:

  • 分析问题与结论
  • 图表族与具体变体
  • 数据是否足够:预期行数、时间点数量、散点观测数与粒度、日期范围,以及数据过稀时的退路
  • 交付载体与对应的图表类型
  • 配色策略与非颜色区分方案
  • 输出尺寸、最终容器与质检表面

这份契约把“这张图好不好看”换成了“这张图能不能支撑这个结论”。

单位、分母、时间、人群、比较基线和样本量,都属于契约的一部分。如果这些没定,颜色和标注的讨论就是本末倒置。

好看,不能掩盖不可靠

原文对诚实表达给出了一些具体约束:

  • 绝对量条形图通常从零开始;专门看差值的图可以聚焦区间,但要明示尺度。
  • 多系列除了颜色,还应有直接标签、线型或标记区分。
  • 坐标轴、标签与限制说明,都是证据的一部分。
  • 标题不应夸大数据能支持的结论。

最后一步是在读者真正打开的页面里检查,而不是只看绘图窗口里的缩略图。手机卡片、报告内嵌图、看板组件和幻灯片,对文字大小、留白和对比度的要求完全不同。

两者为什么必须一起看

只做复现,不做表达:结果可查,但读者可能被图表误导。 只做表达,不做复现:图很好看,但没人能确认数字怎么来的。

原文在交接上的要求也体现了这一点:Notebook 的结论必须与执行输出一致;图表的结论必须与 Notebook 的计算一致。任何一环断开,整条证据链就失效了。

设计自己的分析产物时

三个可以立刻用的检查:

  1. 把 Notebook 从干净内核重跑一遍,还能得到同样的关键数字吗?
  2. 每张图能不能用一句话说清“它在回答什么问题”?
  3. 把图放到最终页面后,坐标轴、单位和样本量还读得清吗?

计算链负责“这数怎么来”,表达链负责“这图能说明什么”。图表质量不是修饰,而是分析可信度的最后一公里。

参考:OpenAI Data Analytics Skills 公开参考仓库