Engenharia de dados simplificada — Scripts Python anexados para iniciar suas tarefas de ETL
Visão geral:
Assuma o trabalho de um engenheiro de dados, extraindo dados de várias fontes de formatos de arquivo, transformando-os em tipos de dados específicos e carregando-os em uma única fonte para análise. Logo Após a leitura deste artigo, Com o auxílio de vários exemplos práticos, você poderá colocar suas habilidades à prova implementando web scraping e extraindo dados com APIs. Com o Python e a engenharia de dados, você poderá começar a coletar grandes conjuntos de dados de várias fontes e transformá-los em uma única fonte primária ou iniciar a extração da Web para obter informações comerciais úteis.
Sinopse:
- Por que a engenharia de dados é mais confiável?
- Processo do ciclo ETL
- Passo a passo Extrair, Transformar, a função Carregar
- Sobre a engenharia de dados
- Conclusão
É uma ocupação de tecnologia mais confiável e de crescimento mais rápido na geração atual, pois se concentra mais na raspagem da Web e no rastreamento de conjuntos de dados.
Processo (Ciclo ETL):
Você já se perguntou como os dados de várias fontes foram integrados para criar uma única fonte de informação? O processamento em lote é uma espécie de coleta de dados e aprenda mais sobre “como explorar um tipo de processamento em lote” chamado Extrair, Transformar e Carregar.
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 banco de dados ou arquivo de destino.
Alguns de seus dados são armazenados em arquivos CSV, enquanto outros são armazenados em arquivos JSON. Você deve reunir todas essas informações em um único arquivo para o AI ler. Como seus dados estão em unidades imperiais, mas a IA precisa de unidades métricas, você precisará convertê-los. Como o AI só pode ler dados CSV em um único arquivo grande, você deve primeiro carregá-lo. 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 fáceis.
Examinando 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 é retornada. Para arquivos.json, podemos fazer a mesma coisa. Podemos criar um arquivo que extraia nomes, alturas e pesos no formato CSV. O nome do arquivo.csv é a entrada e a saída é um quadro de dados. Para formatos JSON, podemos fazer a mesma coisa.
Passo 1:
Importe as funções e os módulos necessários
import glob
import pandas as pd
import xml.etree.ElementTree as ET
from datetime import datetime
Os arquivos dealership_data
contêm arquivos CSV, JSON e XML para dados de carros usados que contêm 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.
Defina o caminho para os 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" # transformed data is stored
A função extrairá grandes quantidades de dados de várias fontes em lotes. Ao adicionar esta função, ele 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 sendo anexada primeiro, seguida pela segunda iteração, resultando em uma lista de dados extraídos. Depois de reunir os dados, passaremos para a etapa “Transformar” do processo.
Observação: se o “índice de ignorar” for definido como verdadeiro, a ordem de cada linha será a mesma em que as linhas foram anexadas ao quadro de dados.
Função de extração de CSV
def extract_from_csv(file_to_process):
dataframe = pd.read_csv(file_to_process)
return dataframe
def extract_from_json(file_to_process):
dataframe = pd.read_json(file_to_process,lines=True)
return dataframe
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
Agora chame a função extract usando sua chamada de função 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
Depois de reunir os dados, passaremos para a fase “Transformar” do processo. Esta função converterá a altura da coluna, que está em polegadas, para milímetros e a coluna libras, que está em libras, para quilogramas, e retornará os resultados nos dados da variável. No quadro de dados de entrada, a altura da coluna está em pés. Converta a coluna para convertê-la em metros e arredonde-a para duas casas decimais.
def transform(data):
data['price'] = round(data.price, 2)
return data
É hora de carregar os dados no arquivo de destino agora que os reunimos e especificamos. Salvamos o quadro de dados do pandas como um CSV neste cenário. Agora passamos pelas etapas de extração, transformação e carregamento de dados de várias fontes em um único arquivo de destino. Precisamos estabelecer uma entrada de registro antes de podermos terminar nosso trabalho. Conseguiremos isso escrevendo uma função de registro.
Função de carga:
def load(targetfile,data_to_load):
data_to_load.to_csv(targetfile)
Todos os dados escritos serão anexados às informações atuais quando o “a” for adicionado. Podemos então anexar um timestamp a cada fase do processo, indicando quando começa e quando termina, gerando este tipo de entrada. Depois de definir todo o código necessário para realizar o processo ETL nos dados, o último passo é chamar todas as funções.
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')
Primeiro começamos chamando a função extract_data. Os dados recebidos desta etapa serão então transferidos para a segunda etapa de transformação dos dados. Após a conclusão, os dados são carregados no arquivo de destino. Além disso, observe que antes e depois de cada etapa, a hora e a data de início e conclusão foram adicionadas.
O log que você iniciou o processo ETL:
log("ETL Job Started")
log("Extract phase Started")
extracted_data = extract()
log("Extract phase Ended")
log(“Fase de transformação iniciada”)
dados_transformados = transform(dados_extraídos)
log("Transform phase Ended")
log("Load phase Started")
load(targetfile,transformed_data)
log("Load phase Ended")
log("ETL Job Ended")
- Como escrever uma função Extract simples.
- Como escrever uma função Transform simples.
- Como escrever uma função Load simples.
- Como escrever uma função de registro simples.
No máximo, discutimos todos os processos de ETL. Além disso, vamos ver, “quais são os benefícios do trabalho de engenheiro de dados?”.
Sobre Engenharia de Dados:
A engenharia de dados é um campo vasto com muitos nomes. Pode até não ter um título 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 dependem dos engenheiros de dados são tão diversos quanto os talentos e resultados das equipes de engenharia de dados. Seus consumidores sempre definirão com quais problemas você lida e como os resolve, independentemente do setor em que atua.
Conclusão:
Espero que você encontre alguma ajuda no artigo e compreenda o uso do Python para ETL ao iniciar sua jornada para aprender engenharia de dados. Ficou com vontade de aprender mais? Encorajo você a verificar meus outros artigos sobre como você pode usar classes python para melhorar os processos de engenharia de dados . Também demonstro como usar o pydantic para melhorar a validação de dados em uma das primeiras e principais etapas do pipeline de dados. Se você estiver interessado em visualização de dados, consulte este guia passo a passo para criar seu primeiro gráfico com o Apache Superset .
Chamado para ação
Se você achar o guia útil, sinta-se à vontade para bater palmas e me seguir. Junte-se ao meio através deste link para acessar todos os artigos premium meus e de todos os outros escritores incríveis aqui no meio.
Codificação de nível
Obrigado por fazer parte da nossa comunidade! Antes de você ir:
- Bata palmas para a história e siga o autor
- Veja mais conteúdo na publicação Level Up Coding
- Siga-nos: Twitter | Linkedin | Boletim de Notícias