数据校验:研究的第一道质检工序
我的掌握程度:
先掌握这个答案
六项检查:①行数对账:更新前后行数增量合理(如A股每天约5000行增量);②价格范围:close>0、|日收益|不超涨跌停;③NaN率:各列缺失比例(突增=接口故障);④重复检查:同(date,code)不重复;⑤抽样比对:随机取3只与行情软件肉眼对数;⑥量级合理性:均值/std是否在已知区间。自动化:写check_data(df)函数每次更新后自动跑——异常打印详细报告。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
本阶段实战方法 · 一条能复现的数据流水线
把接口返回的数据变成可用于因子研究的面板时,先处理时点、主键与单位。
- 建立数据字典:字段、单位、时区、交易日历、数据源、抓取时间、原始价与复权因子。
- 用(date, code)查重,区分停牌、未上市、窗口不足和真实缺失;不要用向后填充把未来值带回过去。
- 保存原始快照与清洗日志,固定随机种子和环境版本;接口字段变化时先核对官方文档。
使用边界
- 报告期不等于公告可用日,盘后公告通常不能用于当天收盘前决策。
- API输出名为“动态市盈率”时不能直接改名TTM;浏览器练习不支持任意原生库或行情抓取接口。
不懂的术语:涨跌停
背景 · 从一个困惑说起
你花了一小时更新完数据、跑了因子、IC异常高——是发现了圣杯还是数据出错了?90%的概率是后者。数据校验就是研究前花5分钟把问题暴露——而不是花三天排查"为什么因子又失效了"。
由此产生的问题
数据校验的六项固定检查?校验脚本的自动化设计?发现异常的处置流程?
核心概念
六项检查:①行数对账:更新前后行数增量合理(如A股每天约5000行增量);②价格范围:close>0、|日收益|不超涨跌停;③NaN率:各列缺失比例(突增=接口故障);④重复检查:同(date,code)不重复;⑤抽样比对:随机取3只与行情软件肉眼对数;⑥量级合理性:均值/std是否在已知区间。自动化:写check_data(df)函数每次更新后自动跑——异常打印详细报告。
为什么需要它
①成本的不对称:校验5分钟/不校验排查3天——ROI最高的5分钟;②数据研究的第一课:几乎所有"因子突然有效/失效"先排查数据——再怀疑模型;③团队协作文档:校验日志是给同事(和三个月后的你)的最大善意。
实际应用场景
标准流程:数据更新→自动体检→异常告警→人工核查→修复→重跑→通过→开始研究——校验是研究的前置闸门。
与之前知识的联系
q-328/338(下载与更新)→本题(每次更新后的闸门)→q-060(字段体检);与q-065(脏数据图鉴)配合使用。
⚠ 常见误解
- 数据源是权威的所以不用查:所有数据源都有口径变更、接口故障、静默错误——校验是自保
- 校验抽查几笔就行:系统性bug(口径变化)用抽查可能漏——六项固定检查全覆盖
- 校验浪费时间:5分钟的六项检查vs3天的因子排查——ROI最高的时间投资
- 校验通过就永远安全:每次数据更新后都要重新跑——新数据=新bug风险
🛠 本题实践任务
为你的数据写health_check函数(六项检查)——跑一次输出报告。如有异常逐项标注原因并修复——把报告存进清洗日志。
💡 提示(先自己想5分钟再看)
六项见代码;"通过"的标准是每项异常都有书面解释——不是数字为零才算通过。
✅ 验收标准
一份六项体检报告(含异常处置记录)。你的数据管道有了质检工序。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(数据更新、脏数据概念),再用案例、公式和代码帮助理解。此功能需要先启用服务。