fedstatAPIr представляет собой неофициальное API для загрузки данных с fedstat.ru (система ЕМИСС Росстата) с заданными фильтрами.
Пакет позволяет сэкономить ⏳ и нервы 😡 при работе с бесконечно падающим ЕМИСС через автоматическое повторение неотвеченных запросов и сохранение ранее использованных настроек фильтров.
На данный момент пакет доступен только на R, Вы можете загрузить fedstatAPIr из CRAN, используя следующую команду в R:
install.packages("fedstatAPIr")
Версия для разработки может быть загружена следующей командой:
# install.packages("devtools")
devtools::install_github("DenchPokepon/fedstatAPIr")
Загрузим данные по инфляции к предыдущему месяцу и к соотв. месяцу прошлого года за июнь 2021 года по всем товарам и услугам только по России
Возьмем номер индикатора из URL веб страницы с данными https://fedstat.ru/indicator/31074
library(fedstatAPIr)
data <- fedstat_data_load_with_filters(
indicator_id = "31074",
filters = list(
"Классификатор объектов административно-территориального деления (ОКАТО)" = "Российская Федерация",
"Виды показателя" = c(
"К соответствующему кварталу предыдущего года",
"К предыдущему месяцу"
),
"Период" = "Июнь",
"Год" = "2021",
"Виды товаров и услуг" = "*"
)
)
EI | ObsValue | PERIOD | Time | s_POK | s_grtov | s_OKATO | s_OKATO_code | s_POK_code | s_grtov_code |
---|---|---|---|---|---|---|---|---|---|
процент | 100,69 | июнь | 2021 | К предыдущему месяцу | Все товары и услуги | Российская Федерация | 643 | 44 | 1 |
процент | 100,66 | июнь | 2021 | К предыдущему месяцу | Все товары | Российская Федерация | 643 | 44 | 2 |
процент | 100,75 | июнь | 2021 | К предыдущему месяцу | Базовый индекс потребительских цен | Российская Федерация | 643 | 44 | 3 |
процент | 100,7 | июнь | 2021 | К предыдущему месяцу | Все товары (без алкогольных напитков) | Российская Федерация | 643 | 44 | 4 |
процент | 100,71 | июнь | 2021 | К предыдущему месяцу | Продовольственные товары (без алкогольных напитков) | Российская Федерация | 643 | 44 | 5 |
процент | 100,64 | июнь | 2021 | К предыдущему месяцу | Продовольственные товары | Российская Федерация | 643 | 44 | 6 |
Фильтры задаются в форме JSON:
{
"Название поля фильтра 1": ["Значение фильтра 1", "Значение фильтра 2"],
"Название поля фильтра 2": ["Значение фильтра 1", "Значение фильтра 2"],
...
}
Где Название поля фильтра 1
может быть, например Год
, а
Значение фильтра 1
для этого поля 2021
.
Поля и значения фильтров берутся прямо из названий фильтров на
fedstat.ru, в filters
они должны быть такими же. Однако разные
регистры фильтров и лишние пробелы не сломают фильтрацию.
Доступны следующие специальные значения фильтров:
- Звездочка/asterix (*) выбирает все данные по этому полю фильтра.
Можно не указывать какой-то фильтр вообще, тогда по умолчанию будет использоваться *.
Библиотека стремится поддерживать загрузку всех доступных на fedstat индикаторов, на данный момент поддерживается абсолютное большинство, но в некоторых случаях специальных индикаторов могут быть непредвиденные баги.
Внутри пакета доступна база данных всех индикаторов, по которым
представлены данные на fedstat.ru. Она содержится в переменной
fedstat_indicators_names_database
.
В последнем обновлении пакета были добавлены функции
fedstat_prepare_reference_data_for_check_data_update
и
fedstat_check_data_update
. С их помощью можно запустить робота в R,
делающего запросы к fedstat.ru и проверяющего, не появились ли данные за
новые временные промежутки. На данный момент функции экспериментальные,
так как не были протестированы на реальных данных, будем рады Вашим
отзывам.
Проверить, когда последний раз обновлялись данные на fedstat простым запросом, к сожалению, невозможно. Даты обновления живут своей жизнью и часто не соответствуют действительности. Для точной проверки нужно сравнивать прошлые и новые данные.
Ниже представлен пример использования.
fedstat_prepare_reference_data_for_check_data_update
кэширует прошлые
данные, желательно брать какую-то маленькую выборку для снижения
нагрузки на сервер. fedstat_check_data_update
по умолчанию каждые 30
минут делает запрос к fedstat с такими же основными фильтрами и сверяет
новые и старые данные, в случае обнаружения изменений возвращает TRUE.
is_updated <- fedstat_prepare_reference_data_for_check_data_update(
indicator_id = "37426",
filters = list(
"Territory" = "Российская Федерация",
"Types of goods and services" = "Сахар"
)
) %>%
fedstat_check_data_update()
if (is_updated) print("Data for the indicator 37426 has been updated!")
Функция fedstat_data_load_with_filters
является оберткой из отдельных
функций, которые отвечают за:
- Загрузку id фильтров через GET запрос (
fedstat_get_data_ids
); - Обработку специальных случаев названий фильтров
(
fedstat_get_data_ids_special_cases_handle
); - Фильтрацию данных на основе
filters
с учетом специальных значений и стандартных фильтров (fedstat_data_ids_filter
); - Отправку POST запроса с телом из фильтров
(
fedstat_post_data_ids_filtered
); - Парсинг полученного sdmx файла в таблицу
(
fedstat_parse_sdmx_to_table
).
По каждой функции доступна подробная документация, которую можно вызвать
в R через функцию help()
. Например
help("fedstat_data_load_with_filters")
или
?fedstat_data_load_with_filters
.
Загрузим те же данные, используя каждую функцию отдельно
data_ids <- fedstat_get_data_ids("31074") # Занимает много времени из-за лагов
# fedstat, для скорости лучше всего кэшировать или даже записывать в базу данных,
# более подробно по этому моменту в документации
data_ids_filtered <- data_ids %>%
fedstat_get_data_ids_special_cases_handle() %>%
fedstat_data_ids_filter(
filters = list(
"Классификатор объектов административно-территориального деления (ОКАТО)" = "Российская Федерация",
"Виды показателя" = c(
"К соответствующему кварталу предыдущего года",
"К предыдущему месяцу"
),
"Период" = "Июнь",
"Год" = "2021",
"Виды товаров и услуг" = "*"
)
)
data_sdmx_parsed <- data_ids_filtered %>%
fedstat_post_data_ids_filtered(data_format = "sdmx") %>%
fedstat_parse_sdmx_to_table()
data_xls_binary <- data_ids_filtered %>%
fedstat_post_data_ids_filtered(data_format = "excel") # также можем загружать excel
writeBin(data_xls_binary, "data.xls") # можем записать в xls файл
Вопросы можно писать на почту deniskrylovvit@gmail.com
Проект находится на ранней стадии разработки.
Буду рад Вашему вкладу в проект.