DataSunrise erreicht AWS DevOps Kompetenz Status in AWS DevSecOps und Überwachung, Protokollierung, Performance

Daten Flattening: Techniken zur Vereinfachung komplexer Strukturen

Daten Flattening: Techniken zur Vereinfachung komplexer Strukturen

Daten flattening

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.

Nächste

Datenbankverschlüsselung

Datenbankverschlüsselung

Erfahren Sie mehr

Benötigen Sie die Hilfe unseres Support-Teams?

Unsere Experten beantworten gerne Ihre Fragen.

Countryx
United States
United Kingdom
France
Germany
Australia
Afghanistan
Islands
Albania
Algeria
American Samoa
Andorra
Angola
Anguilla
Antarctica
Antigua and Barbuda
Argentina
Armenia
Aruba
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bermuda
Bhutan
Bolivia
Bosnia and Herzegovina
Botswana
Bouvet
Brazil
British Indian Ocean Territory
Brunei Darussalam
Bulgaria
Burkina Faso
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Cayman Islands
Central African Republic
Chad
Chile
China
Christmas Island
Cocos (Keeling) Islands
Colombia
Comoros
Congo, Republic of the
Congo, The Democratic Republic of the
Cook Islands
Costa Rica
Cote D'Ivoire
Croatia
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Dominica
Dominican Republic
Ecuador
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Falkland Islands (Malvinas)
Faroe Islands
Fiji
Finland
French Guiana
French Polynesia
French Southern Territories
Gabon
Gambia
Georgia
Ghana
Gibraltar
Greece
Greenland
Grenada
Guadeloupe
Guam
Guatemala
Guernsey
Guinea
Guinea-Bissau
Guyana
Haiti
Heard Island and Mcdonald Islands
Holy See (Vatican City State)
Honduras
Hong Kong
Hungary
Iceland
India
Indonesia
Iran, Islamic Republic Of
Iraq
Ireland
Isle of Man
Israel
Italy
Jamaica
Japan
Jersey
Jordan
Kazakhstan
Kenya
Kiribati
Korea, Democratic People's Republic of
Korea, Republic of
Kuwait
Kyrgyzstan
Lao People's Democratic Republic
Latvia
Lebanon
Lesotho
Liberia
Libyan Arab Jamahiriya
Liechtenstein
Lithuania
Luxembourg
Macao
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Marshall Islands
Martinique
Mauritania
Mauritius
Mayotte
Mexico
Micronesia, Federated States of
Moldova, Republic of
Monaco
Mongolia
Montserrat
Morocco
Mozambique
Myanmar
Namibia
Nauru
Nepal
Netherlands
Netherlands Antilles
New Caledonia
New Zealand
Nicaragua
Niger
Nigeria
Niue
Norfolk Island
North Macedonia, Republic of
Northern Mariana Islands
Norway
Oman
Pakistan
Palau
Palestinian Territory, Occupied
Panama
Papua New Guinea
Paraguay
Peru
Philippines
Pitcairn
Poland
Portugal
Puerto Rico
Qatar
Reunion
Romania
Russian Federation
Rwanda
Saint Helena
Saint Kitts and Nevis
Saint Lucia
Saint Pierre and Miquelon
Saint Vincent and the Grenadines
Samoa
San Marino
Sao Tome and Principe
Saudi Arabia
Senegal
Serbia and Montenegro
Seychelles
Sierra Leone
Singapore
Slovakia
Slovenia
Solomon Islands
Somalia
South Africa
South Georgia and the South Sandwich Islands
Spain
Sri Lanka
Sudan
Suriname
Svalbard and Jan Mayen
Swaziland
Sweden
Switzerland
Syrian Arab Republic
Taiwan, Province of China
Tajikistan
Tanzania, United Republic of
Thailand
Timor-Leste
Togo
Tokelau
Tonga
Trinidad and Tobago
Tunisia
Turkey
Turkmenistan
Turks and Caicos Islands
Tuvalu
Uganda
Ukraine
United Arab Emirates
United States Minor Outlying Islands
Uruguay
Uzbekistan
Vanuatu
Venezuela
Viet Nam
Virgin Islands, British
Virgin Islands, U.S.
Wallis and Futuna
Western Sahara
Yemen
Zambia
Zimbabwe
Choose a topicx
Allgemeine Informationen
Vertrieb
Kundenservice und technischer Support
Partnerschafts- und Allianz-Anfragen
Allgemeine Informationen:
info@datasunrise.com
Kundenservice und technischer Support:
support.datasunrise.com
Partnerschafts- und Allianz-Anfragen:
partner@datasunrise.com