美股财务数据怎么批量整理:从SEC事实表生成季度面板
季度基本面面板必须保留财务事实实际测量的期间。先选择公司、概念、单位、原起止日、申报表单和来源版本,再分配季度。半年收入不能装成一个季度,四条年初至今累计披露也不能直接相加当全年。应建立明确转换规则,让每个派生单元格都能回到原始事实,而不是只剩一个数值和季度标签。
本文实际执行合成SEC式收入面板,并另核一家公司原申报与概念响应。可运行示例不联网,不声称CoTrading覆盖任意XBRL概念。参考范围是SEC覆盖主体,A股和港股需要其他来源与映射。合成输入验证转换,真实来源核对确认期间和单位,二者分别记录,不混称产品集成测试。
取得并保存原始事实上下文
SEC API说明介绍公司事实和概念数据,并说明单位数组、报告上下文及标准分类、主体层级等聚合范围。缺少自定义概念时,不能未经核对就挑一个名字相似的标准标签填上。标签选择是研究映射,不是只要能取得数字就完成。
保留原响应、取得日期、公司标识、taxonomy和tag。每条接受事实保存起日、末日、数值、单位、申报日、accession和表单。重复披露与修订都先保留,再选择版本;季度面板应连到这些记录,不只连一个公司主页。以后有人问某格为何改变,才能区分源修订、概念切换和计算错误。
逐公司确认概念映射与跨标签等价理由。本例只接受声明的Revenues和USD,故意排除EUR行,不自动换汇。资产负债表时点数应使用另一套政策,不能送入流量期间相减。经营范围、合并主体和单位一致,也比表单名称相同更重要。
提供财务日历,不凭标签猜季度
合成公司使用2025年1至12月,四个季度边界显式给定。真实公司可能不同财年或按周财务日历,不能只用申报时的当前财年标签或提交年份判断原事实期间。保留原start/end后,再按已核公司日历映射,避免后来披露上一年度数据被当成当前季度。
累计流量第一季度等于该年初至今值;后续单季等于本期累计减上个季度边界累计,前提是公司、概念、单位、财年起点和会计范围兼容。全年减九个月可以推第四季,同样需满足这些约束。不能只看日期接近就相减,也不能把不同币种或不同业务范围差额称为单季收入。
| 合成AAA期间 | 收入,百万USD | 单季结果 |
|---|---|---|
| 1至3月 | 100 | 100 |
| 1至6月 | 260 | 160 |
| 1至9月,修订后 | 450 | 190 |
| 1至12月 | 700 | 250 |
原始值按USD存储,展示时除一百万。发行人表格写百万,不代表API返回值也需再次按百万解释;来源单位与展示倍率分开,防止重复缩放。数据表应同时写标准单位和展示单位,审阅者才知道100到底是一百货币还是一百百万。
按截止日选择版本,核直接单季
样例对每个原期间选择截止日前最新申报日。同日冲突值停止,不让输入行序决定;原始记录集合不变。后续申报再次出现相同第一季度收入,是另一出处,不是第二份可以相加的季度。修订有明确新申报与旧值关系,不能在取数时就覆盖到看不见。
current = selected.get((symbol, fiscal_start, quarter_end))
previous = selected.get((symbol, fiscal_start, preceding_quarter_end))
derived = D(current["val"]) - D(previous["val"])
if direct_quarter is not None and D(direct_quarter["val"]) != derived:
raise ValueError("direct_ytd_conflict")
完整代码分别处理第一季和缺边界。存在直接单季时,先与可推导差额核对,再采用直接值。累计边界缺一项,就不能减更远期间冒充一个季度。冲突应列为待核,不能按哪个结果更接近预期挑选。期间转换的验收重点是没有重叠或漏算,而非生成四个看起来完整的数字。
下载完整示例。使用Python 3.12+、标准库和合成事实,运行python R534.py。作者文件为docs/growth/research/round-5/examples/R534.py。
AAA实际输出100、160、190、250百万USD。第四季由全年700减修订九个月450,带两条来源。以11月1日为截止时,旧九个月445推出第三季185;修订后变190。原11条事实全部保留,包括被排除单位和旧披露。脚本还倒序输入重算,验证版本选择不靠返回顺序。
正确理解可得日期字段
输出保存选定来源事实和available_on日期;差分取所用输入最晚申报日。这是该选定推导版本的保守来源日期,不是市场盘中可获得时间证明。相同值后来重复披露,当前选定出处可以带较晚日期,即使数字更早已经出现;最早发布证据需另存,不能把这两个含义混在一个字段里。
若研究需要每日历史可得性,应另外取得可靠发布时间或处理时间,定义决策截止。该面板不会从仅日期申报自动生成完整PIT财务库,报告期末也不能当知晓日。Decimal官方参考支持算术和缩放,不验证两个累计事实是否会计可比。并购、终止经营和重述范围仍需核对。
抽查一份真实原申报
Microsoft截至2024年12月31日的原始10-Q,印刷页3收入表列三个月总收入69,632、六个月135,217,单位百万USD。这里已实际读取发行人托管申报的原表头与数字,不把搜索摘要当全文核验。
135,217不能当该单季收入。半年减列明季度得到前一三个月部分65,585,是独立于合成AAA的1月财年日历的期间检查。示例文件记录冻结数值及差额,不在运行时请求接口;真实面板扩展还应抽核其他概念与异常期间。
作者另外只读取得SEC Microsoft收入概念响应,确认原accession为0000950170-25-010491、申报日2025年1月29日。USD事实分别从2024年10月1日和7月1日起,到同年12月31日止,值为69,632,000,000与135,217,000,000,除一百万与原表一致。这个有界核验不代表已逐季验证全历史或全部标签。
缺累计边界时保留空格
合成BBB只有第一季50和九个月累计180,缺半年边界。第三季保持不可用,因为180减50覆盖六个月,不是第三季。脚本不平均分成两季,也不补一个合理增长数字。未来取得半年记录后再解除依赖,原缺口记录留作修复前状态。
缺边界与EUR行不同,后者有数值但单位不符合;也与修订不同,修订是新证据替代选定版本而旧记录仍在。三种原因分别命名,后续才能知道应补申报、查单位还是重新选择来源。一个泛化不可用标签无法指导面板修复。
交付概念合同、财务区间、原事实档案、版本选择、季度面板及未统一记录。每格对应直接期间或合法累计差分;修订后重开受影响季度和依赖派生格。对账单季合计与全年只适用于覆盖完整且口径一致的同一版本,不能用不匹配年度总数强制平衡。
结果是一份可计算、可追溯的季度数据集,不只是保留表头,也不承诺SEC全部历史覆盖。原期间、单位和来源版本始终随值保留,下一位研究者才能继续做连接、估值或更新,而不必重新猜每个季度数字从哪里来。
发布单元格前核重叠披露
面板旁保留期间对账表,列直接单季、能取得的两个累计输入及差额。一致是有用算术检查,不一致则定位版本、范围或提取问题,单元格接受前解决。不能把直接值永远视为正确,也不能把累计差永远视为正确;两条路径都要连接原申报,差异本身是研究线索。
完整例额外注入较晚半年累计261,而直接第二季仍160、第一季仍100,差分变161,执行抛direct_ytd_conflict,不按先遇到哪个就发布哪个。原成功面板独立保留。这个反例实际阻断冲突计算,不只是正文提醒以后抽查。若真实来源重述范围不同,应找相容版本再重算,不强制调整其中一个数凑平。
版本选择先对合格记录分组,找最新申报日,再核同日一致。同日相同值可按确定accession选择展示出处,原事实仍全部归档,避免重复披露让行序影响来源。历史截止时在截止内重做选择,不能复用今日最新值后只改标签。修订与原值的可见关系,是面板后续可更新的基础。
季度数加总与年度值的核对也需同公司、同概念、同单位、同范围和相容版本。若缺一季,合计不足不证明业务季节性异常;若累计重复相加,合计过高也不是真实增长。对账错误先回到期间映射,不能直接让模型写经营解释。
发布报告时分别写取得多少原事实、接受多少期间、生成多少季度格和仍缺多少格。一个季度可能依赖两条累计来源,多条重复事实也可能只贡献一个格,数字分母不能互换。这样批量面板大小不再掩盖实际覆盖和转换完成度。
单位符合也不等于数值有效。版本选择和累计相减前,脚本将事实值解析为Decimal并检查有限性,NaN与正负无穷以nonfinite_fact_value及来源accession阻断,下载自检覆盖三种输入。这属于来源输入错误,不是可以填补的缺季度,也不是合法无限收入;有限零值、负值与非有限数保持不同含义,不能靠比较或缩放把它们混为一类。
常见问题
四条累计披露能相加成全年吗?
不能,它们互相重叠;应转成不重叠单季或用对应全年期间。
申报日期足够做盘中历史连接吗?
不够,它标识日期版本;可靠可得时间和决策政策需另行取得。