首页
/ FinceptTerminal 宏观经济数据源完全指南:FRED、World Bank、IMF 与 OECD 等 11 大机构数据接入实战

FinceptTerminal 宏观经济数据源完全指南:FRED、World Bank、IMF 与 OECD 等 11 大机构数据接入实战

2026-09-09 18:57:56作者:侯霆垣

本文以 fincept-qt/scripts/ECONOMIC_DATA_SOURCES.md 为骨架,系统讲解 FinceptTerminal 内置的 11 个国际机构经济数据源——从数据源选型、API Key 配置、Python 函数调用到命令行抓取,并结合 fincept-qt/scripts/ 下的真实源码(fred_data.pyworldbank_data.pyimf_data.pyoecd_data.py 等)深入解析各数据源的底层实现、参数语义与错误处理机制。读完本文,你将能够独立配置密钥、按需拉取 GDP、通胀、失业率、贸易与货币政策数据,并理解这些脚本如何以 JSON 形式为 FinceptTerminal 的 Qt/C++ 前端(如 FredPanel)提供数据。

概述:一套脚本覆盖全球宏观经济数据

FinceptTerminal 在 fincept-qt/scripts/ 目录下维护了一套面向国际金融机构与央行的数据抓取脚本。这些脚本统一遵循"Python 抓取 + JSON 输出 + Qt/C++ 消费"的架构:每个脚本既可被 Python 代码直接 import 调用,也可作为命令行工具运行并以 json.dumps 输出结构化结果,方便 C++ 侧通过 PythonRunner 拉起子进程解析。

全部 11 个数据源均提供宏观经济指标、贸易统计与政策数据的免费访问,其中 8 个源完全无需 API Key。脚本内部大量实现了连接池复用并发抓取24 小时缓存分级错误处理(401/403 密钥无效、429 限流、超时、JSON 解析失败等),确保数据面板在实际使用中的健壮性。

数据源总览:11 个国际机构一表尽览

以下表格完整列出了文档登记的全部数据源,以及各脚本的入口文件与鉴权要求:

机构 脚本文件 API Key 数据覆盖
FRED(圣路易斯联储) fred_data.py 🔑 必需 美国联邦储备经济数据,80 万+ 条时间序列
World Bank(世界银行) worldbank_data.py ❌ 无需 全球发展指标,200+ 国家
IMF(国际货币基金组织) imf_data.py ❌ 无需 国际金融、GDP、通胀、国际收支
OECD(经合组织) oecd_data.py ❌ 无需 发达经济体,38 个成员国
BEA(美国经济分析局) bea_data.py 🔑 必需 美国 GDP、贸易、产业数据
BLS(美国劳工统计局) bls_data.py 🔑 可选 就业、CPI、工资数据
ECB(欧洲央行) ecb_data.py ❌ 无需 欧元区货币与利率数据
WTO(世界贸易组织) wto_data.py ❌ 无需 国际贸易统计
WITS(世界综合贸易解决方案) wits_trade_data.py ❌ 无需 关税与贸易流量
UNESCO(联合国教科文组织) unesco_data.py ❌ 无需 教育、科学、文化统计
HDX(人道主义数据交换) hdx_data.py ❌ 无需 危机与人道主义数据

注意:表中对 WTO 的标注为"无需 API Key",但其源码 wto_data.py 支持通过 subscription_key 传入 Ocp-Apim-Subscription-Key 请求头,说明该源在需要更高配额时可选用订阅密钥,默认匿名访问可用。

数据分类:五大宏观主题如何映射到数据源

文档将 11 个数据源按业务主题划分为五类,在 FinceptTerminal 的经济学界面中可按此分类组织面板与指标:

类别 数据源 示例指标
宏观经济 FRED、World Bank、IMF、OECD GDP、通胀、失业率、利率
贸易与商业 WTO、WITS、BEA 进出口、关税、贸易差额
劳动力与就业 BLS、OECD 就业率、工资、CPI、生产率
货币政策 FRED、ECB、IMF 货币供应、汇率、央行利率
发展议题 World Bank、UNESCO、HDX 贫困、教育、健康、基础设施

API Key 配置:三个密钥的环境变量方案

文档明确了三类密钥的配置方式,全部通过环境变量注入,脚本启动时通过 os.environ.get(...) 读取,不落盘、不硬编码,便于生产环境安全托管:

# 必需(Required):FRED 数据访问的前提
export FRED_API_KEY="your_key_here"

# 必需(Required):BEA 数据访问的前提
export BEA_API_KEY="your_key_here"

# 可选(Optional):提升 BLS 请求频率上限
export BLS_API_KEY="your_key_here"

结合源码,三个密钥的影响面各有不同:

  • FRED_API_KEYfred_data.pymake_fred_request 中首先检查该变量,若为空直接返回 {"error": "FRED API key not configured. Set FRED_API_KEY environment variable.", "error_code": "MISSING_API_KEY"};若服务端返回 401/403,则判定为 INVALID_API_KEY。Qt 前端 FredPanel.cpp 也会据此在界面上提示"Set FRED_API_KEY environment variable",形成"脚本报错 → 界面提示"的闭环。
  • BEA_API_KEYbea_data.pyBEAWrapper.__init__ 通过 api_key or os.environ.get('BEA_API_KEY', '') 读取,随后在每次请求中作为 UserID 参数与 methodresultformat=JSON 一并提交。
  • BLS_API_KEYbls_data.py 将其作为可选增强,未配置时匿名访问仍有可用配额,配置后可提高每日请求次数上限。

使用示例:四种核心数据源的 Python 调用

文档给出了四种代表性调用。结合源码中的真实函数签名,这些示例可完整展开如下:

# FRED —— 美国经济数据(需已配置 FRED_API_KEY)
from fred_data import get_series
gdp = get_series('GDP', observation_start='2020-01-01')
# 实际签名:get_series(series_id, start_date, end_date, frequency, transform)
# frequency: a/q/m/w/d(年/季/月/周/日),transform: chg/pch/log(差分/百分比/对数)
# 返回:series_id、title、units、frequency、seasonal_adjustment、observations[]

# World Bank —— 全球发展指标(无需密钥)
from worldbank_data import get_indicator
poverty = get_indicator('SI.POV.DDAY', country='all', date='2010:2020')
# 实际入口是 get_indicators(country_code, indicator, date_range, per_page)
# 常用指标常量:NY.GDP.PCAP.CD(人均GDP)、NY.GDP.MKTP.KD.ZG(GDP增速)、
# FP.CPI.TOTL.ZG(通胀)、SL.UEM.TOTL.ZS(失业率)、SP.POP.TOTL(人口)

# IMF —— 国际金融数据(无需密钥)
from imf_data import get_data
balance = get_data(database='BOP', indicator='BCA', country='USA')
# 实际入口在 IMFDataWrapper 类:get_economic_indicators()、get_direction_of_trade()
# 支持 IRFCL(国际储备)、FSI(金融稳健)、DOT(贸易方向)三大数据集

# OECD —— 发达经济体数据(无需密钥)
from oecd_data import get_dataset
unemployment = get_dataset('UNEMP', country='USA+GBR+DEU')
# 实际入口在 OECDWrapper 类:get_gdp_real()、get_consumer_price_index()、
# get_unemployment()、get_gdp_forecast()、get_interest_rates()

需要特别说明的是,文档中的函数名(get_indicatorget_dataget_dataset)在仓库中对应的是各脚本的实际实现——例如 World Bank 的公开函数为 get_indicators,IMF 与 OECD 则封装为类方法。文末的"各源源码级详解"给出了每个源的真实入口。

命令行使用:脚本即 CLI,JSON 即接口

所有脚本均支持 python xxx.py <command> <args> 形式的命令行调用,输出 indent=2 格式化的 JSON,这是 FinceptTerminal 的 C++ 侧(如 PythonRunner)拉取数据的主要方式。以下为各源的代表性命令:

# FRED:单序列 / 多序列并发 / 搜索 / 分类
python fred_data.py series GDP 2020-01-01 2024-12-31 q pch
python fred_data.py multiple GDP UNRATE CPIAUCSL 2015-01-01 2024-12-31
python fred_data.py search inflation 20
python fred_data.py categories 0
python fred_data.py category_series 10 50
python fred_data.py releases 86 10

# World Bank:国家 / 指标 / 大宗商品 / 经济快照 / 区域对比
python worldbank_data.py countries
python worldbank_data.py indicators USA NY.GDP.MKTP.KD.ZG 2015:2024
python worldbank_data.py gdp_per_capita USA,CHN,IND 20
python worldbank_data.py commodity_prices PCRUDE_BRENT 10
python worldbank_data.py economic_snapshot USA
python worldbank_data.py regional_comparison EAP NY.GDP.PCAP.CD 5

# IMF:经济指标 / 贸易方向 / 可用指标 / 综合数据
python imf_data.py economic_indicators USA irfcl_top_lines quarter
python imf_data.py direction_of_trade USA all all quarter
python imf_data.py available_indicators reserves
python imf_data.py comprehensive_economic_data USA

# OECD:实际GDP / CPI / 失业率 / 利率 / 国家清单
python oecd_data.py gdp_real united_states quarter 2015-01-01 2024-12-31
python oecd_data.py cpi united_states total monthly index
python oecd_data.py unemployment united_states quarter
python oecd_data.py interest_rates united_states monthly
python oecd_data.py country_list

# ECB / WTO / WITS / UNESCO / HDX
python ecb_data.py currency_rates
python wto_data.py timeseries_data --i TP_A_0010 --r US
python wits_trade_data.py trade-data --reporter=840 --partner=000 --year=2020
python unesco_data.py education_data
python hdx_data.py search_datasets

fred_data.py 为例,其 multiple 子命令会自动识别 YYYY-MM-DD 格式的参数位(长度 10 且含 -)来区分序列 ID 与起止日期,并通过 ThreadPoolExecutor最多 5 个并发抓取多序列(max_workers = min(5, len(series_ids))),最后按原顺序返回结果——这是文档中"Optimized with concurrent fetching"承诺的实现细节。

各数据源源码级详解

FRED(联邦储备经济数据):80 万+ 时间序列

  • 鉴权:必需 API Key,读取自环境变量 FRED_API_KEY
  • API 基础地址https://api.stlouisfed.org/fred(见 fred_data.pyFRED_API_BASE)。
  • 核心能力
    • get_series(series_id, ...):拉取序列观测值 + 元数据(标题、单位、频率、季节性调整),自动跳过值为 . 的缺失观测;
    • search_series(text, limit):按热度排序搜索序列,返回 popularity 字段便于选热门指标;
    • get_categories() / get_category_series():按分类树浏览;
    • get_release_dates():获取发布日历;
    • get_multiple_series():并发批量抓取。
  • 连接池:模块级复用 requests.Session + HTTPAdapter(pool_connections=10, pool_maxsize=10, max_retries=3),降低重复建连开销。
  • 限流与错误处理:429 时读取 Retry-After 头计算等待秒数;401/403 归类为 INVALID_API_KEY
  • 数据纵深:80 万+ 条时间序列,覆盖美国核心经济指标,历史可回溯至 1776 年,支持实时更新。

World Bank(世界银行):全球发展指标

  • 鉴权:无需密钥,公开 API(worldbank_data.py)。
  • API 基础地址https://api.worldbank.org/v2,默认请求 JSON 格式。
  • 核心能力
    • get_indicators():按国家 + 指标 + 年份范围抓取,per_page 默认 1000;
    • get_gdp_per_capita():人均 GDP 快捷方法;
    • get_commodity_prices()大宗商品 Pink Sheet 数据(Brent/WTI/Dubai 原油、铜、黄金、咖啡、小麦、玉米、大米等),按月度频率返回;
    • get_economic_snapshot():一次返回某国 GDP 增速、通胀、失业率、人口、预期寿命六项关键指标的最新值;
    • get_regional_comparison():按区域(AFREAPECALACMENASASNAC)批量对比,因 API 单请求有国家数限制,源码按 20 国一批batch_size = 20)自动分批。
  • 响应处理:World Bank API 返回数组结构(首元素为元数据),_make_request 会剥离出 datametadata(page/pages/per_page/total),并统一捕获 HTTP、超时、连接、JSON 解码异常。

IMF(国际货币基金组织):国际金融与贸易

  • 鉴权:无需密钥,封装为 IMFDataWrapper 类(imf_data.py)。
  • API 基础地址http://dataservices.imf.org/REST/SDMX_JSON.svc/,请求头声明 User-Agent: Fincept-Terminal/1.0
  • 三大数据集
    • IRFCL(国际储备与外币流动性):内置 irfcl_top_linesreserve_assetsgold_reserves 等预设符号组合;
    • FSI(金融稳健指标):核心/潜在/鼓励集等五套预设,涵盖资本充足率(FSI_CAPR)、不良贷款(FSI_NPL)、ROA/ROE;
    • DOT(贸易方向):出口 TXG_FOB_USD、进口 TMG_CIF_USD、贸易差额 TBG_USD
  • 核心方法get_economic_indicators()get_direction_of_trade()get_available_indicators()get_comprehensive_economic_data()
  • 参数语义:频率映射 annual/quarter/monthly → A/Q/M;部门映射 government→S1311central_bank→S121monetary_authorities→S1X;内置 100+ 国名字典自动归一化为 ISO 两字母代码,支持关键词模糊匹配。
  • 容错设计:每个端点独立报错,返回统一的 IMFError 结构(endpoint/error/status_code/timestamp),"单个端点失败不影响其他端点"。

OECD(经合组织):SDMX v1/v2 双协议自动回退

  • 鉴权:无需密钥,封装为 OECDWrapper 类(oecd_data.py)。
  • API 基础地址https://sdmx.oecd.org/public/rest/(v1)与 .../v2/(v2)。
  • 核心能力get_gdp_real()get_consumer_price_index()get_gdp_forecast()get_unemployment()get_interest_rates()get_economic_summary()(组合式摘要,逐端点执行并记录 failed_endpoints)。
  • 实现亮点
    • v1/v2 自动回退:优先请求 SDMX v2 的 dataflow 结构(如 GDP 使用 OECD.SDD.NAD/DSD_NAMAIN1@DF_QNA),失败后回退 v1 端点;
    • 多格式解析:按 Accept 头协商 SDMX-JSON / SDMX-ML(XML,经 defusedxml 安全解析) / SDMX-CSV;
    • 内置映射表COUNTRY_TO_CODE_GDPCOUNTRY_TO_CODE_CPI 支持 g7g20euro_area(EA20)、nafta 等集团代码;CPI 的 EXPENDITURE_DICT 内置 25+ 支出类别(食品、住房、交通、能源等);
    • 历史兼容:为老版本 OpenSSL 提供 OP_LEGACY_SERVER_CONNECT 自定义 SSL 适配器;
    • 本地缓存:默认缓存目录 ~/.oecd_cache
    • 诚实的降级提示:当 GDP 预测端点因 API 结构变化不可用时,返回包含 suggestion 字段的错误(建议改用历史 GDP 与外部预测源),而非伪装成成功。
  • 数据纵深:38 个成员国 + 区域集团,标准化指标支持跨国对比与政策分析。

BEA(美国经济分析局):美国 GDP 与产业账目

  • 鉴权:必需 API Key(BEA_API_KEY),注册后获取。
  • API 基础地址https://apps.bea.gov/api/data/,每次请求附带 UserIDmethodresultformat=JSONGetData 类方法缺省 Year 时自动补当前年份(bea_data.py)。
  • 支持数据集(源码 docstring 完整列举)NIPA(国民收入与产品账户)、NIUnderlyingDetailFixedAssets(固定资产)、MNE(跨国企业)、GDPbyIndustry(分产业 GDP)、ITA(国际交易)、IIP(国际投资头寸)、InputOutput(投入产出表)、UnderlyingGDPbyIndustryIntlServTrade(国际服务贸易)、Regional(区域经济账户)。
  • 方法族GetDatasetListGetParameterListGetParameterValuesGetParameterValuesFilteredGetData,统一走 _make_request 并对 BEAAPI.Error 结构做显式解析。

BLS(美国劳工统计局):就业与价格

  • 鉴权:可选 API Key(BLS_API_KEY),匿名可用、配置后配额更高。
  • API 基础地址https://api.bls.gov/publicAPI/v2/timeseries/data/,另有 FTP 批量下载地址(bls_data.py)。
  • 核心能力
    • 内置 SURVEY_CATEGORIES 映射 14 类调查(cpi、pce、ppi、ip、jolts、nfp、cps、lfs、wages、ec、sla、bed、tu)及其系列前缀;
    • 内置 POPULAR_SERIES 热门序列字典(CPIAUCSLUNRATEPAYEMSCIVPARTEMRATIO 等);
    • 24 小时进程内缓存_cache_timeout = 24 * 60 * 60,相同序列请求直接命中缓存,减少配额消耗。

ECB(欧洲央行):欧元区货币数据

  • 鉴权:无需密钥(ecb_data.py)。
  • 核心能力available_categoriescurrency_rates(欧元参考汇率,解析 eurofxref-daily.xml 每日 XML)、yield_curve(AAA 评级 3 个月至 30 年期的即期/远期/平价收益率,通过 --rating--type 参数)、balance_of_payments(含 US/JP/GB/CH/CN/IN 等主要国家,按 --country--frequency 筛选)。
  • 数据纵深:欧元区货币统计、利率、汇率与银行部门数据。

WTO(世界贸易组织):多 API 贸易数据

  • 鉴权:无需密钥,可选订阅密钥(Ocp-Apim-Subscription-Key 头)(wto_data.py)。
  • 四大子 APIqrs(数量限制)、eping(SPS/TBT 通报)、timeseries/v1(贸易统计,如 TP_A_0010 指标 + 国家代码 US)、tfad(贸易便利化协定数据库)。
  • 异步实现:基于 aiohttpfetch_data 协程,统一处理 JSON/XML 响应与分页。

WITS(世界综合贸易解决方案):关税与贸易流量

  • 鉴权:无需密钥,基于 World Bank WITS 平台(wits_trade_data.py)。
  • API 基础地址https://wits.worldbank.org/API/V1
  • 核心能力indicatorstrade-datatariff-dataproduct-tariffcatalog;参数支持 --reporter/--partner(ISO 三位国家码,如 840=美国、000=世界)、--year--product(HS 编码级商品关税)。
  • 数据纵深:266 个国家/地区,商品级(HS 编码)贸易与关税/非关税措施数据。

UNESCO(联合国教科文组织):教育、科学与文化

  • 鉴权:无需密钥,UIS(UNESCO Institute for Statistics)公开 API(unesco_data.py),协议为 CC BY-SA 4.0。
  • 数据类别:教育(入学率、完成率、识字率、师资)、科技与创新(R&D 支出、研究人员、专利)、文化(遗产、文化就业)、人口与社会经济。
  • 数据纵深:200+ 国家/地区,时间序列自 1970 年代至今,10 万+ 指标,支持按性别、年龄、区域多重细分。

HDX(人道主义数据交换):危机数据

  • 鉴权:无需密钥,直接实现 CKAN API(hdx_data.py),无第三方依赖(纯 urllib)。
  • API 基础地址https://data.humdata.org/api/3,请求头 User-Agent: FinceptTerminal_GeopoliticsAnalytics/3.0
  • 核心能力action/package_search 等 CKAN 动作端点,用于搜索人道主义危机相关数据集,与 FinceptTerminal 的地缘政治分析模块联动。

技术细节与使用前提

文档对全源统一技术特征做了总结,结合源码可进一步明确各源的实现差异:

  • 协议:全部为 REST API(IMF/OECD/WTO 基于 SDMX 标准,HDX 基于 CKAN);
  • 格式:JSON 为主(FRED 显式传 file_type=json,World Bank 显式传 format=json),部分支持 CSV/XML(OECD 支持三种 SDMX 格式协商,BLS 支持 FTP 批量下载);
  • 限流:因源而异,整体宽松;FRED 429 会解析 Retry-After,BLS 建议配置 Key 提升配额,FRED 多序列并发限制为 5;
  • 历史深度:多数源提供 10 年以上历史,FRED 可回溯至 1776 年,World Bank 大宗商品按月度返回;
  • 更新频率:日度到月度不等,取决于指标类型(ECB 汇率日更,World Bank 年度指标年更)。

使用前提:上述脚本位于 fincept-qt/scripts/,需在安装依赖(requestspandasaiohttp 等,视具体脚本而定)的 Python 3 环境中运行;FRED 与 BEA 必须先在 shell 中导出对应 API Key 才能使用。在 FinceptTerminal 桌面端,这些能力已通过经济学界面集成——例如 FredPanel.cpp 直接以 fred_data.py 为脚本源,并在未配置密钥时于界面给出明确提示,构成"脚本错误码 → C++ 界面文案"的完整链路。

结语

从 80 万+ 序列的 FRED 到 10 万+ 指标的 UNESCO,FinceptTerminal 的 ECONOMIC_DATA_SOURCES 体系用 11 个统一风格的 Python 脚本,将全球最权威的国际经济组织数据接入统一的 JSON 管道。无论是通过 import 在 Python 中组合分析、通过 CLI 供 C++ 前端消费,还是借助 IMF 的综合方法、OECD 的组合摘要、World Bank 的经济快照做"一屏看一国",开发者都可以依据本文的参数语义与错误码约定,快速构建属于自己的宏观数据工作流。

(文中数据规模、国家数与指标数均引自原文档及对应脚本 docstring;函数签名、命令、错误处理与参数取值以仓库源码为准。)

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
docsdocs
暂无描述
Markdown
899
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
925
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.84 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
601
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.03 K
525
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
395