Capítulo 1 Introducción

El análisis de datos es el pilar fundamental de Data Analytics y Data Science. Por supuesto, el uso herramientas computacionales es importante. A lo largo de este materal usaremos el R, pero muchos de los conceptos aquí expuestos pueden trabajarse, sin problema, en otro lenguaje como Python o Julia.

En la Universidad del Norte, los estudiantes tienen la posibilidad de tomar, a nivel de pregrado, cursos de Análisis de Datos. Parcticularmente, los estudiantes de la División de Ingenierías pueden tomar los cursos de :

  1. Análisis de Datos en Ingeniería I, ofrecido por el Departamento de Ingeniería Industrial;
  2. Análisis de Datos en Ingeniería II, ofrecido por el Departamento de Ingeniería Industrial;
  3. Machine Learning, ofrecido por el Departamento de Ingeniería Eléctrica y Electrónica y
  4. Analítica de Datos Avanzada; ofrecido por el Departamento de Ingeniería Industrial.

Estos cursos, cuya dificultad aumenta conforme a la enumeración anterior, permiten a los estudiantes de la División de Ingenierías tener herramientas básicas, intermedias y avanzadoas para convertir datos en información.

1.1 Analítica de Datos

1.1.1 Conceptos básicos

1.1.2 Gráficos básicos

1.1.3 Tópicos avanzados

1.2 R

R es un entorno de programación multiplataforma y un lenguaje de programación orientado a objetos similar a S, pero bajo licencia GNU, para el análisis gráfico y estadístico de datos creado en por Robert Gentleman y Ross Ihaka en Agosto de 1993. La página oficial de R es https://www.r-project.org/.

Logo oficial del `R`.

Figura 1.1: Logo oficial del R.

Por ser multiplataforma, R puede utilizarse en diferentes sistemas operativos, incluyendo Windows, macos y varias distribuciones de Linux.

Qué es `R`? Ver https://www.youtube.com/watch?v=XcBLEVknqvY.

Figura 1.2: Qué es R? Ver https://www.youtube.com/watch?v=XcBLEVknqvY.

Desde su concepción y gracias a su constante evolución, R proporciona una gran cantidad de métodos estadísticos y gráficos, y es altamente extendible. Esta última característica permite el desarrollo e implementación de nuevos métodos estadísticos y nuevos tipos de gráficos, además de la automatización de reportes con relativa facilidad.

1.2.1 Por qué R?

1.2.2 CRAN

CRAN es el acrónimo de Comprehensive, R, Archive, Network, y corresponde a una red de servidores ftp y web de todo el mundo que almacenan versiones idénticas y actualizadas de código y documentación para R.

El sitio web oficial es https://cran.r-project.org/

1.2.3 Descarga e instalación

A Septiembre de 2021, la versión más reciente de R es la 4.1.1, también denominada “Kick Things”.

Página oficial del `R`. Note que la  versión más reciente es la 4.1.1.

Figura 1.3: Página oficial del R. Note que la versión más reciente es la 4.1.1.

Dependiendo del sistema operativo, R puede descargarse en los siguientes enlances:

Las versiones de R tienen un ciclo de actualización cada 6 meses, y es altamente recomendable tener instalada la última versión del programa en el computador.

Una vez descargado el instalador, basta con seguir las instrucciones para instalar el programa con las opciones por defecto.

1.2.4 Paquetes

Los paquetes o packages son colecciones de funciones y/o datos que ayudan a potencializar las funcionalidades de R. Cada paquete tiene su documentación y, en muchos casos, ejemplos concretos que permiten comenzar a utilizarlos de inmediato.

Algnos paquetes de `R`.

Figura 1.4: Algnos paquetes de R.

Existen paquetes para visualización, minería de texto, automatización de reportes y mucho más. La lista completa de paquetes se encuentra aquí. A la fecha existen href=“available_packages_by_date.html” paquetes; algunos ejemplos conocidos son MASS, ggplot2, shiny, y caret, entre otros.

Para utilizar un paquete, debemos seguir dos pasos

  1. Instalar el paquete; y
  2. cargarlo a la sesión de trabajo.

La instalación de los paquetes se realiza utilizando la función install.packages('PackageName'), donde el argumento PackageName corresponde al nombre del paquete que quiere instalarse. Por ejemplo, si quisiéramos instalar el paquete DescTools, escribimos:

## instalación del paquete DescTools
install.packages('DescTools', dependencies = TRUE)

Posteriormente, aparecerán algunos mensajes que nos indican el progreso de dicha instalación.

Cuando el proceso concluya, procedemos cargar el paquete a la sesión de trabajo. Para ello, utilizamos la función library('PackageName'). En nuestro caso, reemplazamos el argumento PackageName por el nombre del paquete que quieres utilizar:

## carga del paquete DescTools en la sesión de trabajo
library('DescTools')

Con esta instrucción, R importa las funciones contenidas en el paquete DescTools a la sesión de trabajo actual.

La instrucción install.packages('PackageName') sólo debe ejecutarse una vez. Sin embargo, es necesario ejecutar library('PackageName') cada que inicies una sesión en R. Esto se debe a que aunque hayas instalado las funciones de un paquete con anterioridad, las sesiones de R se inician sólo con los objetos y funciones de base.

1.2.5 Operadores básicos

Operadores aritméticos

Operadores artiméticos en `R`. Tomado de [R para principantes](https://bookdown.org/jboscomendoza/r-principiantes4/operadores-aritmeticos.html).

Figura 1.5: Operadores artiméticos en R. Tomado de R para principantes.

Operadores relacionales

Operadores relacionales en `R`. Tomado de [R para principantes](https://bookdown.org/jboscomendoza/r-principiantes4/operadores-relacionales.html).

Figura 1.6: Operadores relacionales en R. Tomado de R para principantes.

Operadores lógicos

Operadores lógicos en `R`. Tomado de [R para principantes](https://bookdown.org/jboscomendoza/r-principiantes4/operadores-logicos.html).

Figura 1.7: Operadores lógicos en R. Tomado de R para principantes.

1.2.6 Creación de funciones

Una de las grandes ventajas de R es la posibilidad de construir y/o agregar funciones propias. Como se mencionó anteriormente, los paquetes están conformados por funciones, además de datos.

Una función es un conjunto de instrucciones organizadas para realizar una tarea específica y corresponde a un objeto que el intérprete de R es capaz de entender y utilizar sus argumentos para completar una acción.

Algunas funciones disponibles por defecto en R son

## funciones R por defecto
sqrt()
mean()
summary()
rowSums()
colSums()

La estructura de una función es

Estructura de una funcíon en `R`. Tomado de [_Learn by_ <_example_>](https://www.learnbyexample.org/r-functions/).

Figura 1.8: Estructura de una funcíon en R. Tomado de Learn by <example>.

lo cual implica que toda función, como mínimo, cuatro componentes:

  1. name: Corresponde al nombre de la función. Se recomienda usar guión bajo o nombres con tipografía camello para nombrarlas, es decir, calcula_media y GraficoHist. Bajo ninguna circunstancia deben usarse nombres como coeficiente-variacion.
  2. args: Este componente de la función hace referencia a los argumentos de esta. Por argumentos denominamos a las entradas que requiere la función para hacer su trabajo. Una función puede tener varios argumentos; por ejemplo la función t.test tiene los argumentos x, y, alternative, mu, paired, var.equal, y conf.level. Algunas veces los argumentos tienen valores por defecto. De esta forma, cuando se utiliza la función, no es necesario especificar el valor de dicho argumento. Por ejemplo, en la función mean, el argumento trim = 0.
  3. function body: Contiene los pasos, procedimientos y cálculos que deben hacerse para producir un resultado.
  4. value: Este es el resultado de la función. Dependiendo de qué tan compleja sea la función, el value puede ser un escalar, un data.frame, una lista, un archivo de texto o un gráfico. Hay muchas posibilidades.

Ejemplo

Como ilustración, construyamos una función que, dado un vector de datos de cualquier longitud, calcule el coeficiente de variación (CV).

El CV está definido como

\[CV = \frac{s}{\bar{x}}\] donde \(s\) es la desviación estándar y \(\bar{x}\) es la media muestral.

Si el vector de datos es

## datos
v <- c(3, 2, 3, 4, 5, 4, 5, 5, 4, 2, 9, 8) 

entonces nuestra función, que llamaremos CoefVar, debe tener como argumento dicho vector. Internamente, CoefVar debe calcular la desviación estándar y la media muestral de v. Por lo tanto,

## cálculo del coeficiente de variación
## v es un vector numérico
CoefVar <- function(v){
   ## cálculos
   m <- mean(v)      ## media
   s <- sd(v)        ## s
   resultado <- s/m  ## CV
  
  ## output
  return(resultado)
}

Ahora, para usar nuestra función CoefVar con el vector v hacemos

## cálculo del CV
CoefVar(v)
## [1] 0.4784937

Teniendo el valor del CV, podríamos determinar si la media muestral es una cantidad representativa del conjunto de datos. Para ello comparamos el resultado de \(100\times\)CoefVar con 30%.

## función para determinar si la media representativa
representativa <- function(v, cutoff = 30){
  CV_p <- 100*CoefVar(v)
  decision <- ifelse(CV_p > cutoff, 'no', 'si')
  list(CV_p = CV_p, decision = decision)
}

Observe que en esta función incluimos un argumento denominado cutoff. Por defecto, cutoff = 30. Además. la eultima línea de la función comienza con list, lo cual implica que el resultado de la función será una lista de dos componentes: CV_p y decision.

Veamos qué ocurre con el vector v utilizando los valores por defecto:

## aplicación de la función representativa
representativa(v)
## $CV_p
## [1] 47.84937
## 
## $decision
## [1] "no"

Por lo tanto, el CV del vector v es 0.478. Como \(100\times\)CVp\(>30\), la decisión es que la media no es representativa de los datos.

Si queremos cambiar el argumento cutoff basta con hacer

## representatividad con cutoff = 50
representativa(v, cutoff = 50)
## $CV_p
## [1] 47.84937
## 
## $decision
## [1] "si"

Observe que decision es diferente esta vez. Si queremos extraer el segundo elemento del resultado obtenido con la función representativa, debemos asignar dicho resultado a un objeto y posteriormente operar sobre él de la siguiente manera:

## extrayendo la decisión
decision <- representativa(v, cutoff = 50)
decision[[2]]
## [1] "si"

1.2.7 Obteniendo ayuda

Hay múltiples formas de acceder a la ayuda cuando trabajamos con R. En https://www.r-project.org/help.html se encuentra una descripción de cómo hacerlo.

Podemos buscar ayuda, principalmente, a través de la consola del R utilizando los siguientes mecanismos:

  1. help y ?. Si requerimos ayuda sobre la función mean, podemos escribir ?mean o help(mean) en la consola del R. El resultado será:
Resultado de escribir `?mean` en la consola del `R`.

Figura 1.9: Resultado de escribir ?mean en la consola del R.

  1. apropos('word'). Esta función en R permite encontrar todas las funciones del espacio de tabajo que contienen la palabra word. Por ejemplo, apropos('mean') produce
##  [1] ".colMeans"     ".rowMeans"     "colMeans"      "kmeans"       
##  [5] "mean"          "mean.Date"     "mean.default"  "mean.difftime"
##  [9] "mean.POSIXct"  "mean.POSIXlt"  "rowMeans"      "weighted.mean"

Si queremos saber qué hace rowMeans o cuáles son sus argumentos, basta con escribir ?rowMeans o help(rowMeans) en la consola.

  1. RSiteSearch(). Esta función busca información en las páginas de ayuda de las todas las funciones y en las viñetas de todos los paquetes de CRAN, así como en CRAN Task Views.

  2. R FAQs. Hay tres listas principales de preguntas frecuentes (FAQs) que se actualizan periódicamente para reflejar las preguntas más frecuentes de los usuarios de R: R Main FAQs, R FAQs para Windows y R FAQs para macos

  3. Stack overflow. Este es un sitio bien organizado para ayuda y discusiones sobre programación. Para acceder directamente a las discusiones relacionadas con R, se recomienda visitar https://stackoverflow.com/questions/tagged/r

  4. R-help-es. Esta es una lista de correo, creada en 2009, para solicitar ayuda sobre R en español y se entiende como un complemento social a la documentación, libros, etc. disponibles sobre R. Puede acceder directamente a los archivos en https://stat.ethz.ch/pipermail/r-help-es/

1.2.8 Lectura de datos

Los datos se almacenan de múltiples formas. Los formatos más comunes son

  1. Archivos de texto cuya extensión es .txt;
  2. hojas de cálculo de Excel, cuya extensión es .xls o .xlsx;
  3. archivos separados por coma, cuya extensión es .csv;
  4. archivos con extensión .dat;
  5. archivos con extensión .sav provenientes de SPSS; y
  6. archivos disponibles en Google Drive o Dropbox.

En R existen diferentes funciones que permiten leer casi cualquier tipo de datos. Algunas funciones clave son

scan()
read.table()
read.csv()
readLines()
read.xls()  # del paquete gdata
fread()     # del paquete data.table

Algunos ejemplos adicionales pueden encontrarse en el Capítulo8 del Manual de R, o en el Capítulo 11 de R for Data Science.

Se sugiere al lector consultar la ayuda de las funciones anteriores.

Por ejemplo, si tenemos el URL https://bit.ly/2RmO1OR donde se encuentran almacenados unos datos, podemos utilizar la función read.table para leerlos en R:

## lectura de datos desde un URL
url <- "https://bit.ly/2RmO1OR" 
d <- read.table(url, header = TRUE)

## primeras 10 filas
head(d, 10)
##    Resistencia  Edad
## 1      2158.70 15.50
## 2      1678.15 23.75
## 3      2316.00  8.00
## 4      2061.30 17.00
## 5      2207.50  5.50
## 6      1708.30 19.00
## 7      1784.70 24.00
## 8      2575.00  2.50
## 9      2357.90  7.50
## 10     2256.70 11.00

Ahora, utilizar los datos contenidos en el objeto d podemos aplicar diferentes técnicas de Analítica de Datos para extrer información. Por ejemplo, podemos construir un diagrama de dispersión para explorar la relación que existe entre las variables Resistencia y Edad:

## paquetes
library(ggplot2)
library(ggExtra)
 
## gráfico
p <- ggplot(d, aes(x = Edad, y= Resistencia)) +
      geom_point() +
      theme(legend.position="none") + theme_minimal()
ggMarginal(p, type="density")
Diagrama de dispersión y densidades para `Resistencia` vs. `Edad`.

Figura 1.10: Diagrama de dispersión y densidades para Resistencia vs. Edad.

1.3 RStudio

RStudio es un entorno de desarrollo integrado (IDE) para R disponible en ediciones comerciales y de código abierto y se ejecuta en el escritorio (Windows, macos y Linux).

Página oficial del `R`. Note que la  versión más reciente es la 4.1.1.

Figura 1.11: Página oficial del R. Note que la versión más reciente es la 4.1.1.

RStudio incluye una consola, un editor que resalta la sintaxis y admite la ejecución directa del código, así como herramientas para el trazado, el historial, la depuración y la gestión del espacio de trabajo.

Para descargar Rstudio, basta con visitar la página oficial. Una vez allí, basta escoger la versión acorde con nuestro sistema operativo, preferiblemente gratuita.

Una vez descargado, es suficiente con abrir el instalador y seguir las instrucciones. Cuando el proceso termine, el siguiente paso es abrirl el programa haciendo click en el ícono de RStudio y vse abrirá una ventana similar a esto:

RStudio IDE. Tomado de [Diego Calvo](https://www.diegocalvo.es/definicion-de-rstudio/rstudio-ejemplo-de-paneles/).

Figura 1.12: RStudio IDE. Tomado de Diego Calvo.

Por ser un IDE, RStudio está compuesto por cuatro paneles:

  • Panel 1. Está ubicado en la esquina superior izquierda. En este panel se escriben los scripts, los cuales corresponde a instrucciones que R puede leer y ejecutar.
  • Panel 2. Está ubicado en la parte superior derecha. Este panel está compuesto, principalmente, por dos pestañas: Workspace y History. La pestaña Workspace muestra los objetos y funciones creados dutante la sesión de trabajo.
  • Panel 3. Este panel, ubicado en la esquina inferior derecha, está compuesto por varias pestañas, incuyendo Files, Plots, Packages y Help. La pestaña Files muestra los archivos presentes en el directorio de trabajo; Plots muestra los diferentes gráficos que se crean en la sesión; Packages muestra los diferentes paquetes instalados en R y aquellos en uso durante la sesión de trabajo; y, finalmente, Help nos muestra la ayuda de funciones y/o paquetes.
  • Panel 4. Este panel, ubicado en la esquina inferior izquierda, corresponde a la consola del R. En este panel todas las instrucciones o scripts son interpretadas y ejecutadas por el programa.
Es posible modificar la organización del RStudio IDE. Para ello, basta con ingresar a Tools –> Global Options... –> Pane Layout.