跳转至

pboc 适配器

路径:src/cnequity/adapters/pboc/

中国人民银行 调查统计司,为 macro_indicators 提供 社会融资规模增量social_financing)。

索引页:https://www.pbc.gov.cn/diaochatongjisi/116219/116319/index.html


文件

文件 用途
social_financing.py 月度社融增量,返回 [{obs_date, value}]
__init__.py 导出

为什么直连央行而不是商务部转载

社会融资规模是央行的统计口径。此前这条序列走商务部数据中心的转载, 2026-08-01 实测发现两个问题:

月份 商务部 央行
2026-01 ~ 03 一致 一致
2026-04 6245 6238 商务部是修订前的旧值
2026-05 / 06 20293 / 33645 商务部落后两个发布周期

央行 2026 年前四月合计 154 500,与其公告的「15.45 万亿」精确吻合;商务部那份合计 154 507。所以问题不只是慢,而是它在传播一个已被修正的数值——这种源作为备源也 不安全(ADR-0003:备源不得静默写 canonical),因此直接移除,不保留 failover。

issue #10


数据形态

央行发布的是 Excel 附件,不是新闻稿正文:中英双语表头、明确标注 单位:亿元人民币、每月一行。老年份是 .xls,近年是 .xlsx,布局一致。 本项目为申万 / 国证成分表已经带了 pandas + openpyxl + xlrd,正好够用。

发现路径(三跳,全部按稳定中文标签匹配)

数字 section id 每年都变,所以不能硬编码:

  1. 统计数据索引 → <YYYY>年统计数据 → 该年 section
  2. 该年 section → 社会融资规模 → 子页
  3. 子页 → 社会融资规模增量统计表 附近的 xls/xlsx 链接

覆盖 2007 年至今;适配器默认从 2015 起取(start_year)。


两个解析陷阱

1. 同一张表里叠了第二张表。 2019 年的工作簿里,表1 …增量数据(单位:亿元) 下面还有 表2 …增量占比数据(单位:%),两张表都有月份列。按「月份形状」逐行读 会把一整列 100 混进序列。解析改为跟随每张表自己的 单位 声明,单位不是亿元就停。

2. 十月会被读成一月。 .xlsx 里月份是浮点数,2026.10 读出来是 2026.1; 按两位小数格式化才能和 2026.01 区分。老的 .xls 里是字符串,没有这个问题。


跨年份的口径优先级

工作簿之间有重叠:2019 年那份按「完善后」口径重述了 2017–2019 (2017-01 = 37720),而 2017 年那份还是原口径的 36970.49。

适配器按年份倒序抓取、先到者胜,所以更晚发布的口径覆盖更早的。 这个顺序是有意义的,不是随手写的。


行为

  • 取全量已发布序列(2015-01 至今,138 个月),按 obs_date <= trade_date 过滤
  • 观测日期落在月末,与其他月度指标一致
  • 未发布的月份在表里是空行,跳过而不是写 0
  • 低层适配器默认允许单个年份失败并返回其余结果,便于诊断;宏观主写入以 strict 模式运行,任一已发现年份失败都会阻止本次写入,避免带断档推进水位
  • 用 curl_cffi Chrome 伪装:附件路径在裸 httpx 握手下会被 WAF 拦

配置

[sources.pboc]
enabled = true
min_interval_seconds = 1.0

enabled = false 时跳过;缺省视为开启(它是该指标的主源,不是补充源)。


相关文档