-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.Rmd
190 lines (142 loc) · 9.4 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
---
output: github_document
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```
# fedstatAPIr
<!-- badges: start -->
<!-- badges: end -->
fedstatAPIr представляет собой неофициальное API для загрузки данных с fedstat.ru
(система ЕМИСС Росстата) с заданными фильтрами.
Пакет позволяет сэкономить ⏳ и нервы 😡 при работе с бесконечно падающим ЕМИСС
через автоматическое повторение неотвеченных запросов и сохранение ранее
использованных настроек фильтров.
## Установка
На данный момент пакет доступен только на R, Вы можете загрузить fedstatAPIr из [CRAN](https://CRAN.R-project.org), используя следующую команду в R:
``` r
install.packages("fedstatAPIr")
```
Версия для разработки может быть загружена следующей командой:
``` r
# install.packages("devtools")
devtools::install_github("DenchPokepon/fedstatAPIr")
```
## Использование
Загрузим данные по инфляции к предыдущему месяцу и к соотв. месяцу прошлого года
за январь 2023 года по всем товарам и услугам только по России
Возьмем номер индикатора из URL веб страницы с данными [https://fedstat.ru/indicator/31074](https://fedstat.ru/indicator/31074)
```{r example1, echo=TRUE, message=FALSE, warning=FALSE, results='hide'}
library(fedstatAPIr)
data <- fedstat_data_load_with_filters(
indicator_id = "31074",
filters = list(
"Классификатор объектов административно-территориального деления (ОКАТО)" = "Российская Федерация",
"Виды показателя" = c(
"К соответствующему периоду предыдущего года",
"К предыдущему месяцу"
),
"Период" = "Январь",
"Год" = "2023",
"Виды товаров и услуг" = "*"
)
)
```
```{r hidden_kable_output1, echo=FALSE, message=FALSE, warning=FALSE}
knitr::kable(head(data[, c("EI", "ObsValue", "PERIOD", "Time", "s_POK", "s_grtov", "s_OKATO", "s_OKATO_code", "s_POK_code", "s_grtov_code")]))
```
Необходимо учитывать, что ЕМИСС часто лагает, поэтому не стоит загружать больше 500 тысяч строк за один запрос.
В случае большой выгрузки желательно разбить запросы на подзапросы, в ином случае ЕМИСС может игнорировать такие большие запросы
## Спецификация фильтров
Фильтры задаются в форме JSON:
```{JSON_example}
{
"Название поля фильтра 1": ["Значение фильтра 1", "Значение фильтра 2"],
"Название поля фильтра 2": ["Значение фильтра 1", "Значение фильтра 2"],
...
}
```
Где `Название поля фильтра 1` может быть, например `Год`, а `Значение фильтра 1` для этого поля `2023`.
Поля и значения фильтров берутся прямо из названий фильтров на fedstat.ru, в
`filters` они должны быть такими же. Однако разные регистры фильтров и лишние пробелы не сломают фильтрацию.
Доступны следующие специальные значения фильтров:
1. Звездочка/asterix (*) выбирает все данные по этому полю фильтра.
Можно не указывать какой-то фильтр вообще, тогда по умолчанию будет
использоваться *.
## Доступные индикаторы
Библиотека стремится поддерживать загрузку всех доступных на fedstat индикаторов, на данный момент поддерживается абсолютное большинство, но в некоторых случаях специальных индикаторов могут быть непредвиденные баги.
Внутри пакета доступна база данных всех индикаторов, по которым представлены данные на fedstat.ru.
Она содержится в переменной `fedstat_indicators_names_database`.
Все доступные фильтры каждого индикатора можно посмотреть через вызов функции
```{r example10, echo=TRUE, message=FALSE, warning=FALSE, results='hide'}
data_ids <- fedstat_get_data_ids("31074")
```
Результат выглядит следующим образом
```{r hidden_kable_output2, echo=FALSE, message=FALSE, warning=FALSE}
knitr::kable(head(data_ids[, c("filter_field_id", "filter_field_title", "filter_value_id", "filter_value_title", "filter_field_object_ids")]))
```
Также можно посмотреть полный внутренний словарь (соотношения кодов и человеческих названий сущностей) через задание аргумента `return_type = dictionary`
```{r example11, echo=TRUE, message=FALSE, warning=FALSE, results='hide'}
library(fedstatAPIr)
data <- fedstat_data_load_with_filters(
indicator_id = "31074",
filters = list(
"Классификатор объектов административно-территориального деления (ОКАТО)" = "Российская Федерация",
"Виды показателя" = c(
"К соответствующему периоду предыдущего года",
"К предыдущему месяцу"
),
"Период" = "Январь",
"Год" = "2023",
"Виды товаров и услуг" = "*"
),
return_type = "dictionary"
)
```
## Продвинутое использование
Функция `fedstat_data_load_with_filters` является оберткой из отдельных функций,
которые отвечают за:
1. Загрузку id фильтров через GET запрос (`fedstat_get_data_ids`);
2. Фильтрацию данных на основе `filters` с учетом специальных значений и стандартных фильтров (`fedstat_data_ids_filter`);
3. Отправку POST запроса с телом из фильтров (`fedstat_post_data_ids_filtered`);
4. Парсинг полученного SDMX файла в таблицу (`fedstat_parse_sdmx_to_table`).
По каждой функции доступна подробная документация, которую можно вызвать в R
через функцию `help()`. Например `help("fedstat_data_load_with_filters")` или
`?fedstat_data_load_with_filters`.
Загрузим те же данные, используя каждую функцию отдельно
```{r example2, eval=FALSE, echo=TRUE, message=FALSE, warning=FALSE, include=TRUE}
data_ids <- fedstat_get_data_ids("31074") # Можеть занимать много времени из-за лагов
# fedstat, для скорости лучше всего кэшировать или даже записывать в базу данных,
# более подробно по этому моменту в документации
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_xls_binary <- data_ids_filtered %>%
fedstat_post_data_ids_filtered(data_format = "excel") # также можем загружать excel
writeBin(data_xls_binary, "data.xls") # также можем записать в xls файл.
# Его формат зависит от колонки filter_field_object_ids в data_ids, можно изменять самостоятельно
```
## Помощь
Вопросы можно писать на почту [email protected]
---
## Разработка
Буду рад Вашему вкладу в проект. Перед коммитом изменений необходимо пройти R CRAN check --as-cran.