如何使用R分析宏观数据 banner image

By Language

Quick Start Guides

如何使用R分析宏观数据

使用 httr2,jsonlite 和 ggplot2 从 API 调用到 50 行以下的代码来获取,整理和可视化 FXMacroData 指标时间序列的实用指南.

其他语言版本 English

R 是统计分析和财务建模最强大的语言之一,它具有成熟的生态系统,用于处理时间序列数据. 本指南通过您需要采集,清理和分析的一切,使用现代的 没有 现在我 完成后,您将拥有可重复使用的R工作流程, 能够提取央行数据,构建整洁的图表,

你将要建造什么

一个完全可重复的R脚本,可以对FXMacroData REST API进行验证,检索多种货币的政策利率和通货膨胀时间序列,将它们连接到单个图标中,并用gggplot2绘制它们,准备嵌入到四分之一或R Markdown报告中.

预先要求

  • R ≥ 4.2 和RStudio (或任何R环境)
  • 接下来的包装: httr2没有人知道. jsonlite没有人知道. dplyr没有人知道. tidyr没有人知道. lubridate没有人知道. ggplot2
  • 一个FXMacroData API 键 登录 订阅 为了得到一个

如果您还没有,请安装所需的包一次:

install.packages(c("httr2", "jsonlite", "dplyr", "tidyr", "lubridate", "ggplot2"))

步骤1 了解API的形状

每个FXMacroData指标终点都遵循相同的URL模式:

GET https://fxmacrodata.com/api/v1/announcements/{currency}/{indicator}?api_key=YOUR_API_KEY

响应是一个JSON对象, data 每个元素都有一个 date 并且一个 val 领域 (并可选择一个 announcement_datetime 对于发布时间的精确性) 例如,获取美国联邦储备政策利率:

curl "https://fxmacrodata.com/api/v1/announcements/usd/policy_rate?api_key=YOUR_API_KEY&start=2022-01-01"
{
  "data": [
    { "date": "2025-03-19", "val": 4.25, "announcement_datetime": "2025-03-19T18:00:00Z" },
    { "date": "2025-01-29", "val": 4.25, "announcement_datetime": "2025-01-29T19:00:00Z" },
    { "date": "2024-12-18", "val": 4.25, "announcement_datetime": "2024-12-18T19:00:00Z" }
  ]
}

这种清洁的结构与R数据框架完全相匹配,

步骤2 设置您的API键

存储您的API密钥在环境变量中,而不是硬编码它. ~/.Renviron 文件:

FXMD_API_KEY=your_actual_api_key_here

然后重新加载环境,并检索每个脚本的顶部的键:

readRenviron("~/.Renviron")
API_KEY <- Sys.getenv("FXMD_API_KEY")
if (nchar(API_KEY) == 0) stop("FXMD_API_KEY is not set in .Renviron")

安全提示

永远不要将API密钥提交到版本控制. .Renviron 为了你的 .gitignore 如果您将其存储在项目目录中,则可以使用密码管理器或CI环境变量.

步骤3 写一个通用获取辅助器

随着 没有 您可以声明式构建请求,明确处理错误,并在单个管道中解码JSON. 下面的函数将所有三个步骤包裹成一个可重复使用的辅助器:

library(httr2)
library(jsonlite)
library(dplyr)
library(lubridate)

BASE_URL <- "https://fxmacrodata.com/api/v1"

#' Fetch an indicator time series from FXMacroData
#'
#' @param currency  Three-letter currency code, e.g. "usd", "eur", "gbp"
#' @param indicator Indicator slug, e.g. "policy_rate", "inflation", "gdp"
#' @param start     Optional start date as "YYYY-MM-DD" string
#' @param end       Optional end date as "YYYY-MM-DD" string
#' @return A tibble with columns: date (Date), val (numeric), currency (chr), indicator (chr)
fetch_indicator <- function(currency, indicator, start = NULL, end = NULL) {
  req <- request(BASE_URL) |>
    req_url_path_append("announcements", currency, indicator) |>
    req_url_query(api_key = API_KEY) |>
    req_error(is_error = \(resp) resp_status(resp) >= 400)

  if (!is.null(start)) req <- req |> req_url_query(start = start)
  if (!is.null(end))   req <- req |> req_url_query(end   = end)

  resp <- req |> req_perform()
  rows <- resp |> resp_body_json(simplifyVector = TRUE)

  as_tibble(rows$data) |>
    mutate(
      date      = as_date(date),
      val       = as.numeric(val),
      currency  = toupper(currency),
      indicator = indicator
    )
}

这里主要的选择: req_error() 确保HTTP 4xx/5xx响应抛出R条件,而不是默默返回错误数据; resp_body_json(simplifyVector = TRUE) 强迫嵌套数组直接进入数据而不是列表; as_date() 通过滑液,你会得到一个适当的 Date 立即进入列.

步骤4 获取多种货币和指标

现在使用助手在三年时间内为四个G4货币拉出政策利率,

currencies <- c("usd", "eur", "gbp", "jpy")
START      <- "2022-01-01"

# Pull policy rates for all four currencies and stack into one tibble
policy_rates <- purrr::map_dfr(
  currencies,
  \(ccy) fetch_indicator(ccy, "policy_rate", start = START)
)

# Quick check
dplyr::glimpse(policy_rates)
#> Rows: ~80
#> Columns: date <date>, val <dbl>, currency <chr>, indicator <chr>

您可以轻松查找其他指标.例如,将通胀率与政策利率相连,可以计算实际利率差距,这是运输交易定位的关键驱动因素:

inflation <- purrr::map_dfr(
  currencies,
  \(ccy) fetch_indicator(ccy, "inflation", start = START)
)

# Combine into one tidy frame
macro_data <- bind_rows(policy_rates, inflation)

您可以查找的指标

完整的目录可在 它们的数据来源:汇率分析的关键系列包括: 政策_利率没有人知道. 货币膨胀没有人知道. 国内生产总值没有人知道. 失业率没有 每个系列都使用相同的获取模式,只需更改货币和指标.

步骤5 清理和重塑数据

对于大多数分析,你需要数据 宽度 格式 每个指标每货币一个列 而不是API返回的堆式格式. pivot_wider() 电话处理这个在一个步骤, fill() 转移到一个常规的月度格子中,将中央银行稀少的公告观察:

library(tidyr)

# Build a regular monthly date spine
date_spine <- tibble(date = seq.Date(as_date(START), Sys.Date(), by = "month"))

# Pivot to wide: one row per date, columns = currency_indicator
wide_data <- macro_data |>
  # Use year-month as join key so quarterly data aligns to month boundaries
  mutate(date = floor_date(date, "month")) |>
  pivot_wider(
    names_from  = c(currency, indicator),
    values_from = val,
    values_fn   = \(x) last(x)   # take latest reading within each month
  )

# Left-join onto the date spine and forward-fill sparse series
full_data <- date_spine |>
  left_join(wide_data, by = "date") |>
  fill(everything(), .direction = "down")

head(full_data)

步骤6 计算实际利率差距

实际利率差距是政策利率减去通货膨胀率 正差距意味着央行与消费者价格增长相比处于限制区间.

spread_data <- full_data |>
  mutate(
    real_rate_usd = USD_policy_rate - USD_inflation,
    real_rate_eur = EUR_policy_rate - EUR_inflation,
    real_rate_gbp = GBP_policy_rate - GBP_inflation,
    real_rate_jpy = JPY_policy_rate - JPY_inflation,
    # EUR minus USD spread: positive = EUR relatively less restrictive
    eur_usd_spread = real_rate_eur - real_rate_usd
  )

步骤7 通过ggplot2可视化

随着整齐的图形准备, ggplot2多行图需要几行. colour 审美性:

library(ggplot2)

policy_rates |>
  ggplot(aes(x = date, y = val, colour = currency)) +
  geom_step(linewidth = 0.9) +
  scale_colour_manual(
    values = c(USD = "#2563eb", EUR = "#16a34a", GBP = "#7c3aed", JPY = "#dc2626")
  ) +
  scale_y_continuous(labels = scales::label_percent(scale = 1)) +
  labs(
    title   = "G4 Central Bank Policy Rates",
    x       = NULL,
    y       = "Policy rate (%)",
    colour  = "Currency",
    caption = "Source: FXMacroData"
  ) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "bottom")

使用 geom_step() 没有 geom_line() 对于政策利率系列, 中央银行决定是离散的阶段变化, 步骤图正确地表示了这一点.

步骤8 报告的出口

如果您将此图嵌入到 Quarto 或 R Markdown 文档中,请将数据保存到 CSV 格式以可重复性,并将图画保存到高分辨率 PNG 格局以进行线性染:

readr::write_csv(spread_data, "macro_spread_data.csv")

ggsave(
  filename = "policy_rates.png",
  width    = 10,
  height   = 5.6,
  dpi      = 150
)

对于互动的闪亮仪表板,同样的子直接输入 plotly::ggplotly() 对于零摩擦互动性

步骤9 通过计划脚本自动化

为了保持您的分析没有手动重启, 包裹取取逻辑在一个独立的R脚本和计划它 cronR (Linux/macOS) 或Windows任务调度器:

# file: refresh_macro.R — run daily at 08:00 UTC
readRenviron("~/.Renviron")
source("fetch_helpers.R")

macro_data <- purrr::map_dfr(
  tidyr::crossing(
    currency  = c("usd", "eur", "gbp", "jpy"),
    indicator = c("policy_rate", "inflation", "unemployment")
  ),
  \(row) fetch_indicator(row$currency, row$indicator, start = "2020-01-01")
)

readr::write_csv(macro_data, paste0("data/macro_", Sys.Date(), ".csv"))
message("Refresh complete: ", nrow(macro_data), " observations written.")

结合这个和 发布日历终点 只有在预计有高影响力数据的日子才会触发更新,在安静的日子里避免不必要的API调用.

完整的工作示例

设置一个60行脚本. FXMD_API_KEY 在你的 .Renviron运行文件,您就有了一个完全可刷新的宏观数据集,

总结

你已经学会了:

  • 使用环境变量安全验证FXMacroData
  • 建造一个可重复使用的 fetch_indicator() 帮助与 没有 现在我
  • 拉和堆叠多货币指标系列 purrr::map_dfr()
  • 重新塑造,前进填充,并计算与 没有 现在我 时间
  • 制作准备出版的步骤图 图片中的
  • 通过计划的R脚本自动更新每日

作为下一步,探索 国内生产总值没有人知道. 美国没有 贸易平衡 总结结果,以建立一个更全面的宏观分数表,跨越所有G10货币.相同的gethelper和ggplot2工作流程不变只需要改变指标.

AI Answer-Ready

Key Facts

Page
How To Macro Data R Analysis
Section
Articles
Canonical URL
https://fxmacrodata.com/articles/how-to-macro-data-r-analysis
Source
FXMacroData editorial and official publisher references
Last Updated
2026-04-22 12:36 UTC

Provenance And Trust

Cite the canonical URL and source field above. Where available, this page maps to official publisher releases and timestamped updates.

Quick Q&A

What is this page about? This page explains How To Macro Data R Analysis with directly usable context for trading, research, and API workflows.

What source should be cited? Use the canonical URL and the listed source field; cite official publisher references when available.

How fresh is this content? The last updated value above reflects the page metadata or latest available data timestamp.

Can this be used in AI assistants? Yes. This section is intentionally structured for retrieval and citation in chat assistants.

Prompt Packs

Use these in ChatGPT, Claude, Gemini, Mistral, Perplexity, or Grok for consistent source-aware outputs.

Blogroll