1 Objetivos de los seminarios

En éste ciclo de seminarios se pretende interactuar, difundir, el uso de lenguajes y sistemas informáticos avanzados para el análisis de datos, particularmente como herramientas para abordar problemas de data science, data mining, business inteligent etc. Los objetivos específicos son:

1.1 ¿Por qué R y PYTHON?

R y Python son sin lugar a dudas los “lenguajes” más utilizados para el análisis de datos. R brinda gran cantidad de rutinas para análisis estadísticos en una alta gama de disciplinas. En tanto que Python se ha posicionado como un lenguaje común en data mining, data science, big data, etc. Por otro lado, R y Python son sin lugar a dudas dos de los “lenguajes” más utilizados para el análisis de datos, como lo advierte la IEEE en el ranking de lenguajes más utilizados:
Ranking

Fuente: IEEE

Durante más de 3 años Phyton has sido el lenguaje más utilizado tanto en empresas, internet como también como lenguaje embebido. En tanto, que R se mantiene entre los primeros 10 más utilizados particularmente en computadoras.

2 Visualización de datos de exportación de frutas con R

2.1 R desde la i(instalación) a la R

2.1.1 ¿Qué es R?

Una forma de definir a R es mencionando que no es R:

  • No es un paquete estadístico.
  • No es un lenguaje de programación.
  • No es un lenguaje estadístico.

R es un sistema o ambiente de programación estadística(suite), que provee un lenguaje de programación, gráficos de alto nivel e interfaces a otros lenguajes.

Fue desarrollado en los laboratorios Bell, su denominación se debe a que proviene del lenguaje S y sus creadores fueron Robert Gentleman y Ross Ihaka.

2.1.2 ¿Qué ventajas tengo al usar R?

  1. Es un software libre dentro de la FSF.
  2. Es multiplataforma.
  3. Posee potentes herramientas gráficas.
  4. Permite el manejo de grandes volúmenes de datos.
  5. Es extensible, es decir, la comunidad puede crear nuevas librerías.
  6. Actualmente dispone de 13000 paquetes.

R es un software libre dentro de la filososía de la FSF lo cual nos permite, estudiar el código, difundirlo, instalarlo, modificarlo y además…ES GRATIS!!

# Estudiar el código
var
## function (x, y = NULL, na.rm = FALSE, use) 
## {
##     if (missing(use)) 
##         use <- if (na.rm) 
##             "na.or.complete"
##         else "everything"
##     na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs", 
##         "everything", "na.or.complete"))
##     if (is.na(na.method)) 
##         stop("invalid 'use' argument")
##     if (is.data.frame(x)) 
##         x <- as.matrix(x)
##     else stopifnot(is.atomic(x))
##     if (is.data.frame(y)) 
##         y <- as.matrix(y)
##     else stopifnot(is.atomic(y))
##     .Call(C_cov, x, y, na.method, FALSE)
## }
## <bytecode: 0x561bdd2c4658>
## <environment: namespace:stats>

2.1.3 ¿Qué desventaja tiene usar R?

Obviamente, R posee algunas dificultades que deben ser mencionadas, como:

  1. Posee línea de comandos, se debe dar instrucciones.
  2. Tiene una sintaxis compleja.
  3. No es específico al momento de indicar errores.
  4. Su aprendizaje demanda tiempo (curva de aprendizaje).

2.1.4 ¿Cómo obtengo R?

R puede descargarse directamente desde su sitio oficial, del CRAN cuyo link es: https://www.r-project.org/

El CRAN o Comprehensive R Archive Network es el sitio oficial de R, el repositorio desde donde se descarga el software y los paquetes chequeados y verificados. Además dispone de ayuda, su propio journal, asistencia, todo lo necesario para utilizar este sistema plenamente.

Hay que tener en cuenta que R es un sistema dinámico, que posee actualizaciones periódicas. Es por eso que se debe tener en cuenta, para que posea una absoluta compatibilidad con los paquetes instalados y los editores que se utilicen, instalar la última versión de R.

La última versión de R es R.3.5.1 “Feather Spray”, las versiones se definen con 3 dígitos donde:

  • R.3.5.X Solución de bugs.
  • R.3.X.1 Cambios en algunas funciones de R.
  • R.X.5.1 Cambios estructurales muy importantes.

2.1.5 Instalación de R

Al momento de instalar el software hay que tener en cuenta principalmente algunas características de nuestra computadora fundamentalmente la arquitectura de la computadora. Es decir, ¿es nuestra computadora 32 o 64 bits? En general las últimas computadoras, los modelos más nuevos son de 64 bits, no obstante, se recomienda verificarlo.

2.1.6 ¿Cómo se ve R?

Una vez instalado el sistema hacemos click derecho en el logo y lo ejecutamos como administrador. Vemos la siguiente pantalla:

Consola

Abrir por primera vez la consola de R puede ser una experiencia desalentadora, sobretodo si se está acostumbrado a trabajar con software de ventanas con interfaces gráficas muy vistosas. La potencialidad de R reside justamente que la consola permite ingresar código que luego procesa y compila.

La consola sirve para comunicarnos con R pero debemos aprender el lenguaje que R “habla” para entendernos mejor y obtener respuestas a problemas que le podemos plantear.

2.1.7 ¿R es una grán calculadora …?

Podemos comenzar a explorar a R utilizandola como una potente calculadora que procesa todo tipo de operaciones matemáticas.

2 + 2  
## [1] 4

¿Qué tal si guardamos el resultado para poder utilizarlo luego o en futuras operaciones?

dosmasdos <- 2 + 2

En este caso el resultado de la operación lo guarda en la memoria como un “objeto” llamado dosmasdos. El simbolo <- es un operador que se le asigna el resultado de la operación al objeto dosmasdos.

#Utilizamos el resultado guardado en otra operación
dosmasdos -1
## [1] 3
#Tambien podemos guardar el resultado de la operación en otro objeto
menosuno  <- dosmasdos - 1 

2.1.8 ¿Cómo puedo ver lo que alojan los objetos?

Hay dos formas de llamar los objetos, directamente tipeando el objeto:

menosuno
## [1] 3

O utilizando la función print():

print(menosuno)
## [1] 3

Trabajar directamente sobre la consola resulta muy laborioso y es muy poco práctico por eso se suelen utilizar interfaces de ayuda como RSTUDIO.

2.1.9 Utilizar RSTUDIO para trabajar con R

Rstudio es una IDE, es decir, una interface de desarrollo integrado. Un sistema que nos ayuda a interactuar con R de una forma más “amigable”. Nos provee de un editor de código, herramientas de asistencia y visualización. Se puede descargar RSTUDIO desde https://www.rstudio.com/products/RStudio/.

¿Cómo se ve RStudio?

RStudio

2.2 ¿Cómo visualizar datos de exportación de fruta del Valle en R?

En ésta primer sesión se utilizarán datos de exportación de fruta de pepita del Valle de Río Negro y Neuquén extraídos del informe semestral de SENASA 2018.

Volumen de exportación de fruta del Alto Valle
Pais X2014 Ene.Jul.2014 X2015 Ene.Jul.2015 X2016 Ene.Jul.2016 X2017 Ene.Jul.2017 Ene.Jul.2018 Fruta
Brasil 127547 89283 113753 76907 95747 64567 88200 66859 65154 Pera
Estados_Unidos 43723 43723 46977 46977 42356 42356 31438 31438 39328 Pera
Holanda 20247 20247 11419 11419 11236 11236 7419 7419 10027 Pera
Paraguay 2728 1559 2268 875 4412 2677 6526 3899 4164 Pera
Rusia 88801 81849 68102 65424 64073 60489 60127 57772 76785 Pera
Italia 36579 36579 25335 25335 28118 28118 18347 18347 23874 Pera
Canada 9273 9273 7543 7543 7202 7202 5834 5834 6314 Pera
Bolivia 1700 835 2246 1272 1789 994 1708 1105 1245 Pera
Alemania 10977 10977 7301 7301 8833 8833 5695 5695 6770 Pera
Peru 6994 2691 7527 3378 6207 2737 5804 2028 1246 Pera
Suecia 1284 1284 759 759 823 823 703 703 844 Pera
Reino_Unido 2533 2533 2644 2644 2381 2381 2153 2153 2384 Pera
Israel 500 500 744 700 1328 1328 966 966 1235 Pera
Emiratos_Arabes 2275 2166 1591 1411 1893 1829 894 894 1072 Pera
Costa_Rica 518 360 567 476 667 529 665 550 506 Pera
Otros_America 7030 4850 7243 3606 9806 5683 8296 4422 5536 Pera
Otros 30541 28552 20166 20059 16798 15960 9689 8995 10961 Pera
Estados_Unidos 9218 9218 13791 13791 10739 10548 9731 9731 6298 Manzana
Rusia 11974 11190 16232 16089 9898 9898 8906 8906 17278 Manzana
Paraguay 6075 3111 11514 4110 13160 7858 12113 6427 7117 Manzana
Brasil 48390 28069 23550 10263 21520 13995 11874 5281 10329 Manzana
Bolivia 8222 4487 9340 4663 8559 4972 7188 3967 3754 Manzana
Alemania 6412 6412 1963 1963 2734 2734 3817 3817 5710 Manzana
Holanda 8900 8900 3843 3843 3377 3356 3128 3018 5345 Manzana
Francia 3090 3090 1284 1235 2116 2053 2506 2380 4593 Manzana
Reino_Unido 4050 3963 2415 2167 2366 2281 1941 1858 2155 Manzana
Noruega 4445 4445 2155 2155 2105 2105 1505 1505 2200 Manzana
Canada 812 812 1323 1323 3969 3969 1323 1323 576 Manzana
Belgica 504 504 918 789 853 728 1199 1113 1544 Manzana
Suecia 2602 2602 764 764 898 898 1197 1197 881 Manzana
Emiratos_Arabes 1122 1122 1045 1045 857 921 1058 1058 200 Manzana
Dinamarca 3131 3131 1462 1462 900 900 633 633 612 Manzana
Otros_America 1099 722 819 475 1186 439 488 397 276 Manzana
Otros 22182 22080 12590 12172 4159 4159 2843 2843 5922 Manzana

El conjunto de datos corresponden a los volúmenes exportados a los distintos destinos en toneladas.

2.2.1 ¿Cómo importar datos en R?

El primer paso en R es importar datos para analizarlos. Para trabajar en R, se utilizan herramientas denominadas funciones. La función que se utiliza para importar datos en un gran número de formatos es la función: read.table. Siempre es aconsejable estudiar cuidadosamente la ayuda de la función.

?read.table

La funcion read.csv2 es un “alias” de la función original, es decir, es un atajo para importar datos a partir de archivos con extensión csv separados por punto y coma, con decimal “,”.

En R se pueden importar datos de muchos formatos, a través de la función read.table, es la función “madre”. El formato más común por sus características es el formato csv o comma separated values para ello se puede utilizar directamente la función read.csv2.

Entonces vamos a importar los datos a R y vamos a guardarlo en la memoria bajo el nombre de fruta_tn.

fruta_tn <- read.csv2("datos_fruta.csv")

Se debe tener en cuenta que R es key sensitive fruta_n, Fruta_n, fruta_N,etc son objetos distintos !!

2.2.2 ¿Cómo listar/resumir las tablas?

En R existen innumerables herramientas para ver parte o la totalidad de las tablas, es muy importante, este paso para asegurarnos de que la importación de los datos fue correcta. Por ejemplo, podemos utilizar la función head() que nos muestra un “encabezado” de la tabla, es decir, los primeros datos y los nombres de las columnas. Nuevamente es recomendable ver la ayuda:

?head

Entonces podemos aplicarlo sobre la tabla de datos que está guardada en fruta_tn.

head(fruta_tn)
##             Pais  X2014 Ene.Jul.2014  X2015 Ene.Jul.2015 X2016
## 1         Brasil 127547        89283 113753        76907 95747
## 2 Estados_Unidos  43723        43723  46977        46977 42356
## 3        Holanda  20247        20247  11419        11419 11236
## 4       Paraguay   2728         1559   2268          875  4412
## 5          Rusia  88801        81849  68102        65424 64073
## 6         Italia  36579        36579  25335        25335 28118
##   Ene.Jul.2016 X2017 Ene.Jul.2017 Ene.Jul.2018 Fruta
## 1        64567 88200        66859        65154  Pera
## 2        42356 31438        31438        39328  Pera
## 3        11236  7419         7419        10027  Pera
## 4         2677  6526         3899         4164  Pera
## 5        60489 60127        57772        76785  Pera
## 6        28118 18347        18347        23874  Pera

Existen otras funciones que nos permiten ver la parte final de la tabla, dicha función es la llamada tail()

tail(fruta_tn)
##               Pais X2014 Ene.Jul.2014 X2015 Ene.Jul.2015 X2016
## 29         Belgica   504          504   918          789   853
## 30          Suecia  2602         2602   764          764   898
## 31 Emiratos_Arabes  1122         1122  1045         1045   857
## 32       Dinamarca  3131         3131  1462         1462   900
## 33   Otros_America  1099          722   819          475  1186
## 34           Otros 22182        22080 12590        12172  4159
##    Ene.Jul.2016 X2017 Ene.Jul.2017 Ene.Jul.2018   Fruta
## 29          728  1199         1113         1544 Manzana
## 30          898  1197         1197          881 Manzana
## 31          921  1058         1058          200 Manzana
## 32          900   633          633          612 Manzana
## 33          439   488          397          276 Manzana
## 34         4159  2843         2843         5922 Manzana

Finalmente, se suele hacer un resumen estadístico de las tablas para ver el rango de los valores, el tipo de dato en cada columna y si esos datos fueron importados adecuadamente. En este caso la función que se utiliza es summary().

summary(fruta_tn)
##               Pais        X2014         Ene.Jul.2014       X2015       
##  Alemania       : 2   Min.   :   500   Min.   :  360   Min.   :   567  
##  Bolivia        : 2   1st Qu.:  2340   1st Qu.: 1711   1st Qu.:  1358  
##  Brasil         : 2   Median :  6244   Median : 4204   Median :  3244  
##  Canada         : 2   Mean   : 15749   Mean   :13268   Mean   : 12682  
##  Emiratos_Arabes: 2   3rd Qu.: 11725   3rd Qu.:11137   3rd Qu.: 12321  
##  Estados_Unidos : 2   Max.   :127547   Max.   :89283   Max.   :113753  
##  (Other)        :22                                                    
##   Ene.Jul.2015       X2016        Ene.Jul.2016       X2017      
##  Min.   :  475   Min.   :  667   Min.   :  439   Min.   :  488  
##  1st Qu.: 1244   1st Qu.: 1815   1st Qu.: 1453   1st Qu.: 1230  
##  Median : 3011   Median : 4064   Median : 3046   Median : 3472  
##  Mean   :10423   Mean   :11561   Mean   : 9693   Mean   : 9586  
##  3rd Qu.:11130   3rd Qu.:10529   3rd Qu.: 9632   3rd Qu.: 8754  
##  Max.   :76907   Max.   :95747   Max.   :64567   Max.   :88200  
##                                                                 
##   Ene.Jul.2017    Ene.Jul.2018       Fruta   
##  Min.   :  397   Min.   :  200   Manzana:17  
##  1st Qu.: 1134   1st Qu.: 1238   Pera   :17  
##  Median : 2930   Median : 4378               
##  Mean   : 8074   Mean   : 9772               
##  3rd Qu.: 6279   3rd Qu.: 7030               
##  Max.   :66859   Max.   :76785               
## 

Se debe tener en cuenta que la función utilizada realiza un resumen con estadísticos de posición sobre los datos “enteros” y “reales”, mientras que sobre los datos tipo texto R los considera factores. Los factores en R no son caracteres ni cadena de caracteres sino que son categorías con distintos niveles que R le asigna un determinado orden. Por lo tanto, en el resumen cuenta los niveles que tiene cada factor.

fruta_tn$Fruta
##  [1] Pera    Pera    Pera    Pera    Pera    Pera    Pera    Pera   
##  [9] Pera    Pera    Pera    Pera    Pera    Pera    Pera    Pera   
## [17] Pera    Manzana Manzana Manzana Manzana Manzana Manzana Manzana
## [25] Manzana Manzana Manzana Manzana Manzana Manzana Manzana Manzana
## [33] Manzana Manzana
## Levels: Manzana Pera

2.2.3 Realizar un gráfico de barras

Como se mencionó anteriormente una de las mayores potencialidades de R es su capacidad gráfica. Existen innumerables herramientas para la construcción de gráficos. Los gráficos de barras tienen gran cantidad de variantes de acuerdo a la necesidad de la información que se desea mostrar, incluso existen galerías propias de gráficos de barras. Ver https://www.r-graph-gallery.com/barplot/.

La función base en R para los gráficos de barras es la función barplot(). Por ejemplo si queremos graficar la exportación total del año 2017 :

fruta2017 <- fruta_tn$X2017
names(fruta2017) <- fruta_tn$Pais
fruta_ord <- sort(fruta2017,decreasing = TRUE) 
barplot(fruta_ord[1:9],cex.names = 0.6)

Se puede personalizar los gráficos al nivel deseado. Por ejemplo, agregar etiquetas en los ejes y un título al gráfico.

barplot(fruta_ord[1:9],cex.names = 0.6, xlab = "Pais", ylab = "tn", 
        main = "Principales destinos de peras de la región", col = "green")

Se puede presentar el gráfico de manera distinta:

barplot(fruta_ord[1:9],cex.names = 0.6, xlab = "Pais", ylab = "tn", horiz = T, las = 1,
        main = "Principales destinos de peras de la región", col = "green")

Colores para distintos paises:

barplot(fruta_ord[1:9],cex.names = 0.6, xlab = "Pais", ylab = "tn", horiz = T, las = 1,
        main = "Principales destinos de peras de la región", col = rainbow(9))

2.3 GGPLOT2 una manera distinta de ver los gráficos

R dispone de una gran contribución de código por parte de la comunidad de programadores internacionales. En R el código se dispone en funciones que son las herramientas básicas, y las funciones en “paquetes” o packages. Los paquetes se organizan en librería como los libros se organizan en bibliotecas.

Uno de los paquete más destacados para la realización de gráficos debido a la semántica y la teoría de gráficos utilizada, es el paquete ggplot2. Los gráficos en ggplot se programan en capas.

Vamos a realizar el gráfico de barras desde ggplot2:

#LLamamos el paquete
library(ggplot2)
library(ggthemes)
#Importamos los datos
pera2018 <- read.csv2("datos_pera2018.csv")

ggplot(data = pera2018, aes(x = Codigo, y = Exportacion_primer_semestre, fill = Codigo)) +
  geom_bar(stat = "identity") + theme_minimal() + theme(legend.position = "none") 

2.3.1 Gráficos interactivos

Existen librerías destinadas a ello algunas como la librería plotly crea gráficos interactivos para sitios web basados en Java. Ésta librería existe tanto para R como para PYTHON. Se recomienda visitar la galería:

https://plot.ly/r

df1 <- read.csv2("datos_fruta2.csv",stringsAsFactors = FALSE)
dfp <- df1 
# colores grises para el contorno
l <- list(color = toRGB("grey"), width = 0.5)
# opciones de proyeccion
g <- list(
  showframe = TRUE, #Estaba en FALSE
  showcoastlines = TRUE, #Estaba en FALSE
  projection = list(type = 'Mercator')
)
p <- plot_geo(dfp) %>%
  add_trace(
    z = ~Ene.Jul.2018, color = ~Ene.Jul.2018, colors = 'Greens',
    text = ~Pais, locations = ~Codigo, marker = list(line = l)
  ) %>%
  colorbar(title = 'Volumen', tickprefix = 'tn') %>%
  layout(
    title = 'Exportaciones de peras primer semestre 2018 <br>Fuente:<a href="https://datos.agroindustria.gob.ar/dataset/anuario-de-exportaciones-de-frutas"> SENASA </a>',
    geo = g
  )
p

2.4 Gráficos “animados”

Se han desarrollado asimismo gráficos con animaciones que suelen ser útiles sobretodo cuando se pretende visualizar el comportamiento de las variables en el tiempo. Se recomienda ver: https://github.com/thomasp85/gganimate