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 每年都变,所以不能硬编码:
- 统计数据索引 →
<YYYY>年统计数据→ 该年 section - 该年 section →
社会融资规模→ 子页 - 子页 →
社会融资规模增量统计表附近的 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 时跳过;缺省视为开启(它是该指标的主源,不是补充源)。