Trasformare dati non tabellari

ETL and ELT in Python

Jake Roach

Data Engineer

Trasformare dati non tabellari

Pipeline ETL con il componente di trasformazione evidenziato.

ETL and ELT in Python

Archiviare dati nei dizionari

JSON annidato

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

Obiettivo:

  • Convertire il dizionario in un formato pronto per DataFrame

$$

[
    [863703000, 0.12187, 0.09791, 1443120000],
    [863789400, 0.09843, ...]
]
ETL and ELT in Python

Iterare sui componenti di un dizionario

# Loop sulle chiavi
for key in raw_data.keys():
    ...
# Loop sui valori
for value in raw_data.values():
    ...
# Loop su chiavi e valori
for key, value in raw_data.items():
    ...

.keys()

  • Crea un elenco delle chiavi nel dizionario

.values()

  • Crea un elenco dei valori nel dizionario

.items()

  • Genera un elenco di tuple con le coppie chiave-valore
ETL and ELT in Python

Analizzare dati dai dizionari

entry = {
    "volume": 1443120000,
    "price": {
        "open": 0.12187,
        "close": 0.09791,
    }
}
# Estrai dati dal dizionario usando .get()
volume = entry.get("volume")
ticker = entry.get("ticker", "DCMP")
# Chiama .get() due volte per ottenere il valore annidato "open"
open_price = entry.get("price").get("open", 0)
ETL and ELT in Python

Creare un DataFrame da una lista di liste

Passa una lista di liste a pd.DataFrame()

# Passa una lista di liste a pd.DataFrame
raw_data = pd.DataFrame(flattened_rows)

Imposta le intestazioni di colonna con .columns

# Crea le colonne
raw_data.columns = ["timestamps", "open", "close", "volume"]

Imposta un indice con .set_index()

# Imposta "timestamps" come colonna indice
raw_data.set_index("timestamps")
ETL and ELT in Python

Trasformare dati azionari

parsed_stock_data = []

# Cicla su ogni coppia chiave-valore del dizionario raw_stock_data
for timestamp, ticker_info in raw_stock_data.items():
    parsed_stock_data.append([
        timestamp,
        ticker_info.get("price", {}).get("open", 0),  # Estrai il prezzo di apertura
        ticker_info.get("price", {}).get("close", 0),  # Estrai il prezzo di chiusura
        ticker_info.get("volume", 0)  # Estrai il volume
    ])
# Crea un DataFrame, assegna i nomi delle colonne e imposta un indice
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 and ELT in Python

Esercitiamoci!

ETL and ELT in Python

Preparing Video For Download...