Minería de Datos

Práctica 1. Instalación y uso de R / RStudio

Author

Dr. Jorge Párraga Álava

Facultad de Ciencias Informáticas

Preliminares

Algo de historia

R fue creado en 1993 como un entorno para el análisis estadístico y gráfico por Roberth Gentleman y Ross Ihaka, de la Universidad de Auckland en Nueva Zelanda.

A partir de 1997 su desarrollo (R-base) es llevado por un grupo de programadores conocido como “The R-core team”. En la actualidad, los usuarios pueden publicar paquetes que extienden la funcionalidad básica de R en distintas áreas. Existe un repositorio oficial de paquetes llamado: Comprehensive R Archive Network (CRAN).

¿Por qué usar R?

  • R es software libre 😁 al distribuirse bajo licencia GNU GPL.

  • R es multiplataforma 💻, disponible para Windows, MAC y GNU/Linux.

  • La sintaxis es simple e intuitiva 🤑 y con buena variedad de funciones gráficas 📊.

  • R es extensible 📝 mediante funciones y paquetes 📦 que son publicados por los usuarios.

  • La comunidad de R es muy prolífica 💬 y colaborativa 🤝: R-bloggers, etc.

  • Cada vez más usado 📈, no sólo en la academia , sino también en el mundo empresarial por gigantes como Google, Facebook, Microsoft, IBM, etc.

Instalación de R

Windows

  1. Ingrese aquí y seleccione el vínculo “Download R for Windows” (84MB de tamaño).

  1. Haga clic en el vínculo “base”. Seleccione la opcion “R 4.0.3 for Windows”, descargue el instalador.

  1. Con el instalador descargado, realice la instalación.

  2. Una vez finalizada la instación abra R y observará la siguiente interfaz:

Instalación de R en Ubuntu

Para instalar la última versión de R en Ubuntu utilice los siguientes comandos:

sudo add-apt-repository "deb http://cran.rstudio.com/bin/linux/ubuntu $(lsb_release -cs)/"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo apt-get update
sudo apt-get install r-base r-base-dev

Luego de ello, podrá ejecutar R desde la terminal, escribiendo el comando R:

Instalación de RStudio

La interfaz de usuario de R no es muy amigable ni versátil. Por ello, interactuaremos con R a través de RStudio (ahora llamado Posit), que es una interfaz que facilita muchas de las tareas de programación y análisis de datos en R.

  1. Vaya a la página de descarga de RStudio.

  1. Seleccione y descargue la versión de RStudio Desktop según su sistema operativo.

  1. Ejecute el instalador recién descargado y realice los pasos siguientes:

    • Paso 1.

    • Paso 2.

    • Paso 3.

    • Paso 4.

    • Paso 5.

Si abrimos RStudio vamos a ver algo parecido a lo que se muestra en la imagen:

Instalación de Rtools

En algunos casos para usar paquetes en R (4.0.0 o superior) será necesario instalar Rtools, el que trae programas para compilar como el GCC COMPILER.

  1. Haga clic aquí y descargue Rtool.

  1. Ejecute el asistente de instalación y realice los pasos siguientes:

    • Paso 1.

    • Paso 2.

    • Paso 3.

    • Paso 4.

    • Paso 5.

  2. Abrimos RStudio y, en la consola ejecutar:

writeLines('PATH="${RTOOLS40_HOME}\\usr\\bin;${PATH}"', con = "~/.Renviron")

  1. Finalmente, reiniciar RStudio, y en la consola escribir:
Sys.which("make")

Deberá obtener el siguiente mensaje:

           make 
"/usr/bin/make" 

En Linux, no es necesario instalar Rtools, pero si algunos paquetes de desarrollo en GNOME XML library:

sudo apt install libcurl4-openssl-dev libssl-dev libxml2-dev

También, cuando no ha instalado R previamente, se podría requerir:

sudo apt install r-base
sudo apt install r-base-dev

Empezar a trabajar con R

Creación de Proyectos

Los proyectos en RStudio son una forma de organizar nuestros archivos.

  • Para crear un proyecto en RStudio, se debe hacer clic en el menú "File" -> "New Project" -> "New Directory" -> "New Project".

  • Ingrese el nombre del directorio para guardar su proyecto, por ejemplo: “Curso-MD”, y clic en "Create Project"

  • Una vez creado el proyecto, genere la siguiente estructura de directorios, dirigiéndose al panel Miscellaneus (ventana inferior derecha de RStudio), en la pestaña "Files" y luego clic en "New Folder".

  • Todas las operaciones por código que se realicen deben ser guardadas dentro de la carpeta Scripts. Estos archivos deben tener la extensión .R

Paquetes en R

Un paquete (package en inglés) es simplemente un conjunto de funciones, datos y documentación disponible para usar en R. Cuando abrimos RStudio, se cargan automáticamente paquetes: son los paquetes de R-base. Puedes ver sus nombres tecleando en la consola loadedNamespaces().

R, en su repositorio oficial llamado CRAN, dispone de +10.000 paquetes.

Para instalar un paquete desde la consola use install.packages("nombre_paquete").

Para instalar en modo gráfico diríjase al panel de miscellaneous, en la pestaña Packages, luego en Install, escriba el nombre del paquete y, luego clic en Install.

Para cargar un paquete previamente instalado use library("nombre_paquete").

Ejemplo:

Instalemos el paquete igraph que se utiliza para manipular/gestionar grafos:

install.packages("igraph")

Una vez instalado, cargue el paquete con la instrucción:

library("igraph")

Para no instalar paquetes previamente instalados use:

if(!require(igraph)) {install.packages("igraph")}

Ayuda en R

Hay varias formas de pedir la ayuda de R.

  • Para ayuda de paquetes use help(sum) o ?sum. Esto muestra la documentación de ayuda de la función sum.

  • Para ayuda de funciones use library(help="stats"). Esto muestra la documentación de ayuda del paquete stats.

  • Para ver las vignettes de un paquete, use vignette("dplyr"). Esto muestra las viñetas del paquete dplyr.

Programación en R

Variables y tipos de datos

El símbolo <- es el operador para asignar valores a las variables. También se puede utilizar =.

  variable1 <- 5000
  variable1
[1] 5000
  variable2 <- "FCI"
  variable2
[1] "FCI"

El símbolo # se utiliza para introducir un comentario. Todo lo que quede a la derecha de # no se ejecutará.

  # esto es un comentario
  variable3 <- TRUE
  variable3
[1] TRUE

Las variables en R pueden almacenar los siguientes tipos de datos.

  variable1 <- 12.34 #numérico
  variable2 <- "UTM" #caracter
  variable3 <- FALSE #lógico
  variable4 <- 4L #entero, agrega L al valor numérico
  variable5 <- factor(c("hombre", "mujer", "mujer", "mujer", "hombre", "mujer"), 
                      levels = c("hombre", "mujer")) 
                      #factor sin orden
  variable6 <- factor(c("alto", "bajo", "bajo", "medio", "alto"), 
                      levels = c("bajo", "medio", "alto"),
                      ordered = TRUE) 
                      #factor con orden 

Para conocer el tipo de variable, se utiliza la función class.

  class(variable4) 
[1] "integer"

Para probar si el objeto es de un tipo de dato particular:

  is.integer(variable1)
[1] FALSE
  is.character(variable1)
[1] FALSE
  is.factor(variable1)
[1] FALSE
  is.logical(variable3)
[1] TRUE

Para visualizar objetos en R, usamos cat() o print().

  cat(variable2)
UTM
  print(variable6)
[1] alto  bajo  bajo  medio alto 
Levels: bajo < medio < alto

Operadores

En R, los operadores son símbolos especiales que realizan operaciones específicas en uno o más valores. Entender estos operadores es fundamental para programar eficazmente en R.

Operadores Aritméticos

Los operadores aritméticos realizan operaciones matemáticas básicas.

# Suma
5 + 3
[1] 8
# Resta
10 - 4
[1] 6
# Multiplicación
6 * 2
[1] 12
# División
15 / 3
[1] 5
# Potenciación
2 ^ 3
[1] 8
# División entera
17 %/% 5
[1] 3
# Módulo (resto de la división)
17 %% 5
[1] 2

Operadores de Comparación

Estos operadores comparan valores y devuelven un resultado booleano (TRUE o FALSE).

# Igual a
5 == 5
[1] TRUE
# No igual a
5 != 4
[1] TRUE
# Mayor que
10 > 5
[1] TRUE
# Menor que
3 < 7
[1] TRUE
# Mayor o igual que
10 >= 10
[1] TRUE
# Menor o igual que
5 <= 6
[1] TRUE

Operadores Lógicos

Los operadores lógicos se utilizan para combinar condiciones.

# AND lógico
TRUE & FALSE
[1] FALSE
# OR lógico
TRUE | FALSE
[1] TRUE
# NOT lógico
!TRUE
[1] FALSE

Operadores Especiales

R tiene algunos operadores especiales para tareas específicas.

# Operador de secuencia
1:5
[1] 1 2 3 4 5
# Operador de pertenencia
5 %in% c(1, 3, 5, 7, 9)
[1] TRUE
# Operador de multiplicación de matrices
matrix(1:4, 2, 2) %*% matrix(5:8, 2, 2)
     [,1] [,2]
[1,]   23   31
[2,]   34   46

Estructuras de datos

R ofrece una variedad de estructuras de datos que permiten almacenar y manipular información de manera eficiente.

Vectores

Los vectores son la estructura de datos más básica en R. Contienen elementos del mismo tipo.

# Vector numérico
numeros <- c(1, 2, 3, 4, 5)
print(numeros)
[1] 1 2 3 4 5
# Vector de caracteres
frutas <- c("manzana", "banana", "cereza")
print(frutas)
[1] "manzana" "banana"  "cereza" 
# Vector lógico
logico <- c(TRUE, FALSE, TRUE, TRUE)
print(logico)
[1]  TRUE FALSE  TRUE  TRUE

Matrices

Las matrices son arreglos bidimensionales que contienen datos del mismo tipo.

# Crear una matriz
m <- matrix(1:9, nrow = 3, ncol = 3)
print(m)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
# Acceder a elementos
print(m[2, 3])  # Elemento en la fila 2, columna 3
[1] 8

También es posible crear una matriz a partir de la una unión de vectores. La función cbind() une columnas (vectores) en una matriz. Mientras que rbind() une filas (vectores).

Ahora crearemos una matriz con pesos y altura de personas, a partir de dos vectores:

peso <- c(68, 70, 80, 76) 
altura <- c(165, 169, 175, 170)
# Crear matriz a partir de dos vectores
matriz <- cbind(peso, altura)
matriz
     peso altura
[1,]   68    165
[2,]   70    169
[3,]   80    175
[4,]   76    170

Arrays

Los arrays son similares a las matrices, pero pueden tener más de dos dimensiones.

# Crear un array tridimensional
arr <- array(1:24, dim = c(2, 3, 4))
print(arr)
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 3

     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

Listas

Las listas pueden contener elementos de diferentes tipos, incluyendo otras listas.

# Crear una lista
mi_lista <- list(nombre = "Juan", edad = 30, notas = c(90, 85, 88))
print(mi_lista)
$nombre
[1] "Juan"

$edad
[1] 30

$notas
[1] 90 85 88
# Acceder a elementos de la lista
print(mi_lista$nombre)
[1] "Juan"
print(mi_lista[[2]])
[1] 30
print(mi_lista$notas[2])
[1] 85

Data Frames

Los data frames son similares a las tablas en una base de datos relacional. Son listas de vectores de igual longitud.

# Crear un data frame
df <- data.frame(
  nombre = c("Ana", "Jorge", "Carlos"),
  edad = c(25, 30, 35),
  ciudad = c("Portoviejo", "Guayaquil", "Santiago")
)
print(df)
  nombre edad     ciudad
1    Ana   25 Portoviejo
2  Jorge   30  Guayaquil
3 Carlos   35   Santiago
# Acceder a columnas
print(df$nombre)
[1] "Ana"    "Jorge"  "Carlos"
# Acceder a filas
print(df[2, ])
  nombre edad    ciudad
2  Jorge   30 Guayaquil

Factores

Los factores se utilizan para representar datos categóricos.

# Crear un factor
niveles_educacion <- factor(c("Primaria", "Secundaria", "Universidad", "Primaria", "Universidad"))
print(niveles_educacion)
[1] Primaria    Secundaria  Universidad Primaria    Universidad
Levels: Primaria Secundaria Universidad
# Ver niveles
print(levels(niveles_educacion))
[1] "Primaria"    "Secundaria"  "Universidad"

Estructuras de control

Las estructuras de control permiten ejecutar código de manera condicional o repetitiva. En R se las puede usar de la siguiente forma:

If-Else

La estructura if-else permite ejecutar código basado en condiciones.

x <- 7
if (x < 5) {
  print("x es mayor que 5")
} else if (x < 5) {
  print("x es menor que 5")
} else {
  print("x es igual a 5")
}
[1] "x es igual a 5"

For Loop

El bucle for se utiliza para iterar sobre una secuencia de elementos.

for (i in 1:5) {
  print(paste("Número:", i))
}
[1] "Número: 1"
[1] "Número: 2"
[1] "Número: 3"
[1] "Número: 4"
[1] "Número: 5"

While Loop

El bucle while se ejecuta mientras una condición sea verdadera.

contador <- 1
while (contador <= 5) {
  print(paste("Contador:", contador))
  contador <- contador + 1
}
[1] "Contador: 1"
[1] "Contador: 2"
[1] "Contador: 3"
[1] "Contador: 4"
[1] "Contador: 5"

Repeat Loop

El bucle repeat se ejecuta indefinidamente hasta que se encuentra una instrucción break.

x <- 1
repeat {
print(x)
x = x+1
if (x == 6){
break
}
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

Funciones

Las funciones en R son objetos que encapsulan un conjunto de instrucciones que realizan una tarea específica.

Definición de funciones

# Función simple
saludar <- function(nombre) {
  paste("Hola,", nombre, "!")
}

# Usar la función
print(saludar("FCI"))
[1] "Hola, FCI !"

Funciones con argumentos por defecto

potencia <- function(base, exponente = 2) {
  base ^ exponente
}

print(potencia(3))    # Usa el exponente por defecto (2)
[1] 9
print(potencia(3, 3)) # Especifica un exponente diferente
[1] 27

Funciones con número variable de argumentos

suma_variable <- function(...) {
  args <- list(...)
  sum(unlist(args))
}

print(suma_variable(1, 2, 3))
[1] 6
print(suma_variable(1, 2, 3, 4, 5))
[1] 15

Funciones anónimas

R permite crear funciones sin nombre, útiles para operaciones rápidas.

numeros <- 1:5
cuadrados <- sapply(numeros, function(x) x^2)
print(cuadrados)
[1]  1  4  9 16 25

Funciones como argumentos

En R, las funciones pueden ser pasadas como argumentos a otras funciones.

aplicar_funcion <- function(f, x) {
  f(x)
}

doble <- function(x) x * 2
triple <- function(x) x * 3

print(aplicar_funcion(doble, 5))
[1] 10
print(aplicar_funcion(triple, 5))
[1] 15

Carga de funciones desde un Script externo

Primero, creemos un nuevo script R llamado funciones_utiles.R con algunas funciones:

# Contenido de funciones_utiles.R

calcular_promedio <- function(numeros) {
  sum(numeros) / length(numeros)
}

fahrenheit_a_celsius <- function(fahrenheit) {
  (fahrenheit - 32) * 5/9
}

saludar <- function(nombre) {
  paste("¡Hola,", nombre, "! Bienvenido/a.")
}

Hay varias formas de cargar funciones desde un script externo:

  1. Usando source()
source("funciones_utiles.R")

# Ahora podemos usar las funciones
print(calcular_promedio(c(10, 20, 30)))
print(fahrenheit_a_celsius(98.6))
print(saludar("FCI"))
  1. Usando sys.source()

Esta función es similar a source(), pero ejecuta el script en un nuevo entorno:

env <- new.env()
sys.source("funciones_utiles.R", envir = env)

# Para usar las funciones, necesitamos referenciar el entorno
print(env$calcular_promedio(c(10, 20, 30)))
print(env$fahrenheit_a_celsius(98.6))
print(env$saludar("Juan"))
  1. Cargando funciones específicas

Si solo necesitamos algunas funciones del script, podemos cargarlas individualmente:

source("funciones_utiles.R")
calcular_promedio <- get("calcular_promedio")

# Ahora podemos usar la función cargada
print(calcular_promedio(c(15, 25, 35)))

Actividad calificada

La actividad tiene como objetivo aplicar los conceptos aprendidos en esta guía práctica sobre el uso de R y RStudio.

Instrucciones

  1. Crear un nuevo proyecto en RStudio con el nombre Mineria_Datos. Dentro del proyecto, organizar las carpetas de la siguiente manera:

    • Scripts: Para almacenar tus scripts de código R.

    • Datos: Para almacenar cualquier dataset que utilice en la actividad.

  2. Dentro del directorio Scripts, crear un script R llamado uso_rstudio.R. En este script, realizar las siguientes tareas:

    • Definición de Variables y Tipos de Datos:

      • Crear una variable numérica, una de texto, y una lógica.

      • Definir un vector numérico con al menos 10 elementos y un factor con al menos 3 niveles.

    • Estructuras de Datos:

      • Crear una matriz de 3x3 con números aleatorios.

      • Crear un data frame con al menos 3 columnas: nombre (carácter), edad (numérico), y ciudad (carácter). Llenar el data frame con datos ficticios.

    • Funciones:

      • Definir una función llamada estadisticas_basicas que reciba un vector numérico y devuelva un listado con la media y mediana del vector.

      • Definir otra función llamada filtrar_por_edad que reciba un data frame y una edad mínima, y devuelva un nuevo data frame que solo contenga las filas donde la edad sea mayor o igual a la edad mínima proporcionada.

    • Documentación:

      • Agregar comentarios al código explicando la funcionalidad de cada sección. Incluir al inicio del script información sobre carrera e integrantes del grupo. Además, información sobre lo que hace el código y cómo se usa.

Entrega

Una vez completada la actividad, subir comprimir el proyecto en formato .zip con el nombre MD_Practica_1_GrupoX. Donde X debe ser reemplazado por su número de grupo.

Criterios de Evaluación

  • Estructura y organización del proyecto (15%).

  • Implementación correcta de variables, funciones, y estructuras de datos (70%).

  • Documentación, formato de entrega y comentarios en el código (15%).

Referencias

  • Coll, V., Pérez, P. 2017. Curso de Introducción a R. Universidad de Valencia

  • Flor, J. 2017. Introducción a la Minería de Datos con R. IT-Latino.Net

  • Santana, J., Farfan, E. 2014. El arte de programar en R. Instituto Mexicano de Tecnología del Agua.