El informe que nadie hace a mano
Una cadena de ferreterías tiene doce tiendas en Galicia. Cada noche, la caja de cada tienda exporta sus ventas en un archivo.
El lunes a las nueve, la dirección abre un informe con las ventas de la semana. Nadie lo ha montado a mano.
Entre las cajas y el informe hay un camino automático. Esta lección lo recorre.
Al final de esta lección
Nota
Puedo describir cómo viajan los datos desde el origen hasta el informe.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Origen | el sistema donde nacen los datos | la caja de la tienda |
| Extraer | sacar los datos del origen | |
| Transformar | limpiar y dar forma a los datos | |
| Cargar | guardar los datos donde se van a consultar | |
| Canalización de datos | los pasos que llevan los datos del origen al informe |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Los datos viajan en tres pasos
Extraer: se leen los datos del origen. Aquí, el archivo que deja cada caja.
Transformar: se limpian y se les da la forma que necesita el informe. Se quitan filas vacías y se pasa "35,40" a número.
Cargar: se guardan en una base de datos pensada para consultar. El informe lee de ahí, no de las cajas.
A los tres pasos juntos se les llama ETL, por sus iniciales en inglés.
Los tres pasos en Python
# Lo que exporta la caja cada noche: texto separado por punto y coma.
export_text = """tienda;importe
Lugo;35,40
Vigo;12,00
Lugo;
Ourense;48,90"""
# 1. Extraer: pasar el texto a filas.
lines = export_text.split("\n")
rows = []
for line in lines[1:]:
parts = line.split(";")
rows.append({"shop": parts[0], "amount": parts[1]})
print("Extraídas:", len(rows))
# 2. Transformar: quitar filas sin importe y pasar el texto a número.
clean = []
for row in rows:
if row["amount"] != "":
clean.append({"shop": row["shop"], "amount": float(row["amount"].replace(",", "."))})
print("Transformadas:", clean)
# 3. Cargar: aquí la "base de datos" es una lista; en la empresa sería una tabla.
sales_table = []
for row in clean:
sales_table.append(row)
print("Cargadas:", len(sales_table))
Qué le pasa a cada fila
| Fila del archivo | Tras extraer | Tras transformar |
|---|---|---|
| Lugo;35,40 | Lugo y "35,40" | Lugo y 35.4 |
| Vigo;12,00 | Vigo y "12,00" | Vigo y 12.0 |
| Lugo; | Lugo y "" | se queda fuera |
| Ourense;48,90 | Ourense y "48,90" | Ourense y 48.9 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que lo mejor es que el informe lea directamente de las cajas. No es así. Las cajas sirven para cobrar, y una consulta grande las frena. Además, sus datos llegan sin limpiar. Por eso se copian antes a otro sitio.
Tu turno: totales por tienda
Antes de cargar, la dirección quiere un dato ya calculado: cuánto ha vendido cada tienda. Escribe una función que sume los importes por tienda en un diccionario. Unas pruebas ocultas comprueban tu respuesta.