-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathREADME.Rmd
224 lines (151 loc) · 8.15 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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
---
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%"
)
options(pillar.min_chars = 30)
```
# perutranspaeconomica
<!-- badges: start -->
![runiverse-name](https://calderonsamuel.r-universe.dev/badges/:name)
![runiverse-package](https://calderonsamuel.r-universe.dev/badges/perutranspaeconomica)
[![Codecov test coverage](https://codecov.io/gh/calderonsamuel/perutranspaeconomica/branch/main/graph/badge.svg)](https://app.codecov.io/gh/calderonsamuel/perutranspaeconomica?branch=main)
<!-- [![CRAN status](https://www.r-pkg.org/badges/version/perutranspaeconomica)](https://CRAN.R-project.org/package=perutranspaeconomica) -->
[![R-CMD-check](https://github.com/calderonsamuel/perutranspaeconomica/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/calderonsamuel/perutranspaeconomica/actions/workflows/R-CMD-check.yaml)
[![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable)
<!-- badges: end -->
El objetivo de `{perutranspaeconomica}` es contar con una manera de obtener datos del Portal de Transparencia Económica Perú con una interfaz de programación consistente y escalable.
## Code of Conduct
Please note that the perutranspaeconomica project is released with a [Contributor Code of Conduct](https://contributor-covenant.org/version/2/1/CODE_OF_CONDUCT.html). By contributing to this project, you agree to abide by its terms.
## Instalación
Existen varias maneras de descargar el paquete. En primer lugar, puedes descargar
la versión estable desde CRAN:
```r
install.packages('perutranspaeconomica')
```
Otra opción es instalar la versión en desarrollo desde mi [R-universe](https://calderonsamuel.r-universe.dev/):
```r
# Habilita el repositorio calderonsamuel
options(repos = c(
calderonsamuel = 'https://calderonsamuel.r-universe.dev',
CRAN = 'https://cloud.r-project.org'))
# Descargar e instalar perutranspaeconomica en R
install.packages('perutranspaeconomica')
```
La versión en desarrollo también puede descargarse desde [GitHub](https://github.com/) con:
``` r
# install.packages("remotes")
remotes::install_github("calderonsamuel/perutranspaeconomica")
```
## Ejemplo
Con este paquete puedes realizar consultas del Portal de Transparencia Económica del MEF-Perú, específicamente de los módulos de [Consulta de gasto presupuestal](http://apps5.mineco.gob.pe/transparencia/) y de [Consulta de Ingreso Presupuestal](http://apps5.mineco.gob.pe/transparenciaingresos/).
El paquete propone un flujo de trabajo de 1) iniciar consulta, 2) elegir parámetros, y 3) ejecutar consulta. Para ello, se ha creado la clase `<transpaeco>` para consolidar una infraestructura interna consistente. El usuario común no va a necesitar interactuar con esa infraestructura directamente ya que se han agregado funciones de soporte que habilitan una interfaz de programación más amigable.
Empezamos por cargar el paquete:
```{r example}
library(perutranspaeconomica)
```
### Iniciar consulta
Para iniciar una consulta tan solo hace falta usar la función `iniciar_transparencia_economica()`. Esto crea un objeto vacío y muestra los parámetros de consulta agregados. Al inicio no tenemos parámetros ni data.
```{r}
iniciar_transparencia_economica()
```
### Elegir parámetros de consulta
La elección de parámetros de consulta se hace con las funciones que empiezan con `elegir_*()`.
Para consultas en el módulo de gasto presupuestal, se pueden utilizar las siguientes:
- `elegir_periodo_anual()`
- `elegir_quien_gasta()`
- `elegir_en_que_se_gasta()`
- `elegir_con_que_se_financia()`
- `elegir_como_se_estructura_gasto()`
- `elegir_cuando_se_hizo_gasto()`
- `elegir_donde_se_gasta()`
Para consultas en el módulo de ingreso presupuestal, se pueden utilizar las siguientes:
- `elegir_periodo_anual()`
- `elegir_quien_recauda()`
- `elegir_fuentes_de_recaudacion()`
- `elegir_como_se_estructura_recaudacion()`
- `elegir_cuando_se_hizo_recaudacion()`
En ambos módulos, la mínima requerida es `elegir_periodo_anual()`.
Una vez que se le agrega parámetros a la consulta, la interfaz lo refleja.
```{r}
iniciar_transparencia_economica() %>%
elegir_periodo_anual(periodo = 2023)
```
Cada argumento de las funciones `elegir_*()` puede aceptar vectores con más de un elemento para una consulta más potente.
```{r}
iniciar_transparencia_economica() %>%
elegir_periodo_anual(periodo = 2020:2023)
```
Con excepción de `elegir_periodo_anual()`, es necesario que las funciones `elegir_*()` tengan, en su conjunto, al menos un argumento definido como `"todos"`. Más adelante se verá que en caso contrario la consulta no prosperará.
```{r}
iniciar_transparencia_economica() %>%
elegir_periodo_anual(periodo = 2023) %>%
elegir_quien_gasta(nivel = "E") %>%
elegir_donde_se_gasta(departamento_meta = "todos") # <- aquí se usó "todos"
```
Todos los métodos `elegir_*()` cuentan con documentación referente a cómo deben ser usados. Para mayor detalle consultar el método específico. Por ejemplo, `help("elegir_quien_gasta")` o `?elegir_quien_gasta`.
La elección de parámetros no prosperará si se intenta definir más de un parámetro como `"todos"`.
```{r, error=TRUE}
iniciar_transparencia_economica() %>%
elegir_periodo_anual(2022) %>%
elegir_quien_gasta(nivel = "todos") %>%
elegir_donde_se_gasta(departamento_meta = "todos")
```
Todas las funciones de `elegir_*()` tratan de validar que los inputs provistos tengan una forma adecuada. Por ejemplo, `generica` debe seguir la forma `"0-0-0"`, donde cada `0` representa un dígito. Al proveer un input mal formado, la validación provocará un error e indicará una expresión regular o listado de valores apropiados para el parámetro.
```{r, error=TRUE}
iniciar_transparencia_economica() %>%
elegir_periodo_anual(2022) %>%
elegir_como_se_estructura_gasto(generica = "5-20")
```
### Consultar
Una vez definidos los parámetros de la consulta, solo hace falta ejecutarla. Para ello, usamos la función `consultar()`. Esto nos devolverá la data requerida.
```{r}
# ¿Cuál fue la ejecución presupuestal por departamento en el gobierno nacional?
# Para el año 2022
iniciar_transparencia_economica() %>%
elegir_periodo_anual(2022) %>%
elegir_quien_gasta(nivel = "E") %>%
elegir_donde_se_gasta(departamento_meta = "todos") %>%
consultar()
```
La consulta no prosperará si alguna función de `elegir_*()` (con excepción de `elegir_periodo_anual()`) no cuenta con ningún parámetro como definido como `"todos"`.
```{r, error=TRUE}
iniciar_transparencia_economica() %>%
elegir_periodo_anual(2022) %>%
elegir_quien_gasta(nivel = "E") %>%
elegir_donde_se_gasta(departamento_meta = "01") %>%
consultar()
```
Se recomienda asignarle nombre a una consulta ejecutada para evitar posibles tediosas re-descargas, especialmente cuando la consulta usa parámetros con vectores más grandes.
```{r}
# ¿Cómo se ejecutó el gasto por genérica para el PP 0031 entre el 2015 y 2021?
mi_consulta <- iniciar_transparencia_economica() %>%
elegir_periodo_anual(2015:2021) %>%
elegir_en_que_se_gasta(categoria_presupuestal = "0031") %>%
elegir_como_se_estructura_gasto(generica = "todos") %>%
consultar()
mi_consulta
```
Una vez obtenida la consulta requerida, es posible tratar los datos obtenidos como cualquier otro dataframe en R. Por ejemplo, para calcular el porcentaje de presupuesto destinado a personal y obligaciones sociales por periodo anual.
```{r, warning=FALSE, message=FALSE}
library(dplyr)
mi_consulta %>%
group_by(periodo) %>%
mutate(porc_presupuesto = (pim/sum(pim)*100) %>% round(1)) %>%
ungroup() %>%
filter(desc_generica == "PERSONAL Y OBLIGACIONES SOCIALES")
```
También es posible usar los datos obtenidos directamente para un gráfico con `ggplot2`.
```{r, warning=FALSE, message=FALSE}
library(ggplot2)
mi_consulta %>%
ggplot(aes(periodo, pim, color = cod_generica)) +
geom_line() +
scale_y_continuous(labels = scales::label_dollar(prefix = "S/."))
```