Отримати курс валют за відповідний період за допомогою api Національного банку:
# можна попробувати "USD", "EUR", "RUB"
get_money_price <- function(date_start, date_end, money_name = "USD") {
library(lubridate)
library(jsonlite)
library(dplyr)
# послідовність дат
period_value <- seq(lubridate::ymd(date_start), lubridate::ymd(date_end), "1 day")
# послідовність дат в текстовому форматі РРРРММДД
period_value_str <- paste0(
lubridate::year(period_value),
ifelse(lubridate::month(period_value) %in% 1:9, 0, ""),
lubridate::month(period_value),
ifelse(lubridate::day(period_value) %in% 1:9, 0, ""),
lubridate::day(period_value)
)
# послідовність посилань на кожну дату
api_value_str <- paste0(
"https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?valcode=",
money_name,
"&date=",
period_value_str,
"&json"
)
# запускаємо посилання
api_value_df <- purrr::map_df(
.x = api_value_str,
.f = ~jsonlite::fromJSON(txt = .x)
) %>%
dplyr::as_data_frame()
return(api_value_df)
}
Запускаємо функцію:
ss <- get_money_price(
date_start = "2017-06-01",
date_end = "2017-10-01",
money_name = "USD"
)
ss
## # A tibble: 123 x 5
## r030 txt rate cc exchangedate
## <int> <chr> <dbl> <chr> <chr>
## 1 840 Долар США 26.31033 USD 01.06.2017
## 2 840 Долар США 26.27095 USD 02.06.2017
## 3 840 Долар США 26.27095 USD 03.06.2017
## 4 840 Долар США 26.27095 USD 04.06.2017
## 5 840 Долар США 26.27095 USD 05.06.2017
## 6 840 Долар США 26.28094 USD 06.06.2017
## 7 840 Долар США 26.24658 USD 07.06.2017
## 8 840 Долар США 26.20541 USD 08.06.2017
## 9 840 Долар США 26.14921 USD 09.06.2017
## 10 840 Долар США 26.14921 USD 10.06.2017
## # ... with 113 more rows
ss %>%
dplyr::mutate(exchangedate = lubridate::dmy(exchangedate)) %>%
plotly::plot_ly() %>%
plotly::add_lines(x = ~exchangedate, y = ~rate)