R सांख्यिकीय विश्लेषण और वित्तीय मॉडलिंग के लिए सबसे शक्तिशाली भाषाओं में से एक है और इसमें समय-श्रृंखला डेटा के साथ काम करने के लिए एक परिपक्व पारिस्थितिकी तंत्र है। यह गाइड आपको आधुनिक का उपयोग करके, आर में एफएक्समैक्रोडाटा संकेतक श्रृंखलाओं को लाने, साफ करने और विश्लेषण करने के बारे में सब कुछ बताता है। httr2 और ज्सोनलाइट अंत तक आपके पास एक पुनः प्रयोज्य आर वर्कफ़्लो होगा जो केंद्रीय बैंक के डेटा को खींचता है, एक साफ टिब्बल बनाता है, और प्रकाशन के लिए तैयार चार्ट सभी को 50 से कम लाइनों के कोड में उत्पन्न करता है।
आप क्या बनाएंगे
एक पूरी तरह से पुनः प्रस्तुत करने योग्य आर स्क्रिप्ट जो FXMacroData REST API के खिलाफ प्रमाणित करती है, कई मुद्राओं के लिए नीति दर और मुद्रास्फीति समय श्रृंखला प्राप्त करती है और उन्हें एक एकल टिब्बल में जोड़ती है, और उन्हें ggplot2 के साथ प्लॉट करती है जो एक क्वार्टो या आर मार्कडाउन रिपोर्ट में एम्बेड करने के लिए तैयार है।
पूर्व शर्तें
- आर ≥ 4.2 और आरस्टूडियो (या कोई आर वातावरण)
- निम्नलिखित पैकेजः
httr2,jsonlite,dplyr,tidyr,lubridate,ggplot2 - एक FXMacroData एपीआई कुंजी पर साइन अप करें /अपना नाम लिखें प्राप्त करना
यदि आपके पास पहले से आवश्यक पैकेज नहीं हैं तो एक बार स्थापित करें:
install.packages(c("httr2", "jsonlite", "dplyr", "tidyr", "lubridate", "ggplot2"))
चरण 1 एपीआई आकार को समझें
प्रत्येक 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" }
]
}
यह स्वच्छ संरचना न्यूनतम परिवर्तन के साथ एक आर डेटा फ्रेम के लिए पूरी तरह से मैप करती है।
चरण 2 अपनी एपीआई कुंजी सेट करें
स्क्रिप्ट में हार्ड-कोडिंग के बजाय अपने एपीआई कुंजी को पर्यावरण चर में स्टोर करें.
~/.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")
सुरक्षा टिप
संस्करण नियंत्रण के लिए एपीआई कुंजी को कभी भी प्रतिबद्ध न करें. .Renviron अपने .gitignore यदि आप इसे एक परियोजना निर्देशिका में रखते हैं. पुनः प्रयोज्य तैनाती के लिए, एक रहस्य प्रबंधक या आईसी पर्यावरण चर का उपयोग करें.
चरण 3 एक सामान्य फ़ॉरफ़ाइंड सहायक लिखें
के साथ httr2 आप अनुरोधों को घोषणात्मक रूप से बनाते हैं, स्पष्ट रूप से त्रुटियों को संभालते हैं, और एक एकल पाइपलाइन में 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 कई मुद्राओं और संकेतकों को प्राप्त करें
अब चार जी4 मुद्राओं के लिए नीति दरों को तीन साल की खिड़की में खींचने के लिए सहायक का उपयोग करें बहु-मुद्रा तुलना की तरह ही जो विचलन व्यापार निर्णयों को चलाता हैः
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)
आपके द्वारा प्राप्त किए जा सकने वाले संकेतक
पूर्ण सूची पर उपलब्ध है fxmacrodata.com/api-data-docsविदेशी मुद्रा विश्लेषण के लिए प्रमुख श्रृंखलाओं में शामिल हैं नीति_दर, मुद्रास्फीति, जीडीपी, बेरोजगारी, और पीएमआई. हर श्रृंखला एक ही ढूँढने पैटर्न का उपयोग करता है बस मुद्रा और संकेतक स्लग बदलें.
चरण 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 वास्तविक दर के स्प्रेड की गणना करें
वास्तविक दर का स्प्रेड नीतिगत दर घटाकर मुद्रास्फीति है सकारात्मक स्प्रेद का अर्थ है कि केंद्रीय बैंक उपभोक्ता मूल्य वृद्धि के सापेक्ष प्रतिबंधात्मक क्षेत्र में है। EURUSD वास्तविक दर अंतर EUR/USD की दिशा के सबसे मजबूत मध्यम अवधि के भविष्यवाणियों में से एक हैंः
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 रिपोर्ट के लिए निर्यात
यदि आप इस चार्ट को क्वार्टो या आर मार्कडाउन दस्तावेज़ में एम्बेड कर रहे हैं, तो पुनः प्रस्तुत करने के लिए डेटा फ्रेम को सीएसवी में और इनलाइन रेंडरिंग के लिए ग्राफ को उच्च रिज़ॉल्यूशन पीएनजी में सहेजेंः
readr::write_csv(spread_data, "macro_spread_data.csv")
ggsave(
filename = "policy_rates.png",
width = 10,
height = 5.6,
dpi = 150
)
इंटरैक्टिव चमकदार डैशबोर्ड के लिए, एक ही टिब्बल सीधे में फ़ीड करता है plotly::ggplotly() शून्य घर्षण इंटरैक्टिविटी के लिए।
चरण 9 एक अनुसूचित स्क्रिप्ट के साथ स्वचालित करें
अपने विश्लेषण को मैन्युअल री-रन के बिना चालू रखने के लिए, एक स्टैंडअलोन आर स्क्रिप्ट में फ़ेच लॉजिक को लपेटें और इसे cronR (Linux/macOS) या विंडोज कार्य शेड्यूलरः
# 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.")
इसे जोड़ें रिलीज कैलेंडर अंत बिंदु केवल उन दिनों में ताज़ा करने के लिए जब उच्च प्रभाव वाले डेटा की उम्मीद की जाती है, शांत दिनों में अनावश्यक एपीआई कॉल को बचाने के लिए।
पूर्ण कार्य उदाहरण
उपरोक्त सभी स्निपेट्स एक एकल ~60-लाइन स्क्रिप्ट में संयुक्त हैं। सेट FXMD_API_KEY अपने में .Renviron, फ़ाइल चलाएँ, और आपके पास आर में मॉडलिंग के लिए तैयार एक पूरी तरह से ताज़ा मैक्रो डेटासेट है।
सारांश
आपने सीखा है कि कैसे:
- एक पर्यावरण चर का उपयोग करके FXMacroData के साथ सुरक्षित रूप से प्रमाणीकरण करें
- पुनः प्रयोज्य बनाओ
fetch_indicator()सहायक के साथ httr2 और ज्सोनलाइट - के साथ बहु मुद्रा सूचक श्रृंखला खींचें और ढेर करें
purrr::map_dfr() - पुनः आकार, आगे भरने, और के साथ व्युत्पन्न प्रसार की गणना डप्लियर और तड़का
- प्रकाशन के लिए तैयार चरण चार्ट तैयार करें ggplot2
- एक अनुसूचित आर स्क्रिप्ट के साथ दैनिक ताज़ा स्वचालित करें
अगले कदम के रूप में, जीडीपी, एमपीआई, और व्यापार संतुलन सभी जी10 मुद्राओं में एक पूर्ण मैक्रो स्कोरकार्ड बनाने के लिए एंडपॉइंट्स। एक ही फ़ेच हेल्पर और ggplot2 वर्कफ़्लो अपरिवर्तित लागू होता है केवल संकेतक स्लग को बदलने की आवश्यकता होती है।