Transformer des données non tabulaires

ETL et ELT en Python

Jake Roach

Data Engineer

Transformer des données non tabulaires

Pipeline ETL avec le composant de transformation en surbrillance.

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 le dictionnaire en un format prêt pour DataFrame

$$

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

Itérer sur les composantes d'un dictionnaire

# Parcourir les clés
for key in raw_data.keys():
    ...
# Parcourir les valeurs
for value in raw_data.values():
    ...
# Parcourir les clés et les valeurs
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

Extraire des données des dictionnaires

entry = {
    "volume": 1443120000,
    "price": {
        "open": 0.12187,
        "close": 0.09791,
    }
}
# Extraire des données du dictionnaire avec .get()
volume = entry.get("volume")
ticker = entry.get("ticker", "DCMP")
# Appeler .get() deux fois pour retourner la valeur "open" imbriquée
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 = []

# Parcourir 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, attribuer les noms de 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...