Processo ETL | Implementando o processo ETL com Python

Conteúdo

Este artigo foi publicado como parte do Data Science Blogathon

Assuma o trabalho de um engenheiro de dados, extração de dados de várias fontes de formatos de arquivo, transformá-los em tipos de dados específicos e carregá-los em uma única fonte para análise. Pouco depois de ler este artigo, com a ajuda de vários exemplos práticos, você poderá testar suas habilidades implementando web scraping e extração de dados com API. Com Python e engenharia de dados, você pode começar a coletar grandes conjuntos de dados de muitas fontes e transformá-los em uma única fonte primária ou começar a rastrear a web para obter insights úteis de negócios.

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

Sinopse:

  • Por que a engenharia de dados é mais confiável?
  • Processo de ciclo ETL
  • Extrato passo a passo, transformar, função de carga
  • Sobre engenharia de dados
  • Sobre mim
  • conclusão

Por que a engenharia de dados é mais confiável?

É uma ocupação tecnológica mais confiável e de crescimento mais rápido na geração atual, uma vez que se concentra mais em web scraping e rastreamento de conjunto de dados.

Processo (Ciclo ETL):

Você já se perguntou como os dados de muitas fontes foram integrados para criar uma única fonte de informações? Lote é uma maneira de coletar dados e aprender mais sobre “como explorar um tipo de lote” chamado Extract, Transformar e carregar.

88488etl-1763650
Fonte: IBM AI Engineering

ETL é o processo de extrair grandes volumes de dados de uma variedade de fontes e formatos e convertê-los em um único formato antes de colocá-los em um base de dados ou em um arquivo de destino.

Alguns de seus dados são armazenados em arquivos CSV, enquanto outros são armazenados em arquivos JSON. Você precisa coletar todas essas informações em um único arquivo para a IA ler. Porque seus dados estão em unidades imperiais, mas AI precisa de unidades métricas, deve convertê-los. Porque AI só pode ler dados CSV em um único arquivo grande, você deve carregá-lo primeiro. Se os dados estiverem no formato CSV, vamos colocar o seguinte ETL com python e dar uma olhada na etapa de extração com alguns exemplos simples.

Olhando para a lista de arquivos .json e .csv. A extensão do arquivo glob é precedida por uma estrela e um ponto na entrada. Uma lista de arquivos .csv é devolvida. Para arquivos .json, podemos fazer o mesmo. Podemos criar um arquivo que extrai nomes, alturas e pesos no formato CSV. o nome do arquivo do arquivo .csv é a entrada e a saída é um quadro de dados. Para formatos JSON, podemos fazer o mesmo.

17705all-7421731
Fonte: IBM AI Engineering

Paso 1:

Abra o notebook e importe as funções e módulos necessários

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

Dados usados:

Os arquivos dealership_data contêm arquivos CSV, JSON e XML para dados de carros usados que contenham recursos chamados car_model, year_of_manufacture, price, e fuel. Então vamos extrair o arquivo dos dados brutos e transformá-lo em um arquivo de destino e carregá-lo na saída.

Baixe o arquivo de origem da nuvem:

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

Extrair o arquivo zip:

nzip datasource.zip -d dealership_data

Defina o caminho dos arquivos 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"   # dados transformados são armazenados

Paso 2 (EXTRAIR):

Extrato de função extrairá grandes quantidades de dados de várias fontes em lotes. Ao adicionar esse recurso, agora ele vai descobrir e carregar todos os nomes de arquivo CSV, e os arquivos CSV serão adicionados ao quadro de data com cada iteração do loop, com a primeira iteração anexando primeiro, seguido pela segunda iteração, resultando em uma lista de dados extraídos. Depois de coletar os dados, vamos passar para o passo “Transformar” de processo.
Observação: Se ele “índice De ignorar” está definido como verdadeiro, a ordem de cada linha será a mesma que a ordem em que as linhas foram adicionadas ao quadro de dados.

Função de extração CSV

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

Função de extração JSON

def extract_from_json(file_to_process):
    dataframe = pd.read_json(file_to_process,linhas = Verdadeiro)
    retornar dataframe

Função de extração XML

def extract_from_xml(file_to_process):

    dataframe = pd.DataFrame(colunas =['car_model','ano de produção','preço', 'combustível'])

    árvore = ET.parse(file_to_process) 

    raiz = árvore.getroot() 

    para pessoa na raiz: 

        car_model = pessoa.encontrar("car_model").text 

        year_of_manufacture = int(pessoa.encontrar("year_of_manufacture").texto)

        preço = flutuar(pessoa.encontrar("preço").texto) 

        combustível = pessoa.encontrar("combustível").text 

        dataframe = dataframe.append({"car_model":car_model, "year_of_manufacture":year_of_manufacture, "preço":preço, "combustível":combustível}, ignore_index=True) 

        retornar 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.

extrato def():
       extracted_data = pd. DataFrame(colunas =['car_model','ano de produção','preço', 'combustível']) 
    #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)
      voltar extracted_data

Paso 3 (Transformar):

Depois de coletar os dados, pasaremos a la fase “Transformar” de processo. Esta função irá converter a altura da coluna, que está em polegadas, a milímetros e a coluna de libra, que está em libras, para quilograma, e ele retornará os resultados nos dados variáveis. No quadro de dados de entrada, a altura da coluna está em pés. Converta a coluna em metros e arredonde para duas casas decimais.

def transformar(dados):
       dados['preço'] = redondo(data.price, 2)
       dados de retorno

Paso 4 (carregamento e registro):

É hora de carregar os dados no arquivo de destino, agora que os coletamos e especificamos. Salvamos o quadro de dados do pandas como um CSV neste cenário. Agora, passamos pelas etapas de extração, transformar e carregar dados de várias fontes em um único arquivo de destino. Precisamos configurar uma entrada de log antes de terminarmos nosso trabalho. Vamos conseguir isso digitando uma função de registro.

Função de carregamento:

carga def(arquivo alvo,data_to_load):
    data_to_load.to_csv(arquivo alvo)

Função de registro:

Todos os dados inseridos serão adicionados às informações atuais quando o “uma”. Podemos então anexar um estamp de tempo a cada fase do processo, indicando quando começa e quando termina, gerando esse tipo de entrada. Uma vez definidos todos os códigos necessários para executar o processo ETL sobre os dados, o último passo é chamar todas as funções.

def log(mensagem):
    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)
    com aberto("dealership_logfile.txt","uma") como f: f.escrever(timestamp + ',' + mensagem + 'n')

Paso 5 (Executando o processo ETL):

Primeiro, começamos chamando a função extract_data. Os dados recebidos nesta etapa serão então transferidos para a segunda etapa de transformação dos dados. Assim que terminar, os dados são carregados no arquivo de destino. O que mais, observe que antes e depois de cada etapa, a hora e a data de início e término foram adicionadas.

O registro de que o processo ETL foi iniciado:

registro("Trabalho ETL iniciado")

O registro que iniciou e concluiu a etapa de extração:

registro("Fase de extração iniciada")
extract_data = extract() 
registro("Fase de extração finalizada")

O registro que iniciou e encerrou a Etapa de Transformação:

registro (“Fase de transformação iniciada”)

data_transformed = transform (dados_extraídos)

registro("Fase de transformação finalizada")

O registro que iniciou e encerrou a fase de upload:

registro("Fase de carga iniciada")
carga(arquivo alvo,transform_data)
registro("Fase de carga encerrada")

O registro de conclusão do ciclo ETL:

registro("Trabalho ETL finalizado")

Através deste processo, discutimos algumas funções básicas de extração, transformação e carregamento

  • Como escrever uma função de extração simples.
  • Como escrever uma função de transformação simples.
  • Como escrever uma função de carregamento simples.
  • Como escrever uma função de registro simples.

“Não é grande dados, você é cego e surdo e está no meio de uma rodovia “. – Geoffrey Moore.

No máximo, discutimos todos os processos ETL. O que mais, vamos ver, “Quais são os benefícios do trabalho de engenharia de dados?”.

Sobre engenharia de dados:

Engenharia de dados é um vasto campo com muitos nomes. Você pode nem ter um diploma formal em muitas instituições. Como resultado, geralmente é melhor começar definindo os objetivos do trabalho de engenharia de dados que levam aos resultados esperados. Os usuários que confiam em engenheiros de dados são tão diversos quanto os talentos e resultados das equipes de engenharia de dados. Seus consumidores sempre definirão quais problemas você lida e como você os resolve, independentemente do setor a que se dedica.

Sobre mim:

Olá, meu nome é Lavanya e sou de Chennai. Eu sou um escritor apaixonado e criador de conteúdo entusiasmado. Os problemas mais difíceis sempre me excitam. Atualmente estou estudando meu B. Técnico em Engenharia Química e tenho grande interesse nas áreas de engenharia de dados, aprendizado de máquina, ciência de dados e inteligência artificial, e estou constantemente procurando maneiras de integrar esses campos com outras disciplinas, como ciências. e química para promover meus objetivos de pesquisa.

conclusão:

Espero que você tenha gostado do meu artigo e tenha entendido o que é Python em poucas palavras, que fornecerá algumas orientações para você começar sua jornada para aprender engenharia de dados. Esta é apenas a ponta do iceberg em termos de possibilidades.. Existem muitos tópicos mais sofisticados em engenharia de dados, por exemplo, para aprender. Porém, antes que possamos compreender tais noções, Vou expandir no próximo artigo. Obrigado!

A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.