Aplanado de Datos: Simplificando Estructuras Complejas
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.