问题描述
解决方案
在聚宽(JoinQuant)平台中,查询宏观经济数据主要使用 macro.run_query() 函数,配合 query() 对象来实现。宏观数据存储在 macro 库下的不同表中。
要获取过去十年的 GDP 和 CPI 数据,你需要访问对应的宏观数据表:
- GDP 数据:通常存储在
macro.MAC_AREA_GDP_YEAR(年度国内生产总值)或macro.MAC_AREA_GDP_QUARTER(季度国内生产总值)表中。 - 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())
代码说明:
from jqdata import *: 必须导入此库才能使用macro和query对象。macro.run_query(q): 这是执行查询的核心函数,它接受一个查询对象q并返回一个 Pandas DataFrame。query(...): 用于指定要查询的表和字段。macro.MAC_AREA_GDP_YEAR: 年度GDP表。macro.MAC_CPI_MONTH: 月度CPI表。
.filter(...): 用于过滤数据。- 我们使用
stat_year或stat_month来筛选时间范围。 - 使用
area_name == '全国'来获取全国汇总数据(表中也包含各省市的数据)。
- 我们使用
.order_by(...): 用于对结果进行排序,这里按时间倒序排列。
注意事项:
- 数据字典:宏观数据包含非常多的表(如工业、就业、货币供应量等)。具体的表名和字段名,建议在聚宽官网的“数据字典” -> “宏观经济数据”栏目中查找,以获取最准确的字段定义。
- 返回限制:
macro.run_query每次最多返回 4000条 数据。如果查询的数据量很大(例如查询所有省份10年的数据),可能需要分批查询或增加更严格的过滤条件。
Q&A
Q: 如何查看宏观数据表中具体有哪些字段?
A: 您可以在聚宽官网的“数据”页面找到“宏观经济数据”文档,里面详细列出了所有宏观表的表名(如 MAC_AREA_GDP_YEAR)及其包含的字段(如 gdp, primary_industry 等)和含义。
Q: macro.run_query 和 get_fundamentals 有什么区别?
A: get_fundamentals 专门用于查询股票的财务数据(如资产负债表、利润表、市值等),而 macro.run_query 专门用于查询宏观经济数据(如GDP、CPI、利率、货币供应量等)。两者的底层查询语法类似(都基于 SQLAlchemy),但查询的数据源不同。
Q: 查询到的数据是实时更新的吗?
A: 宏观数据通常由国家统计局等机构发布,聚宽会在数据发布后进行录入。由于宏观数据本身具有滞后性(例如GDP通常在季度结束后半个月到一个月公布),因此查询到的数据是基于官方最新披露的数据。