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:
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.
Una forma de definir a R es mencionando que no es R:
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.
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>
Obviamente, R posee algunas dificultades que deben ser mencionadas, como:
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:
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.
Una vez instalado el sistema hacemos click derecho en el logo y lo ejecutamos como administrador. Vemos la siguiente pantalla:
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.
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 + 2En 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 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.
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?
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.
| 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.
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.tableLa 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 !!
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:
?headEntonces 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
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))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") 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:
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
)
pSe 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