Niet-tabulaire data transformeren

ETL en ELT in Python

Jake Roach

Data Engineer

Niet-tabulaire data transformeren

ETL-pijplijn met de transform-stap gemarkeerd.

ETL en ELT in Python

Data opslaan in dictionaries

Geneste JSON

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

Doel:

  • Zet de dictionary om naar een DataFrame-klaar formaat

$$

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

Itereren over dictionary-onderdelen

# Loop over keys
for key in raw_data.keys():
    ...
# Loop over values
for value in raw_data.values():
    ...
# Loop over keys and values
for key, value in raw_data.items():
    ...

.keys()

  • Maakt een lijst met sleutels in een dictionary

.values()

  • Maakt een lijst met waarden in een dictionary

.items()

  • Genereert een lijst met tuples van sleutel-waardeparen
ETL en ELT in Python

Data uit dictionaries parseren

entry = {
    "volume": 1443120000,
    "price": {
        "open": 0.12187,
        "close": 0.09791,
    }
}
# Data uit dictionary halen met .get()
volume = entry.get("volume")
ticker = entry.get("ticker", "DCMP")
# Roep .get() twee keer aan om de geneste waarde "open" op te halen
open_price = entry.get("price").get("open", 0)
ETL en ELT in Python

Een DataFrame maken uit een lijst-van-lijsten

Geef een lijst-van-lijsten door aan pd.DataFrame()

# Geef een lijst-van-lijsten door aan pd.DataFrame
raw_data = pd.DataFrame(flattened_rows)

Kolomkoppen instellen met .columns

# Kolommen maken
raw_data.columns = ["timestamps", "open", "close", "volume"]

Een index instellen met .set_index()

# Stel de indexkolom in op "timestamps"
raw_data.set_index("timestamps")
ETL en ELT in Python

Aandelengegevens transformeren

parsed_stock_data = []

# Loop door elk sleutel-waardepaar van de dictionary raw_stock_data
for timestamp, ticker_info in raw_stock_data.items():
    parsed_stock_data.append([
        timestamp,
        ticker_info.get("price", {}).get("open", 0),  # Openingsprijs
        ticker_info.get("price", {}).get("close", 0),  # Slotprijs
        ticker_info.get("volume", 0)  # Volume
    ])
# Maak een DataFrame, ken kolomnamen toe en stel een index in
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 en ELT in Python

Laten we oefenen!

ETL en ELT in Python

Preparing Video For Download...