2025-12-09

[Python en Fabric] 1 · Setup, carga y transformación: primeros pasos (sin drama)

Instalación para el que tiene mil pestañas abiertas y poca paciencia. Todo lo necesario, nada de lo que no.

1️⃣ INTRO

Sin tutoriales de 3 horas. Sin misterios. 15 minutos, todo explicado, cero sorpresas. Instalas → Descargas → Transformas → Ready.

🧱 Recordatorio rápido: qué es Fabric Microsoft Fabric es la plataforma unificada de datos de Microsoft: en un solo sitio tienes lago de datos, ingeniería, BI y tiempo real trabajando sobre el mismo almacenamiento (OneLake).

En este post usamos solo una parte: Notebooks + Lakehouse, la zona donde escribes código (Python/Spark) y guardas tus datos en formato optimizado (Parquet).

🗺️ Tu mapa de ruta para hoy

📍 Dónde estamos en la serie:

¿Te perdiste el anterior? 👈 Post 0: LELI5: ¿Por qué Fabric + Python? La intro. Si es tu primera vez, empieza aquí.

📌 Estás aquí: Post 1 Setup, Carga y Transformación Configura tu entorno en 15 minutos

Siguiente paso: 👉 Post 2: Limpieza y transformación (próximamente)

🎯 Qué haremos hoy (y por qué importa):

Hoy montamos el laboratorio donde pasa toda la magia digital. Sin este setup:

Con este setup:

📋 Requisitos del Entorno — Tu lista de verificación Antes de empezar, asegúrate de tener:

Plataforma

Entorno Python (ya incluido en Fabric)

💡 Tranquilo: Si tienes Fabric, ya tienes el 95% listo. Solo necesitas instalar kagglehub en el primer paso del notebook.

🧩 LELI5 Mode:

Imagina que acabas de comprar un set LEGO gigante. Hoy:

Sin esta base, el próximo post no tiene sentido. Así que… ¡manos a la obra!

📑 Navegación rápida:

  1. 📚 Librerías y Setup — Tu caja de herramientas ⏱️ 2 min
  2. 🛠️ Funciones útiles — Funciones reutilizables ⏱️ 1 min
  3. 📥 Descarga desde Kaggle — Trae los datos a casa ⏱️ 3 min
  4. 🔄 De CSV a Spark — Escala tu pipeline ⏱️ 4 min
  5. 💾 Guardar en Parquet — Persiste para siempre ⏱️ 2 min
  6. 🎬 Conclusiones ⏱️ 1 min

2️⃣ NOTEBOOK

📚Librerías

Tu caja de herramientas

El plan: Instalar lo mínimo y traer solo las librerías que SÍ usaremos. Nada de extras que se quedan ahí acumulando polvo digital.

El código:

# Instalación de dependencias necesarias
%pip install -q kagglehub # 0.2+
# Importación de librerías
import os
import pandas as pd # ~2.1.x
import numpy as np  # ~1.24.x
import matplotlib.pyplot as plt # ~3.7.x
import seaborn as sns # ~0.12.x
import plotly.express as px # ~5.14.x
print("Entorno configurado correctamente.")

📤 Resultado esperado:

Entorno configurado correctamente.

¿Qué significa “ %pip install -q kagglehub”? %pip: Comando especial de Jupyter/Fabric. Instala paquetes sin salir del notebook. install: Le dices a pip que instale algo. -q (quiet mode): Sin output. Normalmente pip te muestra un montón de texto. Con -q, trabaja en silencio. Más limpio, menos ruido. kagglehub: El paquete que necesitas (tu conexión a Kaggle). Resultado: Una línea, limpia, sin distracciones.

Tu caja de piezas LEGO especializada: Cada librería es como una caja de LEGO temática: tienes piezas de construcción básica, piezas de decoración, piezas móviles…

🧱 os Para qué sirve: Navega carpetas, lista archivos LELI5: La base verde donde construyes

🐼 pandas Para qué sirve: Lee CSVs, manipula tablas LELI5: Piezas básicas 2x4

⚙️ numpy Para qué sirve: Cálculos matemáticos rápidos LELI5: Piezas técnicas (engranajes)

🎨 matplotlib.pyplot Para qué sirve: Gráficos simples y útiles LELI5: Bloques de un solo color

🧩 seaborn Para qué sirve: Gráficos bonitos automáticos LELI5: Bloques pre-decorados

💡 plotly.express Para qué sirve: Gráficos interactivos PRO LELI5: Sets con luces y movimiento

🚚 kagglehub Para qué sirve: Descarga datasets de Kaggle LELI5: El camión que trae las piezas

¿Por qué solo estas? Porque son lo esencial para cargar, explorar y visualizar. Scikit-learn, TensorFlow y compañía vienen después. Hoy: lo básico, bien hecho.

🛠️ Funciones

Funciones reutilizables

El plan: Las funciones son como bloques de LEGO personalizados: los construyes una vez, los usas mil veces. Sin ellas, repetición. Con ellas, magia. Hoy crearemos una función que “limpia” nombres de columnas. La usaremos más adelante cuando guardemos datos en bases de datos (spoiler: en el próximo post).

El código:

def estandarizar_col(col):
    """
    Estandariza el nombre de una columna para que sea seguro al guardar
    en bases de datos o sistemas tipo Lakehouse/Delta.
    Convierte la cadena a minúsculas, elimina paréntesis,
    reemplaza espacios y símbolos comunes por guion bajo,
    y elimina guiones bajos repetidos o al final.
    Args:
        col (str): Nombre original de la columna.
    Returns:
        str: Nombre estandarizado de la columna.
    """
    # Elimina espacios iniciales y finales y convierte a minúscula
    col = col.strip().lower()
    # Elimina paréntesis
    col = col.replace('(', '')
    col = col.replace(')', '')
    # Reemplaza espacios, guiones, barras y puntos por guion bajo
    col = col.replace(' ', '_')
    col = col.replace('-', '_')
    col = col.replace('/', '_')
    col = col.replace('.', '_')
    # Elimina guiones bajos dobles por guion bajo simple (si los hubiera)
    col = col.replace('__', '_')
    # Elimina cualquier guion bajo al final del nombre
    col = col.rstrip('_')
    return col

📤 Resultado esperado:

Función estandarizar_col definida sin errores.

¿Por qué esto es importante? Imagina guardar datos y que una columna se llame "Total-Ventas ($)". Las bases de datos odian:

Con esta función:

Resultado: Nombres limpios, cero problemas Nota: No la usamos todavía en este post, pero la tendrás lista para el próximo (limpieza de datos).

🎯 Checkpoint de Progreso

¿Qué llevamos hasta ahora?

¿Qué sigue? Ahora viene lo emocionante: traer los datos a casa desde Kaggle. Sin configuraciones complicadas, sin API keys. Solo copiar, pegar y listo.

📥 Carga de datos desde Kaggle

Trae el dataset a casa

El plan: Kaggle te da el código listo. Solo copia y pega. Así de simple.

Pasos:

  1. 🌐 Ve a la página del dataset en Kaggle
  2. 📋 Haz clic en el botón de código (como en la imagen)
  3. 📄 Copia el snippet que dice import kagglehub
  4. ✅ Pégalo en tu notebook y ejecútalo

👇 Así encuentras el código en Kaggle:

Botón “Download” → Opción “kagglehub” → Copia el código

El código:

# Descargar dataset desde Kaggle usando kagglehub
import kagglehub
# Definir dataset y descargar
path = kagglehub.dataset_download("karnikakapoor/wonders-of-world")
# Verificar archivos descargados
os.listdir(path)

📤 Resultado esperado:

Out[3]:
['wonders_of_world rev3.csv',
'wonders_of_world_enhanced_25.csv',
 'WondersOfWorld_24.csv',
 'wonders_of_world.csv',
 'WondersOfWorld_July24.csv']

¿Qué está pasando?

  1. kagglehub se conecta a Kaggle → Automático, sin configuración previa
  2. Descarga el dataset completo → Lo guarda en una carpeta temporal
  3. os.listdir(path) te muestra los archivos descargados → Así sabes qué CSVs tienes

Es como pedir un set por Amazon: haces clic, esperas, y te llega a casa. Sin llenar formularios ni configurar nada y si falla, no desesperes🚨**:**

⏳ Primera descarga lenta Causa: Kaggle está descargando. Es normal. Solución: Espera unos segundos.

🔍 Dataset not found Causa: Nombre del dataset incorrecto Solución: Verifica que copiaste bien el nombre: "usuario/nombre-dataset"

📡 Network error Causa: Problemas de conexión Solución: Revisa tu conexión a Internet

❓ Otros errores Causa: Dataset movido o eliminado Solución: Intenta con otro dataset. Hay miles disponibles en Kaggle.

💡 Ventajas de kagglehub:

🎉 Progreso actualizado

Ya tenemos:

Siguiente paso: Abrir los archivos CSV y verificar que todo está en orden. Luego los convertiremos a formato escalable (Spark + Parquet).

🏗️ Proceso: Carga de CSV → Pandas → Parquet

🗃️ Carga de Datos

🔄 De CSV a Spark — El viaje de escalabilidad

Este es el corazón del pipeline. Aquí convertimos datos pequeños en datos ESCALABLES.

Paso 4.1: CSV → Pandas (Primer contacto)

El plan: Abrir el CSV, cargarlo en Pandas (tu cuaderno digital), y verificar que todo está bien.

El código:

# - - CARGA DE DATOS - -
#Descargar archivo CSV local a Dataframe de Pandas
csv_local_path = f"{path}/wonders_of_world_enhanced_25.csv"
df_pd = pd.read_csv(csv_local_path)
#Verificación de Dataframe pandas
display(df_pd.head())
df_pd.shape

📤 Resultado esperado:

Primeras filas (vista tabla con 5 filas x varias columnas)
Out[25]:
(51, 33)

¿Qué está pasando?

Es como abrir la caja de LEGO y contar todas las piezas antes de empezar a armar. Así no hay sorpresas.

Paso 4.2: Pandas → Spark (Solo para guardar en Parquet)

El plan: Convertir Pandas a Spark solo para guardar en Parquet ¿Por qué? Spark es el “puente nativo” que Fabric necesita. Toda la transformación la hacemos en Pandas.

¿Por qué esta conversión?

Pandas es tu mesa de trabajo donde armas las piezas. Spark es el camión que lleva tu construcción terminada al almacén (Parquet) para guardarla de forma segura.

⚠️ Aclaración importante:

El código:

#Conversion de DataFrame de Pandas a DataFrame de Spark
df_spark = spark.createDataFrame(df_pd)
#Verificación de Dataframe Spark
print("Primeras filas:")
display(df_spark.head(5))
print("Shape (filas, columnas):")
print((df_spark.count(), len(df_spark.columns)))

📤 Resultado esperado:

Primeras filas:
<tabla con 5 filas y 33 columnas, similar a df_pd>
Shape (filas, columnas):
(51, 33)

¿Qué está pasando?

Aquí pasa la magia. De lo pequeño a lo GIGANTE:

📊 Característica: CapacidadPandas 🐼: Datos < 1 GB • Spark ⚡: Datos > 1 GB (millones/billones) • LELI5: Pandas = armas solo en tu mesa | Spark = un equipo de 100 personas armando en paralelo

⚡ Característica: VelocidadPandas 🐼: Rápido para explorar • Spark ⚡: 10–100x más rápido en grandes volúmenes • LELI5: Pandas = tú construyendo a mano | Spark = fábrica automatizada

🎯 Característica: Uso idealPandas 🐼: Prototipado, “¿qué hay aquí?” • Spark ⚡: Producción, “procesa TODO RÁPIDO” • LELI5: Pandas = boceto en papel | Spark = construcción final

💻 Característica: Dónde trabajaPandas 🐼: En tu computadora (RAM local) • Spark ⚡: Distribuido (múltiples máquinas) • LELI5: Pandas = tu escritorio | Spark = almacén con 1000 mesas

⚠️ Nota importante para este dataset: Este dataset tiene solo 51 filas (es pequeño para demostración). NO necesita Spark en la vida real.

¿Entonces por qué usamos Spark? Porque cuando tengas millones de registros, ya sabrás cómo hacerlo. Estás aprendiendo el flujo escalable desde ahora.

⚠️ Troubleshooting: Si algo falla con Spark

❌ Error: spark is not defined Causa probable: Notebook en modo Python (no PySpark) Solución: En el menú superior, cambia el lenguaje a PySpark

❌ Error: SparkSession not found Causa probable: Spark no inicializó correctamente Solución: Reinicia el kernel: RunRestart Kernel

❌ Error: Java heap space error Causa probable: Datos muy grandes para RAM disponible Solución: Usa .limit(1000) para probar con menos datos

⏳ Conversión muy lenta (>1 min) Causa probable: Dataset grande o primera ejecución Solución: Normal. Spark se está inicializando. Espera.

💡 Tip importante: En Microsoft Fabric, Spark se inicializa automáticamente en notebooks PySpark. Si usas un notebook Python puro, no tendrás acceso a la variable spark.

🚀 Casi terminamos

Recapitulando:

Paso final: Guardar en formato Parquet. Así los datos persisten en disco, ocupan menos espacio, y se leen 10–100x más rápido en el futuro.

💾 Persistencia inicial (Parquet)

🦜Guardar en Parquet — Persiste para siempre

El plan: Pasar de memoria (volátil) a disco duro (permanente). Guardamos en un formato que Spark ama.

El código:

#Guardar Dataframe como Parquet
df_spark.write.mode("overwrite").format("parquet").save("Files/parquet_raw")

📤 Resultado esperado:

Archivo Parquet guardado correctamente.

¿Qué está pasando?

Es como guardar tu construcción armada dentro de una caja transparente. Cuando la abras mañana, estará exactamente igual.

💾 CSV vs. Parquet — ¿Cuál utilizar?

📊 Tamaño de archivoCSV 📄: 100% (baseline) • Parquet 🦜: 10–30% (70–90% menos) • LELI5: CSV = piezas tiradas en el suelo | Parquet = piezas en cajitas organizadas

⚡ Velocidad de lecturaCSV 📄: 1x (lento) • Parquet 🦜: 10–100x más rápido • LELI5: CSV = buscar pieza por pieza | Parquet = ir directo al cajón correcto

✨ Spark optimizadoCSV 📄: ❌ No • Parquet 🦜: ✅ Sí • LELI5: CSV = instrucciones en papel arrugado | Parquet = manual digital con buscador

🔢 Tipos de datos preservadosCSV 📄: ❌ Todo es texto • Parquet 🦜: ✅ Sí (int, float, date, etc.) • LELI5: CSV = todas las piezas mezcladas | Parquet = cada tipo en su cajón

Analogía LELI5 completa:CSV 📄 = Todas tus piezas tiradas en el suelo. Fácil de ver, pero caótico y ocupa todo el espacio. — Parquet 🦜 = Piezas organizadas en cajitas por color y tamaño. Compacto, rápido de encontrar, y todo en su lugar.

🎯 Checkpoint Final — Verifica que todo funciona

Antes de celebrar, confirmemos que completaste el pipeline:

Lista de verificación

— ✅ Librerías importadas

— ✅ Dataset descargado

— ✅ DataFrame en Pandas

— ✅ Conversión a Spark exitosa

— ✅ Parquet guardado

3️⃣ CONCLUSIONES

📊 Resumen: Lo que acabas de construir

✅ Instalamos las librerías necesarias (caja de herramientas) ✅ Creamos funciones para limpiar datos ✅ Descargamos datos desde Kaggle (trajimos los LEGO a casa) ✅ Convertimos CSV → Pandas → Spark (escalamos la operación) ✅ Guardamos en 🦜 Parquet (aseguramos los datos)

Spoiler En el próximo post limpiaremos estos datos (eliminar ruido, valores faltantes), los exploraremos a fondo y crearemos visualizaciones que impresionan. ¡Paso a paso, como armar un LEGO gigante! 🧩

🎯 Recursos de este post

📊 Dataset: Wonders of the World La base de datos que usamos hoy: 51 maravillas del mundo con 33 variables.

📓 Notebook completo de este post. El código paso a paso. Cópialo, ejecútalo, rómpelo, aprende.

📚 Documentación oficial

📓 Cómo usar Notebooks en Fabric Cómo crear, importar y trabajar con notebooks en Fabric. Tutorial oficial paso a paso.

📘 Microsoft Fabric en español La guía oficial. Instrucciones completas de la plataforma.

🐍 Python 3.14 Referencia completa del lenguaje.

🐼 Pandas Todo sobre manipulación de datos en tablas.

Azure Databricks — PySpark Conceptos básicos para trabajar con Spark.

📦 Kagglehub — Documentación oficial Documentación completa de la librería kagglehub. Métodos, ejemplos y troubleshooting.

🦜 Coralogix — Parquet Guide Qué es Parquet, cómo funciona, y por qué es mejor que CSV para big data.

🧩 Recursos LELI5 (explicados como LEGOs)

📖 Glosario LELI5 Términos técnicos traducidos a LEGO: Fabric, Parquet, Kaggle, Notebooks y más.

🔗 Serie completa: Python en Fabric

🎓 Recursos adicionales para profundizar

📄 Pandas Official Cheat Sheet (PDF) Una página con lo esencial: leer datos, filtrar, agrupar, visualizar.

🎥 Tutorial en video: YouTube: Fabric Notebook Masterclass (3 horas) Curso completo gratuito. Perfecto si prefieres aprender viendo.

👾 ¿Dudas, sugerencias, curiosidad?

¿Ya montaste tu primer LEGO digital? ¡Cuéntamelo todo y exagera! Compártelo aquí, o presume tu caos absoluto. ¿Prefieres DM? ¡También cuenta! Piérdele miedo al botón rojo y dale click. Aquí todo es para aprender jugando. ¿Tienes otro término tech que te gustaría entender en modo LEGO? Déjamelo y lo convierto en Leli5.


También publicado en Medium.

← Blog