Transformer des données non tabulaires

ETL et ELT en Python

Jake Roach

Data Engineer

Transformer des données non tabulaires

Pipeline ETL avec la composante transform mise en évidence.

ETL et ELT en Python

Stocker des données dans des dictionnaires

JSON imbriqué

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

Objectif :

  • Convertir un dictionnaire en format prêt pour un DataFrame

$$

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

Itérer sur les composants d'un dictionnaire

# 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()

  • Crée une liste des clés d'un dictionnaire

.values()

  • Crée une liste des valeurs d'un dictionnaire

.items()

  • Génère une liste de tuples formés des paires clé‑valeur
ETL et ELT en Python

Analyser des données depuis des dictionnaires

entry = {
    "volume": 1443120000,
    "price": {
        "open": 0.12187,
        "close": 0.09791,
    }
}
# Extraire des données d'un dictionnaire avec .get()
volume = entry.get("volume")
ticker = entry.get("ticker", "DCMP")
# Appeler .get() deux fois pour retourner la valeur imbriquée "open"
open_price = entry.get("price").get("open", 0)
ETL et ELT en Python

Créer un DataFrame à partir d'une liste de listes

Passer une liste de listes à pd.DataFrame()

# Passer une liste de listes à pd.DataFrame
raw_data = pd.DataFrame(flattened_rows)

Définir les en‑têtes avec .columns

# Créer les colonnes
raw_data.columns = ["timestamps", "open", "close", "volume"]

Définir un index avec .set_index()

# Définir la colonne d'index sur "timestamps"
raw_data.set_index("timestamps")
ETL et ELT en Python

Transformer des données boursières

parsed_stock_data = []

# Boucler sur chaque paire clé‑valeur du dictionnaire raw_stock_data
for timestamp, ticker_info in raw_stock_data.items():
    parsed_stock_data.append([
        timestamp,
        ticker_info.get("price", {}).get("open", 0),  # Extraire le prix d'ouverture
        ticker_info.get("price", {}).get("close", 0),  # Extraire le prix de clôture
        ticker_info.get("volume", 0)  # Extraire le volume
    ])
# Créer un DataFrame, nommer les colonnes et définir un index
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 et ELT en Python

Passons à la pratique !

ETL et ELT en Python

Preparing Video For Download...