Есть ли способ не загружать весь пакет данных CKAN с помощью ckanr в R? - PullRequest
0 голосов
/ 01 января 2019

Я незнаком с CKAN, и я изо всех сил пытаюсь получить данные из API данных CKAN, загруженного в R, используя пакет ckanr из репозитория R Cran.Для сервера загрузка ограничена 100 000 записей, поэтому попытка загрузки всех 420 000 записей не вернет больше, чем первые 100 000 записей.Набор данных содержит обновленную историю выбросов CO2 от электроэнергии, потребляемой в Дании, измеренную в г / кВтч с интервалами времени 5 минут.

Используя приведенный ниже фрагмент кода, я могу загрузить 100 000 первых записей.Меня интересует интервал приблизительно в 20000 значений в конкретном диапазоне дат.Данные могут быть загружены вручную через веб-интерфейс, но, поскольку мне придется регулярно обновлять данные и вручную загружать несколько файлов CSV каждый раз, загрузка API данных будет более предпочтительной.

Любая помощь будет принята с благодарностью.

Веб-интерфейс: https://www.energidataservice.dk/dataset/co2emis/resource_extract/b5a8e0bc-44af-49d7-bb57-8f968f96932d

Доступ к API данных можно получить с помощью следующих действий.API действия CKAN.

Запрос: https://api.energidataservice.dk/datastore_search

Запрос (через SQL): https://api.energidataservice.dk/datastore_search_sqlhttps://api.energidataservice.dk/datastore_search

require(ckanr)
start_date <- min(opladning$start)
end_date <- max(opladning$slut)

ckanr_setup(url = "https://energidataservice.dk")
pkco2emis <- package_show("6e05f3b6-fcd7-4b40-8100-4416b9803881", as 
= "table")


temp <- tempfile(fileext=".csv")
download.file(pkco2emis$resources$url, temp)
co2emission <- read.csv(temp)

1 Ответ

0 голосов
/ 02 января 2019

С помощью анализа URL-запроса URL-адреса к API REST через функцию ds_search_sql из пакета ckanr я смог извлечь данные из API.

#end_date and start_date represent interval.

url_base <- 'https://api.energidataservice.dk/datastore_search_sql? 
sql='
query_co2 <- 'SELECT "Minutes5DK", "CO2Emission" from "b5a8e0bc-44af- 
49d7-bb57-8f968f96932d" WHERE "Minutes5UTC" > timestamp\''
query_date_start <- format(with_tz(start_date, "UTC"), "%Y-%m-%d 
%H:%S")
query_date_end <- format(with_tz(end_date, "UTC"), "%Y-%m-%d %H:%S")
query_co2 <- paste0(query_co2,query_date_start,
                '\' AND \"Minutes5UTC\" < timestamp\'',
                query_date_end,
                '\' AND \"PriceArea\" = \'DK1\'')




co2emission <- ds_search_sql(query_co2, 
                             url = url_base, 
                             as = "table")$records
...