实验 05 · 阶段检查
Python 阶段性小作业:数据总结与可视化
完成一个多文件 Python 数据总结项目,生成 results.txt 和 matplotlib 可视化,并记录 OpenCode 取舍。
完整讲义
实验 5:Python 阶段性小作业:数据总结与可视化
目标
在进入 MATLAB 之前,完成一个小型 Python 项目。这是第一次阶段性检查, 要求你把 PowerShell、VS Code、OpenCode、Python 文件、实验笔记、输出文件、 matplotlib 图像和人工数学检查组合起来使用。
这次不再逐步解释 OpenCode 的每个界面元素,但仍要复用 Lab 4 的完整闭环:确认模型, 在 Plan 模式做只读检查,切换到 Build 模式实现,运行程序,在 PowerShell 中查看 git diff,最后根据数学结果接受或拒绝建议。
开始前复用 Lab 4 的 Git 检查点流程:用 git status 确认工作区干净;完成全部人工检查后, 按相同方法提交 Lab 5 检查点。这里不再重复 Git 命令块。
数学问题
程序如何总结一个小数据集,并用图像检查这些总结在数学上是否合理?
使用数据集:
[2, 4, 5, 7, 11, 13]
完成后的项目必须计算:
- 个数;
- 总和;
- 平均值;
- 最小值和最大值;
- 中心化后的值,即每个值减去平均值;
- 平方偏差;
- 平方偏差和;
- 平均平方偏差。
同时生成一张可复现的图像,帮助检查原始数据、中心化值和平方偏差之间的关系。
目录结构
创建如下目录结构:
labs/lab05/
README.md
main.py
analysis_helpers.py
plot_helpers.py
prompts.md
results.txt
figures/
data-summary.png
小知识:为什么项目要拆成多个文件?
拆分的目的不是让项目看起来更大,而是建立清楚边界:analysis_helpers.py 负责数值计算, plot_helpers.py 负责画图,main.py 负责组织流程。这样修改图像时不必同时触碰数学函数, 也能分别检查各部分。拆得过细同样会增加来回寻找文件的成本,因此合理标准是“一个文件有 一个清楚职责”,而不是规定每个文件必须有多少行。
多文件 Python 如何协作
本项目由一个入口文件和两个职责明确的模块组成:
main.py
├─ 从 analysis_helpers.py 取得数值计算函数
├─ 从 plot_helpers.py 取得绘图函数
└─ 把文本结果和图像写入约定位置
main.py 是入口文件,负责定义数据并组织执行顺序。analysis_helpers.py 只接收数据并返回 计算结果,plot_helpers.py 只根据已有结果生成图。import 不会把另一个文件的文字复制进 当前文件,而是让 Python 加载模块,并使其中定义的函数可以被当前程序调用。
Starter 末尾的结构:
if __name__ == "__main__":
main()
表示只有直接运行 main.py 时才执行完整流程;其他文件导入其中的函数时不会自动重跑项目。 __file__ 表示当前 Python 文件本身的位置。用它确定 results.txt 和 figures/,可以让输出 位置相对于项目文件保持稳定,而不依赖 PowerShell 当时位于哪个目录。
第三方包与可视化
pathlib 等标准库随 Python 一起安装;matplotlib 是第三方包,需要单独安装。 命令 python -m pip install matplotlib 表示让当前 python 对应的解释器运行包管理模块 pip,从而降低“安装到了另一个 Python 版本”的可能性。
本项目中的三组量不适合强行共用一个纵轴:原始数据和中心化值使用原数据单位,平方偏差使用 平方单位,而且数值范围不同。图像应使用三个上下排列的分面图,共用数据点编号作为横轴, 但每个子图使用自己的纵轴和标签:
| 子图 | 展示内容 | 人工检查 |
|---|---|---|
| 原始数据 | [2, 4, 5, 7, 11, 13] |
顺序与数据集一致 |
| 中心化值 | 每个值减去平均值 | 同时出现正值、负值和零 |
| 平方偏差 | 中心化值的平方 | 全部非负,单位变为平方单位 |
分面不是为了装饰,而是避免不同含义和尺度的量相互遮盖。三个子图仍使用相同的数据点编号, 所以读者可以纵向比较同一个数据点的三个阶段。
设置
- 将
starters/lab05/中的所有文件复制到labs/lab05/。 - 在
notes/lab05-notes.md中记录实验过程。 - 运行 starter 项目:
python labs\lab05\main.py
OpenCode 工作流
从课程根目录启动 OpenCode:
opencode
输入 /models,确认提供商是 OpenCode Go,模型是 DeepSeek V4 Pro,完整模型标识为 opencode-go/deepseek-v4-pro。把这三项和 opencode --version 的结果记录到 prompts.md。
按 Tab 切换到 Plan 模式,先进行只读检查,并把提示词保存到 prompts.md:
先查看 labs/lab05 中已有的文件,不要修改任何文件。
说明 main.py、analysis_helpers.py 和 prompts.md 当前分别负责什么,
再列出完成数据总结、结果文件和可视化还缺少哪些内容。
确认 OpenCode 没有修改文件,并检查计划是否只涉及 labs/lab05/。再按 Tab 切换到 Build 模式,输入并记录实现提示词:
我具备基础 Python 知识。请在 labs/lab05 中扩展这个入门项目。
为中心化值、平方偏差、平方偏差和以及平均平方偏差添加辅助函数。
更新 main.py,让它输出计算结果,并把结果写入 results.txt。
添加适合初学者阅读的 plot_helpers.py,使用 matplotlib 将图像保存到
figures/data-summary.png。使用三个上下排列的分面图展示原始数据、中心化值和平方偏差;
三个子图共用数据点编号,但每个子图使用自己的纵轴和标签。
保持代码简单易读,不要使用类、pandas 或 numpy。
完成条件:results.txt 必须包含个数 6、最小值 2、最大值 13 和平方偏差和 90,
并包含其他要求的统计量;图像文件必须由 main.py 重新生成。
完成后说明修改了什么,以及我应该如何手算检查结果。
实现完成后保留 OpenCode 会话,在 VS Code 的第二个 PowerShell 终端运行:
git status
git diff -- labs\lab05
逐项检查修改是否只发生在 labs/lab05/,数据集和计算定义是否保持不变。还要检查 main.py 是否只组织流程、计算函数是否留在 analysis_helpers.py、绘图函数是否留在 plot_helpers.py,以及所有输出路径是否由脚本位置确定。把一项接受的修改和一项被你修改 或拒绝的建议写入 prompts.md,并写明判断依据。
再问一个解释类提示词:
请逐行解释 labs/lab05/main.py、labs/lab05/analysis_helpers.py 和
labs/lab05/plot_helpers.py。重点说明代码对应的数学含义,
并指出哪些部分需要我自己验证。
如果 matplotlib 没有安装,先在 PowerShell 中运行:
python -m pip install matplotlib
然后重新运行项目:
python labs\lab05\main.py
人工检查
对于数据集 [2, 4, 5, 7, 11, 13],手算检查:
- 个数是
6; - 总和是
42; - 平均值是
7; - 最小值是
2; - 最大值是
13; - 中心化后的值是
[-5, -3, -2, 0, 4, 6]; - 中心化后的值相加为
0; - 平方偏差是
[25, 9, 4, 0, 16, 36]; - 平方偏差和是
90; - 平均平方偏差是
15。
再检查图像:
- 原始数据图应该显示数据整体上升,但不是等间距上升;
- 中心化值图应该围绕
0上下分布; - 平方偏差图应该全部非负,并且离平均值越远的点越高;
- 三组量使用三个分面图,每个子图有自己的纵轴标签;
- 图像文件应该保存为
labs/lab05/figures/data-summary.png。
README 要求
在 labs/lab05/README.md 中写清楚:
- 使用了什么数据集;
- 程序计算了哪些总结值;
results.txt是否明确记录个数6、最小值2、最大值13和平方偏差和90;- 图像展示了哪些量;
- 图像是否支持你的数值检查;
- 如何从 PowerShell 运行项目;
- 一个你手动检查的结果;
- 一个你接受的 OpenCode 建议;
- 一个你修改或拒绝的 OpenCode 建议。
完成内容
labs/lab05/main.pylabs/lab05/analysis_helpers.pylabs/lab05/plot_helpers.pylabs/lab05/README.mdlabs/lab05/prompts.mdlabs/lab05/results.txtlabs/lab05/figures/data-summary.pngnotes/lab05-notes.md- PowerShell 输出截图
Checkpoint
完成后确认:
python labs\lab05\main.py可以从课程根目录运行;results.txt被创建或更新;results.txt中的个数是6、最小值是2、最大值是13、平方偏差和是90;figures/data-summary.png被创建或更新;- 你能解释为什么中心化后的值相加为零;
- 你能解释为什么平方偏差图中所有柱子都不低于零;
- 你能解释入口文件、两个模块和
import之间的关系; - 你能解释为什么平方偏差不与原始数据强制共用同一个纵轴;
- 提示词记录中至少包含一个接受的 OpenCode 建议和一个被修改或拒绝的建议。
prompts.md记录了 OpenCode 版本、OpenCode Go、DeepSeek V4 Pro、只读检查、实现提示词
和一次 git diff 检查。
git status在提交 Lab 5 检查点后再次显示工作区干净。
下一实验使用同一数据集、同一组手算答案和同一种三分面图,在 MATLAB 中重新实现完整流程。 数学问题保持不变,因此可以把注意力集中在新语言的脚本、索引和数组运算上。