ETL automatizado con Power Query y Python
Combina el poder de Power Query con scripts de Python para crear pipelines de datos robustos.
BI Analysts Team
Expertos en Datos e IA
El poder de combinar Power Query y Python
Power Query es excelente para transformaciones visuales, pero tiene limitaciones. Python extiende sus capacidades para escenarios complejos como:
- Web scraping
- Llamadas a APIs
- Transformaciones estadísticas avanzadas
- Procesamiento de texto con NLP
- Conexión a bases de datos especializadas
Configuración inicial
Requisitos
- Python instalado (3.7+)
- pandas y dependencias configuradas
- Power BI Desktop actualizado
Configurar la ruta de Python
- Archivo → Opciones → Opciones de Python
- Selecciona tu instalación de Python
- Reinicia Power BI
Caso de uso 1: Web Scraping
Extraer datos de una página web que no tiene API:
import pandas as pd
import requests
from bs4 import BeautifulSoup
url = '[https://ejemplo.com/tabla-datos](https://ejemplo.com/tabla-datos)'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# Encontrar la tabla
table = soup.find('table', {'class': 'datos'})
df = pd.read_html(str(table))[0]
# Limpieza
df.columns = ['Fecha', 'Valor', 'Variacion']
df['Fecha'] = pd.to_datetime(df['Fecha'])
Caso de uso 2: Llamada a API REST
Obtener datos de una API que requiere autenticación:
import pandas as pd
import requests
api_key = 'tu_api_key'
url = '[https://api.ejemplo.com/datos](https://api.ejemplo.com/datos)'
headers = {'Authorization': f'Bearer {api_key}'}
response = requests.get(url, headers=headers)
data = response.json()
df = pd.json_normalize(data['results'])
Caso de uso 3: Procesamiento de texto
Análisis de sentimiento en comentarios de clientes:
import pandas as pd
from textblob import TextBlob
df = dataset # Power BI pasa los datos aquí
def get_sentiment(text):
if pd.isna(text):
return 0
analysis = TextBlob(str(text))
return analysis.sentiment.polarity
df['Sentimiento'] = df['Comentario'].apply(get_sentiment)
df['Categoria'] = df['Sentimiento'].apply(
lambda x: 'Positivo' if x > 0.1 else ('Negativo' if x < -0.1 else 'Neutral')
)
Arquitectura recomendada
Para producción, recomendamos esta arquitectura:
- Extracción: Python scripts ejecutados en Azure Functions
- Almacenamiento: Azure Blob Storage o Data Lake
- Transformación: Power Query conectando a los archivos
- Carga: Dataset de Power BI con refresh programado
Mejores prácticas
Manejo de errores
try:
# Tu código de extracción
df = extract_data()
except Exception as e:
df = pd.DataFrame({'Error': [str(e)]})
Logging
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('Iniciando extracción...')
Parametrización
Usa variables de entorno o archivos de configuración, nunca hardcodees credenciales.
Limitaciones a considerar
- Timeout: Power Query tiene límites de tiempo de ejecución
- Memoria: Datasets muy grandes pueden causar problemas
- Dependencias: Todas las librerías deben estar instaladas localmente
- Seguridad: Los scripts se ejecutan localmente, no en el servicio
Conclusión
La combinación de Power Query y Python te da lo mejor de ambos mundos: la facilidad de uso de Power Query y el poder ilimitado de Python. Úsalos juntos para crear pipelines de datos robustos y escalables.
¿Necesitas ayuda implementando ETL automatizado? Contáctanos para una evaluación de tu caso.
¿Te resultó útil este artículo?
Si necesitas ayuda implementando estas soluciones en tu empresa, estamos aquí para ayudarte.
Agenda una consulta gratuita