
Daten Flattening: Techniken zur Vereinfachung komplexer Strukturen

In der Welt der Datenverarbeitung und -analyse kann der Umgang mit hierarchischen und mehrdimensionalen Datenstrukturen eine Herausforderung sein. Flattening ist eine Technik, die diese komplexen Datenstrukturen vereinfacht, indem sie in ein flaches, zweidimensionales Format konvertiert werden.
Dieser Artikel erklärt, wie man Daten flatten kann, seine Hauptkonzepte und Workflows zur Organisation von hierarchischen und mehrdimensionalen Daten. Es wird auch auf Daten mit Beziehungen eingegangen. Wir werden auch das Flattening mit speziellen Bibliotheken und einfachem Python besprechen und dabei Beispiele präsentieren.
Verständnis des Flattening
Flattening ist der Prozess der Umwandlung einer hierarchischen oder mehrdimensionalen Datenstruktur in ein flaches, tabellarisches Format. Es bedeutet, verschachtelte oder hierarchische Beziehungen auf eine Ebene zu reduzieren, sodass die Daten einfacher zu handhaben und zu untersuchen sind. Flattening ist nützlich, wenn man mit JSON, XML oder anderen strukturierten Daten arbeitet, die verschachtelte Elemente oder Beziehungen aufweisen.
Flattening hierarchischer Daten
Hierarchische Daten bestehen aus Eltern-Kind-Beziehungen, bei denen jedes Element ein oder mehrere Kinder haben kann. Um hierarchische Daten zu flatten, müssen wir die Baumstruktur 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 nimmt. Sie verwendet eine rekursive traverse Funktion, um durch verschachtelte Elemente zu gehen. Die Funktion kombiniert Schlüssel mit einem Unterstrich als Trennzeichen, um sie zu flatten. Die Funktion gibt die resultierenden flachen Daten als Liste von Schlüssel-Wert-Paaren zurück.
Flattening mehrdimensionaler Daten
Mehrdimensionale Daten bestehen aus mehreren Dimensionen oder Attributen, die oft als Arrays oder Matrizen dargestellt werden. Das Flattening mehrdimensionaler Daten beinhaltet die Umwandlung in ein zweidimensionales Format. Hier ist ein Beispiel mit 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 flatten wir das Array in ein 2-dimensionales Format. Der Parameter -1 in reshape berechnet automatisch die Anzahl der Zeilen basierend auf der Gesamtanzahl der Elemente und der angegebenen Anzahl an Spalten.
Flattening von Daten mit Beziehungen
In relationalen Datenbanken kombiniert eine verbundene SELECT-Abfrage Daten aus mehreren Tabellen unter Verwendung ihrer definierten Beziehungen mit Fremdschlüsseln. Dies ermöglicht das Abfragen von Daten aus verschiedenen verknüpften Tabellen.
Datenbanken stellen Beziehungen mittels Fremdschlüsseln her, die sich auf Primärschlüssel in anderen Tabellen beziehen. Mithilfe von JOINed SELECT-Abfragen können Benutzer verwandte Daten aus mehreren Tabellen in einer einzigen Abfrage abrufen. Dies erzeugt eine denormalisierte Ansicht der Daten.
Eine verbundene SELECT-Abfrage kombiniert Daten aus verschiedenen Tabellen in einem Ergebnisdatensatz. Jedoch ist dies nicht genau dasselbe wie Flattening. Flattening im strengsten Sinn unterscheidet sich von einer verbundenen SELECT-Abfrage.
Flattening bedeutet, die Datenstruktur zu ändern, indem verschachtelte JSON- oder XML-Daten in eine einfache Tabelle umgewandelt werden. Hier wird nicht die Situation beschrieben, bei der eine relationale Datenbank verschachtelte JSON-Daten enthält, da dies die Normalisierung bricht. Aber es ist zu beachten, dass MySQL und PostgreSQL RDMS JSON-Tools beinhalten.
Flattening beinhaltet die Denormalisierung von Daten mit Beziehungen oder Fremdschlüsselreferenzen, indem verwandte Informationen zu einer einzigen Tabelle zusammengeführt werden. Hier ist ein Beispiel mit SQL:
Das Beispiel arbeitet mit den folgenden Daten:
-- Erstellen der Kunden-Tabelle CREATE TABLE customers ( customer_id INT PRIMARY KEY, name VARCHAR(100) ); -- Erstellen der Bestellungen-Tabelle CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ); -- Erstellen der Produkte-Tabelle CREATE TABLE products ( product_id INT PRIMARY KEY, name VARCHAR(100) ); -- Erstellen der order_items-Tabelle 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) ); -- Einfügen von Beispieldaten in die Kunden-Tabelle INSERT INTO customers (customer_id, name) VALUES (1, 'John Doe'), (2, 'Jane Smith'); -- Einfügen von Beispieldaten in die Bestellungen-Tabelle 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'); -- Einfügen von Beispieldaten in die Produkte-Tabelle INSERT INTO products (product_id, name) VALUES (1, 'Product A'), (2, 'Product B'), (3, 'Product C'); -- Einfügen von Beispieldaten in die order_items-Tabelle 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);
Flattening wird durch eine verbundene select:
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 zu einem einzigen flachen Ergebnisdatensatz. Die flachen Daten umfassen die Bestelldetails zusammen mit den entsprechenden Kunden- und Produktinformationen.
Flattening mit Bibliotheken
Mehrere Bibliotheken in Python bieten eingebaute Funktionen zum Flattening von Datenstrukturen. Eine beliebte Bibliothek ist pandas, das die json_normalize Funktion zum Flattening von JSON-Daten bietet.
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 json_normalize Funktion in pandas nimmt eine JSON-ähnliche Datenstruktur und flatten sie in ein DataFrame. Sie behandelt automatisch verschachtelte Felder, indem sie Punktnotation verwendet, um Spaltennamen zu erstellen.
Fazit
Flattening ist eine leistungsstarke Technik zur Vereinfachung hierarchischer und mehrdimensionaler Datenstrukturen. Durch die Umwandlung komplexer Daten in ein flaches, tabellarisches Format ermöglicht Flattening eine einfachere Datenverarbeitung, -analyse und -visualisierung. Egal ob Sie mit JSON, XML, Arrays oder relationalen Daten arbeiten, Flattening bietet eine Möglichkeit, die Daten in ein besser handhabbares Format zu transformieren.
In diesem Artikel haben wir die Grundlagen des Flattening, seine Hauptideen und Workflows für verschiedene Datenstrukturen untersucht. Wir haben Beispiele mit einfachem Python und spezifischen Bibliotheken wie ‘numpy’ und ‘pandas’ gegeben. Durch das Verständnis der beschriebenen Techniken können Sie komplexe Datenstrukturen effektiv in Ihren Projekten handhaben und analysieren.