PARTE TEORICA

1. Explique ¿Qué son las estructuras de datos?

Son bases de datos que contienen datos de diferentes tipos. Cuando se tienen varios datos sean del mismo tipo o de diferente tipo y lo colocamos juntos se arma una estructura de datos dentro de R. Son formas de almacenar la información, para manipular, buscar e insertar datos de manera eficiente.

2. Explique como se clasifican las estructuras de datos

Las estructuras tienen diferentes características. Entre ellas, las que distinguen a una estructura de otra son su número de dimensiones y si son homogeneas o hereterogeneas.

Dimensiones Homogéneas Heterogéneas
1 Vector Listas
2 Matriz Data Frame
n Array
  • Vector
  • Se caracterizan por ser de una dimensión (unidimensional), por ejemplo, una línea o fila con información, pero que contienen datos del mismo tipo (homogénea). Un vector se crea con la función “c”

    vector01 <- c(1:5)
    print(vector01)
    ## [1] 1 2 3 4 5
    vector02 <- c("Manzana", "Pera", "Mango")
    print(vector02)
    ## [1] "Manzana" "Pera"    "Mango"
  • Matrices
  • Es una estructura de datos de dos dimensiones (filas y columnas). Contiene solo un tipo de dato (homogéneas): numeric, logical, character

    mi_matriz<- matrix(1:6, ncol = 2, nrow = 3)
    print(mi_matriz)
    ##      [,1] [,2]
    ## [1,]    1    4
    ## [2,]    2    5
    ## [3,]    3    6
    mi_matriz02<-matrix(c("rojo", "verde", "naranja", "negro"), ncol = 2)
    print(mi_matriz02)
    ##      [,1]    [,2]     
    ## [1,] "rojo"  "naranja"
    ## [2,] "verde" "negro"
  • Data frame
  • Es la estructura de datos más importante y más usada dentro de R, ya que es una estructura de datos bidimensional que permite almacenar diferentes tipos de datos al mismo tiempo (heterogénea)

    temp <- c(20.37, 18.56, 18.4, 21.96, 29.53, 28.16,
              36.38, 36.62, 40.03, 27.59, 22.15, 19.85)
    
    mes <- c("enero", "febrero", "marzo", "abril", "mayo", "junio",
             "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre")
    
    Clima <- data.frame(mes = mes, temperatura = temp)
    print (Clima)
    ##           mes temperatura
    ## 1       enero       20.37
    ## 2     febrero       18.56
    ## 3       marzo       18.40
    ## 4       abril       21.96
    ## 5        mayo       29.53
    ## 6       junio       28.16
    ## 7       julio       36.38
    ## 8      agosto       36.62
    ## 9  septiembre       40.03
    ## 10    octubre       27.59
    ## 11  noviembre       22.15
    ## 12  diciembre       19.85
  • Listas
  • Es una colección de datos de estructura de datos que pueden ser de diferentes tipos (heterogéneas). Se usan al momento de comprimir o guardar datos en algún lugar

    mi_vector <- 1:10
    mi_matriz <- matrix(1:4, nrow = 2)
    mi_df     <- data.frame("num" = 1:3, "let" = c("a", "b", "c"))
    
    mi_lista <- list("un_vector" = mi_vector, "una_matriz" = mi_matriz, "un_df" = mi_df)
    
    print (mi_lista)
    ## $un_vector
    ##  [1]  1  2  3  4  5  6  7  8  9 10
    ## 
    ## $una_matriz
    ##      [,1] [,2]
    ## [1,]    1    3
    ## [2,]    2    4
    ## 
    ## $un_df
    ##   num let
    ## 1   1   a
    ## 2   2   b
    ## 3   3   c

    3. Represente gráficamente la instrucción anti_join (A,B), a través de un diagrama de Venn y explique sus significado práctico

    Al momento de realizar la union de dos o más estructuras de datos, la función de dplyr anti_join va a unir los datos de la tabla A más no los de la tabla B. Es decir, identifica o filtra aquellos datos que no se encuentran en el segundo data frame

    Ejemplo anti_join

    library(sqldf)
    library(tidyverse)
    library(gapminder)
    
    PIBpercap <- gapminder %>%
      filter(year == 2007) %>%
      filter(country %in% c("Spain", "Peru", "India", "Australia", "Japan", "Canada")) %>%
      select(country, continent, gdpPercap)
    
    life_exp <- gapminder %>%
      filter(year == 2007) %>%
      filter(country %in% c("Spain", "Australia", "Singapore", "Canada", "Japan", "Mongolia", "Brazil")) %>%
      select(country, continent, lifeExp)
    
    anti_join(PIBpercap, life_exp)
    ## # A tibble: 2 × 3
    ##   country continent gdpPercap
    ##   <fct>   <fct>         <dbl>
    ## 1 India   Asia          2452.
    ## 2 Peru    Americas      7409.

    PARTE PRÁCTICA

    load("C:\\Users\\hazel\\Desktop\\CICLO II-2022\\METODOS\\UNIDAD I\\PARCIAL1\\data_comercio_exterior_2017_2022.RData")
    
    nombre_archivo<-"C:\\Users\\hazel\\Desktop\\CICLO II-2022\\METODOS\\UNIDAD I\\nombres_iso_paises.xlsx"
    nombres_iso_paises<- read_excel(nombre_archivo)
    data_comercio_exterior_2017_2022 %>% 
      left_join(nombres_iso_paises,
                by = c("pais" = "nom_pais_esp"))->data_comercio_exterior_2017_2022

    EJERCICIO 1:

    Hacer una funcion que se llame totales_pais_anios que use como argumentos el codigo del pais iso de tres caracteres, para el elegir el socio comercial de el salvador y permita obtener las exportaciones y las importaciones para un periodo especifico.

    totales_pais_anios<-function(iso_3, periodo){
      data_comercio_exterior_2017_2022 %>% 
        filter(iso_3==!!iso_3, anio %in% periodo) %>% 
        group_by(anio) %>% 
        summarise("Exportaciones Totales"=sum(valor_fob)/1e6, 
                  "Importaciones Totales"=sum(valor_cif)/1e6)
    
    }
    # Probando función:
    totales_pais_anios(iso_3 = "PAN", periodo = 2017:2019) %>%  
      kable(caption= "Probando función X e M",
            digits= 1, align= "l") %>% 
      kable_styling(bootstrap_options = "striped", full_width = TRUE)
    Probando función X e M
    anio Exportaciones Totales Importaciones Totales
    2017 121.8 76.4
    2018 122.5 62.6
    2019 122.1 74.4

    Ejercicio 2:

    Usando la función creada en el ejercicio 1 y los comandos que sean necesarios, genere la siguiente tabla: PAN=panama, BLZ=Belice.

    tabla_1 <- totales_pais_anios(iso_3 = "GTM", periodo = 2017:2019)
    colnames(tabla_1) <- c("anio","Exportaciones_GTM", "Importaciones_GTM")
    tabla_1 %>% mutate(Ratio_GTM=Importaciones_GTM/Exportaciones_GTM)->tabla_1
    
    tabla_2<-totales_pais_anios("HND", 2017:2019)
    colnames(tabla_2)<-c("anio", "Exportaciones_HND", "Importaciones_HND")
    tabla_2 %>% mutate(Ratio_HND=Importaciones_HND/Exportaciones_HND)->tabla_2
    
    tabla_1 %>% left_join(tabla_2, by= c("anio"="anio"))  %>% 
    select("anio","Exportaciones_GTM", "Importaciones_GTM", "Ratio_GTM", 
             "Exportaciones_HND", "Importaciones_HND", "Ratio_HND") -> tabla_final 
    kable(tabla_final) %>% kable_styling()
    anio Exportaciones_GTM Importaciones_GTM Ratio_GTM Exportaciones_HND Importaciones_HND Ratio_HND
    2017 792.2283 1045.856 1.320145 796.8583 583.3582 0.7320727
    2018 847.9121 1169.597 1.379385 905.7280 753.9197 0.8323909
    2019 948.2554 1273.099 1.342570 945.6884 826.9239 0.8744147

    Ejercicio 3:

    Obtenga los indicadores de Balassa, para el capitulo “01”, usando las funciones provistas en clase

    source(file = "C:/Users/hazel/Desktop/CICLO II-2022/METODOS/UNIDAD I/PARCIAL1/funciones_comercio_exterior_2.R",echo = TRUE,max.deparse.length = 100,encoding = "utf-8")
    ## 
    ## > library(dplyr)
    ## 
    ## > library(readxl)
    ## 
    ## > library(stringr)
    ## 
    ## > load("C:\\Users\\hazel\\Desktop\\CICLO II-2022\\METODOS\\UNIDAD I\\PARCIAL1\\data_comercio_exterio ..." ... [TRUNCATED] 
    ## 
    ## > nombre_archivo <- "C:\\Users\\hazel\\Desktop\\CICLO II-2022\\METODOS\\UNIDAD I\\nombres_iso_paises ..." ... [TRUNCATED] 
    ## 
    ## > nombres_iso_paises <- read_excel(nombre_archivo)
    ## 
    ## > data_comercio_exterior_2017_2022 <- data_comercio_exterior_2017_2022 %>% 
    ## +     left_join(nombres_ .... [TRUNCATED] 
    ## 
    ## > herramientas_mostrar_paises <- function() {
    ## +     paises <- nombres_iso_paises %>% select(nom_pais .... [TRUNCATED] 
    ## 
    ## > herramientas_mostrar_regiones <- function() {
    ## +     nombres_iso_paises %>% group_by(region, cod_re .... [TRUNCATED] 
    ## 
    ## > herramientas_mostrar_paises_en_tabla <- function() {
    ## +     data_comercio_exterior_2017_2022 %>% gr .... [TRUNCATED] 
    ## 
    ## > indicadores_IVCR_capitulo <- function(codigo_pais, 
    ## +     capitulo, anio) {
    ## +     codigo_pais <- e .... [TRUNCATED] 
    ## 
    ## > indicadores_IVCR_partida <- function(codigo_pais, 
    ## +     partida, anio) {
    ## +     codigo_pais <- enq .... [TRUNCATED] 
    ## 
    ## > indicadores_Balassa_capitulo <- function(codigo_pais, 
    ## +     capitulo, anio, normalizado = TRUE) { .... [TRUNCATED] 
    ## 
    ## > indicadores_Balassa_partida <- function(codigo_pais, 
    ## +     partida, anio, normalizado = TRUE) {
    ## + .... [TRUNCATED] 
    ## 
    ## > indicadores_IHH_Herfindahl_Hirschmann_anual_texto <- function(codigo_pais, 
    ## +     anio, normalizad .... [TRUNCATED] 
    ## 
    ## > indicadores_IHH_Herfindahl_Hirschmann_anual <- function(codigo_pais, 
    ## +     anio, normalizado = TR .... [TRUNCATED]
    capitulo<-"01"
    data.frame("anios"=2017:2020,
               "IB_GTM"=sapply(X=2017:2020,FUN = indicadores_Balassa_capitulo,codigo_pais=320,capitulo=capitulo),
               
               "IB_HND"=sapply(X=2017:2020,FUN = indicadores_Balassa_capitulo,codigo_pais=340,capitulo=capitulo))%>%
      
      kable(caption = "Indicador de Balassa de El Salvador con: Guatemala y Honduras, durante el periodo 2017-2020, para el capitulo “01” del SAC",
            digits = 2,align = "l")%>%
      kable_styling(bootstrap_options = "striped",
                    full_width = TRUE)%>% 
      add_footnote(label="Elaboración propia con base en datos del BCR",
            notation="symbol") %>%  kable_minimal()
    Indicador de Balassa de El Salvador con: Guatemala y Honduras, durante el periodo 2017-2020, para el capitulo “01” del SAC
    anios IB_GTM IB_HND
    2017 0.91 0.19
    2018 0.91 0.11
    2019 0.90 -0.01
    2020 0.92 0.38
    * Elaboración propia con base en datos del BCR

    EJERCICIO 4:

    Genera una función que obtenga un ranking anual de los “k” principales socios comerciales de El Salvador para el periodo anio_inicio-anio_final. Utilicela para generar el top 10 de socios comerciales para el periodo 2018-2020, la tabla deberá tener el pie de página “Elaborado para el parcial 1 MAE118 2022”

    tabla_top_k<-function(df_comercio,
                          top_k=10,
                          anio_inicio, anio_final,
                          decimales=2,
                          pie_pagina= "Elaboración propia, con base en información del BCR"){
    
      df_comercio %>% 
        filter(anio>=anio_inicio,anio<=anio_final) %>% 
        group_by(anio,iso_3) %>% 
        summarise(total=sum(valor_fob)) %>%           
        mutate(percent=round(prop.table(total)*100,decimales)) %>% 
        slice_max(n = top_k,order_by = total) %>% 
        as.data.frame() %>% 
        group_by(anio) %>% 
        mutate(rank = row_number(),
               data=paste(iso_3,"|",percent,sep = "")) %>% 
        select(anio,data,rank) %>% as.data.frame() %>% rename(`Año`=anio) %>% 
        pivot_wider(names_from = rank,values_from = data) %>% as.data.frame() %>%   
        kable(caption = paste("Top",top_k,"de Exportaciones periodo", min(anio_inicio),"-",max(anio_final))) %>% 
        add_footnote(label = pie_pagina)
    }
    
    
    
    tabla_top_k(df_comercio = data_comercio_exterior_2017_2022,
                anio_inicio = 2018, anio_final = 2020,
                top_k = 10,
                decimales = 2,
                pie_pagina = "Elaborado para el parcial 1 MAE118 2022")%>%  
      kable_styling(bootstrap_options = "striped", full_width = TRUE)
    ## `summarise()` has grouped output by 'anio'. You can override using the
    ## `.groups` argument.
    Top 10 de Exportaciones periodo 2018 - 2020
    Año 1 2 3 4 5 6 7 8 9 10
    2018 USA|44.07 HND|15.34 GTM|14.36 NIC|6.87 CRI|4.39 MEX|2.44 PAN|2.08 DOM|1.65 CHN|1.45 ESP|0.82
    2019 USA|41.88 GTM|15.95 HND|15.91 NIC|6.68 CRI|4.5 MEX|2.53 PAN|2.05 DOM|1.77 CAN|1.08 CHN|0.87
    2020 NA|43.24 GTM|16.87 HND|15.45 NIC|7.25 CRI|4.63 MEX|2.47 PAN|1.87 DOM|1.78 DEU|0.72 ITA|0.69
    a Elaborado para el parcial 1 MAE118 2022