Skip to content

Medalcode/Myna

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐦 Myna — Intelligent Data Mining Platform

Myna es una plataforma de data mining para exploración, limpieza y análisis estadístico de datasets tabulares. Construida con Arquitectura Hexagonal y desplegada en Vercel como API serverless.

No es un script experimental: es un sistema diseñado para crecer en reglas de negocio, algoritmos y usuarios, manteniendo testabilidad y separación estricta de responsabilidades.


🎯 Problema que resuelve

En entornos analíticos típicos:

  • Los flujos de análisis viven en notebooks frágiles o scripts monolíticos.
  • La lógica de negocio se mezcla con UI, I/O y visualización.
  • Escalar a múltiples datasets, sesiones o algoritmos implica reescribir todo.

Myna ataca ese problema desde la arquitectura, no desde el tooling.


✨ Capacidades

📊 Análisis y preparación de datos

  • Estadística descriptiva (media, mediana, std, curtosis, asimetría)
  • Tratamiento de valores nulos: media, mediana, moda, cero, eliminación de filas
  • Eliminación de duplicados
  • Escalado: Min-Max y Z-Score
  • Codificación de categóricas: one-hot y label encoding
  • Detección y tratamiento de outliers (IQR: informar, eliminar, winsorización)

🤖 Aprendizaje no supervisado

  • K-Means clustering (implementación nativa NumPy, sin scikit-learn)

📈 Visualización interactiva (Plotly.js)

  • Mapa de calor de correlaciones
  • Histograma de distribución con boxplot marginal
  • Regresión lineal (scatter + trendline)
  • Clusters coloreados

🏗️ Arquitectura

Myna/
├── api/
│   └── index.py                  ← Entrypoint Vercel (importa FastAPI app)
│
├── src/
│   ├── main.py                   ← Entrypoint local (uvicorn)
│   │
│   ├── core/                     ← Dominio puro (sin frameworks)
│   │   ├── models.py             ← AnalysisSession, OperationLog
│   │   ├── ports.py              ← Interfaces ABC (SessionRepository, DataRepository)
│   │   ├── domain_services.py   ← Lógica de negocio: StatisticalAnalyzer, DataCleaner,
│   │   │                            DataScaler, OutlierManager, Clusterer
│   │   └── agents/
│   │       ├── base.py           ← AgentManager, SkillResult, @register_skill
│   │       └── skills/           ← Super-Skills paramétricas (6 archivos de grupo)
│   │           ├── io_skills.py              → load_file, export_file
│   │           ├── clean_skills.py           → clean_nulls, drop_duplicates
│   │           ├── transform_skills.py       → scale_columns, encode_categoricals
│   │           ├── stats_skills.py           → compute_stats (descriptive|correlation|shape)
│   │           ├── ml_skills.py              → kmeans_cluster
│   │           └── visualization_skills.py   → plot (distribution|correlation|regression|cluster)
│   │
│   └── adapters/                 ← Infraestructura (dependen del core, nunca al revés)
│       ├── api/
│       │   ├── router.py         ← Rutas FastAPI
│       │   └── dependencies.py   ← DI: sesión, AgentManager, registro de skills
│       ├── fs/
│       │   └── file_io.py        ← Carga/exportación de archivos (CSV, Excel)
│       ├── repositories/
│       │   └── local_storage.py  ← Persistencia local/tmp (LocalFile*Repository)
│       └── visualization/
│           └── plotter.py        ← PlottingAdapter (Plotly)
│
├── static/
│   ├── css/style.css
│   └── js/app.js
├── templates/
│   └── index.html
│
├── tests/
│   └── test_core_services.py
│
└── docs/
    ├── agent.md      ← Arquitectura del AgentManager y DataPrepAgent
    ├── skills.md     ← Catálogo de Super-Skills, convenciones, fusiones
    └── BACKLOG.md    ← Roadmap técnico priorizado

Regla fundamental

El dominio no conoce a FastAPI, Plotly ni al filesystem.
Los adapters dependen del core, nunca al revés.


🤖 Agent & Skills (capa de orquestación)

Myna implementa un sistema de Agent / Skill para pipelines reproducibles y extensibles:

  • DataPrepAgent — único agente orquestador del sistema. Coordina todas las skills sobre una AnalysisSession via AgentManager.
  • Skill — acción atómica registrada con @register_skill. Recibe session + parámetros, delega en domain_services y devuelve SkillResult.
  • Super-Skills paramétricas — en lugar de un archivo por skill, las skills con lógica similar se agrupan en un único archivo con un parámetro discriminador (e.g. compute_stats(stat_type=...), plot(type=...)).

Ver documentación detallada en docs/agent.md y docs/skills.md.


⚖️ Decisiones de Arquitectura (ADR)

1. Optimización Zero-Dependencies (Vercel 250MB limit)

  • scikit-learn y scipy exceden el límite de Serverless Functions en Vercel.
  • Solución: K-Means, Z-Score y Kurtosis implementados con NumPy puro. Artefacto final < 100MB.

2. Persistencia agnóstica

  • ports.py define interfaces (SessionRepository, DataRepository).
  • Implementación actual: LocalFileSessionRepository + LocalFileDataRepository (archivos JSON + Pickle).
  • Migrar a S3 o Redis requiere solo implementar los ports y cambiar la inyección en dependencies.py.

3. Visualización desacoplada

  • El backend genera JSON de Plotly. Cualquier frontend puede renderizarlo sin lógica de negocio en el cliente.

4. Sesiones multi-usuario con cookies

  • Cada request lleva un session_id en cookie. Sin estado global compartido.

🧪 Testing

PYTHONPATH=. pytest tests/

Los tests cubren comportamiento de dominio (sin mocks de frameworks). Esto permite refactors estructurales sin romper la lógica central.


▶️ Ejecución local

# Crear entorno virtual
python -m venv venv
venv\Scripts\activate        # Windows
# source venv/bin/activate   # macOS/Linux

# Instalar dependencias
pip install -r requirements.txt

# Ejecutar
python src/main.py

Abrir en el navegador: http://localhost:8000


🔄 Historial de versiones

Versión Cambios principales
V6.0 Super-Skills paramétricas, AgentManager integrado, eliminación de código legacy (Gradio)
V5.1 Repository Pattern, soporte multi-sesión con cookies
V5.0 Migración completa a FastAPI + UI custom, Arquitectura Hexagonal
V4.0 Modularización inicial (Gradio)
Legacy Script monolítico final_eval3mineria.py

🧭 Roadmap

Ver docs/BACKLOG.md para el plan técnico priorizado. Próximos hitos:

  • Adaptador S3 para persistencia real en producción
  • Patrón Strategy para limpieza y escalado (eliminar if/else de strings mágicos)
  • Test de integración end-to-end (Upload → Clean → Scale → Cluster)
  • Manejo asíncrono de operaciones pesadas (Job Queue)

Created by Medalcode

About

Hermes is a powerful, modular data mining application designed to perform descriptive statistics, data cleaning, outlier detection, clustering, and interactive visualization on CSV and Excel datasets.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors