Transformando dados não tabulares

ETL e ELT em Python

Jake Roach

Data Engineer

Transformando dados não tabulares

Pipeline de ETL com o componente de transformação destacado.

ETL e ELT em Python

Armazenando dados em dicionários

JSON aninhado

{
    "863703000": {
        "price": {
            "open": 0.12187,
            "close": 0.09791
        },
        "volume": 1443120000
    }, 
    "863789400": {
    }, ...
}

Objetivo:

  • Converter o dicionário para um formato pronto para DataFrame

$$

[
    [863703000, 0.12187, 0.09791, 1443120000],
    [863789400, 0.09843, ...]
]
ETL e ELT em Python

Iterando pelos componentes do dicionário

# Percorrer chaves
for key in raw_data.keys():
    ...
# Percorrer valores
for value in raw_data.values():
    ...
# Percorrer chaves e valores
for key, value in raw_data.items():
    ...

.keys()

  • Cria uma lista com as chaves do dicionário

.values()

  • Cria uma lista com os valores do dicionário

.items()

  • Gera uma lista de tuplas com os pares chave-valor
ETL e ELT em Python

Extraindo dados de dicionários

entry = {
    "volume": 1443120000,
    "price": {
        "open": 0.12187,
        "close": 0.09791,
    }
}
# Analisar dados do dicionário usando .get()
volume = entry.get("volume")
ticker = entry.get("ticker", "DCMP")
# Chame .get() duas vezes para retornar o valor aninhado "open"
open_price = entry.get("price").get("open", 0)
ETL e ELT em Python

Criando um DataFrame a partir de uma lista de listas

Passe uma lista de listas para pd.DataFrame()

# Passe uma lista de listas para pd.DataFrame
raw_data = pd.DataFrame(flattened_rows)

Defina os nomes das colunas com .columns

# Criar colunas
raw_data.columns = ["timestamps", "open", "close", "volume"]

Defina um índice com .set_index()

# Defina a coluna de índice como "timestamps"
raw_data.set_index("timestamps")
ETL e ELT em Python

Transformando dados de ações

parsed_stock_data = []

# Percorra cada par chave-valor do dicionário raw_stock_data
for timestamp, ticker_info in raw_stock_data.items():
    parsed_stock_data.append([
        timestamp,
        ticker_info.get("price", {}).get("open", 0),  # Extrair preço de abertura
        ticker_info.get("price", {}).get("close", 0),  # Extrair preço de fechamento
        ticker_info.get("volume", 0)  # Extrair volume
    ])
# Crie um DataFrame, defina os nomes das colunas e ajuste o índice
transformed_stock_data = pd.DataFrame(parsed_stock_data)
transformed_stock_data.columns = ["timestamps", "open", "close", "volume"]
transformed_stock_data = transformed_stock_data.set_index("timestamps")
ETL e ELT em Python

Vamos praticar!

ETL e ELT em Python

Preparing Video For Download...