DataSunrise sponsert AWS re:Invent 2024 in Las Vegas, bitte besuchen Sie uns am Stand #2158 von DataSunrise

Datenverflachung: Vereinfachung komplexer Strukturen

Datenverflachung: Vereinfachung komplexer Strukturen

Datenflachung

In der Welt der Datenverarbeitung und -analyse kann der Umgang mit hierarchischen und multidimensionalen Datenstrukturen eine Herausforderung sein. Flachung ist eine Technik, die diese komplexen Datenstrukturen vereinfacht, indem sie in ein flaches, zweidimensionales Format umgewandelt werden.

Dieser Artikel erklärt, wie man Daten flacht, die wichtigsten Konzepte und Workflows zur Organisation hierarchischer und multidimensionaler Daten. Es wird auch Daten mit Beziehungen abdecken. Wir werden auch die Flachung unter Verwendung spezifischer Bibliotheken und reinem Python diskutieren und dabei Beispiele geben.

Verständnis der Flachung

Flachung ist der Prozess der Umwandlung einer hierarchischen oder multidimensionalen Datenstruktur in ein flaches, tabellarisches Format. Es bedeutet, geschachtelte oder hierarchische Beziehungen in eine Ebene zu bringen, sodass die Daten einfacher zu handhaben und zu studieren sind. Flachung ist nützlich beim Arbeiten mit JSON, XML oder anderen strukturierten Daten, die verschachtelte Elemente oder Beziehungen enthalten.

Flachung hierarchischer Daten

Hierarchische Daten bestehen aus Eltern-Kind-Beziehungen, bei denen jedes Element ein oder mehrere Kindelemente haben kann. Um hierarchische Daten zu flachen, müssen wir die baumartige Struktur durchlaufen und die relevanten Informationen extrahieren. Hier ist ein Beispiel mit Python:

def flatten_hierarchical_data(data):
    flattened_data = []

    def traverse(node, prefix=''):
        for key, value in node.items():
            if isinstance(value, dict):
                traverse(value, prefix + key + '_')
            else:
                flattened_data.append((prefix + key, value))

    traverse(data)
    return flattened_data
# Beispiel Verwendung
hierarchical_data = {
    'person': {
        'name': 'John',
        'age': 30,
        'address': {
            'street': '123 Main St',
            'city': 'New York'
        }
    }
}
flattened_data = flatten_hierarchical_data(hierarchical_data)
print(flattened_data)

Ausgabe:

[('person_name', 'John'), ('person_age', 30), ('person_address_street', '123 Main St'), ('person_address_city', 'New York')]

In diesem Beispiel definieren wir eine Funktion flatten_hierarchical_data, die eine hierarchische Datenstruktur als Eingabe erhält. Sie verwendet eine rekursive Traverse-Funktion, um verschachtelte Elemente zu durchlaufen. Die Funktion kombiniert Schlüssel mit einem Unterstrich als Trennzeichen, um sie zu flachen. Die Funktion gibt die resultierenden flachen Daten als Liste von Schlüssel-Wert-Paaren zurück.

Flachung multidimensionaler Daten

Multidimensionale Daten bestehen aus mehreren Dimensionen oder Attributen und werden oft als Arrays oder Matrizen dargestellt. Die Flachung multidimensionaler Daten beinhaltet die Umwandlung in ein zweidimensionales Format. Hier ist ein Beispiel unter Verwendung der numpy-Bibliothek in Python:

import numpy as np
multidimensional_data = np.array([
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
])
flattened_data = multidimensional_data.reshape(-1, multidimensional_data.shape[-1])
print(flattened_data)

Ausgabe:

[[1 2]
 [3 4]
 [5 6]
 [7 8]]

In diesem Beispiel haben wir ein 3-dimensionales Array multidimensional_data. Durch die Verwendung der reshape-Funktion von numpy flachen wir das Array in ein 2-dimensionales Format. Der Parameter -1 in reshape berechnet automatisch die Anzahl der Zeilen basierend auf der Gesamtzahl der Elemente und der angegebenen Anzahl von Spalten.

Flachung von Daten mit Beziehungen

In relationalen Datenbanken kombiniert eine verbundene SELECT-Anweisung Daten aus mehreren Tabellen, indem deren definierte Beziehungen mit Fremdschlüsseln verwendet werden. So können Daten aus verschiedenen Tabellen abgefragt werden, die miteinander verknüpft sind.

Datenbanken erstellen Beziehungen mithilfe von Fremdschlüsseln, die auf Primärschlüssel in anderen Tabellen verweisen. Durch die Verwendung von JOINed SELECT-Abfragen können Benutzer verwandte Daten aus mehreren Tabellen in einer einzigen Abfrage abrufen. Dies erstellt eine denormalisierte Ansicht der Daten.

Eine verbundene SELECT-Anweisung kombiniert Daten aus verschiedenen Tabellen in eine Ergebnismenge. Es ist jedoch nicht genau dasselbe wie eine Flachung. Flachung, im strengsten Sinne, unterscheidet sich von einer verbundenen SELECT-Anweisung.

Flachung bedeutet, die Datenstruktur zu ändern, wie das Umwandeln von geschachtelten JSON- oder XML-Daten in eine einfache Tabelle. Hier beschreiben wir nicht die Situation, wenn eine relationale Datenbank verschachtelte JSON-Daten enthält, da dies die Normalisierung bricht. Aber beachten Sie, dass MySQL und PostgreSQL RDMS JSON-Tools enthalten.

Flachung beinhaltet die Denormalisierung von Daten mit Beziehungen oder Fremdschlüsselreferenzen, indem verwandte Informationen in einer einzigen Tabelle kombiniert werden. Hier ist ein Beispiel mit SQL:

Das Beispiel funktioniert mit den folgenden Daten:

-- Erstellen Sie die Tabelle customers
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100)
);
-- Erstellen Sie die Tabelle orders
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- Erstellen Sie die Tabelle products
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    name VARCHAR(100)
);
-- Erstellen Sie die Tabelle order_items
CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id),
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);
-- Beispiel Daten in die Tabelle customers einfügen
INSERT INTO customers (customer_id, name) VALUES
    (1, 'John Doe'),
    (2, 'Jane Smith');
-- Beispiel Daten in die Tabelle orders einfügen
INSERT INTO orders (order_id, customer_id, order_date) VALUES
    (1, 1, '2023-05-01'),
    (2, 1, '2023-05-02'),
    (3, 2, '2023-05-03');
-- Beispiel Daten in die Tabelle products einfügen
INSERT INTO products (product_id, name) VALUES
    (1, 'Product A'),
    (2, 'Product B'),
    (3, 'Product C');
-- Beispiel Daten in die Tabelle order_items einfügen
INSERT INTO order_items (order_id, product_id, quantity) VALUES
    (1, 1, 2),
    (1, 2, 1),
    (2, 2, 3),
    (3, 1, 1),
    (3, 3, 2);

Flachung wird durch verbundene Select durchgeführt:

SELECT 
    orders.order_id,
    orders.customer_id,
    customers.name AS customer_name,
    orders.order_date,
    order_items.product_id,
    products.name AS product_name,
    order_items.quantity
FROM 
    orders
    JOIN customers ON orders.customer_id = customers.customer_id
    JOIN order_items ON orders.order_id = order_items.order_id
    JOIN products ON order_items.product_id = products.product_id

In diesem Beispiel haben wir drei Tabellen: orders, customers und order_items. Durch die Verwendung von SQL-Joins kombinieren wir die verwandten Informationen aus diesen Tabellen in eine einzige, flachere Ergebnismenge. Die flachen Daten enthalten die Bestelldetails zusammen mit den entsprechenden Kunden- und Produktinformationen.

Flachung mit Bibliotheken

Mehrere Bibliotheken in Python bieten integrierte Funktionalitäten zur Flachung von Datenstrukturen. Eine beliebte Bibliothek ist pandas, die die Funktion json_normalize zum Flachen von JSON-Daten anbietet. 

Hier ist ein Beispiel:

import pandas as pd
json_data = [
    {
        'name': 'John',
        'age': 30,
        'address': {
            'street': '123 Main St',
            'city': 'New York'
        }
    },
    {
        'name': 'Jane',
        'age': 25,
        'address': {
            'street': '456 Elm St',
            'city': 'London'
        }
    }
]
flattened_data = pd.json_normalize(json_data)
print(flattened_data)

Ausgabe:

 name age address.street address.city
0 John 30  123 Main St    New York
1 Jane 25  456 Elm St     London

Die Funktion json_normalize in pandas nimmt eine JSON-ähnliche Datenstruktur und flacht sie in ein DataFrame um. Es behandelt automatisch verschachtelte Felder, indem es Punktnotation verwendet, um Spaltennamen zu erstellen.

Fazit

Flachung ist eine leistungsstarke Technik zur Vereinfachung hierarchischer und multidimensionaler Datenstrukturen. Durch die Umwandlung komplexer Daten in ein flaches, tabellarisches Format ermöglicht Flachung eine einfachere Datenverarbeitung, -analyse und -visualisierung. Egal ob Sie mit JSON, XML, Arrays oder relationalen Daten arbeiten, Flachung bietet eine Möglichkeit, die Daten in ein handlicheres Format zu transformieren.

In diesem Artikel haben wir die Grundlagen der Flachung, ihre Hauptideen und Workflows für verschiedene Datenstrukturen untersucht. Wir haben Beispiele mit reinem Python und spezifischen Bibliotheken wie ‘numpy’ und ‘pandas’ gegeben. Durch das Verständnis der beschriebenen Techniken können Sie komplexe Datenstrukturen in Ihren Projekten effektiv handhaben und analysieren.

Nächste

Datenbankverschlüsselung

Datenbankverschlüsselung

Erfahren Sie mehr

Benötigen Sie die Hilfe unseres Support-Teams?

Unsere Experten beantworten gerne Ihre Fragen.

Allgemeine Informationen:
[email protected]
Kundenservice und technischer Support:
support.datasunrise.com
Partnerschafts- und Allianz-Anfragen:
[email protected]