The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
fedstatAPIr представляет собой неофициальное API для загрузки данных с fedstat.ru (система ЕМИСС Росстата) с заданными фильтрами.
Пакет позволяет сэкономить ⏳ и нервы 😡 при работе с бесконечно падающим ЕМИСС через автоматическое повторение неотвеченных запросов и сохранение ранее использованных настроек фильтров.
Проект уже существует длительное время и, по-видимому, получился довольно стабильным ⚖️ и легковесным 🪽. Если пакет оказал влияние на Вашу деятельность, просим оказать поддержку. Если будет набрана необходимая сумма, также сделаем порт на Python и API для витрины данных Росстата (showdata). Спасибо за использование пакета!
На данный момент пакет доступен только на R, Вы можете загрузить fedstatAPIr из CRAN, используя следующую команду в R:
install.packages("fedstatAPIr")Версия для разработки может быть загружена следующей командой:
# install.packages("devtools")
devtools::install_github("DenchPokepon/fedstatAPIr")Загрузим данные по инфляции к предыдущему месяцу и к соотв. месяцу прошлого года за январь 2023 года по всем товарам и услугам только по России
Возьмем номер индикатора из URL веб страницы с данными https://fedstat.ru/indicator/31074
library(fedstatAPIr)
data <- fedstat_data_load_with_filters(
indicator_id = "31074",
filters = list(
"Классификатор объектов административно-территориального деления (ОКАТО)" = "Приморский край",
"Виды показателя" = c(
"К соответствующему периоду предыдущего года",
"К предыдущему месяцу"
),
"Период" = "Январь",
"Год" = "2023",
"Виды товаров и услуг" = "*"
)
)| EI | ObsValue | PERIOD | Time | s_POK | s_grtov | s_OKATO | s_OKATO_code | s_POK_code | s_grtov_code |
|---|---|---|---|---|---|---|---|---|---|
| процент | 100.83 | январь | 2023 | К предыдущему месяцу | Все товары и услуги | Приморский край | 05000000000 | 44 | 1 |
| процент | 111.25 | январь | 2023 | К соответствующему периоду предыдущего года | Все товары и услуги | Приморский край | 05000000000 | 9 | 1 |
| процент | 100.61 | январь | 2023 | К предыдущему месяцу | Все товары | Приморский край | 05000000000 | 44 | 2 |
| процент | 111.13 | январь | 2023 | К соответствующему периоду предыдущего года | Все товары | Приморский край | 05000000000 | 9 | 2 |
| процент | 100.78 | январь | 2023 | К предыдущему месяцу | Базовый индекс потребительских цен | Приморский край | 05000000000 | 44 | 3 |
| процент | 113.62 | январь | 2023 | К соответствующему периоду предыдущего года | Базовый индекс потребительских цен | Приморский край | 05000000000 | 9 | 3 |
Необходимо учитывать, что ЕМИСС часто находится под большой нагрузкой, поэтому не стоит загружать больше 500 тысяч строк за один запрос. В случае большой выгрузки желательно разбить запросы на подзапросы, в ином случае ЕМИСС может игнорировать такие большие запросы.
Фильтры задаются в виде именованного R списка (list):
filters = list(
"Название поля фильтра 1" = c("Значение 1", "Значение 2"),
"Название поля фильтра 2" = "Значение 1",
"Название поля фильтра 3" = "*" # все значения
)Где "Название поля фильтра" может быть, например
"Год", а значение для этого поля "2023".
Поля и значения фильтров берутся прямо из названий фильтров на
fedstat.ru, в filters они должны быть такими же. Однако
разные регистры фильтров и лишние пробелы не сломают фильтрацию.
Доступны следующие специальные значения фильтров:
"*") выбирает все данные по этому полю
фильтра.Важно: все фильтры с несколькими возможными
значениями должны быть явно указаны. Если фильтр не указан, будет
возвращена ошибка с перечислением неуказанных полей. Используйте
"*" для явного выбора всех значений. Это важно
контролировать ответственно, так как Вы можете случайно сделать запрос
на всю базу данных. Безответственная настройка фильтров приведет к
замедлению работы сервиса для всех пользователей fedstat.ru.
Библиотека стремится поддерживать загрузку всех доступных на fedstat индикаторов, на данный момент поддерживается абсолютное большинство, но в некоторых случаях специальных индикаторов могут быть непредвиденные баги.
Внутри пакета доступна база данных всех индикаторов, по которым
представлены данные на fedstat.ru. Она содержится в переменной
fedstat_indicators_names_database.
Все доступные фильтры каждого индикатора можно посмотреть через вызов функции
data_ids <- fedstat_get_data_ids("31074")Результат выглядит следующим образом
| filter_field_id | filter_field_title | filter_value_id | filter_value_title | filter_field_object_ids |
|---|---|---|---|---|
| 0 | Показатель | 31074 | Индексы потребительских цен на товары и услуги | filterObjectIds |
| 3 | Год | 2002 | 2002 | columnObjectIds |
| 3 | Год | 2003 | 2003 | columnObjectIds |
| 3 | Год | 2004 | 2004 | columnObjectIds |
| 3 | Год | 2005 | 2005 | columnObjectIds |
| 3 | Год | 2006 | 2006 | columnObjectIds |
Также можно посмотреть полный внутренний словарь (соотношения кодов и
человеческих названий сущностей) через задание аргумента
return_type = "dictionary"
data_dict <- fedstat_data_load_with_filters(
indicator_id = "31074",
filters = list(
# Здесь фильтры не важны, но нужно поставить валидную комбинацию, которая отдаст хотя бы одну строчку данных
"Классификатор объектов административно-территориального деления (ОКАТО)" = "Приморский край",
"Виды показателя" = c(
"К соответствующему периоду предыдущего года",
"К предыдущему месяцу"
),
"Период" = "Январь",
"Год" = "2023",
"Виды товаров и услуг" = "*"
),
return_type = "dictionary"
)| field_id | field_title | value_id | value_title |
|---|---|---|---|
| s_POK | Виды показателя | 4 | К декабрю предыдущего года |
| s_POK | Виды показателя | 29 | К предыдущему кварталу |
| s_POK | Виды показателя | 44 | К предыдущему месяцу |
| s_POK | Виды показателя | 30 | К соответствующему кварталу предыдущего года |
| s_POK | Виды показателя | 9 | К соответствующему периоду предыдущего года |
| s_POK | Виды показателя | 41 | Квартал к отчетному году |
Функция fedstat_data_load_with_filters является оберткой
из отдельных функций, которые отвечают за:
fedstat_get_data_ids);filters с учетом
специальных значений (fedstat_data_ids_filter);fedstat_post_data_ids_filtered);fedstat_parse_sdmx_to_table).По каждой функции доступна подробная документация, которую можно
вызвать в R через функцию help(). Например
help("fedstat_data_load_with_filters") или
?fedstat_data_load_with_filters.
Загрузим данные, используя каждую функцию отдельно:
# CSRF-токен автоматически извлекается и передаётся через атрибуты data_ids.
# Токен одноразовый — каждый POST потребляет токен.
data_ids <- fedstat_get_data_ids("31074")
data_ids_filtered <- data_ids %>%
fedstat_data_ids_filter(
filters = list(
"Классификатор объектов административно-территориального деления (ОКАТО)" = "Приморский край",
"Виды показателя" = c(
"К соответствующему периоду предыдущего года",
"К предыдущему месяцу"
),
"Период" = "Январь",
"Год" = "2023",
"Виды товаров и услуг" = "*"
)
)
data_sdmx_parsed <- data_ids_filtered %>%
fedstat_post_data_ids_filtered(data_format = "sdmx") %>%
fedstat_parse_sdmx_to_table()
# Для повторной загрузки или загрузки в другом формате нужен новый токен:
data_ids_for_excel <- fedstat_get_data_ids("31074") %>%
fedstat_data_ids_filter(
filters = list(
"Классификатор объектов административно-территориального деления (ОКАТО)" = "Приморский край",
"Виды показателя" = c(
"К соответствующему периоду предыдущего года",
"К предыдущему месяцу"
),
"Период" = "Январь",
"Год" = "2023",
"Виды товаров и услуг" = "*"
)
)
# Также можем загружать excel
data_xls_binary <- data_ids_for_excel %>%
fedstat_post_data_ids_filtered(data_format = "excel")
# Также можем записать в xls файл.
writeBin(data_xls_binary, "data.xls")
# Его формат зависит от колонки filter_field_object_ids в data_ids, можно изменять самостоятельноЕМИСС может блокировать запросы с нестандартными заголовками. Пакет устанавливает заголовки по умолчанию, но если блокировка всё ещё происходит, можно вручную задать свои:
httr::set_config(httr::add_headers(
'User-Agent' = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
'Accept' = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
'Accept-Language' = "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
'Connection' = "keep-alive"
))Вызовите эту команду один раз перед использованием функций пакета.
ЕМИСС перегружен. Рекомендации:
Сервер отклонил запрос. Возможные причины:
Проверьте доступные значения фильтров через
fedstat_get_data_ids().
CSRF-токен одноразовый. При использовании отдельных функций (не
обёртки) нужно заново вызвать fedstat_get_data_ids() для
каждого POST:
data_ids <- fedstat_get_data_ids("31074") # <- свежий токен
data <- data_ids %>%
fedstat_data_ids_filter(filters = ...) %>%
fedstat_post_data_ids_filtered() %>%
fedstat_parse_sdmx_to_table()Функция-обёртка fedstat_data_load_with_filters() делает
это автоматически при повторных попытках.
Обновите пакет до версии >= 1.1.0. Старая версия обращается к устаревшему эндпойнту, который больше не отдаёт данные.
Вопросы можно писать на почту deniskrylovvit@gmail.com
Буду рад Вашему вкладу в проект. Перед коммитом изменений необходимо пройти R CRAN check –as-cran.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.