Módulo II

Taller de IA y CD

Author

Maciel-Cruz, EJ

Published

June 12, 2025

1 Conceptos Básicos

  1. Programación

    La programación se puede definir como un conjunto de instrucciones para crear una función o programa. Básicamente, es decirle a la computadora, mediante un lenguaje específico, que realice una tarea. La programación puede ser tan básica como lo siguiente:

    diez <- 5+5
    print(diez)
    [1] 10

    En el código previo, se generó una variable (“diez”), que tiene como función generar la operación aritmética de “5+5”, lo que da como resultado “10”, para corroborarlo, se utilizó la función “print”, lo que arroja el resultado de la función guardada en el objeto “diez”.

    Sin embargo, la programación puede ser tan compleja que requiere varias líneas de código para obtener resultados específicos, como el caso de algunos gráficos muy personalizados, o el Machine Learning.

  2. GUI

    Una interfaz gráfica de usuario (GUI, por sus siglas en inglés) es un entorno visual que permite a las personas interactuar con un programa de manera sencilla y amigable, utilizando elementos gráficos como ventanas, iconos y menús. Este tipo de interfaz facilita el uso de computadoras y dispositivos, ya que no requiere recordar comandos de texto, y es la forma en que la mayoría de los usuarios interactúan con sistemas operativos como Windows, macOS o aplicaciones como R Studio.

    Precisamente, la interfaz de R Studio es una GUI.

    De hecho, utilizo una GUI (R Studio y VSCode), para generar el curso y poder publicarlo en línea. La parte inferior, que dice “Terminal”, es lo que habitualmente usamos en Linux para introducir comandos.

  3. Bases de datos

    Una base de datos es un conjunto de información organizada de manera estructurada, que permite almacenar, consultar y analizar datos de forma eficiente. En otras palabras, es una colección de datos relacionados que pueden ser revisados, filtrados o utilizados para realizar análisis y generar reportes o gráficos, dándole un sentido específico para resolver algún problema.

    En la imagen anterior, observamos una base de datos clásica, ordenada y estructurada, las que trabajamos a diario en una GUI llamada Excel.

    Lo que vemos aquí como un bloque de texto es la misma base de datos, pero en un formato diferente de separación. Este formato permite ahorrar espacio de almacenamiento y facilita su exportación. La base de datos está guardada en un archivo de texto plano y la estamos visualizando con un editor de texto, que también es una GUI.

2 Formato Markdown.

El formato de archivo Markdown es un lenguaje de marcado ligero que permite crear documentos de texto plano con formato. Es ampliamente utilizado para escribir documentación, notas, blogs y otros tipos de contenido en línea. Markdown utiliza una sintaxis sencilla y fácil de leer, lo que lo hace accesible para usuarios sin experiencia en programación. Lo usaremos durante el taller para crear los documentos y el proyecto final.

Las principales códigos de formato en Markdown incluyen:

  • Encabezados: Se crean utilizando el símbolo de número (#) seguido del texto del encabezado. Por ejemplo, # Encabezado 1, ## Encabezado 2, etc.

3 Esto es un encabezado tipo 1

3.1 Esto es un encabezado tipo 2

3.1.1 Esto es un encabezado tipo 3

3.1.1.1 Esto es un encabezado tipo 4

  • Énfasis: Se utiliza asteriscos (*) o guiones bajos (_) para aplicar énfasis al texto. Por ejemplo, *texto en cursiva* o **texto en negrita**.

    • cursiva
    • negritas
    • negritas y cursiva
  • Listas: Se crean utilizando guiones (-) o asteriscos (*) para listas no ordenadas, y números seguidos de un punto (1.) para listas ordenadas. Por ejemplo:

    • Elemento de lista no ordenada
      • Otro elemento anidado
    1. Elemento de lista ordenada
    2. Otro elemento
      1. Elemento anidado
  • Enlaces: Se crean utilizando corchetes para el texto del enlace y paréntesis para la URL. Por ejemplo, texto del enlace.

Esos son los más frecuentes, pero dejo una imagen para que vean otros altamente utilizados:

Enlace directo a la imagen en la web:

https://www.kdnuggets.com/wp-content/uploads/markdown-cheatsheet-update.pnghttps://www.kdnuggets.com/wp-content/uploads/markdown-cheatsheet-update.png

4 Generalidades de Bases de Datos

4.1 Nombrar archivos

Un inconveniente al que nos enfrentamos en R a diferencia de cómo lo hacemos de forma habitual en nuestros archivos de la computadora es el nombramiento de archivos. De forma general, existen las siguientes recomendaciones para R, y su por qué:

  1. Usar guión bajo “_”, en vez de espacio ” “: tanto para los objetos creados en el entorno de R como para los archivos creados que vamos a utilizar en nuestro entorno de trabajo, preferentemente. Esto es debido a que el espacio está reservado como un separador de palabras y objetos, y no es considerado estrictamente como un carácter que utilizamos. Por ejemplo:

objeto 1 <- “Objeto 1”

Si intentamos correr el texto anterior en nuestro entorno de R, nos arrojaría un error, ya que lo considera como objetos separados, pero si lo hacemos de la siguiente forma:

objeto_1 <- "Objeto 1"

No se producen errores y se crea el objeto en nuestro ambiente.

Tip

Puedes usar guión bajo, puntos, texto junto, etc., el objetivo es no tener espacios.

  1. En los archivos que usemos, como el caso de las bases de datos, se procura usar una nomenclatura similar. Pese a la recomendación, si deseamos utilizar espacios, o tenemos muchos archivos y no los queremos renombrar por cuestiones de tiempo, una forma de solucionar eso es entrecomillar todo el código que tenga dicho espacio, por ejemplo:

library(“readr”) base <- read_csv(“~/EJMC/Trabajo/base de datos de prueba.xlsx”)

El código anterior, todo lo que se encuentra entrecomillado, es la dirección relativa de la base de datos que quiero asignar al objeto llamado base, por lo que le estoy diciendo a mi computadora que, textualmente, busque todo ese segmento de información, porque no está separado.

4.2 Extensiones de archivos

  1. CSV

    Los archivos .csv son archivos separados por comas (Comma Separated Values), que es un formato especial de documento que permite almacenar grandes cantidades de información en espacios reducidos (pocos megas en comparación con otros formatos como .xlsx), conservando toda su estructura. La desventaja es que es texto plano, es decir, no tiene negritas, cursivas, colores, tamaños de letra ni nada por el estilo. La ventaja, es que se puede manejar cientos de miles datos fácilmente sin que nuestra computadora termine congelada, dependiendo de la computadora, por supuesto.

    El lenguaje R habitualmente maneja este formato de archivos, ya sea separado por comas, tabuladores o algún otro símbolo en especial; sin embargo, también acepta otros formatos, como los de Excel, pero hay que considerar que al momento de importar, se pierde toda la estructura de formato, es decir, colores, tamaños, negritas, cursivas, etc. Por lo que se recomienda habituarse al .csv para fines de ciencia de datos.

  2. TSV

    El .tsv es similar al formato previo, pero aquí está separado por tabulador, la tecla mencionada previamente. Tiene las mismas ventajas y desventajas que .csv, el por qué usar uno de otro depende de la base de datos en cuestión, si alguna observación cuenta con comas (digamos, 1,234.56), no es recomendable usar .csv., por lo que si se usa .csv, R modificaría la base de datos y no se podría analizar correctamente.

  3. XLSX

    Este es el formato de excel por excelencia, tiene la característica de que podemos personalizar el tipo de letra, tamaño, colores, etc., pero al cargar a R, este formato se pierde. Para fines de ciencia de datos, se recomienda NUNCA JAMÁS DE LOS JAMASES EN EL PAÍS DEL NUNCA JAMÁS (Atentamente: Peter Pan) utilizar colores para dividir información, al menos si piensas hacer análisis con R.

  4. TXT

    Esto es un archivo de texto plano, es el que se guarda en el bloc de notas, y que se puede abrir con cualquier aplicación similar en cualquier sistema operativo. De hecho, se pueden modificar las extensiones de los .csv y .tsv a .txt y se pueden visualizar de igual forma, siempre y cuando se mantenga la estructura de los separadores.

Tip

El formato .csv es muy flexible, realmente puedes poner separadores como tabular, comas, punto y coma, en R hay una opción para elegir el tipo de separador de dato.

4.3 Tipos y Estructuras de Datos

  1. Tipos de datos

    En R, se manejan algunos tipos de datos un poco diferentes a lo habitual en estadística, esto con el objeto de hacer operaciones y para ahorrar costos computacionales.

    1. Numérico

      Es un tipo de dato que contiene número decimales, cualquier número que tenga un punto decimal, debe ser de este tipo.

      Hagamos un ejemplo, y creemos los siguientes objetos:

      n1 <- c(0.1,0.2,1.9,0.5,1.8)
      n2 <- c(1,2,3,4,5)
      n3 <- c(0,1,1,1,0)

      Lo anterior, deberá haber creado los objetos “n1”, “n2”, y “n3”, los cuáles contienen los números ingresados.

      Además, notarás que existe una “c” previo a la apertura de un paréntesis, esa es la función de combinar o concatenar, es decir, que una serie de datos separados por coma se van a asignar a ese objeto, puede asignar tantos datos como desees.

      Tip

      En “R” el separador de los datos, ya sea de números o caracteres a combinar, es la coma. Esto también va para separar funciones y argumentos.

      Para verificar el contenido, recordemos la función “print”. De igual forma, podemos solo introducir el objeto y oprimir “Ctrl + Enter”, lo que arrojaría el resultado en la consola.

      La función “class” nos dice el tipo de clase a la que pertenece algún objeto creado, hagamos el ejemplo:

      class(n1)
      [1] "numeric"

      Debería de decir “numeric” en la consola, para cada objeto creado.

      Tip

      Muchas veces encontrarás un formato llamado “double”, que para fines prácticos del taller es lo mismo que “numeric”.

    2. Entero

      Es un tipo de dato que contiene números enteros, cualquier número que NO tenga punto decimal, debe de ser de este tipo. Ahora, generemos nuevos objetos, unos de tipo entero, los que desees.

      e1 <- c(0,0,1,0,1)
      e2 <- c(1,2,3,4,5)
      e3 <- c(0,1,1,1,0)

      Ahora, notarás que la clase no se ha modificado desde el primer tipo de dato, es decir, todo nos dice “numeric”, debido a que R almacena cualquier valor numérico en esa clase, tenga o no decimales. El cambio de tipo de dato es útil para algunas funciones, como la notación decimal.

    3. Carácter: es cualquier tipo de cadena de texto. Se incluyen símbolos.

      animales_1 <- c("perros", "gatos", "gallinas")
      números_1 <- c(1,2,3)
      números_2 <- c("1","2","3")

      En el ejemplo anterior, creamos tres objetos, “animales_1”, “números_1” y “números_2”. Notarás que unas cadenas de datos contienen comillas, y otras no. Una vez que hayas creado cada uno de los objetos, verifica las clases. Las comillas, para el caso de los números, nos permiten forzar la conversión a carácter. Esto es necesario si los números ingresados corresponde a valores no numéricos, o definiciones previas.

    4. Complejo: es cualquier tipo de combinación numérica y una parte imaginaria.

      complejo <- 5+8i

      Los tipos de datos complejos se componen de un parte numérica y una imaginaria, que en este caso es el “i”, es poco utilizado en ciencias biológicas. De hecho, no se verá en este curso.

    5. Lógico: Es cualquier tipo de operador que entrega dos resultados. Puede ser True o False, 1 y 0, Verdadero o Falso, etc. Se puede asignar y modificar.

      lógico_1 <-  c(T,F,F,T)
      logico_1 <-  as.logical(c(1,0,0,1))
      Lógico_1 <- as.logical(c(0,1,2,3,4))

      En el objeto “lógico_1”, se genera automáticamente utilizando las iniciales de F o T, pero también se pueden usar las palabras completas en mayúsculas. En el caso de “lógico_2”, nótese que utilizamos la función “as.logical”, lo que hace es forzar la conversión de valores numéricos a lógicos.

      Además, nótese que “R” es sensible a los acentos, por lo que ese acento en la “o”, es un objeto diferente. Incluso el objeto “Lógico_1”, contiene valores que van del cero al cuatro, se puede forzar la conversión, pero cualquier valor diferente de “0”, se considera como TRUE.

    6. Factores: Realmente no es un tipo de dato de forma específica, sin embargo, presenta una enorme utilidad en el ambiente. En este “tipo de dato”, nos permite categorizar en orden personalizado variables categóricas. Por ejemplo, “bueno”, “regular”, y “malo”. De entrada, se manejaría como carácter, pero podemos modificarlo para que sea factor, es decir, categórico.

      factores_1 <- as.factor(c(1,2,3))
      factores_2 <- as.factor(c("bueno", "regular", "malo"))

      Por último, nótese que utilizamos la función “as.factor”, lo que hace forzar la conversión a este tipo de dato. Es importante mencionar que el orden predeterminado es alfanumérico, lo que puede producir problemas de análisis si convertimos a factor una columna sin este método, pero existen varias herramientas para reordernarlos, que se verán más adelante.

Tip

Para fines prácticos del taller, solo nos enfocaremos en “double”, “logical”, “factor”, “character”.

  1. Estructuras de datos

    Los datos pueden presentar diferentes estructuras, dependiendo si son lineales, o bidimensionales, si contienen un solo tipo de dato (atómicos), o si contienen diferentes tipos.

    1. Vectores:

      Es la estructura de datos más simple en R, consiste en un conjunto lineal de información de un solo tipo, es decir, solo numérico, o solo carácter, no se debe combinar para que siga siendo un vector.

      La función de los vectores es que se pueden aprovechar para realizar la misma operación con el conjunto de los datos.

      v1 <- c(1:10)
      v2 <- c(2,4,6,8,10)
      v3 <- c(5,10,15,20)
      peso <- c(70,100,80,60)
      altura <- c(1.7,2,1.5,2.1)

      Los anteriores son vectores numéricos, pero también se pueden hacer con datos de tipo carácter. Con los vectores, se pueden hacer diferentes operaciones matemáticas simultáneas, lo que facilita la generación de datos o nuevas variables.

      Hagamos algunas operaciones con los vectores 1 a 3.

      v1*2
       [1]  2  4  6  8 10 12 14 16 18 20
      v2*2+100
      [1] 104 108 112 116 120
      v3-5
      [1]  0  5 10 15

      Ahora, obtengamos el imc con la fórmula básica de peso/altura^2.

      peso/altura^2
      [1] 24.22145 25.00000 35.55556 13.60544

      Recordemos el orden de las operaciones en aritmética, estos también se respeta en R. Si imprimimos el resultado, nos debe arrojar el imc para cada dato.

      Así mismo, podemos crear un objeto que pase los resultados calculados, esto se logra al crear un objeto, usar el operador de asignación, y crear la aritmética.

      imc <- peso/altura^2
      
      imc
      [1] 24.22145 25.00000 35.55556 13.60544

      Lo anterior nos va a crear un nuevo vector llamado “imc” con el resultado asignado, que es dividir el peso sobre la altura al cuadrado, que es la fórmula del índice de masa corporal. Podemos crear diferentes objetos mediante este formato, es decir, aplicar alguna fórmula, método, conversión, entre otros a algún vector.

      Ahora, vamos a crear los siguientes vectores de tipo carácter:

      v4 <- c("Luis","Juan","María","Lupe")
      v5 <- c("Martínez","Juárez","Domínguez","Jave")

      El código anterior genera dos vectores diferentes, uno con nombres, y otro con apellidos, en este caso no tendría sentido realizar operaciones aritméticas, incluso no arroja un error. Pero si podemos realizar procesos como juntar ambos vectores para obtener el nombre y apellido, similar a la función de concatenar en Excel.

      Tip

      Los vectores deben tener la misma longitud si queremos datos empatados, es decir, observación 1 con observación 2. Si no hubiera congruencia de datos, lo que hace R es reciclar los vectores, o sea, reiniciar el conteo.

      Primero vamos a juntar ambos vectores, para eso usamos la función “paste”

      nombres <- paste(v4,v5)

      En el código anterior creamos un vector llamado “nombres”, este vector contiene la unión de v4 con v5, en ese orden, para generar un nuevo vector. Por defecto, se utiliza el separador de espacio, si quisiéramos utilizar otro separador, tenemos un argumento llamado “sep”, para que elijamos el símbolo que queramos.

      Tip

      En R, un argumento es una opción que modifica la función que estamos utilizando, es decir, podemos hacer unos pequeños ajustes para se comporte como necesitamos. En este caso, “sep” es indicativo de “separate”, es decir, el símbolo que separa la unión de un vector de otro.

    2. Matrices

      Es una estructura de datos de dos dimensiones (los vectores son tenían una, lo que los hace lineales), por lo que tiene columnas en eje de las y (horizontales), y filas en el eje de las x (verticales).

      La clave es que la matriz se puede crear a partir de las filas y columnas indicadas, o se puede transformar acorde a esa razón. Por ejemplo, una matriz de 4 x 3 tendrá cuatro filas y tres columnas, una de 8 x 10, tendrá 8 filas y 10 columnas.

      Siempre se cuentan primero las filas, o el eje de las x. Las matrices son especialmente útiles para los datos numéricos, ya que nos permiten hacer transformaciones (aritmética, normalización, estandarización, etc.), reduciendo recursos computacionales.

      Vamos a crear la siguiente matriz numérica.

      m1 <- c(1:50)
      dim(m1) <- c(5,10)
      print(m1)
           [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
      [1,]    1    6   11   16   21   26   31   36   41    46
      [2,]    2    7   12   17   22   27   32   37   42    47
      [3,]    3    8   13   18   23   28   33   38   43    48
      [4,]    4    9   14   19   24   29   34   39   44    49
      [5,]    5   10   15   20   25   30   35   40   45    50

      En el código anterior creamos primeramente un vector llamado “m1”, al que le asignamos un serie de números que van del 1 al 50 (los dos puntos significan que queremos que siga el orden lógico numérico de un inicio a un fin).

      Con el objeto creado, vamos a asignarle la dimensión con la función “dim”, y le decimos que sea de 5 x 10, es decir, 5 filas de 10 columnas. Con lo anterior, los números del 1 al 50, se transformarán y se van a reordenar en ese formato, el 1 al 5 en la primera columna, del 6 al 10 en la segunda, y así sucesivamente.

      Tip

      Si las dimensiones solicitadas no son múltiplo de la cantidad de datos, es decir, si pidiéramos 5 filas con 9 columnas, nos arroja error y nos dice que no coincide la longitud y no se puede crear. Es un método a prueba de error para no perder datos.

      La utilidad de las matrices consiste en realizar transformaciones numéricas en nuestras bases de datos, la regla habitual es extraer la matriz de datos en un nuevo objeto, hacer las transformaciones, y llevar a cabo nuestros análisis. La otra opción es introducir la nueva base a la base previa, o reemplazar los valores, como se desee.

      Hagamos ejercicios de matrices, creemos dos matrices numéricas, la primera que sea del 1 al 100, en una matrix de 10 x 10; la segunda que sea del 1 al 30, en una matrix de 5 x 6.

    3. DataFrame

      Son estructuras de datos de dos dimensiones, pero a diferencia de las matrices, los data frame permiten utilizar datos mixtos (combinación de numéricos, lógicos, carácter…), la única condición es que los vectores deben de tener la misma longitud si se crean con R, en caso de que se importen, los datos ausentes se manejan de diferentes formas que se verán más adelante.

      De hecho, el data frame, es el tipo de estructura de datos más utilizada en R, y en otros ambientes, nosotros prácticamente solo usamos data frames al trabajar con Excel en el área de ciencias de la salud.

      Vamos a crear un data frame (df), de cero.

      nombre <- c("Luis", "Pedro", "María", "Gloria")
      apellido <- c("Gómez", "Fernández", "Cruz", "Pérez")
      edad <- c(30,50,23,30)
      sobrepeso <- as.logical(c(1,1,0,0))
      sexo <- c("Masc","Masc","Fem","Fem")
      DM <- c("1","2","0","3")
      df1 <- data.frame(nombre, apellido, edad, sobrepeso, sexo, DM)
      df1
        nombre  apellido edad sobrepeso sexo DM
      1   Luis     Gómez   30      TRUE Masc  1
      2  Pedro Fernández   50      TRUE Masc  2
      3  María      Cruz   23     FALSE  Fem  0
      4 Gloria     Pérez   30     FALSE  Fem  3

      Con el código anterior, primero creamos seis vectores que contienen la información de interés, de tipos de datos mixtos, luego, los agregamos todos a un df llamado “df1”, si lo imprimimos, tendremos una base de datos con la información. Además, si observamos en nuestro ambiente, nos refiere el tipo de estructura de dato, que para “df1, es un”data.frame”.

      Tip

      Para fines prácticos en ciencias biológicas, casi siempre utilizamos dataframes, su abreviatura usual es “df”.

5 Ambiente de R

5.1 Paneles de trabajo

R se divide en cuatro en la interfaz de usuario, esto es útil ya que se puede visualizar todo lo que se requiere y está accesible de forma rápida.

  1. Script: esquina superior izquierda, aquí escribimos nuestro código.
  2. Entorno: esquina superior derecha, aquí se encuentra el ambiente de objetos creados, el historial de comandos ingresados, conexiones a sitios web, herramientas de desarrollador (crear páginas web, aplicaciones, libros…), incluso un tutorial para aprender R!
  3. Consola: esquina inferior izquierda, aquí se encuentra la consola como tal, que es en donde arroja los resultados del código, se imprimen los objetos y nos arroja advertencias y errores si nos equivocamos o nuestro código no está bien escrito (incluso nos dice qué hicimos mal…). Está la terminal, que se basa en el lenguaje de R y funciona similar a la parte de script, pero con diferente enfoque, aquí se pueden ingresar comandos de administrador y crear otras cosas (como publicar una página web), sin embargo, prácticamente no se usa y no se requiere para empezar a trabajar con R. También están los trabajos en segundo plano o lo que está realizando como procesos.
  4. Salida: esquina inferior derecha, tiene diferentes partes.
  • Archivos: aquí observamos todos los archivos de la carpeta en la que estamos posicionados, esto se puede cambiar según el proyecto, es como un mini explorador de archivos.
  • Plots: aquí veremos nuestros gráficos que vamos creando.
  • Packages, aquí están las librerías que instalamos y cargamos.
  • Help, literalmente, es ayuda, si no sabemos para qué sirve una función, aquí nos arroja un manual de usuario para cada función.
  • Viewer, es un explorador parecido a la web, pero con funciones ligeramente diferentes.
  • Presentation, nos sirve para visualizar diapositivas de presentación que vayamos creando otro programa, por ejemplo, el presente manual se puede transformar a una presentación estilo power point y se puede visualizar ahí.

5.2 Cinta de utilidades

  1. La cinta de utilidad que se encuentra hasta arriba es muy similar a lo que usamos en Office o en otros programas, en cada pestaña encontrarás diferentes utilidades y funciones, como guardar, crear, editar, buscar, personalizar, etc.
  2. Debajo de la cinta de utilidades, se encuentran diferentes íconos de acceso rápido, que es crear documento, crear proyecto, abrir archivo, guardar, etc.
  3. Debajo de los íconos, se encuentran nuestras pestañas de los archivos abiertos, algo similar a las ventanas del navegador de internet.

5.3 Creación de proyectos y archivos

  1. Al momento de trabajar en R, la organización es crucial. De manera general, se recomienda siempre trabajar por proyectos. Los proyectos son carpetas que contienen toda la información necesaria para trabajar en eso, un proyecto, ahí podremos guardar imágenes, bases de datos, libros, archivos de ayuda, además de nuestros scripts.

La ventaja de trabajar por proyectos es que al momento de importar y exportar archivos, es más fácil, y se pueden visualizar en nuestro panel de salida. Otra ventaja de trabajar por proyecto, es que se guarda nuestras librerías cargadas, ambiente, bases cargadas, etc. Lo anterior permite que no mezclemos datos o información de un proyecto a otro, y que no corramos el riesgo de borrar algo que no queríamos.

  1. Vamos a crear un proyecto, que tendrá como objetivo recopilar todo lo aprendido en el curso, guardado por secciones o módulos, o cómo deseen (siempre y cuando tenga una jerarquía).
    1. Se sugiere la siguiente estructura básica de almacenamiento:
      • Nombre de la carpeta de trabajo.
        • Nombre del proyecto (p.e. curso_R)
  2. Recuerda usar guión bajo, llevar un orden jerárquico de versiones de archivos (ya sea v001, o 30.05.2024), nombres cortos y entendibles, etc.