Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 24 additions & 31 deletions docs/business_understanding/project_charter.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,50 @@

## Nombre del Proyecto

[Nombre del proyecto aquí]
Predicciòn del status de los vuelos

## Objetivo del Proyecto

[Descripción breve del objetivo del proyecto y por qué es importante]
Desarrollar un modelo predictivo que permita determinar la probabilidad de que un vuelo sea cancelado o experimenta retrasos

## Alcance del Proyecto

### Incluye:

- [Descripción de los datos disponibles]
- [Descripción de los resultados esperados]
- [Criterios de éxito del proyecto]
- Se utilizará el conjunto de datos de vuelos que abarca 5 años desde enero de 2018. Este conjunto incluye información sobre vuelos, como horarios, aerolíneas, aeropuertos de origen y destino, motivos de cancelación y retrasos, así como condiciones climáticas relevantes.
- Se espera desarrollar un modelo predictivo que pueda identificar con precisión si un vuelo será cancelado o retrasado. Además, se pretende estimar el tiempo de retraso en caso de que ocurra.
- Será considerado exitoso si se logra una precisión superior al 70% en las predicciones del estado de los vuelos y una estimación razonable del tiempo de retraso.

### Excluye:

- [Descripción de lo que no está incluido en el proyecto]
- Este proyecto no incluirá la implementación de un sistema en tiempo real para la predicción de vuelos ni el análisis de datos más allá del periodo mencionado. Tampoco se abordarán aspectos relacionados con la gestión operativa de las aerolíneas o la logística asociada a las cancelaciones y retrasos.

## Metodología

[Descripción breve de la metodología que se utilizará para llevar a cabo el proyecto]
La metodología seguirá las siguientes etapas:

## Cronograma

| Etapa | Duración Estimada | Fechas |
|------|---------|-------|
| Entendimiento del negocio y carga de datos | 2 semanas | del 1 de mayo al 15 de mayo |
| Preprocesamiento, análisis exploratorio | 4 semanas | del 16 de mayo al 15 de junio |
| Modelamiento y extracción de características | 4 semanas | del 16 de junio al 15 de julio |
| Despliegue | 2 semanas | del 16 de julio al 31 de julio |
| Evaluación y entrega final | 3 semanas | del 1 de agosto al 21 de agosto |

Hay que tener en cuenta que estas fechas son de ejemplo, estas deben ajustarse de acuerdo al proyecto.
1) Entendimiento del negocio y carga de datos: Definir objetivos y criterios de éxito, asegurando que el modelo predictivo cumpla con una precisión superior al 70% en identificar vuelos cancelados o retrasados y una estimación razonable del tiempo de retraso.

## Equipo del Proyecto
2) Preprocesamiento, análisis exploratorio, reporte del resumen: Limpiar y explorar el conjunto de datos histórico de vuelos (2018-2023), seleccionando variables clave como horarios, aeropuertos, aerolíneas, motivos de cancelación y condiciones climáticas.

- [Nombre y cargo del líder del proyecto]
- [Nombre y cargo de los miembros del equipo]
3) Modelamiento y extracción de características: Desarrollar modelos predictivos utilizando distinto algoritmos de machine learning para clasificar el estado de los vuelos y estimar el tiempo de retraso, evaluando métricas como precisión y MAE.

## Presupuesto
4) Despliegue: Crear un prototipo funcional para ejecutar el modelo con datos históricos, documentar scripts reproducibles y generar recomendaciones para su integración en sistemas futuros.

[Descripción del presupuesto asignado al proyecto]
5) Evaluación y Entrega Final: Validar los resultados del modelo frente a los objetivos definidos y presentar los hallazgos principales por medio de un video informativo.

## Stakeholders
## Cronograma

- [Nombre y cargo de los stakeholders del proyecto]
- [Descripción de la relación con los stakeholders]
- [Expectativas de los stakeholders]
| Etapa | Duración Estimada | Fechas |
|------|---------|-------|
| Entendimiento del negocio y carga de datos | 1 semana | del 20 de noviembre al 28 de noviembre |
| Preprocesamiento, análisis exploratorio, reporte del resumen | 1 semana | del 29 de noviembre al 5 de diciembre |
| Modelamiento y extracción de características | 1 semana | del 6 de diciembre al 12 de diciembre |
| Despliegue | 1 semana | del 13 de diciembre al 19 de diciembre |
| Evaluación y entrega final | 2 semanas | del 13 de diciembre al 21 de diciembre |

## Aprobaciones
## Equipo del Proyecto

- [Nombre y cargo del aprobador del proyecto]
- [Firma del aprobador]
- [Fecha de aprobación]
- Cristhian David Mora Uribe cdmorau@unal.edu.co
- Martin Camilo Rodriguez Murcia mrodriguezmu@unal.edu.co
- Nestor Steven Negrete Pinilla narutones98@gmail.com
75 changes: 65 additions & 10 deletions docs/data/data_definition.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,79 @@

## Origen de los datos

- [ ] Especificar la fuente de los datos y la forma en que se obtuvieron.
### Especificación de la fuente
- **Fuente:** Los datos provienen del dataset público alojado en la plataforma **Kaggle** bajo el título *Flight Delay Dataset 2018-2022*.
- **URL:** [Flight Delay Dataset 2018-2022](https://www.kaggle.com/datasets/robikscube/flight-delay-dataset-20182022)
- **Método de obtención:** Descargado mediante la API de Kaggle utilizando el comando `kaggle datasets download`.

---

## Especificación de los scripts para la carga de datos

- [ ] Especificar los scripts utilizados para la carga de los datos.
### Script principal
- **Archivo:** `main.py`
- **Descripción:**
- Configura las credenciales de la API de Kaggle (`kaggle.json`).
- Descarga y descomprime el dataset desde Kaggle en la carpeta `./flight_delays`.
- Lee las primeras filas de los archivos CSV en la subcarpeta `raw` del dataset descargado.

## Referencias a rutas o bases de datos origen y destino
### Funciones incluidas
1. **`show_first_rows_of_files`**
- **Entrada:**
- `base_path`: Ruta base donde se encuentran los datos.
- `subfolder`: Subcarpeta dentro de `base_path` que contiene los archivos.
- `num_files`: Número máximo de archivos a leer.
- `num_rows`: Número de filas a mostrar por archivo.
- **Propósito:** Lee y muestra las primeras filas de los archivos CSV.
- **Salida:** Datos impresos en consola.

---

- [ ] Especificar las rutas o bases de datos de origen y destino para los datos.
## Referencias a rutas o bases de datos origen y destino

### Rutas de origen de datos

- [ ] Especificar la ubicación de los archivos de origen de los datos.
- [ ] Especificar la estructura de los archivos de origen de los datos.
- [ ] Describir los procedimientos de transformación y limpieza de los datos.
#### Ubicación de los archivos de origen
- **Ruta:** `./flight_delays/raw`
- **Estructura:**
La carpeta contiene múltiples archivos CSV organizados por años y meses, como `Flights_2020_10.csv`.

#### Estructura de los archivos de origen
- **Formato:** CSV (Comma Separated Values).
- **Columnas principales:**
- Información temporal: `Year`, `Quarter`, `Month`, `DayofMonth`, `DayOfWeek`, `FlightDate`.
- Datos del vuelo: `Marketing_Airline_Network`, `Tail_Number`, `Departure_Airport`, `Arrival_Airport`.
- Indicadores de retrasos: `DepartureDelay`, `ArrivalDelay`.
- Información adicional: Más de 100 columnas relacionadas con divisiones de vuelos y tiempos de operación.

#### Procedimientos de transformación y limpieza
1. **Identificación de valores nulos:** Muchas columnas contienen valores nulos (`NaN`) que requieren procesamiento.
2. **Filtrado inicial:** Mostrar únicamente las primeras filas como exploración preliminar.
3. **Futuro procesamiento:** Los datos pueden necesitar agregación, filtrado o normalización dependiendo del análisis.

---

### Base de datos de destino

- [ ] Especificar la base de datos de destino para los datos.
- [ ] Especificar la estructura de la base de datos de destino.
- [ ] Describir los procedimientos de carga y transformación de los datos en la base de datos de destino.
#### Base de datos de destino para los datos
- **Ruta inicial:** `./flight_delays/processed` (a definir en implementaciones futuras).
- **Formato:** CSV procesados o una base de datos relacional como SQLite, PostgreSQL o MySQL, dependiendo de las necesidades analíticas.

#### Estructura de la base de datos de destino
- **Tabla principal:** `Flight_Delays`
- **Columnas principales:**
- Identificadores: `FlightID`, `Airline`, `FlightDate`.
- Retrasos: `DepartureDelay`, `ArrivalDelay`.
- Tiempos de operación: `GateDepartureTime`, `GateArrivalTime`.

#### Procedimientos de carga y transformación
1. **Carga inicial:** Los archivos CSV se leerán y procesarán con librerías como `pandas` para consolidación en la base de datos.
2. **Transformaciones:**
- Limpieza de valores nulos.
- Normalización de fechas y horas.
- Generación de métricas como tiempo total de retraso.
3. **Exportación:** Los datos transformados se almacenarán en la base de datos de destino o exportarán nuevamente a CSV procesados.

---

Esta estructura garantiza un flujo claro desde la adquisición hasta la transformación y almacenamiento de los datos.
55 changes: 20 additions & 35 deletions docs/data/data_dictionary.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,23 @@
# Diccionario de datos

## Base de datos 1

**Agregar una descripción de la tabla o fuente de datos.

| Variable | Descripción | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| --- | --- | --- | --- | --- |
| variable_1 | Descripción de la variable 1 | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| variable_2 | Descripción de la variable 2 | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| variable_3 | Descripción de la variable 3 | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| variable_4 | Descripción de la variable 4 | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| variable_5 | Descripción de la variable 5 | Tipo de dato | Rango/Valores posibles | Fuente de datos |

- **Variable**: nombre de la variable.
- **Descripción**: breve descripción de la variable.
- **Tipo de dato**: tipo de dato que contiene la variable.
- **Rango/Valores posibles**: rango o valores que puede tomar la variable.
- **Fuente de datos**: fuente de los datos de la variable.

## Base de datos 2

**Agregar una descripción de la tabla o fuente de datos.

| Variable | Descripción | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| --- | --- | --- | --- | --- |
| variable_1 | Descripción de la variable 1 | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| variable_2 | Descripción de la variable 2 | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| variable_3 | Descripción de la variable 3 | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| variable_4 | Descripción de la variable 4 | Tipo de dato | Rango/Valores posibles | Fuente de datos |
| variable_5 | Descripción de la variable 5 | Tipo de dato | Rango/Valores posibles | Fuente de datos |

- **Variable**: nombre de la variable.
- **Descripción**: breve descripción de la variable.
- **Tipo de dato**: tipo de dato que contiene la variable.
- **Rango/Valores posibles**: rango o valores que puede tomar la variable.
- **Fuente de datos**: fuente de los datos de la variable.
## Base de datos 1: Flight Delays Raw Data

**Descripción:** Esta base contiene los datos originales relacionados con vuelos y sus posibles retrasos. Se obtienen directamente de los archivos CSV en la carpeta `./flight_delays/raw`.

| Variable | Descripción | Tipo de dato | Rango/Valores posibles | Fuente de datos |
|---------------------------|-----------------------------------------------------------------------------|-------------|--------------------------------------|----------------------------------|
| `Year` | Año en que se realizó el vuelo | Entero | 2018-2022 | Kaggle |
| `Quarter` | Trimestre del año del vuelo | Entero | 1 (Ene-Mar), 2 (Abr-Jun), etc. | Kaggle |
| `Month` | Mes del año del vuelo | Entero | 1 (Ene) - 12 (Dic) | Kaggle |
| `DayofMonth` | Día del mes del vuelo | Entero | 1-31 | Kaggle |
| `FlightDate` | Fecha del vuelo | Fecha | Formato `YYYY-MM-DD` | Kaggle |
| `DepartureDelay` | Retraso en minutos en la salida del vuelo | Flotante | Valores negativos (adelanto) o >= 0 | Kaggle |
| `ArrivalDelay` | Retraso en minutos en la llegada del vuelo | Flotante | Valores negativos (adelanto) o >= 0 | Kaggle |
| `Marketing_Airline_Network` | Aerolínea que promociona el vuelo | Texto | Códigos IATA como UA, DL, AA | Kaggle |
| `Tail_Number` | Número de cola del avión | Texto | Alfanumérico | Kaggle |
| `Departure_Airport` | Código IATA del aeropuerto de salida | Texto | Alfanumérico | Kaggle |
| `Arrival_Airport` | Código IATA del aeropuerto de llegada | Texto | Alfanumérico | Kaggle |
| `Unnamed: 119` | Columna vacía sin datos útiles (por limpiar) | Texto | Vacío | Kaggle |

---

1 change: 1 addition & 0 deletions scripts/data_acquisition/.kaggle/kaggle.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"username":"cdmorau","key":"0aeb7b7ad3437dc4469c3f30f4c9e82e"}
63 changes: 63 additions & 0 deletions scripts/data_acquisition/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
```markdown
# Flight Delay Analysis

Este repositorio contiene un conjunto de scripts para analizar los retrasos de vuelos utilizando datos descargados de Kaggle. La estructura principal se organiza para facilitar la adquisición y el procesamiento de datos.

## **Estructura del Proyecto**
scripts/
├── data_acquisition/
│ ├── .kaggle/ # Carpeta con el kaggle.json config
│ ├── main.py # Script principal para la descarga y preparación de datos
│ ├── requirements.txt # Archivo con las dependencias necesarias para ejecutar el script
```

## **Instrucciones de Configuración**
### 1. **Clonar el Repositorio**
Primero, clona este repositorio en tu máquina local:
```bash
git clone https://github.com/usuario/flight-delay-analysis.git
cd flight-delay-analysis
```

### 2. **Instalar Dependencias**
El archivo `requirements.txt` dentro de `scripts/data_acquisition` contiene las dependencias necesarias, como `kaggle` y `pandas`. Para instalarlas, ejecuta:
```bash
pip install -r scripts/data_acquisition/requirements.txt
```

### 3. **Configurar Kaggle**
Asegúrate de que el archivo `kaggle.json` ya se encuentra dentro de la carpeta `.kaggle` junto al script `main.py`. Este archivo contiene tus credenciales de acceso a la API de Kaggle. Si no tienes este archivo:
1. Inicia sesión en tu cuenta de Kaggle.
2. Dirígete a **My Account** y desciende hasta la sección **API**.
3. Haz clic en **Create New API Token** para descargar el archivo `kaggle.json`.
4. Coloca el archivo en la carpeta `.kaggle` dentro de `scripts/data_acquisition/`.

### 4. **Ejecutar el Script**
Ejecuta el script principal para descargar y preparar los datos:
```bash
python scripts/data_acquisition/main.py
```
Este script descargará el conjunto de datos `flight-delay-dataset-20182022` de Kaggle y procesará los datos para análisis posterior.

Por ahora este archivo simplemente imprime las primeras 5 filas de los primeros 5 archivos contenidos en la carpeta raw del proyecto en kaggle: https://www.kaggle.com/datasets/robikscube/flight-delay-dataset-20182022

El archivo outputExample.txt es el resultado esperado al ejecutar este script.


## **Dependencias**
Las dependencias necesarias se encuentran en `scripts/data_acquisition/requirements.txt`. Incluyen:
- `kaggle`: Para la descarga de datos directamente desde Kaggle.
- `pandas`: Para la manipulación de datos.

## **Notas Importantes**
- **Configuración del Entorno:** Asegúrate de usar un entorno virtual para evitar conflictos de dependencias. Puedes crear uno con:
```bash
python -m venv venv
source venv/bin/activate # En Linux/Mac
venv\Scripts\activate # En Windows
```
- **Privacidad de Kaggle API:** Nunca compartas públicamente tu archivo `kaggle.json`.

## **Contribuciones**
Si deseas contribuir a este proyecto, abre un *Pull Request* o crea un *Issue* describiendo el cambio propuesto.

43 changes: 43 additions & 0 deletions scripts/data_acquisition/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import os
import pandas as pd

# Establecer la ruta al archivo kaggle.json
kaggle_path = os.path.join(os.getcwd(), 'scripts/data_acquisition/.kaggle')
os.environ["KAGGLE_CONFIG_DIR"] = kaggle_path

# Verificar si el archivo kaggle.json existe
if not os.path.exists(os.path.join(kaggle_path, 'kaggle.json')):
raise FileNotFoundError("El archivo kaggle.json no se encuentra en la carpeta .kaggle.")

# Descargar y descomprimir el dataset
dataset_path = './flight_delays'
os.makedirs(dataset_path, exist_ok=True)
os.system(f"kaggle datasets download -d robikscube/flight-delay-dataset-20182022 --unzip -p {dataset_path}")

# Función para leer las primeras 5 filas de los primeros 5 archivos CSV
def show_first_rows_of_files(base_path, subfolder=None, num_files=5, num_rows=5):
folder_path = os.path.join(base_path, subfolder) if subfolder else base_path
csv_files = []

# Buscar todos los archivos CSV en la carpeta
for root, _, files in os.walk(folder_path):
for file in files:
if file.endswith('.csv'):
csv_files.append(os.path.join(root, file))

# Leer y mostrar las primeras filas de los primeros archivos
for i, file in enumerate(csv_files[:num_files]):
print(f"Archivo {i + 1}: {file}")
try:
data = pd.read_csv(file, nrows=num_rows) # Leer solo las primeras filas
print(data.head()) # Mostrar las primeras filas
except Exception as e:
print(f"Error al leer el archivo {file}: {e}")
print("\n" + "=" * 50 + "\n")

# Mostrar las primeras filas de los primeros 5 archivos en la subcarpeta "raw"
try:
print("Leyendo los primeros 5 archivos en la carpeta raw...")
show_first_rows_of_files(dataset_path, subfolder="raw", num_files=5, num_rows=5)
except Exception as e:
print(f"Error: {e}")
Loading