Proceso ETL | Implementación del proceso ETL con Python

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos

Asuma el trabajo de un ingeniero de datos, extrayendo datos de múltiples fuentes de formatos de archivo, transformándolos en tipos de datos particulares y cargándolos en una sola fuente para su análisis. Poco después de leer este artículo, con la ayuda de varios ejemplos prácticos, podrá poner a prueba sus habilidades implementando web scraping y extrayendo datos con API. Con Python y la ingeniería de datos, podrá comenzar a recopilar enormes conjuntos de datos de muchas fuentes y transformarlos en una única fuente primaria o comenzar a rastrear la web para obtener información empresarial útil.

26550data20pipeline-3346114
Fuente: https://lh3.googleusercontent.com/ikArURcZ9iE9qXjl_6wes6kNBKXqn4WUuCKXxeHVM_G8Xiz5qygSojJAe_F-KKF014_KqDo=s47

Sinopsis:

  • ¿Por qué la ingeniería de datos es más confiable?
  • Proceso del ciclo ETL
  • Paso a paso Extraer, transformar, la función de carga
  • Acerca de la ingeniería de datos
  • Sobre mí
  • Conclusión

¿Por qué la ingeniería de datos es más confiable?

Es una ocupación tecnológica más confiable y de más rápido crecimiento en la generación actual, ya que se concentra más en web scraping y rastreo de conjuntos de datos.

Proceso (ciclo ETL):

¿Se ha preguntado alguna vez cómo se integraron los datos de muchas fuentes para crear una única fuente de información? El procesamiento por lotes es una forma de recopilar datos y aprender más sobre “cómo explorar un tipo de procesamiento por lotes” llamado Extraer, Transformar y Cargar.

88488etl-1763650
Fuente: Ingeniería de IA de IBM

ETL es el proceso de extraer grandes volúmenes de datos de una variedad de fuentes y formatos y convertirlos a un formato único antes de colocarlos en una base de datos o en un archivo de destino.

Algunos de sus datos se almacenan en archivos CSV, mientras que otros se almacenan en archivos JSON. Debe recopilar toda esta información en un solo archivo para que la IA la lea. Debido a que sus datos están en unidades imperiales, pero la IA necesita unidades métricas, deberá convertirlos. Debido a que la IA solo puede leer datos CSV en un solo archivo grande, primero debe cargarlo. Si los datos están en formato CSV, pongamos el siguiente ETL con python y echemos un vistazo al paso de extracción con algunos ejemplos sencillos.

Mirando la lista de archivos .json y .csv. La extensión del archivo glob está precedida por una estrella y un punto en la entrada. Se devuelve una lista de archivos .csv. Para los archivos .json, podemos hacer lo mismo. Podemos crear un archivo que extraiga nombres, alturas y pesos en formato CSV. El nombre de archivo del archivo .csv es la entrada y la salida es un marco de datos. Para los formatos JSON, podemos hacer lo mismo.

17705all-7421731
Fuente: Ingeniería de IA de IBM

Paso 1:

Abra el cuaderno e importe las funciones y los módulos necesarios

import glob 
import pandas as pd 
import xml.etree.ElementTree as ET 
from datetime import datetime

Datos utilizados:

Los archivos dealership_data contienen archivos CSV, JSON y XML para datos de automóviles usados ​​que contienen características denominadas car_model, year_of_manufacture, price, y fuel. Así que vamos a extraer el archivo de los datos sin procesar y transformarlo en un archivo de destino y cargarlo en la salida.

Descargue el archivo fuente de la nube:

!wget https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-PY0221EN-SkillsNetwork/labs/module%206/Lab%20-%20Extract%20Transform%20Load/data/datasource.zip

Extraiga el archivo zip:

nzip datasource.zip -d dealership_data

Establezca la ruta de los archivos de destino:

tmpfile    = "dealership_temp.tmp"               # store all extracted data

logfile    = "dealership_logfile.txt"            # all event logs will be stored

targetfile = "dealership_transformed_data.csv"   # transformed data is stored

Paso 2 (EXTRACTO):

El extracto de función extraerá grandes cantidades de datos de múltiples fuentes en lotes. Al agregar esta función, ahora descubrirá y cargará todos los nombres de archivos CSV, y los archivos CSV se agregarán al marco de fecha con cada iteración del ciclo, con la primera iteración adjuntando primero, seguida de la segunda iteración, lo que resulta en una lista de datos extraídos. Una vez que hayamos recopilado los datos, pasaremos al paso «Transformar» del proceso.
Nota: Si el «índice de ignorar» se establece en verdadero, el orden de cada fila será el mismo que el orden en el que se agregaron las filas al marco de datos.

Función de extracción de CSV

def extract_from_csv(file_to_process): 
    dataframe = pd.read_csv(file_to_process) 
    return dataframe

Función de extracción JSON

def extract_from_json(file_to_process):
    dataframe = pd.read_json(file_to_process,lines=True)
    return dataframe

Función de extracción XML

def extract_from_xml(file_to_process):

    dataframe = pd.DataFrame(columns=['car_model','year_of_manufacture','price', 'fuel'])

    tree = ET.parse(file_to_process) 

    root = tree.getroot() 

    for person in root: 

        car_model = person.find("car_model").text 

        year_of_manufacture = int(person.find("year_of_manufacture").text)

        price = float(person.find("price").text) 

        fuel = person.find("fuel").text 

        dataframe = dataframe.append({"car_model":car_model, "year_of_manufacture":year_of_manufacture, "price":price, "fuel":fuel}, ignore_index=True) 

        return dataframe

Función de extracción ():

Ahora llame a la función de extracción usando su llamada de función para CSV, JSON, XML.

def extract():
       extracted_data = pd.DataFrame(columns=['car_model','year_of_manufacture','price', 'fuel']) 
    #for csv files
      for csvfile in glob.glob("dealership_data/*.csv"):
          extracted_data = extracted_data.append(extract_from_csv(csvfile), ignore_index=True)
    #for json files
      for jsonfile in glob.glob("dealership_data/*.json"):
          extracted_data = extracted_data.append(extract_from_json(jsonfile), ignore_index=True)
    #for xml files
      for xmlfile in glob.glob("dealership_data/*.xml"):
          extracted_data = extracted_data.append(extract_from_xml(xmlfile), ignore_index=True)
      return extracted_data

Paso 3 (Transformar):

Una vez que hayamos recopilado los datos, pasaremos a la fase «Transformar» del proceso. Esta función convertirá la altura de la columna, que está en pulgadas, a milímetros y la columna libras, que está en libras, a kilogramo, y devolverá los resultados en los datos variables. En el marco de datos de entrada, la altura de la columna está en pies. Convierta la columna para convertirla a metros y redondee a dos decimales.

def transform(data):
       data['price'] = round(data.price, 2)
       return data

Paso 4 (carga y registro):

Es hora de cargar los datos en el archivo de destino ahora que lo hemos recopilado y especificado. Guardamos el marco de datos de pandas como un CSV en este escenario. Ahora hemos pasado por los pasos de extracción, transformación y carga de datos de varias fuentes en un solo archivo de destino. Necesitamos establecer una entrada de registro antes de que podamos terminar nuestro trabajo. Lo lograremos escribiendo una función de registro.

Función de carga:

def load(targetfile,data_to_load):
    data_to_load.to_csv(targetfile)

Función de registro:

Todos los datos que se escriban se agregarán a la información actual cuando se agregue la «a». Luego podemos adjuntar una marca de tiempo a cada fase del proceso, indicando cuándo comienza y cuándo termina, generando este tipo de entrada. Una vez que hayamos definido todo el código necesario para realizar el proceso ETL en los datos, el último paso es llamar a todas las funciones.

def log(message):
    timestamp_format="%H:%M:%S-%h-%d-%Y"
    #Hour-Minute-Second-MonthName-Day-Year
    now = datetime.now() # get current timestamp
    timestamp = now.strftime(timestamp_format)
    with open("dealership_logfile.txt","a") as f: f.write(timestamp + ',' + message + 'n')

Paso 5 (Ejecución del proceso ETL):

Primero comenzamos llamando a la función extract_data. Los datos recibidos de este paso luego se transferirán al segundo paso de transformar los datos. Una vez completado esto, los datos se cargan en el archivo de destino. Además, tenga en cuenta que antes y después de cada paso se han agregado la hora y la fecha de inicio y finalización.

El registro de que ha iniciado el proceso ETL:

log("ETL Job Started")

El registro que ha iniciado y finalizado el paso Extraer:

log("Extract phase Started")
extracted_data = extract() 
log("Extract phase Ended")

El registro que inició y finalizó el Paso de transformación:

log («Fase de transformación iniciada»)

datos_transformados = transformar (datos_extraídos)

log("Transform phase Ended")

El registro que ha iniciado y finalizado la fase de carga:

log("Load phase Started")
load(targetfile,transformed_data)
log("Load phase Ended")

El registro de finalización del ciclo ETL:

log("ETL Job Ended")

Mediante este proceso, discutimos algunas funciones básicas de extracción, transformación y carga

  • Cómo escribir una función Extraer simple.
  • Cómo escribir una función de transformación simple.
  • Cómo escribir una función de carga simple.
  • Cómo escribir una función de registro simple.

«Sin grandes datos, eres ciego y sordo y estás en medio de una autopista «. – Geoffrey Moore.

A lo sumo, hemos discutido todos los procesos ETL. Además, veamos, «¿cuáles son los beneficios del trabajo de ingeniero de datos?».

Acerca de la ingeniería de datos:

La ingeniería de datos es un campo vasto con muchos nombres. Puede que ni siquiera tenga un título formal en muchas instituciones. Como resultado, generalmente es mejor comenzar por definir los objetivos del trabajo de ingeniería de datos que conducen a los resultados esperados. Los usuarios que confían en los ingenieros de datos son tan diversos como los talentos y los resultados de los equipos de ingeniería de datos. Sus consumidores siempre definirán qué problemas maneja y cómo los resuelve, independientemente del sector al que se dedique.

Sobre mí:

Hola, mi nombre es Lavanya y soy de Chennai. Soy un escritor apasionado y entusiasta creador de contenido. Los problemas más difíciles siempre me emocionan. Actualmente estoy cursando mi B. Tech en Ingeniería Química y tengo un gran interés en los campos de la ingeniería de datos, el aprendizaje automático, la ciencia de los datos y la inteligencia artificial, y estoy constantemente buscando formas de integrar estos campos con otras disciplinas como la ciencia. y química para promover mis objetivos de investigación.

Conclusión:

Espero que haya disfrutado de mi artículo y haya adquirido una comprensión de lo que es Python en pocas palabras, lo que le proporcionará alguna orientación al comenzar su viaje para aprender ingeniería de datos. Esta es solo la punta del iceberg en términos de posibilidades. Hay muchos temas más sofisticados en ingeniería de datos, por ejemplo, para aprender. Sin embargo, antes de que podamos captar tales nociones, me extenderé en el próximo artículo. ¡Gracias!

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.