使用 imfr 查询 IMF API - 错误无结果/不接受过滤器

Dat*_*kel 5 api r economics httr

我目前正在尝试从国际货币基金组织的贸易统计方向下载特定系列,以计算国家之间的贸易量。有一个 r-packageimfr在这方面做得非常出色。然而,当我选择特定的一组时,我遇到了问题。

\n

这段代码工作得很好,并为我提供了我感兴趣的五个国家的完整数据系列:

\n
library(imfr)\n\n# get the list of imf datasets \nimf_ids()\n\n# I am interested in direction of trade "DOT", so check the list of codes that are in the datastructure\nimf_codelist(database_id = "DOT")\n\n# I want the export and import data between countries FOB so "TXG_FOB_USD" and "TMG_FOB_USD"\nimf_codes("CL_INDICATOR_DOT")\n\n# works nicely for exports:\ndata_list_exports <- imf_data(database_id = "DOT", indicator = c("TXG_FOB_USD"), \n                      country = c("US","JP","KR"), \n                      start = "1995",\n                      return_raw = TRUE, \n                      freq = "A")\n\n# however the same code does not work for imports\ndata_list_imports <- imf_data(database_id = "DOT", indicator = c("TMG_FOB_USD"), \n                                                  country = c("US","JP","KR"), \n                                                  start = "1995",\n                                                  return_raw = TRUE, \n                                                  freq = "A")\n
Run Code Online (Sandbox Code Playgroud)\n

这将返回一个空系列,我不明白为什么。所以我想,也许美国不在数据集中(尽管不太可能)

\n
library(httr)\nlibrary(jsonlite) \n# look at the API endpoint, that provides us with the data structure behind a dataset\nresult <- httr::GET("http://dataservices.imf.org/REST/SDMX_JSON.svc/DataStructure/DTO") %>% httr::content(as = "parsed") \n\nstructure_url <- "http://dataservices.imf.org/REST/SDMX_JSON.svc/DataStructure/DOT"\n\nraw_data <- jsonlite::fromJSON(structure_url )\ntest <- raw_data$Structure$CodeLists\n
Run Code Online (Sandbox Code Playgroud)\n

然而,结果表明,数据中确实有美国。那么,如果我不\xc2\xb4t 指定一个国家/地区会怎么样?结果最终确实下载了数据,但由于速率限制,只下载了前60个国家。当对 httr::GET 执行相同操作时,我直接达到速率限制并返回错误。

\n
data_list_imports <- imf_data(database_id = "DOT", indicator = c("TMG_FOB_USD"), \n                                                  start = "1995",\n                                                  return_raw = TRUE, \n                                                  freq = "A")\n
Run Code Online (Sandbox Code Playgroud)\n

有人知道我做错了什么吗?我真的很茫然,只是希望这是某个地方的拼写错误......

\n

谢谢,祝一切顺利!

\n

Dat*_*kel 2

这样回答了这个问题:

github 上的 cjyetman 给了我以下提示:

您可以使用 print_url = TRUE 参数来查看实际的 API 调用。

和...

imf_data(database_id = "DOT", indicator = c("TMG_FOB_USD"), 
         country = c("US","JP","KR"), 
         start = "1995",
         return_raw = TRUE, 
         freq = "A", 
         print_url = TRUE) 
Run Code Online (Sandbox Code Playgroud)

你得到... http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/DOT/.US+JP+KR.TMG_FOB_USD?startPeriod=1995&endPeriod=2021

它不返回任何数据。

但是,如果您将“AU”作为国家/地区添加到该列表中,您确实可以通过以下方式获取数据... http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/DOT/.AU+US+JP+KR .TMG_FOB_USD?startPeriod=1995&endPeriod=2021

所以我猜想要么他们的 API 目前有问题,要么他们实际上没有专门针对具有该频率的国家/地区的该指标的数据,等等。

这确实有效,并且明显表明 API 中确实存在“缺失数据”,或者我只是在寻找数据,而实际上根本没有数据。由于最初的目的是查看贸易量,我后来发现,通常使用进口价值,即CIF价值而不是FOB。因此,API 调用的正确指示符如下:

library(imfr)
data_list_imports <- imf_data(database_id = "DOT", indicator = c("TMG_CIF_USD"), 
                                                  country = c("US","JP","KR"), 
                                                  start = "1995",
                                                  return_raw = TRUE, 
                                                  freq = "A")
Run Code Online (Sandbox Code Playgroud)