De Datos Brutos a Tesis de Inversión: Una Pipeline ETL con IA Generativa.
Este proyecto va más allá de un simple web scraper. Es una herramienta integral de ingeniería de datos y análisis financiero que automatiza el ciclo de vida de la información corporativa de Microsoft: desde la extracción de datos crudos en informes anuales hasta la generación de tesis de inversión profesionales mediante Inteligencia Artificial y visualización de tendencias.
- Instalación y Configuración
- Uso
- Estructura del proyecto
- Funcionalidades principales
- Resultados y Salidas
- Consideraciones
- Contribuir
- Contacto
- Python 3.10+
- Una API Key de Google Gemini (Obtenla en Google AI Studio).
-
Clonar y preparar entorno: Se recomienda usar un entorno virtual.
# En PowerShell python -m venv .venv .\.venv\Scripts\Activate.ps1 # Instalar dependencias en modo editable pip install -e .[dev]
-
Configurar Variables de Entorno: Para activar el analista IA, crea un archivo
.enven la raíz del proyecto:GEMINI_API_KEY=tu_clave_api_aqui
Notas:
- Si no usas
pip install -e ., puedes instalar directamente las dependencias listadas enpyproject.toml. - El proyecto reclama Python >= 3.10 (ver
pyproject.toml). - Variables de entorno requeridas: Para usar la funcionalidad de IA con Gemini, debes crear un archivo
.enven la raíz del proyecto con tu clave API:Obtén tu clave en Google AI Studio.GEMINI_API_KEY=tu_clave_api_aqui
El punto de entrada es el script main.py en la raíz del proyecto. Ejecuta el script desde la raíz del repositorio:
.\.venv\Scripts\Activate.ps1
python main.pyAl ejecutarlo, el flujo general es:
- Extracción web:
src.client.MicrosoftIRClientrecopila las URLs de los informes anuales de Microsoft IR. - Paralización de workers:
main.pyusa unThreadPoolExecutorpara paralelizar la extracción por año. - Parsing de tablas:
src.worker.extract_financial_datadescarga la página del informe, localiza la tabla "INCOME STATEMENTS" y la transforma a un diccionario estructurado. - Limpieza y serialización:
src.utils.parse_dataysrc.utils.save_dataguardan el JSON endownloads/all_ms_financial_data.json. - Análisis con IA:
src.gemini_ai.generate_financial_tesisgenera un análisis profesional usando Gemini AI (requiereGEMINI_API_KEYen.env). - Visualización:
src.visualization.generate_tablesgenera gráficas comparativas de ingresos y rentabilidad usando matplotlib y seaborn.
.
├── main.py # Orquestador principal del flujo
├── pyproject.toml # Gestión de dependencias y metadatos
├── .env # Variables de entorno (API Keys)
├── src/
│ ├── client.py # Cliente HTTP (Scraper)
│ ├── worker.py # Lógica de extracción y parsing HTML
│ ├── gemini_ai.py # Módulo de Inteligencia Artificial
│ ├── visualization.py # Motor de generación de gráficas
│ └── utils.py # Herramientas de I/O y limpieza
├── downloads/
│ ├── all_ms_financial_data.json # Dataset final
│ └── financial_tesis.md # Reporte de IA
└── tests/ # Suite de pruebas unitarias
main.py: Orquestador principal. Gestiona extracción, IA, visualización y guardado de resultados.pyproject.toml: Metadatos, dependencias (incluyendogoogle-genai,matplotlib,pandas,seaborn).README.md: Este archivo.downloads/:all_ms_financial_data.json: Datos financieros extraídos por año.financial_tesis.md: Análisis generado por Gemini AI.
tests/:test_client.py: Tests unitarios paraMicrosoftIRClient.test_worker.py: Tests para extracción de datos financieros.test_utils.py: Tests para funciones de utilidad.
src/:__init__.py: Inicializador del paquete.client.py: Cliente HTTP para descargar informes de Microsoft IR.worker.py: Extracción y parsing de tablas financieras.utils.py: Helpers para rutas, serialización y guardado.gemini_ai.py(NUEVO): Análisis con IA usando Gemini 2.5 Pro.- Requiere
GEMINI_API_KEYen.env.
- Requiere
visualization.py(NUEVO): Gráficas y visualizaciones.
El sistema opera en cuatro fases críticas:
-
Extracción Inteligente (Scraping Avanzado):
- Navegación automática por el portal de Investor Relations de Microsoft.
- Descarga y parseo de informes anuales históricos.
- Extracción quirúrgica de tablas "INCOME STATEMENTS" usando
BeautifulSoup. - Ejecución paralela mediante
ThreadPoolExecutorpara maximizar la velocidad.
-
Normalización de Datos (ETL):
- Limpieza y estructuración de datos financieros no estandarizados.
- Conversión de formatos de moneda, manejo de valores negativos y saneamiento de nulos.
- Serialización a JSON estructurado (
downloads/all_ms_financial_data.json).
-
Analista Financiero IA (Gemini 2.5 Pro):
- Integración con Google Gemini para interpretar los datos estructurados.
- Generación automática de una Tesis de Inversión (Buy/Hold/Sell).
- Análisis profundo de la transformación del modelo de negocio (Licencias vs. Nube), márgenes operativos y eficiencia de I+D.
-
Visualización de Datos (Business Intelligence):
- Generación de gráficos interactivos con
matplotlibyseaborn. - Análisis visual de la transición de ingresos (Product vs. Service).
- Comparativa de Crecimiento vs. Rentabilidad (Revenue vs. Net Income).
- Generación de gráficos interactivos con
El proyecto genera tres tipos de entregables de alto valor:
Archivo: downloads/all_ms_financial_data.json
Base de datos limpia y lista para ser consumida por otras aplicaciones o analistas.
"2024": {
"Revenue:": {
"Product": "$64,773",
"Service and other": "180,349",
"Total revenue": "245,122"
},
"Net income": { "Total": "$88,136" }
}Archivo: downloads/financial_tesis.md
Un reporte ejecutivo generado por IA que incluye:
- Memo Ejecutivo: Resumen de desempeño.
- Análisis de Márgenes: Gross, Operating y Net margins.
- Veredicto: Recomendación justificada (Ej: "SOBREPONDERAR").
- Riesgos: Evaluación de competencia y costes de infraestructura IA.
Se generan dashboards visuales para entender la historia detrás de los números:
-
Business Model Shift: Gráfico de barras apiladas mostrando cómo los Servicios (Azure/Cloud) han canibalizado y superado a los Productos tradicionales.
-
Growth vs Profitability: Gráfico de doble eje para medir el apalancamiento operativo.
-
Ética de Scraping: Este proyecto respeta los tiempos de respuesta, pero asegúrate de revisar el robots.txt si planeas escalarlo o aumentar la frecuencia de peticiones.
-
Costes de API: El uso de Gemini Pro puede tener costes asociados dependiendo de tu cuota en Google Cloud/AI Studio.
-
Robustez: El extractor depende de la estructura HTML de los informes de Microsoft. Si ellos cambian su diseño web radicalmente, el worker.py podría requerir ajustes.
¡Las contribuciones son bienvenidas!
- Haz un Fork del proyecto.
- Crea una rama (git checkout -b feature/nueva-funcionalidad).
- Commit a tus cambios.
- Abre un Pull Request.
Autor: Juan Arabaolaza Contacto: juan.arabaolaza@gmail.com