Professional Documents
Culture Documents
31-Model Dades Python ETL
31-Model Dades Python ETL
31-Model Dades Python ETL
Un model de dades és una representació estructurada de la informació que una base de dades
contindrà. Els models de dades s'utilitzen per definir com s'organitzaran i es relacionaran les
dades en una base de dades. Els conceptes clau en un model de dades inclouen:
- Primary Key (Clau Primària): És un atribut o conjunt d'atributs que identifica de manera única
cada fila en una taula. La clau primària s'utilitza per garantir la integritat de les dades i per
establir relacions amb altres taules.
- Secondary Key (Clau Secundària): No és una clau única, però encara s'utilitza per cercar
registres de manera eficient. Pot haver-hi diverses claus secundàries en una taula.
- Relació entre Taules: Les relacions entre taules s'estableixen mitjançant claus primàries i
secundàries. Per exemple, si tens una taula de "Clients" amb una clau primària "ID_Client" i
una taula de "Comandes" amb una clau forana "ID_Client" que es relaciona amb la clau
primària a la taula de "Clients", això estableix una relació entre les dues taules.
ETL és un procés utilitzat per extreure dades de diferents fonts, transformar-les en un format
adequat i carregar-les en un sistema d'emmagatzematge, com una base de dades, per a una
anàlisi posterior. Aquí tens un exemple senzill de com podria ser el procés ETL:
- Extract (Extreure): Obtenir dades de fonts com arxius CSV, bases de dades, APIs, etc.
- Transform (Transformar): Netejar, processar i manipular les dades segons les necessitats. Això
pot incloure la conversió de tipus de dades, l'agregació d'informació, l'eliminació de valors nuls,
etc.
- Load (Carregar): Inserir les dades transformades en una base de dades o sistema
d'emmagatzematge per a la seva anàlisi posterior.
Pandas és una llibreria de Python molt útil per a l'anàlisi de dades. Aquí tens un exemple bàsic
de com utilitzar Pandas:
Aquesta és només una introducció molt bàsica del que pots fer amb Pandas. La llibreria ofereix
moltes més funcionalitats per a l'anàlisi de dades, com ara l'agregació, la agrupació, els gràfics i
més.
import pandas as pd
data = pd.read_csv('archivo.csv')
print(data.head())
# Filtrar datos
# Resumen estadístico
summary = data.describe()
filtered_data.to_csv('nuevo_archivo.csv', index=False)
|-------------|----------|----------|--------|
| 2023-01-01 | A | 10 | 5.0 |
| 2023-01-01 | B |5 | 7.0 |
| 2023-01-02 | A |8 | 5.0 |
| 2023-01-02 | C | 12 | 6.0 |
| 2023-01-03 | B |7 | 7.0 |
Escribe un código en Python utilizando Pandas para calcular el total de ventas por producto en
enero de 2023 y mostrar el resultado en un nuevo DataFrame.
import pandas as pd
ventas_df['Fecha'] = pd.to_datetime(ventas_df['Fecha'])
total_ventas_por_producto = ventas_enero_2023.groupby('Producto')
['Cantidad'].sum().reset_index()
# Mostrar el resultado
print(total_ventas_por_producto)
```
Este código filtra las ventas de enero de 2023, agrupa los datos por producto y calcula la suma
de las cantidades vendidas por producto.
**Respuesta:**
¡Por supuesto! Aquí tienes un ejercicio de examen relacionado con bases de datos y modelado
de datos, incluyendo un proceso ETL (Extract, Transform, Load).
Supongamos que tienes una base de datos de una tienda en línea con dos tablas principales:
`Clientes` y `Pedidos`. Debes realizar una tarea de ETL para obtener un resumen mensual de los
ingresos totales por cliente.
Tabla `Clientes`:
| ID_Cliente | Nombre | Email |
|------------|------------|----------------------|
|1 | Ana | ana@example.com |
|2 | Carlos | carlos@example.com |
|3 | Elena | elena@example.com |
Tabla `Pedidos`:
|-----------|-------------|------------|-------|
**Tarea:**
Escribe un código SQL para realizar la extracción, transformación y carga (ETL) de datos para
obtener un resumen mensual de ingresos totales por cliente durante el primer trimestre del
año 2023 (enero, febrero y marzo).
```sql
-- Extracción: Seleccionar los datos necesarios de la base de datos (se haría el insert into para la
carga al final)
ID_Cliente INT,
Nombre VARCHAR(255),
Mes INT,
Ingresos DECIMAL(10, 2)
);
SELECT
C.ID_Cliente,
C.Nombre,
MONTH(P.Fecha) AS Mes,
SUM(P.Monto) AS Ingresos
FROM
Clientes C
JOIN
WHERE
YEAR(P.Fecha) = 2023
GROUP BY
C.ID_Cliente,
C.Nombre,
MONTH(P.Fecha)
ORDER BY
C.ID_Cliente,
Mes;
```
**Explicación:**
- Utilizamos la cláusula `WHERE` para limitar los resultados al primer trimestre del año 2023
(enero, febrero y marzo).
- En la carga, presentamos el resultado en una tabla que muestra el ID del cliente, el nombre
del cliente, el mes y los ingresos totales por cliente y mes.
¡Por supuesto! Los ejercicios pueden ser mucho más complejos y pueden abordar temas
avanzados relacionados con las claves primarias, claves foráneas y el uso de índices en bases de
datos. Aquí tienes un ejercicio que incluye diferentes escenarios con claves primarias y cómo
funcionan los índices:
**Ejercicio Avanzado de Bases de Datos: Claves Primarias, Claves Foráneas e Índices**
**Escenario:**
Supongamos que estás diseñando una base de datos para una tienda en línea que vende
productos electrónicos. Debes crear las tablas necesarias para gestionar productos, categorías
de productos, clientes y pedidos. Además, debes definir las claves primarias y claves foráneas
adecuadas, así como explicar el uso de índices.
**Instrucciones:**
1. Crea una tabla llamada `Productos` que contenga la información de los productos. Cada
producto debe tener un nombre, precio y cantidad en stock. Define una clave primaria
adecuada.
2. Crea una tabla llamada `Categorias` que almacene las categorías de productos. Cada
categoría debe tener un nombre único. Define una clave primaria.
3. Crea una tabla llamada `Clientes` que almacene la información de los clientes, incluyendo su
nombre, dirección y dirección de correo electrónico. Define una clave primaria.
4. Crea una tabla llamada `Pedidos` que registre los pedidos realizados por los clientes. Cada
pedido debe estar relacionado con un cliente y contener la fecha del pedido. Define una clave
primaria y una clave foránea que vincule los pedidos a los clientes.
5. Explica la importancia de las claves primarias y las claves foráneas en este diseño de base de
datos.
6. Explica cómo y por qué usarías índices en estas tablas. Proporciona ejemplos de consultas
que se beneficiarían de la presencia de índices y cómo mejorarían el rendimiento de esas
consultas.
**Respuestas:**
1. Tabla `Productos`:
```sql
Stock INT
);
```
2. Tabla `Categorias`:
```sql
);
```
3. Tabla `Clientes`:
```sql
Nombre VARCHAR(255),
Direccion VARCHAR(255),
Email VARCHAR(255)
);
```
4. Tabla `Pedidos`:
```sql
Fecha DATE,
ID_Cliente INT,
```
5. **Explicación:** Las claves primarias garantizan que cada fila en una tabla sea única y
permite una identificación única de los registros. Las claves foráneas establecen relaciones
entre las tablas y aseguran la integridad referencial, garantizando que los registros se
relacionen adecuadamente. En este diseño, la clave primaria en cada tabla garantiza la
unicidad de los datos, y la clave foránea en la tabla `Pedidos` vincula cada pedido a un cliente
específico.
En la mayoría de los sistemas de gestión de bases de datos (DBMS, por sus siglas en inglés),
puedes crear un índice utilizando una sentencia SQL específica. A continuación, te mostraré
cómo crear un índice en una columna en una tabla utilizando SQL estándar. Ten en cuenta que
la sintaxis exacta puede variar ligeramente según el DBMS que estés utilizando (por ejemplo,
MySQL, PostgreSQL, SQL Server, etc.), pero los conceptos básicos son los mismos.
ON nombre_de_la_tabla (nombre_de_la_columna);
- `nombre_del_indice`: Es el nombre que asignas al índice. Debe ser único dentro de la base de
datos.
Por ejemplo, si tienes una tabla llamada `Empleados` y deseas crear un índice en la columna
`Apellido`, la sentencia SQL sería la siguiente:
```sql
ON Empleados (Apellido);
El DBMS reconoce que hay un índice en la columna Apellido y lo utiliza para realizar una
búsqueda más rápida de los registros con el apellido 'Smith'.
Esta sentencia crea un índice llamado `idx_apellido` en la columna `Apellido` de la tabla
`Empleados`.