Skip to main content

Ingestion Script

Drop & Truncate

Antes de continuar con la creación del script y su posterior ejecución, debemos borrar el contenido de la tabla yellow_taxi_data o eliminar completamente la tabla de la base de datos para poder validar la correcta ejecución del script.

Para borrar el contenido de la tabla yellow_taxi_data en SQL, puedes utilizar el comando TRUNCATE.

TRUNCATE TABLE yellow_taxi_data;

Para eliminar la tabla yellow_taxi_data, puedes usar el siguiente comando SQL:

DROP TABLE yellow_taxi_data;

Script .py

Convertir un Jupyter Notebook en un script de Python es un proceso sencillo y útil si deseas ejecutar tu código fuera del entorno interactivo de Jupyter. Aquí tienes dos métodos comunes para hacerlo:

Método 1: Utilizando el comando nbconvert

Jupyter Notebook proporciona una herramienta llamada nbconvert que permite convertir notebooks a varios formatos, incluyendo scripts de Python (.py). Aquí te explico cómo usarlo:

  1. Instalar nbconvert (si no lo tienes instalado): Abre tu terminal (o símbolo del sistema) y ejecuta:

    pip install nbconvert
  2. Convertir el notebook a un script de Python:

    • Abre tu terminal.

    • Navega al directorio donde se encuentra tu notebook (usando el comando cd).

    • Ejecuta el siguiente comando:

      jupyter nbconvert --to script notebook.ipynb
  3. Resultado:

    • Esto generará un archivo .py con el mismo nombre que tu notebook en el mismo directorio. Este archivo contendrá todo el código del notebook convertido en un script de Python.

Método 2: Exportación manual desde Jupyter

Si prefieres no usar la terminal, puedes exportar manualmente desde el entorno de Jupyter:

  1. Desde Jupyter Notebook:

    • Abre tu notebook en Jupyter.
    • Ve al menú File y selecciona Download as.
    • Elige la opción Python (.py).
  2. Resultado:

    • Esto descargará un archivo .py que contendrá todo el código de tu notebook.

Consideraciones adicionales:

  • Dependencias y entorno: Asegúrate de que todas las bibliotecas y dependencias utilizadas en tu notebook estén instaladas en el entorno donde planeas ejecutar el script de Python.

  • Limpieza manual: Después de la conversión, es posible que desees revisar el archivo .py generado para eliminar celdas de código que no desees incluir o para organizar el código de manera más limpia.

Estos métodos te permitirán convertir fácilmente tus Jupyter Notebooks en scripts de Python para su uso fuera del entorno de Jupyter.

Depurar el Script

El Jupyter Notebook 2-upload-data.ipynb debe ser depurado para dejar solo lo necesario para ejecutar el script. En este caso, crearemos un nuevo notebook 3-ingest-data.ipynb. Ahora, procederemos a agregar las líneas de código siguientes:

import pandas as pd
from sqlalchemy import create_engine
from time import time

engine = create_engine('postgresql://root:root@localhost:5432/ny_taxi')
df_iter = pd.read_csv('nyt.csv', iterator=True, chunksize=100000)
df = pd.read_csv('nyt.csv')
df.head(n=0).to_sql(name='yellow_taxi_data', con=engine, if_exists='replace')

try:
while True:
t_start = time() # Captura el tiempo de inicio del bucle

try:
df = next(df_iter) # Obtiene el siguiente chunk de datos del iterador df_iter
except StopIteration:
print("No more data to process.")
break

# Convierte las columnas de fechas a tipos datetime si es necesario
df['tpep_pickup_datetime'] = pd.to_datetime(df['tpep_pickup_datetime'])
df['tpep_dropoff_datetime'] = pd.to_datetime(df['tpep_dropoff_datetime'])

try:
# Inserta el chunk actual del DataFrame en la tabla 'yellow_taxi_data' en la base de datos usando SQLAlchemy
df.to_sql(name='yellow_taxi_data', con=engine, if_exists='append')
except Exception as e:
print(f"Error inserting chunk into database: {e}")
continue

t_end = time() # Captura el tiempo al finalizar la inserción del chunk

# Imprime el tiempo que tomó insertar el chunk actual
print(f"Inserted another chunk, took {t_end - t_start:.3f} seconds")

except Exception as e:
print(f"An error occurred during processing: {e}")
note

Este código es la primera versión de mejores practicas que iremos implementando más adelante.

Script Execution

Primero debemos convertir el Jupyter Notebook en un script de python por lo que lo haremos con el comando jupyter nbconvert desde la terminal:

jupyter nbconvert --to script 3-ingest-data.ipynb

Ahora procedamos a ejecutar el script. Recuerda tener activado el entorno virtual venv creado anteriormente.

python3 3-ingest-data.py