🚀 AI 一键生成 joinquant 策略代码

JoinQuant 平台如何获取 GDP、CPI 等宏观经济数据?

joinquant | 发布时间: 2025/12/1
以下内容由 EasyQuant 生成。

问题描述

怎样查询历史的宏观经济数据?我需要获取过去十年的 GDP 和 CPI 数据

解决方案

在聚宽(JoinQuant)平台中,查询宏观经济数据主要使用 macro.run_query() 函数,配合 query() 对象来实现。宏观数据存储在 macro 库下的不同表中。

要获取过去十年的 GDP 和 CPI 数据,你需要访问对应的宏观数据表:

  1. GDP 数据:通常存储在 macro.MAC_AREA_GDP_YEAR(年度国内生产总值)或 macro.MAC_AREA_GDP_QUARTER(季度国内生产总值)表中。
  2. CPI 数据:通常存储在 macro.MAC_CPI_MONTH(居民消费价格指数)表中。

以下是获取这两个指标过去十年数据的完整代码示例:

# -*- coding: utf-8 -*-
from jqdata import *
import datetime

# 获取当前年份,用于计算过去10年
current_year = datetime.datetime.now().year
start_year = str(current_year - 10)
start_date = str(current_year - 10) + '-01-01'

# ==========================================
# 1. 查询过去10年的年度 GDP 数据 (全国)
# ==========================================
# 表名: macro.MAC_AREA_GDP_YEAR
# 字段: stat_year(统计年份), area_name(地区名称), gdp(地区生产总值)
q_gdp = query(
    macro.MAC_AREA_GDP_YEAR.stat_year,
    macro.MAC_AREA_GDP_YEAR.area_name,
    macro.MAC_AREA_GDP_YEAR.gdp
).filter(
    macro.MAC_AREA_GDP_YEAR.stat_year >= start_year,
    macro.MAC_AREA_GDP_YEAR.area_name == '全国'  # 筛选全国数据,如需各省数据可去掉此行
).order_by(
    macro.MAC_AREA_GDP_YEAR.stat_year.desc()
)

df_gdp = macro.run_query(q_gdp)
print("=== 过去10年 GDP 数据 (部分) ===")
print(df_gdp.head())

# ==========================================
# 2. 查询过去10年的月度 CPI 数据 (全国)
# ==========================================
# 表名: macro.MAC_CPI_MONTH
# 字段: stat_month(统计月份), area_name(地区名称), cpi(居民消费价格指数)
# 注意:CPI通常有多个细分指标(如食品、非食品等),这里以"全国_当月"为例
q_cpi = query(
    macro.MAC_CPI_MONTH.stat_month,
    macro.MAC_CPI_MONTH.area_name,
    macro.MAC_CPI_MONTH.cpi
).filter(
    macro.MAC_CPI_MONTH.stat_month >= start_date,
    macro.MAC_CPI_MONTH.area_name == '全国'
).order_by(
    macro.MAC_CPI_MONTH.stat_month.desc()
)

df_cpi = macro.run_query(q_cpi)
print("\n=== 过去10年 CPI 数据 (部分) ===")
print(df_cpi.head())

代码说明:

  1. from jqdata import *: 必须导入此库才能使用 macroquery 对象。
  2. macro.run_query(q): 这是执行查询的核心函数,它接受一个查询对象 q 并返回一个 Pandas DataFrame。
  3. query(...): 用于指定要查询的表和字段。
    • macro.MAC_AREA_GDP_YEAR: 年度GDP表。
    • macro.MAC_CPI_MONTH: 月度CPI表。
  4. .filter(...): 用于过滤数据。
    • 我们使用 stat_yearstat_month 来筛选时间范围。
    • 使用 area_name == '全国' 来获取全国汇总数据(表中也包含各省市的数据)。
  5. .order_by(...): 用于对结果进行排序,这里按时间倒序排列。

注意事项:

  • 数据字典:宏观数据包含非常多的表(如工业、就业、货币供应量等)。具体的表名和字段名,建议在聚宽官网的“数据字典” -> “宏观经济数据”栏目中查找,以获取最准确的字段定义。
  • 返回限制macro.run_query 每次最多返回 4000条 数据。如果查询的数据量很大(例如查询所有省份10年的数据),可能需要分批查询或增加更严格的过滤条件。

Q&A

Q: 如何查看宏观数据表中具体有哪些字段?
A: 您可以在聚宽官网的“数据”页面找到“宏观经济数据”文档,里面详细列出了所有宏观表的表名(如 MAC_AREA_GDP_YEAR)及其包含的字段(如 gdp, primary_industry 等)和含义。

Q: macro.run_queryget_fundamentals 有什么区别?
A: get_fundamentals 专门用于查询股票的财务数据(如资产负债表、利润表、市值等),而 macro.run_query 专门用于查询宏观经济数据(如GDP、CPI、利率、货币供应量等)。两者的底层查询语法类似(都基于 SQLAlchemy),但查询的数据源不同。

Q: 查询到的数据是实时更新的吗?
A: 宏观数据通常由国家统计局等机构发布,聚宽会在数据发布后进行录入。由于宏观数据本身具有滞后性(例如GDP通常在季度结束后半个月到一个月公布),因此查询到的数据是基于官方最新披露的数据。