{"id":35184276,"url":"https://github.com/guspaz0/aurelion","last_synced_at":"2026-04-13T01:16:15.730Z","repository":{"id":324592114,"uuid":"1072553528","full_name":"guspaz0/aurelion","owner":"guspaz0","description":"Dashboard","archived":false,"fork":false,"pushed_at":"2025-11-16T19:05:52.000Z","size":82,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2025-11-16T21:07:26.117Z","etag":null,"topics":["folium-choropleth-map","matplotlib","object-oriented-programming","pandas","poo","python","streamlit"],"latest_commit_sha":null,"homepage":"https://aurelion.streamlit.app/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guspaz0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-08T22:13:16.000Z","updated_at":"2025-10-24T23:36:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/guspaz0/aurelion","commit_stats":null,"previous_names":["guspaz0/aurelion"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/guspaz0/aurelion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guspaz0%2Faurelion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guspaz0%2Faurelion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guspaz0%2Faurelion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guspaz0%2Faurelion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guspaz0","download_url":"https://codeload.github.com/guspaz0/aurelion/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guspaz0%2Faurelion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31735903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-12T22:19:12.206Z","status":"ssl_error","status_checked_at":"2026-04-12T22:18:33.088Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["folium-choropleth-map","matplotlib","object-oriented-programming","pandas","poo","python","streamlit"],"created_at":"2025-12-29T04:53:24.937Z","updated_at":"2026-04-13T01:16:15.721Z","avatar_url":"https://github.com/guspaz0.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tienda Aurelion\n\nProyecto para guayerd, fundamentos de inteligencia artificial.\n\n## Introduccion\n\nAurelion es una tienda/despensa/supermercado que vende productos de limpieza y alimentos al por menor y mayor. Desarrolla sus actividades principales dentro de la provincia de cordoba, Argentina.\n\n## Observaciones\n\nla base de datos presenta inconsistencias en los campos de las tablas siguintes: \n- `productos`:\n    - `categorias`: el nombre de la categoria es inconsistente con la descripcion del producto. Se le pidio a GPT-5 mini que lo corrija. lo corrijio pero aun asi se encontraron 2 articulos mal categorizados.\n\n\n## Resumen del proyecto (tema / problema / solución)\n\n- Tema: análisis y limpieza de ventas y catálogos de una pequeña tienda local para soportar consultas, reportes y análisis simples (clientes, productos, ventas y detalle de ventas).\n- Problema: la base de datos provista (CSV en `src/bd/`) contiene inconsistencias y redundancias (por ejemplo, categorías mal asignadas en `productos`, campos duplicados en `ventas` y posibles errores de integridad entre `ventas` y `detalle_ventas`). Estas inconsistencias dificultan el análisis y pueden causar errores en agregaciones o reportes.\n- Solución propuesta: implementar un pequeño flujo ETL en Python que:\n    1. cargue y valide los archivos CSV,\n    2. limpie y normalice columnas problemáticas (p. ej. categorías de productos),\n    3. detecte y reporte discrepancias (ventas sin detalle, productos sin categoría válida),\n    4. genere tablas/archivos limpios listos para análisis y para ser consumidos por los módulos del proyecto (`modules/*`).\n\nLa solución está pensada para integrarse con la estructura del repositorio (módulos `clientes`, `productos`, `ventas`) y proveer servicios de acceso y limpieza reutilizables.\n\n## Fuente de datos y definición\n\nLos datos provienen de archivos CSV incluidos en `src/bd/`. A continuación se describen las tablas, sus columnas y los tipos estimados (según una inspección inicial de los archivos):\n\n- `clientes.csv`\n    - Columnas: `id_cliente` (entero), `nombre_cliente` (texto), `email` (texto), `ciudad` (texto), `fecha_alta` (fecha, AAAA-MM-DD)\n    - Observaciones: emails y nombres repetidos posibles; `id_cliente` debería ser único.\n\n- `productos.csv`\n    - Columnas: `id_producto` (entero), `nombre_producto` (texto), `categoria` (texto), `precio_unitario` (numérico entero, moneda en centavos ó unidades locales)\n    - Observaciones: categorías inconsistentes con el nombre/Descripción del producto (se detectaron casos que requieren recategorización manual o heurística).\n\n- `ventas.csv`\n    - Columnas: `id_venta` (entero), `fecha` (fecha), `id_cliente` (entero), `nombre_cliente` (texto), `email` (texto), `medio_pago` (texto)\n    - Observaciones: contiene datos redundantes del cliente (`nombre_cliente`, `email`) además del `id_cliente`. Esto facilita lectura rápida, pero rompe la normalización y puede causar inconsistencias.\n\n- `detalle_ventas.csv`\n    - Columnas: `id_venta` (entero), `id_producto` (entero), `nombre_producto` (texto), `cantidad` (entero), `precio_unitario` (numérico), `importe` (numérico)\n    - Observaciones: `importe` suele ser `cantidad * precio_unitario`, pero conviene validar y recomputar para detectar errores.\n\n## Estructura, tipos y escala de los datos (inspección rápida)\n\nConteo de líneas (incluye encabezado) en los CSV provistos en `src/bd/`:\n\n- `clientes.csv`: 100 líneas (99 registros aproximadamente)\n- `productos.csv`: 101 líneas (100 registros aproximadamente)\n- `ventas.csv`: 120 líneas (119 registros aproximadamente)\n- `detalle_ventas.csv`: 343 líneas (342 registros aproximadamente)\n\nTotal aproximado de registros (sin contar encabezados): 660 filas.\n\n\nNota sobre escala: es un dataset pequeño, adecuado para prácticas y demostraciones. El flujo diseñado prioriza claridad, validación y trazabilidad más que optimizaciones de rendimiento a gran escala.\n\n\n# Entrega 2: Actualizacion\n\n## Migración de datos: CSV → SQLite\n\n- **Resumen:** el proyecto incluye un flujo sencillo para migrar los datos originales en CSV a una base de datos SQLite (`src/bd/bd.sqlite`). La migración valida, normaliza y carga los archivos CSV (`clientes.csv`, `productos.csv`, `ventas.csv`, `detalle_ventas.csv`) en tablas relacionales y crea vistas útiles para análisis.\n\n- **Cómo funciona (alto nivel):**\n    - Al inicializar la aplicación (instanciando `App` en `src/app_state.py`) se crea una conexión gestionada por `modules.db.db_connection.DbConnection`.\n    - `DbConnection` crea las tablas necesarias y llama a los métodos `_load_from_csv()` de cada DAO (`ClientesDao`, `ProductoDao`, `VentasDao`, `DetalleVentasDao`) cuando las tablas están vacías.\n    - Cada DAO valida y transforma los datos (tipos, fechas, recomputación de importes) antes de insertarlos en la base.\n\n- **Reproducir la migración (rápido):** ejecutar desde la raíz del proyecto con `src` en `PYTHONPATH`:\n\n```bash\nPYTHONPATH=src python3 -c \"from app_state import App; App()\"\n```\n\n- **Notas:** revisa los CSV por inconsistencias antes de la migración; por defecto los DAOs insertan registros según los CSV (no realizan deduplicación avanzada). Para ETL más robusto, extrae y extiende los `_load_from_csv()` o añade un paso previo de limpieza.\n\n\n**Análisis Exploratorio de Datos (EDA)**\n\n- **Objetivo:** entender la calidad y las características principales de los datos (clientes, productos, ventas y detalle de ventas) para guiar limpieza, normalización y análisis posteriores.\n\n- **Estadísticas descriptivas básicas calculadas:** conteo, media, mediana, desviación estándar, mínimo, máximo y percentiles para variables numéricas (por ejemplo `precio_unitario`, `cantidad`, `importe`), y tablas de frecuencia para variables categóricas (`categoria`, `medio_pago`, `ciudad`).\n\n- **Identificación del tipo de distribución de variables:** inspección visual mediante histogramas y QQ-plots; pruebas estadísticas opcionales (Shapiro-Wilk, Kolmogorov-Smirnov) para caracterizar si variables siguen distribuciones aproximadas (normal, log-normal, etc.).\n\n- **Análisis de correlaciones entre variables principales:** cálculo de correlaciones de Pearson y Spearman según corresponda; matriz de correlación y mapa de calor (heatmap) para identificar relaciones entre `precio_unitario`, `cantidad`, `importe` y agregados por producto/cliente.\n\n- **Detección de outliers (valores extremos):** identificación mediante IQR (1.5×IQR) y puntuaciones Z; revisión de casos atípicos para decidir si corregir, recomputar o excluir (p. ej. `importe` que no coincide con `cantidad * precio_unitario`).\n\n- **Gráficos representativos (al menos 3):**\n    - Histogramas de `precio_unitario` y `importe` (distribución de precios e importes)\n    - Boxplots por `categoria` para comparar dispersión y detectar outliers por categoría\n    - Heatmap de correlaciones entre variables numéricas\n    - (Adicionales recomendados) Series temporales de ventas, mapa/tabla de ventas por `ciudad`, gráfico de barras de productos más vendidos\n\n- **Interpretación de resultados orientada al problema:** cada resultado del EDA debe traducirse a acciones concretas: recategorización de productos con incoherencias, recomputación de importes erróneos, identificación de clientes o periodos atípicos que requieren limpieza o verificación, y recomendaciones para mejorar la calidad de los CSV de origen.\n\n\n# Entrega 3: Machine Learning con scikit-learn\n\n## Modelo de Predicción de Importe Total de Ventas\n\n**📊 Resumen:**\nSe ha implementado un modelo de **Regresión Lineal** para predecir el importe total de ventas basándose en características como cantidad de items, mes, día de la semana y método de pago.\n\n**🎯 Resultados:**\n- **R² (Test Set): 0.787** - El modelo explica el 78.7% de la varianza\n- **MAE (Test Set): $5,158.86** - Error promedio manejable\n- **Sin overfitting evidente** - Balance correcto entre train/test\n\n### Archivos Principales\n\n| Archivo | Descripción |\n|---------|-------------|\n| `src/modules/ml/predictor_model.py` | Clase `VentasPredictorModel` con lógica completa de ML |\n| `src/ml_analysis.ipynb` | Notebook con análisis, entrenamiento y visualizaciones |\n| `docs/ML_DOCUMENTATION.md` | 📋 Documentación detallada del proyecto |\n| `src/requirements.txt` | Actualizado con `scikit-learn==1.5.2` |\n\n### Cómo Ejecutar el Análisis\n\n```bash\n# 1. Activar entorno virtual\nsource aurelion/bin/activate\n\n# 2. Instalar dependencias\npip install -r src/requirements.txt\n\n# 3. Abrir notebook\njupyter notebook src/ml_analysis.ipynb\n```\n\n### Modelo \u0026 Características\n\n**Algoritmo:** Regresión Lineal  \n**Entrada (X):** 8 características\n- `cantidad`: Cantidad total de items vendidos\n- `mes`: Mes de la venta (1-12)\n- `dia`: Día del mes (1-31)\n- `dia_semana`: Día de la semana (0-6)\n- `pago_*`: Método de pago (one-hot encoded)\n\n**Salida (y):** `importe` (valor numérico continuo)\n\n### División Train/Test\n- **Entrenamiento:** 96 muestras (80%)\n- **Prueba:** 24 muestras (20%)\n- **Random state:** 42 (reproducibilidad)\n\n### Métricas Principales\n\n| Métrica | Entrenamiento | Prueba |\n|---------|---|---|\n| MAE | $5,516.52 | $5,158.86 |\n| RMSE | 7,077.96 | 6,641.64 |\n| R² | 0.7046 | **0.7870** |\n\n### Visualizaciones Generadas\n1. ✅ Matriz de Correlación (características vs target)\n2. ✅ Predicción vs Real (scatter plots train/test)\n3. ✅ Análisis de Residuos (4 gráficos: residuos, histograma, Q-Q plot, secuencia)\n4. ✅ Importancia de Características (coeficientes del modelo)\n\n### Características Más Importantes\n1. **cantidad** (coef: 10,517.55) - Característica dominante\n2. **mes** (coef: 1,092.58) - Efecto temporal\n3. **pago_efectivo** (coef: 717.63) - Método de pago\n\n### Documentación Completa\n📖 **Ver:** `docs/ML_DOCUMENTATION.md` para detalles extensos incluyendo:\n- Objetivo y justificación del algoritmo\n- Fórmulas matemáticas completas\n- Análisis detallado de métricas\n- Limitaciones y mejoras futuras\n- Cómo integrar el modelo en producción\n\n- **Reproducir el EDA:** existe el notebook `src/prueba_entidades.ipynb` que puede usarse como punto de partida para visualizar y calcular las métricas anteriores. Pasos rápidos:\n\n```bash\n# (1) Crear e activar entorno si no está activo\npython3 -m venv .venv\nsource .venv/bin/activate\n\n# (2) Instalar dependencias (si no están en `src/requirements.txt`, instalar pandas, matplotlib, seaborn, scipy)\npip install -r src/requirements.txt || pip install pandas matplotlib seaborn scipy\n\n# (3) Abrir el notebook\npython3 -m jupyter notebook src/prueba_entidades.ipynb\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguspaz0%2Faurelion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguspaz0%2Faurelion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguspaz0%2Faurelion/lists"}