W08 · DATA COMPUTING

数据入口与互操作API · Pydantic · DuckDB · Parquet

真实工作不是从一张干净 Excel 开始。要理解 HTTP/JSON 的数据入口,用 schema 拦截坏数据,再让 Polars、SQL 与 Parquet 各司其职。

数据计算第 7 次课课后自学课堂验收
0 / 0 已完成
01

知识范围 · 交互图谱

Know the map before details

学完后大致能做到

解释 HTTP 请求/响应、状态码、超时与重试
解析 JSON 并用 Pydantic 验证数据契约
用 DuckDB SQL 查询 CSV/Parquet 并与 Polars 互操作
为抓取结果保留来源、时间、参数和哈希
02

零基础起步

Start small · bring real progress

不要等到「全部学会」才开始

先完成最小动作。哪怕没有成功复现,也请保留报错、截图和尝试过程;课堂可以展示卡点、旁听提问,并继续获得积分。

先迈一步

只做第一步也可以

读取本地 JSON,打印顶层结构;设计 Pydantic 模型验证 code/date/price/volume

保留真实输出或卡点,带到课堂;不要求一次完成全部。
完整复现

做出核心结果

先用课程提供的本地 API 响应样本保证人人可完成;再选做在线请求。验证字段后写出 Parquet,并用 SQL 复核聚合结果。

成功复现可获得「复现 +1」,并具备展示资格。
自由拓展

想多做再继续

实现指数退避与本地缓存

有拓展 +1,多拓展 +2;不影响零基础起步。

实验目标

先用课程提供的本地 API 响应样本保证人人可完成;再选做在线请求。验证字段后写出 Parquet,并用 SQL 复核聚合结果。

market_api_sample.json(合成 API 响应)

完整复现步骤

读取本地 JSON,打印顶层结构;设计 Pydantic 模型验证 code/date/price/volume
对非法记录采用显式失败或隔离区,不得静默吞掉
写出 raw/ 与 processed/ 两层文件,并生成 metadata.json(来源、时间、参数、SHA-256)
用 Polars 写出 Parquet,再用 DuckDB SQL 计算代码级均价和成交量
可选:用 httpx 请求一个公开 API,设置 timeout、状态检查与有限重试
Python · 数据契约骨架
from datetime import date
from pydantic import BaseModel, Field

class Quote(BaseModel):
    code: str = Field(pattern=r"^[A-Z0-9.]+$")
    date: date
    price: float = Field(gt=0)
    volume: int = Field(ge=0)

# TODO: json.load → Quote.model_validate → 隔离坏记录
# TODO: Polars 写 Parquet → DuckDB SQL 复核

展示时可拿出的证据

  • 一条合格与一条不合格记录的验证结果
  • metadata.json 与文件哈希
  • Parquet 输出与 SQL 查询结果
  • 离线核心任务可复现说明

本机自查清单

03

让 AI 一步一步带你做

Copy this starter prompt

循环方式

  • 告诉 AI:我是零基础、使用什么系统、当前做到哪一步
  • 一次只要一个步骤,先看预期结果再执行
  • 把真实输出或报错贴回 AI,不要只说「不行」
  • 把验证过的步骤整理回飞书实验报告
  • 重复:问 → 做 → 报错 → 修正 → 再做
给 AI 的起步提示词
我是金融学院硕士生,计算机零基础。我正在学习《金融编程与计算》W08,本周目标是:实验 06 · 可审计的数据采集器。
请把我当作第一次接触这些工具的人,并遵守:
1. 一次只给我一个步骤,不要一次倾倒完整答案。
2. 每一步先用日常语言解释目的,再给可复制的命令或代码。
3. 告诉我正常情况下应该看到什么,以及最常见的一个错误。
4. 如果不知道我的操作系统、目录或安装状态,先问我,不要假设。
5. 等我贴回真实输出或报错后,再判断下一步。
现在只带我完成第一步:读取本地 JSON,打印顶层结构;设计 Pydantic 模型验证 code/date/price/volume
04

问题驱动

这些问题不是课前考试。遇到不懂就问 AI;最后只需能结合自己的操作,说清其中一部分。

Q01

HTTP 200 是否代表返回的数据一定正确?

Q02

JSON 有字段为什么还需要 schema 验证?

Q03

SQL 与 Polars 谁更「高级」,还是各有表达优势?

Q04

重试为什么必须设置上限和退避?

Q05

怎样证明本周下载的数据与下周看到的是同一份?

05

只交一份实验报告

The learning process is the deliverable

建议结构

  1. 本周目标:我想完成什么,以及最后做到哪一步
  2. 环境:操作系统、软件版本、安装方式与必要依赖
  3. 操作步骤:按真实执行顺序写出可复制的命令或代码
  4. 结果:关键输出、截图及我如何判断它是否正确
  5. 踩坑与克服:现象 → 可能原因 → 实际排查 → 解决办法
  6. 结论:本周学会了什么,仍有什么没有解决
  7. 诚实标注:哪些来自 AI 建议,哪些已由本人亲自验证
下载无表格版报告模板

本周常见坑

  • 不设置 timeout,程序无限等待
  • 把 200 当作业务成功而不验字段
  • 覆盖原始数据,无法追溯
  • 把 API Key 写进脚本或截图

不另交 AI 使用记录

只需在实验报告中诚实标注:哪些步骤来自 AI 建议,哪些已经本人验证,哪些仍未验证。学习过程写好,报告就自然产生。

06

课堂时间全部用于验收

No new lecture · public verification

两次考勤

上课提前 5 分钟点名,下课前 5 分钟再次点名。

自愿共享屏幕

用本人笔记本打开实验报告,展示真实操作、结果或卡点。

现场复现与双分

作者现场运行;同学也可仅凭该文档复现,作者与复现者都加分。

随机拷问与好问题

教师判断掌握程度;旁听同学可提出被采纳的好问题。

本周可能被问

  • HTTP 200、404、429、500 分别意味着什么?
  • JSON 与 Python dict 有何区别?
  • schema 验证应放在流程哪一层?
  • 为什么重试要退避且有限?
  • Parquet 与 CSV 在 schema 上有何差异?
07

本周课堂积分

Same rules every week

考勤

上课提前 5 分钟点名,下课前 5 分钟再点名

出勤 +3迟到 +2早退 +2请假 +1旷课 +0
💻

复现

使用 AI 自学,按照教学大纲完成了每周实验任务

成功复现 +1未能复现 +0
🚀

拓展

按照教学大纲完成一项或多项拓展任务

多拓展 +2有拓展 +1无拓展 +0
🖥️

展示

主动共享屏幕展示复现过程,接受核验与拷问

课堂自愿共享屏幕展示 +3无课堂展示 +0
🥇

首讲

每节课堂最先自愿开讲的前 3 人

前 3 人 +1
💡

提问

认真旁听并提出被采纳的好问题

被采纳 +0.5
🔍

拷问

面对面随机拷问 · 反空心化闸门

空心代工 −1一知半解 +1融会贯通 +2
🤝

双分

仅凭文档课堂现场复现

作者与复现者 都 +1
🏆

精选

本周最佳文档

知识库 + 席位 + 署名 + 积分 +3

做一点,也算一点

没有完成全部实验,也可以凭考勤、展示卡点、认真提问和真实回答获得积分;做得越扎实,展示、拓展、拷问、双分和精选带来的激励越多。飞书应用展示过去 30 天积分榜与总积分榜。

08

自由拓展与参考资源

拓展挑战

  • 实现指数退避与本地缓存
  • 用 SQL 窗口函数计算移动均值
  • 给数据契约增加版本并兼容旧格式