Запустите большой фрейм данных BLS API с результатами на лимит запросов и сохраните его в R - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь получить большой объем данных (~ 500K идентификаторов отдельных серий) с помощью API BLS и сохранить вывод в виде фрейма данных.

Я столкнулся с двумя проблемами:

  1. BLS API допускает только 50 результатов / запрос и 2,5 тыс. Запросов в день
  2. Сохранение вывода в виде скомпилированного фрейма данных

Я создал фрейм данных только с однимстолбец «Идентификатор серии», в котором содержится информация, необходимая API-интерфейсу BLS для возврата данных по этому конкретному идентификатору.Чтобы обойти ограничение результатов / запросов, я попытался разделить фрейм данных всех идентификаторов серии 500K на группы по 250 (чтобы не превышать лимит запросов в день) и использовать функцию для запуска кода bls_api через каждую группу в отдельности.Я верю, что это могло сработать, но я не могу увидеть результат.Чтобы попытаться сохранить выходные данные в фрейме данных, я создал пустой фрейм данных и попытался связать выходные данные функции BLS с пустым фреймом данных.

Создание пустого кадра данных для хранения выходных данных BLS в

output <- data.frame();

Запуск кода API BLS на сегментах из 250 строк идентификаторов серий

unlist(lapply(split(df$`Series ID`, rep(1:250)),
function(Data)
{bls_data <- bls_api(Data,startyear=2016, endyear= 2019, Sys.getenv("BLS_KEY"));
output <- rbind(output,bls_data)}))

В то время как я вижу вывод BLS_API (ie. "REQUEST_SUCCEEDED") в консоли, вывод не сохраняется как «выходные данные» информационного кадра (информационный кадр все еще пуст).

Я новичок в функциях, поэтому любые советыценный!

1 Ответ

0 голосов
/ 27 сентября 2019

Вот что мне удалось выяснить.Не самое элегантное решение, но оно выполнено!

Определите количество нужных строк на группу

nSegments <- 250

Разделите идентификаторы серии на сегменты на основе количества строк, определенного выше

series_ids_split <- split(df, 
(seq(nrow(df))-1) %/% nSegments)

Функция запуска для идентификаторов серий с определенным выводом данных

total_output <- lapply(eries_ids_split, function(x){
x <- bls_api(x,startyear = 2018, endyear = 2019, Sys.getenv("BLS_KEY"))
return(x)
})

Объединение списка кадров данных в кадр выходных данных output_df <- do.call(rbind,total_output)

...