Proyecto final del Módulo 8 - Big Data Analysis. Este trabajo realiza un análisis completo de datasets de reseñas de críticos y metadatos de películas de Rotten Tomatoes, demostrando un pipeline moderno de procesamiento de datos a gran escala.
El enfoque principal es la construcción de un flujo end-to-end que incluye:
- Limpieza avanzada y garantía de integridad de datos.
- Análisis exploratorio de estacionalidad en estrenos cinematográficos.
- Estandarización de puntuaciones heterogéneas de críticos.
- Modelado predictivo para estimar la puntuación de reseñas usando variables estructuradas.
Se emplean herramientas de alto rendimiento como Polars y DuckDB para manejar volúmenes significativos de datos de manera eficiente.
- Estrategia de Limpieza e Integridad de Datos Datasets principales:
critic_reviews.csv: ~200k reseñas individuales de críticos.movies.csv: ~10k películas con metadatos (scores, fechas de estreno, runtime, rating, etc.).
Acciones clave realizadas con Polars:
- Reporte de nulos: Solo 89 nulos en
audience_score(~0.87% de los datos) → eliminados tras análisis de impacto estadístico (incremento del error estándar <0.44%, despreciable). - Duplicados: 11.886 registros duplicados exactos en críticas → eliminados para evitar sesgos.
- Estandarización de
originalScore: Formatos muy heterogéneos (fracciones como 3.5/5, letras A+/F, escalas 0-10 o 0-100). Se implementó una UDF personalizada integrada vía DuckDB para normalizar todo a escala 0-100.
Ejemplo simplificado de lógica de normalización:
def clean_and_normalize_score(score: str) -> float:
score = score.strip()
if '/' in score: # Fracciones
num, den = map(float, score.split('/'))
return (num / den) * 100
elif score.upper() in grade_mapping: # Letras A-F
return grade_mapping[score.upper()]
else: # Números directos
num = float(score)
return num if num <= 100 else num / 10Se calculó el volumen mensual de estrenos únicos en salas de cine para identificar ventanas estratégicas de oportunidad comercial.
- Zona Roja (alta competencia): Junio-Julio (verano USA) y Noviembre-Diciembre (temporada navideña).
- Zona Verde (baja competencia): Enero-Febrero y Agosto-Septiembre (ideal para lanzamientos independientes).
- Visualización: Gráfico de barras con colores diferenciados y etiquetas numéricas.
Pipeline completo para predecir standardized_score (0-100):
-
a) Join eficiente entre tablas usando Polars + DuckDB.
-
b) Muestreo aleatorio Bernoulli (~20-30k filas) para entrenamiento rápido.
-
c) Feature Engineering:
-
isTopCritic → binaria a entero.
-
publicationName y rating → Target Encoding.
-
runtime_min → variable numérica directa.
-
d) Modelo base: Random Forest Regressor (100 árboles) Resultados obtenidos:
-
RMSE: ≈19.50
-
R²: ≈0.21 (explica ~21% de la variabilidad → línea base sólida; futuro mejora con NLP sobre texto de reseñas).
- Reportes detallados de integridad (nulos/duplicados con justificación estadística).
- Gráfico de estacionalidad con zonificación estratégica.
- Evaluación cuantitativa del modelo predictivo.
- Datasets limpios y preparados para extensiones (ej. análisis de sentimiento en quotes).
- Procesamiento de Datos: Polars, Pandas, NumPy
- Consultas y UDFs: DuckDB
- Encoding Categórico: category_encoders (TargetEncoder)
- Modelado y Métricas: scikit-learn (RandomForestRegressor)
- Visualización: Matplotlib
- Entorno: Jupyter Notebook
textFinal_Project_Big_Data/
├── Proyecto_Big_Datav4.ipynb # Notebook principal (todo el pipeline)
├── NLP_reviews.ipynb # Análisis complementario con NLP (opcional)
├── archivos/
│ ├── critic_reviews.csv # Dataset original (no incluido por tamaño)
│ ├── movies.csv # Dataset original (no incluido por tamaño)
│ └── reviews_sample.csv # Sample pequeño para pruebas rápidas
├── ETL & Analisis de Costo.pdf # Documentación adicional
├── archivos/Reviews Movies Slides.pdf # Slides de presentación
├── Notas.txt # Notas del equipo
└── README.md
-
Clonar el repositorio:
-
Bashgit clone https://github.com/leopoldozumba/Final_Project_Big_Data.git
-
Instalar dependencias:
-
Bashpip install polars duckdb pandas scikit-learn category-encoders matplotlib
-
Colocar manualmente los datasets grandes en archivos/ (o usar el sample para pruebas rápidas). Ejecutar Proyecto_Big_Datav4.ipynb de principio a fin.
Proyecto desarrollado en equipo para el Módulo de Big Data Analysis.
- Corina Heras
- Jonathan Santana
- Karina Ortega
- Leopoldo Zumba
- Tonny Toscano