|
|
|
|
|
|
|
|
""" |
|
|
Script para inspeccionar la base de datos SQLite que el MCP crea |
|
|
""" |
|
|
|
|
|
import sqlite3 |
|
|
import sys |
|
|
import os |
|
|
|
|
|
|
|
|
if sys.platform == 'win32': |
|
|
import io |
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') |
|
|
|
|
|
|
|
|
script_dir = os.path.dirname(os.path.abspath(__file__)) |
|
|
project_root = os.path.join(script_dir, '..') |
|
|
os.chdir(project_root) |
|
|
|
|
|
def show_database(): |
|
|
"""Mostrar contenido de la base de datos""" |
|
|
|
|
|
try: |
|
|
conn = sqlite3.connect('data/sentiment_analysis.db') |
|
|
conn.row_factory = sqlite3.Row |
|
|
cursor = conn.cursor() |
|
|
|
|
|
print("\n" + "="*80) |
|
|
print("📊 EXPLORANDO LA BASE DE DATOS SQLITE3") |
|
|
print("="*80) |
|
|
|
|
|
|
|
|
print("\n1️⃣ TABLA: customer_profiles (Perfiles de Clientes)") |
|
|
print("-" * 80) |
|
|
cursor.execute('SELECT customer_id, churn_risk, lifetime_sentiment, total_interactions FROM customer_profiles') |
|
|
rows = cursor.fetchall() |
|
|
print(f"Total de clientes: {len(rows)}\n") |
|
|
if rows: |
|
|
for row in rows: |
|
|
print(f" • {row['customer_id']:20} | Riesgo: {row['churn_risk']:6.1%} | Sentimiento: {row['lifetime_sentiment']:5.1f}/100 | Interacciones: {row['total_interactions']}") |
|
|
else: |
|
|
print(" (Sin datos aún)") |
|
|
|
|
|
|
|
|
print("\n2️⃣ TABLA: conversations (Análisis Realizadas)") |
|
|
print("-" * 80) |
|
|
cursor.execute('SELECT customer_id, analysis_date, sentiment_score, trend, risk_level, predicted_action FROM conversations ORDER BY analysis_date DESC LIMIT 10') |
|
|
rows = cursor.fetchall() |
|
|
print(f"Total de análisis guardadas (mostrando últimas 10):\n") |
|
|
if rows: |
|
|
for i, row in enumerate(rows, 1): |
|
|
print(f" {i}. {row['analysis_date']} | {row['customer_id']:18} | Sent: {row['sentiment_score']:5.1f} | Trend: {row['trend']:10} | Risk: {row['risk_level']:6} | Action: {row['predicted_action']}") |
|
|
else: |
|
|
print(" (Sin datos aún)") |
|
|
|
|
|
|
|
|
print("\n3️⃣ TABLA: risk_alerts (Alertas Automáticas)") |
|
|
print("-" * 80) |
|
|
cursor.execute('SELECT customer_id, alert_type, severity, created_at, resolved FROM risk_alerts ORDER BY created_at DESC') |
|
|
rows = cursor.fetchall() |
|
|
print(f"Total de alertas: {len(rows)}\n") |
|
|
if rows: |
|
|
for i, row in enumerate(rows, 1): |
|
|
status = "✅ RESUELTA" if row['resolved'] else "🚨 ACTIVA" |
|
|
print(f" {i}. {row['created_at']} | {row['customer_id']:18} | Tipo: {row['alert_type']:15} | Severidad: {row['severity']:6} | {status}") |
|
|
else: |
|
|
print(" (Sin alertas aún)") |
|
|
|
|
|
|
|
|
print("\n4️⃣ ESTADÍSTICAS GLOBALES") |
|
|
print("-" * 80) |
|
|
|
|
|
cursor.execute('SELECT COUNT(DISTINCT customer_id) as count FROM conversations') |
|
|
unique_customers = cursor.fetchone()[0] |
|
|
|
|
|
cursor.execute('SELECT COUNT(*) as count FROM conversations') |
|
|
total_analyses = cursor.fetchone()[0] |
|
|
|
|
|
cursor.execute('SELECT AVG(sentiment_score) as avg FROM conversations') |
|
|
avg_sentiment = cursor.fetchone()[0] or 0 |
|
|
|
|
|
cursor.execute('SELECT COUNT(*) as count FROM customer_profiles WHERE churn_risk > 0.7') |
|
|
at_risk = cursor.fetchone()[0] |
|
|
|
|
|
cursor.execute('SELECT COUNT(*) as count FROM risk_alerts WHERE resolved = 0') |
|
|
active_alerts = cursor.fetchone()[0] |
|
|
|
|
|
print(f" • Clientes únicos: {unique_customers}") |
|
|
print(f" • Análisis totales guardadas: {total_analyses}") |
|
|
print(f" • Sentimiento promedio: {avg_sentiment:.1f}/100") |
|
|
print(f" • Clientes en alto riesgo (>70%): {at_risk}") |
|
|
print(f" • Alertas activas: {active_alerts}") |
|
|
|
|
|
conn.close() |
|
|
|
|
|
print("\n" + "="*80) |
|
|
print("✅ DATOS REALES EN sentiment_analysis.db") |
|
|
print("="*80) |
|
|
print("\nEsta BD se crea automáticamente cuando Claude usa las herramientas de análisis.") |
|
|
print("Cada análisis que realiza se guarda persistentemente aquí.\n") |
|
|
|
|
|
except FileNotFoundError: |
|
|
print("\n❌ BASE DE DATOS NO ENCONTRADA") |
|
|
print(" Aún no se ha creado sentiment_analysis.db") |
|
|
print(" Se creará automáticamente cuando uses el MCP en Claude Desktop\n") |
|
|
except Exception as e: |
|
|
print(f"\n❌ ERROR: {e}\n") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
show_database() |
|
|
|