Proyecto personal de análisis de datos aplicado a operaciones de transporte de mercancÃas y logÃstica de proyectos.
El objetivo es desarrollar un flujo de trabajo completo que combine:
- análisis exploratorio y descriptivo en R;
- visualización y dashboard en Power BI;
- análisis prescriptivo en Python;
- análisis geoespacial de rutas en QGIS.
Nota: todos los datos son sintéticos y se utilizan exclusivamente con fines de aprendizaje y portfolio. No representan operaciones ni resultados reales de empresas, clientes, transportistas, puertos o proyectos.
- Preparar y validar un modelo de datos de operaciones de transporte.
- Analizar puntualidad, retrasos, costes, incidencias, emisiones y rendimiento operativo.
- Explorar diferencias entre proyectos, modos de transporte, rutas, puertos, transportistas y tipos de carga.
- Construir visualizaciones, indicadores y herramientas de apoyo a la decisión.
- Mantener un proyecto reproducible, documentado y apto para portfolio.
- R / RStudio: importación, calidad, limpieza, EDA y visualización.
- Power BI: modelado, medidas DAX y dashboard.
- Python: optimización, simulación y análisis prescriptivo.
- QGIS: representación y análisis de nodos y rutas.
- Git / GitHub: control de versiones y publicación.
Freight_Operations_Analysis/
│
├── dashboard/
│ └── 2024-2025_Freight-Operations-Analysis.pbix
│ └── Modelo semántico y desarrollo del dashboard en Power BI.
│
├── data/
│ ├── external_sources/
│ │ └── Fuentes externas o datos auxiliares incorporados al proyecto.
│ ├── processed_data/
│ │ └── Datos limpios, transformados y preparados para el análisis.
│ └── raw_data/
│ └── Datos originales sin modificar.
│
├── docs/
│ ├── datasets_dictionary.xlsx
│ │ └── Diccionario de datos de los archivos y variables del proyecto.
│ ├── ideas_exploration.txt
│ │ └── Ideas, hipótesis y posibles lÃneas de análisis.
│ └── relationships.md
│ └── Descripción de las tablas, relaciones y modelo de datos propuesto.
│
├── output/
│ ├── figures/
│ │ ├── 04_EDA_histograms.png
│ │ ├── 04_EDA_boxplots.png
│ │ ├── 04_EDA_scatterplots.png
│ │ ├── 04_EDA_project-performance.png
│ │ ├── 04_EDA_lineplots.png
│ │ ├── 04_EDA_lineplot_port_congestion.png
│ │ └── 04_EDA_lineplot_fuel_prices.png
│ └── maps/
│ └── Mapas y resultados geoespaciales exportados.
│
├── python/
│ └── Scripts de Python y documentación especÃfica del análisis prescriptivo.
│
├── qgis/
│ └── Archivos de proyecto, procesos, scripts y documentación del análisis geoespacial.
│
├── R/
│ ├── 01_Import.R
│ ├── 02_Data_Quality.R
│ ├── 03_Data_Cleaning.R
│ └── 04_EDA.R
│
├── .gitignore
├── Freight_Operations_Analysis.Rproj
└── README.md
El modelo se organiza alrededor de fact_shipments, con un registro por envÃo.
Tablas de detalle:
fact_route_legs: tramos de cada envÃo.fact_events: hitos y eventos operativos.fact_incidents: incidencias asociadas a los envÃos.fact_port_congestion: indicadores mensuales por puerto.fact_fuel_prices: indicadores mensuales de combustible.
Dimensiones:
- calendario;
- proyectos;
- instalaciones;
- puertos;
- transportistas;
- buques;
- tipos de carga.
Las relaciones están documentadas en docs/relationships.md.
Script: R/01_Import.R
El script localiza e importa automáticamente los CSV de data/raw_data/, construye rutas relativas con here, almacena las 13 tablas en la lista datasets y revisa problemas de lectura y estructura inicial. Los archivos originales no se modifican.
Script: R/02_Data_Quality.R
Se revisaron problemas de importación, valores ausentes, formato de texto, claves primarias y de negocio, integridad referencial, variables binarias, ausencias según modo de transporte, continuidad del calendario y reglas básicas de negocio.
- No se detectaron problemas de importación, referencias huérfanas ni duplicados en las claves de negocio comprobadas.
- Las claves primarias revisadas son completas y únicas.
- Las variables binarias contienen únicamente los valores esperados.
- La dimensión calendario original contiene 731 fechas continuas entre 2024-01-01 y 2025-12-31.
- Se identificaron 132 ausencias de puertos y 311 ausencias de buque en
fact_shipments; las asociadas a transporte por carretera son estructurales y esperadas. - Los 179 envÃos intermodales y sus tramos
Container Seano tienen buque asignado; se mantiene como limitación documentada sin imputación. - Se detectaron cinco fechas en las que el año natural y el año ISO difieren, por lo que el análisis semanal requiere utilizar conjuntamente año y semana ISO.
Script: R/03_Data_Cleaning.R
El script crea una copia de trabajo independiente, incorpora iso_year e iso_year_week, convierte variables binarias de Y/N a TRUE/FALSE, conserva los valores ausentes estructurales, valida la estructura final y exporta las 13 tablas limpias a data/processed_data/.
- Las 13 tablas conservaron exactamente el mismo número de filas que los datos originales.
dim_calendarincorporó únicamente las dos columnas previstas.- Las 14 variables binarias revisadas se convirtieron correctamente a tipo lógico.
- La validación estructural final fue correcta y se generaron los 13 CSV procesados esperados.
Script: R/04_EDA.R
El EDA mantiene separadas las distintas granularidades del modelo y analiza volumen operativo, distribuciones, valores atÃpicos, correlaciones de Spearman, puntualidad, retrasos, costes, daños, emisiones, proyectos, transportistas, tipos de carga, incidencias, rutas, eventos, congestión portuaria y precios de combustible.
El script se ejecutó completo desde una sesión limpia sin errores. Las tablas agregadas creadas durante el EDA se mantienen como resultados analÃticos y no sustituyen al modelo relacional utilizado posteriormente en Power BI.
- 900 envÃos, 7 proyectos, 11 transportistas utilizados y 10 tipos de carga.
- 23.085 toneladas y 2.184.346 km acumulados.
- 11.665.158 € de coste logÃstico total y aproximadamente 12.961 € por envÃo.
- Puntualidad global del 79,3 %, con 186 entregas fuera de plazo.
- Tasa de daños del 4,11 %.
- El coste logÃstico presenta sus relaciones más fuertes con emisiones absolutas, peso, volumen, riesgo y distancia.
Sea Breakbulkconcentra las operaciones de mayor peso, coste y complejidad.- Carretera presenta la mejor puntualidad y la mayor intensidad de emisiones por tonelada-kilómetro.
- Ninguno de los siete proyectos alcanza su objetivo de puntualidad; Dammam presenta la mayor desviación (-18,17 pp).
- Las cargas sobredimensionadas y heavy lift presentan mayor complejidad operativa y económica.
- La intensidad mediana de emisiones es mayor en carretera (0,095 kg CO₂e/t·km) y menor en
Container Sea(0,0215 kg CO₂e/t·km).
- 55 incidencias afectan al 6,11 % de los envÃos; el 69,1 % se clasificó como prevenible.
- Las incidencias generaron 692 horas de retraso, 271.966 € de coste directo y 61.575 € en reclamaciones.
- Los 900 envÃos disponen de información de ruta, con 2.436 tramos y una mediana de 3 tramos por envÃo.
- Se analizaron 5.772 eventos operativos, con una media de 6,41 eventos por envÃo.
- La tabla de congestión cubre 18 puertos durante 24 meses; la mediana del Ãndice de congestión es 40 y la espera mediana de buques 9,2 horas.
- El recargo de combustible presenta una relación positiva moderada con el diésel en carretera y con MGO en operaciones marÃtimas.
- Flete: 75,30 %.
- Costes portuarios: 10,80 %.
- Recargo de combustible: 8,42 %.
- Costes aduaneros: 5,52 %.
Las visualizaciones del EDA se encuentran en output/figures/.
Archivo: dashboard/2024-2025_Freight-Operations-Analysis.pbix
Power BI utiliza las tablas procesadas como fuente. Se creó una nueva dim_calendar calculada, marcada como tabla de fechas, con cobertura continua entre 2023-01-01 y 2026-12-31 y atributos de año, trimestre, mes, dÃa de la semana y calendario ISO.
El modelo contiene actualmente 16 tablas: seis tablas de hechos, dimensiones de proyectos, instalaciones, puertos y tipos de carga, dimensiones de rol separadas para transportistas y buques, dim_calendar y una tabla Medidas para centralizar los cálculos DAX.
El desdoblamiento de transportistas y buques distingue los roles principales del envÃo de los asignados a cada tramo y evita caminos de filtrado ambiguos.
El modelo utiliza principalmente relaciones 1: con filtro único desde las dimensiones hacia los hechos*. fact_shipments se relaciona con fact_route_legs, fact_events y fact_incidents mediante shipment_id; dim_ports se relaciona con la congestión portuaria y dim_calendar con las tablas que requieren análisis temporal.
Cuando una dimensión representa varios roles, se mantiene una única relación activa por ruta de filtrado y las alternativas se conservan inactivas. actual_delivery_date actúa como relación temporal principal de fact_shipments; otras fechas quedan disponibles mediante relaciones inactivas y USERELATIONSHIP().
La capa semántica se simplificó ocultando claves exclusivamente técnicas, campos auxiliares de ordenación y variables geográficas reservadas principalmente para QGIS, manteniendo visibles los identificadores y atributos necesarios para el análisis operativo.
Se inició la primera página del dashboard con segmentadores de Year, Quarter, Month y Weekday y una capa de KPIs centralizada en la tabla Medidas.
Las medidas implementadas hasta el momento cubren:
- volumen y actividad: envÃos, proyectos activos, peso y distancia;
- servicio: envÃos on-time, puntualidad, retrasos y mediana de horas de retraso;
- coste: coste logÃstico total, coste por envÃo, claims y coste logÃstico sobre valor de carga;
- sostenibilidad: emisiones totales e intensidad de COâ‚‚e;
- riesgo y carga especial: risk score, heavy lift, oversize, hazardous y temperature-controlled;
- incidencias: porcentaje de envÃos afectados y proporción de incidentes prevenibles.
Los principales KPIs obtenidos en Power BI reproducen los resultados del EDA, entre ellos 900 envÃos, 7 proyectos, 79,3 % de puntualidad, 20,7 % de entregas fuera de plazo, 4,1 % de daños, 11.665.158 € de coste logÃstico, 12.961 € por envÃo, 23.085 t, 2.184.346 km y 1.888.974 kg COâ‚‚e.
Para ratios globales se priorizan medidas ponderadas cuando corresponde; por ejemplo, el coste logÃstico representa aproximadamente el 2,3 % del valor total de la carga. Las medidas base se diseñan para responder al contexto de filtro y reutilizarse por proyecto, transportista, modo o tipo de carga sin duplicar lógica DAX.
También se definió el catálogo de medidas necesario para las siguientes páginas: rendimiento de proyectos y servicio, costes, transportistas y carga, incidencias y riesgo, rutas, puertos y combustible, sostenibilidad y comparaciones temporales.
El modelo semántico está preparado, la primera página Freight Operations Control Tower está en desarrollo y la capa inicial de KPIs DAX ha sido implementada y contrastada con el EDA. El siguiente bloque de trabajo consiste en completar las visualizaciones, incorporar las medidas restantes según cada página y validar el comportamiento de filtros y relaciones inactivas.
- Confirmar la interpretación de los buques ausentes en operaciones intermodales.
- Mantener los
NAestructurales de los envÃos por carretera. - Revisar en QGIS la coherencia entre coordenadas, ciudades y paÃses.
- Mantener cautela al interpretar categorÃas con pocos registros, especialmente riesgo alto, huelgas y modos con bajo volumen mensual.
- Tratar
Noneen las causas como ausencia de una causa especÃfica registrada, no necesariamente como ausencia de retraso. - Evitar atribuir causalidad a las relaciones observadas durante el EDA.
- Validar las relaciones inactivas y las medidas que requieran
USERELATIONSHIP()antes de cerrar el dashboard.
- Completar los KPIs y visuales de
Freight Operations Control Tower. - Construir las páginas de servicio/proyectos, costes, transportistas/carga, incidencias/riesgo, rutas, puertos/combustible y sostenibilidad.
- Incorporar las medidas de inteligencia temporal y comparaciones interanuales cuando corresponda.
- Validar sistemáticamente los resultados de Power BI frente al EDA en R.
- Desarrollar el análisis prescriptivo y de optimización en Python.
- Representar y analizar nodos, puertos y rutas en QGIS.
- Estructura inicial.
- Modelo de datos preliminar.
- Importación automatizada.
- Evaluación inicial de calidad.
- Limpieza y preparación.
- Análisis exploratorio en R.
- Modelado semántico en Power BI.
- Medidas DAX base para
Freight Operations Control Tower. - Dashboard completo en Power BI.
- Análisis prescriptivo en Python.
- Análisis geoespacial en QGIS.






