Análisis de Big Data: Taxis NYC

Procesamiento y análisis de grandes volúmenes de datos del servicio de taxis amarillos de Nueva York durante el primer trimestre de 2023.

Descripción del Proyecto

Este proyecto implementa procesos de Big Data para analizar el comportamiento del servicio de taxis amarillos en Nueva York durante el primer trimestre de 2023, con el fin de obtener insights valiosos para la optimización de servicios.

La industria del transporte genera diariamente enormes volúmenes de datos que, al ser procesados y analizados adecuadamente, pueden proporcionar información crucial para la toma de decisiones estratégicas. En este proyecto, nos enfocamos en:

  • Procesar más de 6 millones de registros de viajes
  • Implementar un pipeline completo de Big Data (ingesta, transformación, almacenamiento)
  • Identificar patrones de comportamiento en el servicio de taxis
  • Proporcionar visualizaciones interactivas para facilitar la comprensión de los insights
Tecnologías Utilizadas
Google Cloud Platform BigQuery PySpark Cloud Storage Python Data Studio

Estadísticas del Dataset

6.0M
Viajes Procesados
1.2 TB
Volumen de Datos
45 min
Tiempo de Procesamiento
263
Zonas Geográficas

Metodología de Trabajo

Implementamos una arquitectura completa de Big Data siguiendo estos procesos principales:

Ingesta de Datos

Proceso de extracción y carga de datos desde las fuentes originales al data lake, implementando controles de error y evitando duplicidad.

  • Conexión a fuentes TLC de NYC
  • Verificación de integridad de datos
  • Control de duplicidad mediante hashing
  • Registro de actividad y logging

Transformación y Limpieza

Aplicación de técnicas de limpieza y normalización para garantizar la calidad de los datos procesados.

  • Normalización de campos geográficos
  • Corrección de valores atípicos
  • Enriquecimiento con datos externos
  • Validación de consistencia temporal

Almacenamiento

Estructuración y carga de datos procesados en un modelo optimizado para análisis en BigQuery.

  • Particionamiento por fecha
  • Clusterización por zonas geográficas
  • Optimización de esquema
  • Implementación de políticas de retención

Arquitectura de Procesamiento

Data Lake en Cloud Storage

Implementamos un data lake en tres capas para gestionar el ciclo de vida completo de los datos:

  • Raw Zone: Almacenamiento de datos crudos sin modificaciones
  • Trusted Zone: Datos limpios y validados
  • Refined Zone: Datos transformados listos para análisis

El control de errores se implementó mediante funciones de validación y logs de seguimiento para cada proceso batch.

# Ejemplo de código para control de duplicidad
def check_file_exists(bucket, filename):
    """Verifica si un archivo ya existe en Cloud Storage"""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket)
    blob = bucket.blob(filename)
    return blob.exists()

def process_batch(date, bucket_name):
    """Procesa un lote de datos con control de errores"""
    try:
        filename = f"yellow_tripdata_{date.strftime('%Y-%m')}.parquet"
        
        # Control de duplicidad
        if check_file_exists(bucket_name, f"raw/{filename}"):
            logging.warning(f"El archivo {filename} ya existe en raw zone")
            return
            
        # Proceso de descarga
        download_url = f"https://d37ci6vzurychx.cloudfront.net/trip-data/{filename}"
        response = requests.get(download_url)
        
        # Validación de integridad
        if response.status_code != 200:
            raise Exception(f"Error al descargar {filename}: {response.status_code}")
        
        # Almacenamiento en raw zone
        save_to_cloud_storage(bucket_name, f"raw/{filename}", response.content)
        logging.info(f"Archivo {filename} procesado exitosamente")
        
    except Exception as e:
        logging.error(f"Error en proceso batch: {str(e)}")
        notify_admin("Error en proceso de ingesta", str(e))

Transformación con PySpark

Utilizamos PySpark para el procesamiento distribuido de datos, implementando:

  • Normalización de coordenadas geográficas
  • Cálculo de métricas adicionales (distancia en línea recta, densidad por zona)
  • Filtrado de valores atípicos (viajes con duración > 24h o distancia > 100km)
  • Enriquecimiento con datos climáticos y eventos de la ciudad

Cada transformación se registra para mantener la trazabilidad desde el origen.

# Ejemplo de transformación con PySpark
from pyspark.sql import SparkSession
from pyspark.sql.functions import *

# Inicializar Spark
spark = SparkSession.builder \
    .appName("NYC Taxi Data Processing") \
    .config("spark.executor.memory", "4g") \
    .getOrCreate()

# Cargar datos de la zona raw
df_raw = spark.read.parquet("gs://nyc-taxi-data/raw/yellow_tripdata_*.parquet")

# Aplicar transformaciones
df_cleaned = df_raw \
    .filter(col("trip_distance") > 0) \
    .filter(col("fare_amount") > 0) \
    .withColumn("trip_duration_minutes", 
               (unix_timestamp(col("tpep_dropoff_datetime")) - 
                unix_timestamp(col("tpep_pickup_datetime"))) / 60) \
    .filter(col("trip_duration_minutes").between(1, 1440)) \
    .dropDuplicates(["tpep_pickup_datetime", "tpep_dropoff_datetime", 
                    "PULocationID", "DOLocationID"]) \
    .withColumn("processed_date", current_date())

# Guardar en zona trusted
df_cleaned.write.partitionBy("processed_date") \
    .mode("overwrite") \
    .parquet("gs://nyc-taxi-data/trusted/yellow_taxi/")

# Registrar métricas de calidad
record_count = df_cleaned.count()
print(f"Registros procesados: {record_count}")

Visualizaciones e Insights

Análisis visual de los patrones identificados en los datos de taxis de NYC

Distribución de Viajes por Hora

Insight

La distribución de viajes muestra dos picos claramente definidos: uno en la mañana (7-9 AM) y otro más pronunciado en la tarde-noche (5-8 PM), correspondientes a las horas de mayor actividad laboral. Los viernes y sábados presentan un patrón distinto, con alta actividad hasta las 2-3 AM, indicando comportamiento nocturno de ocio.

Implicación para el negocio: Esta información es vital para optimizar la disponibilidad de unidades durante horas pico, implementar tarifas dinámicas más efectivas y programar mantenimientos durante horas de baja demanda (2-5 AM de lunes a jueves).

Tarifas Promedio por Hora

Insight

Las tarifas promedio muestran variaciones significativas a lo largo del día, con los valores más altos durante las horas de la madrugada (1-5 AM) a pesar de ser horas de baja demanda. La tarifa promedio más alta ocurre a las 5:00 AM ($36.65), mientras que la más baja es a las 2:00 PM ($24.81).

Implicación para el negocio: Este patrón sugiere viajes más largos durante la madrugada (probablemente hacia zonas residenciales periféricas), representando una oportunidad para conductores que prefieran trabajar en horarios nocturnos, con menos tráfico y viajes más rentables por unidad de tiempo.

Zonas con Mayor Número de Viajes (Top 10)

Insight

La zona 132 (JFK Airport) es la más popular con 152,122 viajes. Las tres zonas principales (132, 237, 236) representan aproximadamente el 37.9% del total de viajes analizados.

Implicación para el negocio: Estas zonas concentran gran parte de la demanda, lo que justifica estrategias de asignación prioritaria de unidades y análisis dinámico de saturación.

Zonas con Mayor Número de Viajes

Insight

El análisis geoespacial revela una concentración extremadamente alta de recogidas en determinadas zonas. Las zonas 132 (JFK Airport), 237 y 236 (áreas de Midtown Manhattan) representan el 37.9% del total de viajes. La zona 132 (JFK Airport) registra 152,122 viajes, siendo la ubicación con mayor número de recogidas en el dataset.

Implicación para el negocio: La alta concentración en estas zonas sugiere implementar sistemas de gestión de colas virtuales para reducir la congestión de taxis esperando pasajeros. También indica oportunidades para servicios complementarios en estas zonas de alta demanda (e.g., promociones con hoteles y restaurantes locales).

Rutas Más Populares

Insight

Las 10 rutas más frecuentes representan solo el 5.2% del total de viajes, mostrando una gran diversidad de patrones de movilidad. La ruta más popular es entre las zonas 237 → 236 con 21,361 viajes. Las 10 rutas principales tienen valores entre aproximadamente 7,800 y 21,000 viajes.

Implicación para el negocio: La diversidad de rutas sugiere la necesidad de un sistema de distribución de taxis adaptativo que pueda responder a patrones geográficos complejos. El análisis de estas rutas principales muestra que muchas de ellas conectan áreas comerciales con residenciales o turísticas, sugiriendo oportunidades para servicios especializados según el tipo de ruta.

Conclusiones y Recomendaciones

Principales Hallazgos

  • La demanda de taxis sigue patrones temporales claramente definidos, con picos significativos en horas de entrada/salida laboral, alcanzando su máximo a las 18:00 con 203,607 viajes.
  • Existe una correlación inversa entre el volumen de viajes y la tarifa promedio en determinadas horas, con tarifas más altas ($36.65) a las 5:00 AM cuando la demanda es baja.
  • La concentración geográfica de la demanda en tres zonas específicas (132, 237, 236) representa casi un 38% del total de viajes.
  • La ruta más popular (237 → 236) cuenta con 21,361 viajes, pero las 10 rutas principales apenas representan el 5.2% del total, indicando gran diversidad de patrones de movilidad.
  • El uso efectivo de big data permite predecir con alta precisión las necesidades de servicio por zona y hora.

Recomendaciones

  • Implementar un sistema de incentivos para conductores basado en zonas de alta demanda y baja oferta.
  • Desarrollar un programa específico para la zona 132 (JFK Airport) que optimice tanto recogidas como retornos.
  • Optimizar el sistema de despacho considerando patrones temporales para reducir tiempos de espera, especialmente en las horas pico identificadas (18:00).
  • Establecer alianzas con negocios en las zonas 237 y 236 para captar demanda.
  • Desarrollar un modelo predictivo de demanda que permita anticipar necesidades por eventos especiales.

Trabajo Futuro

  • Incorporar datos de otras modalidades (taxis verdes, VTC, transporte público) para análisis intermodal.
  • Desarrollar un sistema de predicción en tiempo real para optimizar la flota.
  • Implementar análisis de sentimiento de redes sociales para correlacionar con la demanda.
  • Crear un dashboard interactivo para conductores que muestre zonas de alta demanda en tiempo real.
  • Explorar el impacto de variables externas como clima, eventos deportivos y culturales.