Repositorios y Control de Versiones

La base para la colaboración, reproducibilidad y despliegue de proyectos de datos.

¿Por qué controlar las versiones?

Todo proyecto de datos comienza con una idea y un script. Sin embargo, rápidamente evoluciona a un estado de caos con archivos como `analisis_v1.R`, `analisis_v2_corregido.R`, y `analisis_final_AHORASI.R`. Esta práctica no es sostenible, dificulta la colaboración y hace imposible saber qué versión del código generó un resultado específico.

El control de versiones es el pilar fundamental que transforma un proyecto de un esfuerzo individual y desordenado a una iniciativa de ingeniería robusta y colaborativa, permitiendo tener una "máquina del tiempo" para cada cambio realizado.

Git y GitHub: El Dúo Dinámico

Para implementar un control de versiones profesional, se utiliza una combinación de dos herramientas: Git y GitHub. Es crucial entender que no son lo mismo.

Git

Es el **software** que se instala localmente. Es un sistema de control de versiones distribuido que permite rastrear cada cambio en los archivos del proyecto. Piense en él como el motor que registra la historia de su proyecto.

GitHub

Es la **plataforma web** que aloja los repositorios de Git. Es el centro colaborativo donde el equipo puede compartir código, revisar cambios y gestionar el proyecto. Piense en él como la "nube social" para su código.

Acción Requerida: Crear una Cuenta en GitHub

GitHub es el portafolio de facto para cualquier profesional de datos. Es esencial que cada miembro del equipo tenga una cuenta.

Se solicita a todos los participantes crear su usuario en la plataforma. Más adelante, se compartirán los nombres de usuario para formar equipos y colaborar en los repositorios del proyecto.

Crear mi cuenta de GitHub

Instalación y Configuración

Antes de poder versionar, es necesario instalar y configurar Git en cada máquina de trabajo.

Paso 1: Descargar e Instalar Git

La instalación es un proceso directo. Se debe descargar el instalador desde el sitio web oficial y seguir las instrucciones, aceptando las opciones por defecto que son adecuadas para la mayoría de los usuarios.

Descargar Git

Paso 2: Configuración Inicial

Una vez instalado, es fundamental identificarse. Abra una terminal (Git Bash en Windows, o Terminal en Mac/Linux) y ejecute los siguientes comandos, reemplazando los datos de ejemplo con su nombre y correo electrónico (el mismo utilizado en GitHub).

git config --global user.name "Tu Nombre Completo"
git config --global user.email "tu_email@ejemplo.com"

Esta configuración es global y se aplicará a todos los proyectos en su máquina, "firmando" cada cambio que realice.

Paso 3: Integración con el IDE

Tanto RStudio como Visual Studio Code tienen una excelente integración nativa con Git, lo que facilita enormemente el flujo de trabajo.

En RStudio: Al crear un "Nuevo Proyecto" (New Project), se puede seleccionar la opción "Version Control" y luego "Git". Allí, se pega la URL del repositorio de GitHub y RStudio se encarga de clonarlo y configurar el proyecto. La pestaña "Git" aparecerá automáticamente en el panel superior derecho, permitiendo visualizar cambios, hacer commits y sincronizar con GitHub de forma visual.

En Visual Studio Code: VS Code detecta automáticamente los repositorios de Git. Su pestaña "Source Control" (Control de código fuente) en la barra lateral izquierda permite realizar todas las operaciones comunes (stage, commit, push, pull) de manera intuitiva.

Taller Práctico: Mi Primer Repositorio

En esta sección se guiará el proceso para crear un repositorio en GitHub, conectarlo a un proyecto local y sincronizar la primera versión de una aplicación de datos.

Paso 1: Crear un Repositorio en GitHub

En su perfil de GitHub, haga clic en el botón "New" para crear un nuevo repositorio. Asígnele un nombre (ej. `mi-primera-app-shiny`), seleccione la opción "Public", y muy importante, marque la casilla "Add a README file". Esto inicializa el repositorio con un primer archivo.

Paso 2: Sincronizar (Clonar) el Repositorio

En la página de su nuevo repositorio en GitHub, haga clic en el botón verde "Code", asegúrese de que la pestaña "HTTPS" esté seleccionada y copie la URL. Luego, en su máquina local, abra una terminal, navegue a la carpeta donde desea guardar sus proyectos y ejecute el comando `git clone` seguido de la URL copiada.

# Reemplace la URL con la de su propio repositorio
git clone https://github.com/tu-usuario/mi-primera-app-shiny.git

Este comando crea una carpeta con el nombre del repositorio que es una copia exacta del proyecto en GitHub y ya está conectada a él.

Paso 3: Crear la Estructura y el Primer Commit

Abra la nueva carpeta con su IDE (RStudio o VS Code). Cree la estructura de carpetas que definimos anteriormente (`data`, `R`, etc.). Ahora, modifique el archivo `README.md` para describir su proyecto. Guarde los cambios.

Para registrar esta primera versión, se siguen tres pasos en la terminal (o usando la interfaz del IDE):

# 1. Añadir todos los archivos nuevos o modificados al "área de preparación" (staging area)
git add .

# 2. Confirmar los cambios con un mensaje descriptivo
git commit -m "feat: Se crea la estructura inicial del proyecto y se actualiza el README"

# 3. Subir (sincronizar) los cambios a GitHub
git push

Si actualiza la página de GitHub, verá los cambios reflejados.

Paso 4: Crear la Primera Data App

Dentro de la carpeta del proyecto, cree un archivo llamado `app.R` con el siguiente contenido básico. Este es el esqueleto de una aplicación Shiny.

# Cargar la librería Shiny
library(shiny)

# Definir la Interfaz de Usuario (UI)
ui <- fluidPage(
  titlePanel("Mi Primera Aplicación de Datos"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Número de bins:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),
    mainPanel(
      plotOutput("distPlot")
    )
  )
)

# Definir la lógica del Servidor
server <- function(input, output) {
  output$distPlot <- renderPlot({
    x    <- faithful[, 2]
    bins <- seq(min(x), max(x), length.out = input$bins + 1)
    hist(x, breaks = bins, col = '#ff9900', border = 'white',
         xlab = 'Tiempo de espera entre erupciones (en mins)',
         main = 'Histograma de tiempos de espera')
  })
}

# Ejecutar la aplicación
shinyApp(ui = ui, server = server)

Guarde el archivo y sincronice los cambios con GitHub repitiendo los comandos `git add .`, `git commit -m "..."`, y `git push`.

La Arquitectura de un Proyecto de Datos

Un proyecto reproducible y fácil de desplegar comienza con una estructura de directorios estandarizada. Mantener esta organización es vital, ya que plataformas de despliegue como **Railway** o **Hugging Face Spaces** dependen de una estructura predecible para construir y ejecutar las aplicaciones R/Shiny.

  • mi-proyecto/
    • data/ # Contiene todos los datos
      • raw/ # Datos crudos, nunca se modifican
      • processed/ # Datos limpios y listos para modelar
    • R/ # Scripts con funciones de ayuda
      • data_processing.R
      • model_training.R
    • models/ # Modelos entrenados y guardados
      • best_model.rds
    • www/ # Recursos para la app Shiny (CSS, imágenes)
    • app.R # El archivo principal de la aplicación Shiny
    • .gitignore # Archivos a ignorar por Git (ej. datos grandes)
    • README.md # Documentación del proyecto

Conectando al Ciclo de Vida MLOps

Esta estructura de carpetas no es arbitraria. Cada directorio y artefacto de nuestro proyecto R/Shiny se mapea directamente a una fase del ciclo de vida MLOps que vimos anteriormente. El repositorio de GitHub actúa como el registro central que une todo el proceso.

Ciclo de Vida de Machine Learning de AWS
Data Preparation Los scripts en `R/` generan los datos en `data/processed/`.
Model Training El script de entrenamiento en `R/` produce el artefacto del modelo.
Model Artifact El archivo `best_model.rds` guardado en la carpeta `models/`.
Deploy El `app.R` que carga el modelo y lo expone como una aplicación interactiva.
Model Registry (Conceptual) El repositorio de GitHub, que versiona el código, los punteros a los datos y los modelos.