用实时官方数据制作经济学教学练习

老师或学生可以把实时官方数据变成练习题。本页演示两个练习:由政策利率和通胀计算实际利率,以及名义 GDP 增长中隐含的价格增长,并给出请求、响应和 Python 计算。

练习1:实际利率

学生由此认识到,名义利率会掩盖购买力的下降。这个练习需要同一个国家的政策利率和通胀率。下面的请求返回美国的政策利率,再下一个请求返回美国的通胀。

curl,美国政策利率
curl -s "https://api.narwhalapi.com/v1/economics/USA/central-bank/policy-rate" \
  -H "Authorization: Bearer $NARWHAL_API_KEY"
响应
{
  "country": "USA",
  "authority": "federal_reserve",
  "currency": "USD",
  "instrument": "federal_funds_target_range",
  "unit": "percent",
  "effective_on": "2026-09-17",
  "observed_on": null,
  "announced_on": null,
  "rate_type": "range",
  "lower_bound": "3.75",
  "upper_bound": "4.00"
}
curl,美国通胀
curl -s "https://api.narwhalapi.com/v1/economics/USA/inflation" \
  -H "Authorization: Bearer $NARWHAL_API_KEY"
响应
{
  "country": "USA",
  "period": "2026-09",
  "year_over_year": "3.7",
  "month_over_month": "0.6",
  "year_to_date": "4.0",
  "released_on": "2026-10-14"
}

政策利率以区间形式返回,lower_bound 为 3.75,upper_bound 为 4.00,所以课堂上的第一个问题是该用哪个数值。脚本取中点 3.875。通胀数据是 2026-09 期间的 year_over_year,为 3.7。随后是第二个问题:利率是今天设定的水平,而通胀反映的是过去十二个月,因此得到的是回溯式的实际利率。请让学生想一想,投资者真正需要知道什么。

练习2:隐藏在 GDP 中的价格增长

名义 GDP 增长是产出美元价值的变化,实际 GDP 增长则剔除了价格变动。二者之差可以告诉全班,名义增长中有多少来自价格。GDP 水平值来自 GDP 路由,实际增长率来自 GDP 增长率路由。

curl,美国 GDP 水平值(五个季度)
curl -s "https://api.narwhalapi.com/v1/economics/USA/gdp/observations?start=2025-Q3&end=2026-Q3" \
  -H "Authorization: Bearer $NARWHAL_API_KEY"
响应
{
  "annualized": true,
  "country": "USA",
  "as_of": "2026-10-29T00:00:00Z",
  "currency": "USD",
  "observations": [
    {
      "period": "2025-Q3",
      "value": "31180493000000"
    },
    {
      "period": "2025-Q4",
      "value": "31462523000000"
    },
    {
      "period": "2026-Q1",
      "value": "31906274000000"
    },
    {
      "period": "2026-Q2",
      "value": "32563030000000"
    },
    {
      "period": "2026-Q3",
      "value": "33010036000000"
    }
  ]
}
curl,实际 GDP 增长率(一个季度)
curl -s "https://api.narwhalapi.com/v1/economics/USA/gdp-growth?period=2026-Q3" \
  -H "Authorization: Bearer $NARWHAL_API_KEY"
响应
{
  "country": "USA",
  "period": "2026-Q3",
  "year_over_year": "2.1",
  "quarter_over_quarter": "0.832",
  "released_on": "2026-10-29"
}

GDP 水平值按现价计算,单位为 USD,annualized 为 true。增长率的响应是实际值,2026-Q3 的 year_over_year 为 2.1。两次调用对应同一个季度、同一个比较跨度,这一点很重要。把同比增速和环比增速混在一起,结果毫无意义,所以请让学生在相除之前先说出每个数字的跨度,并在笔记里写在结果旁边。

运行两个计算

  1. 实际利率(近似值) 用名义利率减去通胀率:3.875 减 3.7 等于 0.175 个百分点。这是学生最先接触到的简便算法。
  2. 实际利率(精确值) 用 1 加名义利率,除以 1 加通胀率,再减去 1:1.03875 除以 1.037 再减 1 等于 0.169%。两个答案在小数点后第三位出现差异,是个不错的讨论点。
  3. 名义 GDP 增长率 用 2026-Q3 的水平值除以 2025-Q3 的水平值,即 33010036000000 除以 31180493000000,再减去 1,结果为 5.87%。
  4. 隐含价格增长率 用 1 加名义增长率,除以 1 加实际增长率,即 1.0587 除以 1.021,再减去 1,结果为 3.69%。
    Python,两个练习
    import os
    import requests
    
    BASE = "https://api.narwhalapi.com"
    HEAD = {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}
    
    def get(path, **params):
        r = requests.get(BASE + path, params=params, headers=HEAD, timeout=15)
        r.raise_for_status()
        return r.json()
    
    # Exercise 1: the real policy rate
    policy = get("/v1/economics/USA/central-bank/policy-rate")
    lower, upper = float(policy["lower_bound"]), float(policy["upper_bound"])
    rate = (lower + upper) / 2
    inflation = float(get("/v1/economics/USA/inflation")["year_over_year"])
    approx = rate - inflation
    exact = ((1 + rate / 100) / (1 + inflation / 100) - 1) * 100
    print(f"policy {rate}  inflation {inflation}  approx {approx:.3f}  exact {exact:.3f}")
    
    # Exercise 2: how much of nominal GDP growth is price growth
    levels = get("/v1/economics/USA/gdp/observations", start="2025-Q3", end="2026-Q3")
    by_quarter = {o["period"]: float(o["value"]) for o in levels["observations"]}
    nominal = (by_quarter["2026-Q3"] / by_quarter["2025-Q3"] - 1) * 100
    real = float(get("/v1/economics/USA/gdp-growth", period="2026-Q3")["year_over_year"])
    prices = ((1 + nominal / 100) / (1 + real / 100) - 1) * 100
    print(f"nominal {nominal:.2f}  real {real}  implied price growth {prices:.2f}")
练习输入答案
实际利率(近似值)3.875 和 3.70.175 个百分点
实际利率(精确值)3.875 和 3.7百分之0.169
名义 GDP 增长率31180493000000 到 33010036000000百分之5.87
隐含价格增长率5.87 和 2.1百分之3.69

隐含的价格增长率与第一个练习中的通胀率 3.7 很接近。消费者价格与 GDP 内部的价格涵盖的商品篮子不同,可以请全班想一想,为什么在别的季度二者可能相差更大。

同样的数据还适合做哪些练习?

  • 通胀:在同一个响应中比较环比和同比字段,问一问央行会引用哪一个。学生可以用通胀计算器手动核对结果。
  • 收益率曲线:从收益率曲线路由取得 2 年期和 10 年期收益率并计算利差,做法与收益率曲线是否倒挂的查看方法相同。
  • GDP 增长:换一个国家重复练习 2,并先比较各国的 annualized 标志。

每个路由都会返回计算起点的数字,因此学生可以把每个练习的输入与已发布的数据逐一核对。

学生可以用自己的国家吗?

通常可以,但要先确认覆盖范围。印度尼西亚和巴西同时返回了通胀率和政策利率;墨西哥返回了通胀,政策利率则是 404,代码为 series_not_found。可以给学生一份你自己测试过的国家短名单,并让他们在笔记本中把 404 当作数据缺口来处理。

为什么有些 GDP 水平值带有 annualized 标志?

美国、日本和加拿大返回的 annualized 为 true,因此其季度水平值以年率表示。英国和德国没有返回这个标志。同一序列中两个水平值的比值不受影响,所以练习 2 可行;但两个国家的水平值,只有在标志、币种和期间一致时才可比较。

数据够新,可以用在课堂上吗?

每个响应都带有 released_on 和 period,学生可以看出一个数字有多旧。上课时请固定全班取数的日期并保存输出,因为之后再调用可能会返回更新的期间,得出不同的答案。

发布于。

后续步骤