Reporte sectores económicos

Uso de la libreria {pins} para equipos de investigación

Alex Bajaña

Introducción a la ciencia de datos

Principio de reproducibilidad

  • ¿Las tablas y figuras son reproducibles a partir del código y los datos?
  • ¿El código realmente hace lo que crees que hace?
  • Además de lo que se hizo, ¿está claro por qué se hizo? Por ejemplo, ¿cómo se eligieron las configuraciones de los parámetros?

Aún más lejos

  • ¿Es posible extender el código a otro conjunto de datos?
  • ¿Si me cambio de computador puedo reejecutar el código sin mayores configuraciones salvo por la instalación?

Principio de tidy data

  • Cada variable debe tener su propia columna.

  • Cada observación debe tener su propia fila.

  • Cada valor debe tener su propia celda.

Ejecución de código

Busqueda de ayuda

  • Abrir una ventana de ayuda:
help.start()
  • Buscar información acerca de un tema específico:
help.search("…")
  • Buscar ayuda sobre una función:
help(…)

?…

Busqueda de ayuda

Viñetas:

  • Buscar viñetas disponibles: vignete()

  • *Buscar una viñeta específica: vignette("…")

Web:

Recuerda que R es en primera instancia un software de carácter estadístico, los temas de ayuda incrementan a medida que cargues librerias.

Vamos a hacer una equivalencia entre java y R antes de empezar

Una parte de código provista por sus compañeros:


@SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        temperatur = (EditText) findViewById(R.id.txttemperatur);
    }
    
public void abrirSignosm (View vista) {
 String valortemper, valorpeso1, valorpresion1;

if (temper < 36) {
            valortemper = "Temperatura bajo de lo normal HIPOTERMIA";
        } else if (temper >= 36 && temper <= 37) {
            valortemper = "Temperatura normal";
        } else {
            valortemper = "Temperatura rebasa los limites : Fiebre";
        }

Ahora veamolo en R

valortemper <- 50

if (temper < 36 & is.numeric(valortemper)) {
            valortemper = "Temperatura bajo de lo normal HIPOTERMIA";
        } else if (temper >= 36 & temper <= 37) {
            valortemper = "Temperatura normal";
        } else {
            valortemper = "Temperatura rebasa los limites : Fiebre";
        }

La diferencia es que en R todo se trabaja con objetos y se guardan en la memoria RAM (ojo)

Instalación

libraries <- c(
  
  # La estrella de la tarde
  "pins",
  
  # El aliado versatil
  "tidyverse",
  
  # El pana cuadrado
  "gt"
  
  
)

Instalación

condicion <- libraries %in% installed.packages()[,1]

if(any(!condicion)){
  
  install.packages(libraries[!condicion])
  
}

Cargamos en el ambiente

library(pins)
library(tidyverse)
library(gt)

carpeta <- board_folder("C:/Users/Alex/OneDrive/taller_tr_colab")

pin_list(carpeta)
[1] "die_diccionario_provincias" "die_exportaciones_netas"   
[3] "die_plazas_trabajo"         "die_ventas_totales"        
[5] "function_add_flag"          "function_generar_mapa"     
[7] "insumos_banderas"           "shape_provincia"           
[1] "die_diccionario_provincias" "die_exportaciones_netas"   
[3] "die_plazas_trabajo"         "die_ventas_totales"        
[5] "function_add_flag"          "function_generar_mapa"     
[7] "insumos_banderas"           "shape_provincia"           

Un breve web scrapping:

pin_read(carpeta,"insumos_banderas")
# A tibble: 24 × 3
   url                                                           provi…¹ capital
   <chr>                                                         <chr>   <chr>  
 1 //upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Bandera_… Azuay   Cuenca 
 2 //upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Bandera_… Bolívar Guaran…
 3 //upload.wikimedia.org/wikipedia/commons/thumb/8/85/Bandera_… Cañar   Azogues
 4 //upload.wikimedia.org/wikipedia/commons/thumb/9/97/Bandera_… Carchi  Tulcán 
 5 //upload.wikimedia.org/wikipedia/commons/thumb/1/14/Bandera_… Chimbo… Riobam…
 6 //upload.wikimedia.org/wikipedia/commons/thumb/8/86/Bandera_… Cotopa… Latacu…
 7 //upload.wikimedia.org/wikipedia/commons/thumb/2/20/Bandera_… El Oro  Machala
 8 //upload.wikimedia.org/wikipedia/commons/thumb/9/91/Bandera_… Esmera… Esmera…
 9 //upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Bandera_… Guayas  Guayaq…
10 //upload.wikimedia.org/wikipedia/commons/thumb/d/dc/Bandera_… Imbabu… Ibarra 
# … with 14 more rows, and abbreviated variable name ¹​provincia
pin_versions(board = carpeta,name = "insumos_banderas") 
# A tibble: 7 × 3
  version                created             hash 
  <chr>                  <dttm>              <chr>
1 20221027T143320Z-f4277 2022-10-27 09:33:20 f4277
2 20221027T203309Z-d7eb2 2022-10-27 15:33:09 d7eb2
3 20221027T203310Z-f4277 2022-10-27 15:33:10 f4277
4 20221028T025626Z-3a137 2022-10-27 21:56:26 3a137
5 20221028T025703Z-3a137 2022-10-27 21:57:03 3a137
6 20221116T172201Z-d7eb2 2022-11-16 12:22:01 d7eb2
7 20221116T172202Z-f4277 2022-11-16 12:22:02 f4277

Mas detalles con pin_meta:

# Pimera versión:

pin_meta(board = carpeta,
         name = "insumos_banderas",
         version = "20221027T133015Z-d7eb2")

# Segunda versión:
pin_meta(board = carpeta,
         name = "insumos_banderas",
         version = "20221027T203310Z-f4277")
# Pimera versión:

pin_meta(board = carpeta,
         name = "insumos_banderas",
         version = "20221027T133015Z-d7eb2")

# Segunda versión:
pin_meta(board = carpeta,
         name = "insumos_banderas",
         version = "20221027T203310Z-f4277")

Para limpiar mi pins:

# Todo el pin:

pin_delete(board = carpeta, name = "ventas")

# Una versión del pin:

pin_version_delete(board = carpeta,
                   name = "insumos_banderas",
                   version = "20221027T133015Z-d7eb2")

# Chequeemos:

pin_versions(carpeta,"insumos_banderas")

Insumos para una tabla increible:

# Con pin podemos compartir muchas cosas:

pin_list(board = carpeta)
[1] "die_diccionario_provincias" "die_exportaciones_netas"   
[3] "die_plazas_trabajo"         "die_ventas_totales"        
[5] "function_add_flag"          "function_generar_mapa"     
[7] "insumos_banderas"           "shape_provincia"           
generar_mapa <- pin_read(carpeta,"function_generar_mapa" )

class(generar_mapa)
[1] "function"
# :O Una función

plazas_trab <- pin_read(carpeta,"die_plazas_trabajo" )

Tabla 2019

tabla_2019 <- plazas_trab %>% 
  ungroup() %>% 
  filter(anio == 2019)

tabla_2019 %>% 
  # inner_join(banderas) %>% 
  ggplot()+
  geom_tile(mapping = aes(x = provincia,
                          y=gsectores,
                          fill = log(plazas_totales))) +
  geom_text(mapping = aes(x = provincia,
                          y=gsectores,
                          label = plazas_totales),
            color="gray") +
  coord_flip() +
  theme(axis.text.x = element_text(angle = 45,
                                   hjust = 1),
        axis.title = element_blank())

Para mejorar la presentación podemos transformar los datos a log

Caso aplicado para un sector económico

¿Y como sería para comparar? Usamos facet_wrap

tabla_1920 <- plazas_trab %>% 
  ungroup() %>% 
  filter(anio >= 2019)

plot <- tabla_1920 %>% 
  # inner_join(banderas) %>% 
  ggplot()+
  geom_tile(mapping = aes(x = provincia,
                          y=gsectores,
                          fill = log(plazas_totales))) +
  geom_text(mapping = aes(x = provincia,
                          y=gsectores,
                          label = plazas_totales),
            color="gray",
            size = 7)
plot +
  coord_flip() +
  theme(text =  element_text(size = 7) ,
        axis.text.x = element_text(angle = 45,
                                   hjust = 1),
        axis.title = element_blank()) +
  facet_wrap(.~anio)

Usamos el resultado del web scrapping

banderas <- pin_read(carpeta,name = "insumos_banderas")

tabla_gt <- tabla_2019 %>% 
  filter(str_detect(gsectores,"Servicios")) %>% 
  inner_join(banderas)

funcion_banderas <- pin_read(carpeta,"function_add_flag")

Hagamos una tabla bonita:

tabla_gt %>% 
  select(url,provincia,capital,gsectores,plazas_totales) %>% 
  group_by(gsectores) %>% 
  gt() %>% 
  cols_label(url = "",
                 provincia = md("**Provincia**"),
                 capital = md("**Capital**"),
                 plazas_totales = md("**Plazas de trabajo**")) %>% 
  funcion_banderas()
Provincia Capital Plazas de trabajo
Servicios
Azuay Cuenca 35278
Bolívar Guaranda 4910
Cañar Azogues 6600
Carchi Tulcán 4937
Cotopaxi Latacunga 9458
Chimborazo Riobamba 15848
El Oro Machala 16282
Esmeraldas Esmeraldas 7777
Guayas Guayaquil 137075
Imbabura Ibarra 9615
Loja Loja 16541
Los Ríos Babahoyo 10842
Manabí Portoviejo 22009
Morona Santiago Macas 2984
Napo Tena 2198
Pastaza Puyo 1061
Pichincha Quito 177891
Tungurahua Ambato 1005
Zamora Chinchipe Zamora 164
Sucumbíos Lago Agrio 1911
Orellana Puerto Francisco de Orellana 1911
Santo Domingo de los Tsáchilas Santo Domingo 3700
Santa Elena Santa Elena 6194

Ejercicio para ti: ¿Como se añadiría la comparación del 2020?

  1. Un tab spaner para ventas:
    1. 2019
    2. 2020
    3. Variación
  2. Lo mismo para empleo y exportaciones

Hint: Mira con la función pin_list() que pines tienes disponibles.

Un mapita

# Leemos el pin que preparamos:

mapa_coordenadas <- pin_read(carpeta,"shape_provincia")

# Ahora unimos nuestros datos de los distintos pins:

tabla_2019_mapa <- tabla_2019 %>% 
  filter(str_detect(gsectores,"Minas")) %>% 
  inner_join(mapa_coordenadas,
             by = c("codigo_provincia" = "DPA_PROVIN"))

tabla_2019_mapa %>% 
  ggplot()+
  geom_polygon(mapping = aes(x = long,
                             y = lat,
                             fill = log(plazas_totales),
                             group = group)) +
  theme_minimal()+
  theme(axis.title = element_blank(),
        axis.text  = element_blank())

No olvidar transformar a logaritmos