DataSunrise está patrocinando AWS re:Invent 2024 en Las Vegas, por favor visítenos en el stand #2158 de DataSunrise

Aplanado de Datos: Simplificando Estructuras Complejas

Aplanado de Datos: Simplificando Estructuras Complejas

Aplanado de datos

En el mundo del procesamiento y análisis de datos, tratar con estructuras de datos jerárquicas y multidimensionales puede ser desafiante. Aplanar es una técnica que simplifica estas estructuras de datos complejas al convertirlas en un formato plano y bidimensional.

Este artículo explicará cómo aplanar datos, sus conceptos principales y flujos de trabajo para organizar datos jerárquicos y multidimensionales. También cubrirá datos con relaciones. También discutiremos el aplanado utilizando bibliotecas específicas y Python puro, proporcionando ejemplos en el camino.

Entendiendo el Aplanado

El aplanado es el proceso de convertir una estructura de datos jerárquica o multidimensional en un formato plano y tabular. Esto significa convertir relaciones anidadas o jerárquicas en un solo nivel, para que los datos sean más fáciles de manejar y estudiar. El aplanado es útil cuando se trabaja con JSON, XML, u otros datos estructurados que tienen elementos o relaciones anidadas.

Aplanando Datos Jerárquicos

Los datos jerárquicos consisten en relaciones padre-hijo, donde cada elemento puede tener uno o más elementos hijos. Para aplanar datos jerárquicos, necesitamos recorrer la estructura en forma de árbol y extraer la información relevante. Aquí hay un ejemplo usando 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
# Ejemplo de uso
hierarchical_data = {
    'persona': {
        'nombre': 'Juan',
        'edad': 30,
        'direccion': {
            'calle': '123 Main St',
            'ciudad': 'Nueva York'
        }
    }
}
flattened_data = flatten_hierarchical_data(hierarchical_data)
print(flattened_data)

Salida:

[('persona_nombre', 'Juan'), ('persona_edad', 30), ('persona_direccion_calle', '123 Main St'), ('persona_direccion_ciudad', 'Nueva York')]

En este ejemplo, definimos una función flatten_hierarchical_data que toma una estructura de datos jerárquica como entrada. Utiliza una función recursiva traverse para recorrer los elementos anidados. La función combina claves con un separador de guion bajo para aplanarlas. La función devuelve los datos aplanados resultantes como una lista de pares clave-valor.

Aplanando Datos Multidimensionales

Los datos multidimensionales consisten en múltiples dimensiones o atributos, a menudo representados como matrices o arrays. Aplanar datos multidimensionales implica convertirlos en un formato bidimensional. Aquí hay un ejemplo utilizando la biblioteca numpy en 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)

Salida:

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

En este ejemplo, tenemos un array tridimensional multidimensional_data. Usando la función reshape de numpy, aplanamos el array en un formato bidimensional. El parámetro -1 en reshape calcula automáticamente el número de filas basado en el número total de elementos y el número especificado de columnas.

Aplanando Datos con Relaciones

En bases de datos relacionales, una declaración SELECT con JOIN combina datos de múltiples tablas utilizando sus relaciones definidas con claves externas. Esto permite consultar datos de diferentes tablas que están vinculadas entre sí.

Las bases de datos establecen relaciones utilizando claves externas que se refieren a claves primarias en otras tablas. Usar declaraciones SELECT con JOIN permite a los usuarios recuperar datos relacionados de múltiples tablas en una sola consulta. Esto crea una vista desnormalizada de los datos.

Una declaración SELECT con JOIN combina datos de diferentes tablas en un conjunto de resultados. Sin embargo, esto no es exactamente lo mismo que aplanar. Aplanar, en el sentido más estricto, es diferente de una declaración SELECT con JOIN.

Aplanar significa cambiar la estructura de los datos, como convertir JSON o XML anidados en una tabla simple. No describiremos aquí la situación cuando una base de datos relacional contiene datos JSON anidados, ya que esto rompe la normalización. Pero tenga en cuenta que MySQL y PostgreSQL RDMS incluyen herramientas JSON.

Aplanar implica desnormalizar datos con relaciones o referencias de claves externas combinando información relacionada en una sola tabla. Aquí hay un ejemplo usando SQL:

El ejemplo trabaja con los siguientes datos:

-- Crear la tabla de clientes
CREATE TABLE clientes (
    cliente_id INT PRIMARY KEY,
    nombre VARCHAR(100)
);
-- Crear la tabla de pedidos
CREATE TABLE pedidos (
    pedido_id INT PRIMARY KEY,
    cliente_id INT,
    fecha_pedido DATE,
    FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id)
);
-- Crear la tabla de productos
CREATE TABLE productos (
    producto_id INT PRIMARY KEY,
    nombre VARCHAR(100)
);
-- Crear la tabla de items_pedido
CREATE TABLE items_pedido (
    pedido_id INT,
    producto_id INT,
    cantidad INT,
    PRIMARY KEY (pedido_id, producto_id),
    FOREIGN KEY (pedido_id) REFERENCES pedidos(pedido_id),
    FOREIGN KEY (producto_id) REFERENCES productos(producto_id)
);
-- Insertar datos de ejemplo en la tabla de clientes
INSERT INTO clientes (cliente_id, nombre) VALUES
    (1, 'Juan Perez'),
    (2, 'Ana Lopez');
-- Insertar datos de ejemplo en la tabla de pedidos
INSERT INTO pedidos (pedido_id, cliente_id, fecha_pedido) VALUES
    (1, 1, '2023-05-01'),
    (2, 1, '2023-05-02'),
    (3, 2, '2023-05-03');
-- Insertar datos de ejemplo en la tabla de productos
INSERT INTO productos (producto_id, nombre) VALUES
    (1, 'Producto A'),
    (2, 'Producto B'),
    (3, 'Producto C');
-- Insertar datos de ejemplo en la tabla de items_pedido
INSERT INTO items_pedido (pedido_id, producto_id, cantidad) VALUES
    (1, 1, 2),
    (1, 2, 1),
    (2, 2, 3),
    (3, 1, 1),
    (3, 3, 2);

El aplanado se realiza mediante un SELECT con JOIN:

SELECT 
    pedidos.pedido_id,
    pedidos.cliente_id,
    clientes.nombre AS nombre_cliente,
    pedidos.fecha_pedido,
    items_pedido.producto_id,
    productos.nombre AS nombre_producto,
    items_pedido.cantidad
FROM 
    pedidos
    JOIN clientes ON pedidos.cliente_id = clientes.cliente_id
    JOIN items_pedido ON pedidos.pedido_id = items_pedido.pedido_id
    JOIN productos ON items_pedido.producto_id = productos.producto_id

En este ejemplo, tenemos tres tablas: pedidos, clientes e items_pedido. Usando SELECT con JOIN en SQL, combinamos la información relacionada de estas tablas en un único conjunto de resultados aplanado. Los datos aplanados incluyen los detalles del pedido junto con la información correspondiente del cliente y el producto.

Aplanando con Bibliotecas

Varias bibliotecas en Python proporcionan funcionalidad integrada para aplanar estructuras de datos. Una biblioteca popular es pandas, que ofrece la función json_normalize para aplanar datos JSON. 

Aquí hay un ejemplo:

import pandas as pd
json_data = [
    {
        'nombre': 'Juan',
        'edad': 30,
        'direccion': {
            'calle': '123 Main St',
            'ciudad': 'Nueva York'
        }
    },
    {
        'nombre': 'Ana',
        'edad': 25,
        'direccion': {
            'calle': '456 Elm St',
            'ciudad': 'Londres'
        }
    }
]
flattened_data = pd.json_normalize(json_data)
print(flattened_data)

Salida:

  nombre edad direccion.calle direccion.ciudad
0 Juan 30  123 Main St    Nueva York
1 Ana 25  456 Elm St     Londres

La función json_normalize en pandas toma una estructura de datos similar a JSON y la aplana en un DataFrame. Maneja automáticamente los campos anidados utilizando la notación de puntos para crear nombres de columnas.

Conclusión

Aplanar es una técnica poderosa para simplificar estructuras de datos jerárquicas y multidimensionales. Al convertir datos complejos en un formato plano y tabular, el aplanado permite un procesamiento, análisis y visualización de datos más fácil. Ya sea que trabaje con JSON, XML, matrices o datos relacionales, el aplanado proporciona una forma de transformar los datos en un formato más manejable.

A lo largo de este artículo, exploramos los conceptos básicos del aplanado, sus ideas principales y flujos de trabajo para varias estructuras de datos. Proporcionamos ejemplos utilizando Python puro y bibliotecas específicas como ‘numpy’ y ‘pandas’. Al comprender las técnicas descritas, puede manejar y analizar efectivamente estructuras de datos complejas en sus proyectos.

Siguiente

Diccionario de Datos vs. Inventario de Datos vs. Catálogo de Datos

Diccionario de Datos vs. Inventario de Datos vs. Catálogo de Datos

Más información

¿Necesita la ayuda de nuestro equipo de soporte?

Nuestros expertos estarán encantados de responder a sus preguntas.

Información general:
[email protected]
Servicio al Cliente y Soporte Técnico:
support.datasunrise.com
Consultas sobre Asociaciones y Alianzas:
[email protected]