spjasper commited on
Commit
a403cfe
·
verified ·
1 Parent(s): 651d897

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +143 -122
app.py CHANGED
@@ -1,18 +1,19 @@
1
  # -*- coding: utf-8 -*-
2
- """bet-inglaterra con Gradio
3
 
4
  Análisis estadístico de partidos de fútbol con interfaz Gradio
5
  """
6
 
7
- # Instalaciones necesarias
8
- # !pip install selenium webdriver-manager pandas anthropic gradio
9
-
10
  import os
11
  import shutil
12
  import pandas as pd
13
  import numpy as np
14
  import gradio as gr
15
  import anthropic
 
 
 
 
16
 
17
  # Variables globales para almacenar resultados
18
  analisis_partido_resultado = ""
@@ -27,18 +28,19 @@ def limpiar_carpeta():
27
  """Limpia la carpeta de trabajo"""
28
  folder = '/content'
29
  mensajes = []
30
- for filename in os.listdir(folder):
31
- file_path = os.path.join(folder, filename)
32
- try:
33
- if filename != 'sample_data' and not filename.startswith('.'):
34
- if os.path.isfile(file_path) or os.path.islink(file_path):
35
- os.unlink(file_path)
36
- elif os.path.isdir(file_path):
37
- shutil.rmtree(file_path)
38
- mensajes.append(f"Eliminado: {filename}")
39
- except Exception as e:
40
- mensajes.append(f'No se pudo borrar {file_path}. Razón: {e}')
41
- return "\n".join(mensajes)
 
42
 
43
  def descargar_datos():
44
  """Descarga los datos de football-data.co.uk"""
@@ -65,6 +67,9 @@ def renombrar_columnas():
65
  """Renombra y filtra columnas del dataset"""
66
  global df
67
 
 
 
 
68
  column_mapping = {
69
  'Div': 'League_Division',
70
  'Date': 'Match_Date',
@@ -115,6 +120,9 @@ def generar_estadisticas():
115
  """Genera estadísticas por equipo"""
116
  global df
117
 
 
 
 
118
  numeric_cols = df.select_dtypes(include=[np.number]).columns.tolist()
119
 
120
  def get_mode(x):
@@ -240,6 +248,9 @@ def analizar_partido_volatilidad_func(equipo_local, equipo_visitante):
240
 
241
  def generar_analisis_profesional(api_key, datos_rendimiento, datos_volatilidad):
242
  """Genera análisis profesional usando Claude API"""
 
 
 
243
  SYSTEM_PROMPT = """
244
  Actúa como un experto analista estadístico de fútbol y apostador profesional.
245
 
@@ -274,7 +285,7 @@ def generar_analisis_profesional(api_key, datos_rendimiento, datos_volatilidad):
274
  )
275
  return response.content[0].text
276
  except Exception as e:
277
- return f"Error en la API: {e}"
278
 
279
  # =============================================================================
280
  # FUNCIONES PARA GRADIO
@@ -291,16 +302,24 @@ def obtener_equipos():
291
  def inicializar_datos():
292
  """Función para inicializar todos los datos"""
293
  resultado = []
 
294
  resultado.append(descargar_datos())
 
295
  resultado.append(cargar_datos())
 
296
  resultado.append(renombrar_columnas())
 
297
  resultado.append(generar_estadisticas())
 
298
  return "\n".join(resultado)
299
 
300
  def analisis_completo(equipo_local, equipo_visitante, api_key):
301
  """Realiza el análisis completo del partido"""
302
  global analisis_partido_resultado, analisis_partido_volatilidad
303
 
 
 
 
304
  # Análisis de rendimiento
305
  rendimiento = analizar_partido(equipo_local, equipo_visitante)
306
 
@@ -308,10 +327,7 @@ def analisis_completo(equipo_local, equipo_visitante, api_key):
308
  volatilidad = analizar_partido_volatilidad_func(equipo_local, equipo_visitante)
309
 
310
  # Análisis con IA
311
- if api_key:
312
- analisis_ia = generar_analisis_profesional(api_key, rendimiento, volatilidad)
313
- else:
314
- analisis_ia = "Proporciona tu API Key de Anthropic para obtener el análisis profesional con IA."
315
 
316
  return rendimiento, volatilidad, analisis_ia
317
 
@@ -319,112 +335,117 @@ def analisis_completo(equipo_local, equipo_visitante, api_key):
319
  # INTERFAZ GRADIO
320
  # =============================================================================
321
 
322
- with gr.Blocks(title="Análisis de Partidos de Fútbol") as demo:
323
- gr.Markdown("""
324
- # Análisis Estadístico de Partidos - Premier League
325
- ### Sistema de análisis avanzado para apuestas deportivas
326
- """)
327
-
328
- with gr.Tab("1️⃣ Configuración"):
329
- gr.Markdown("### Paso 1: Inicializar datos")
330
- btn_inicializar = gr.Button("🔄 Descargar y Procesar Datos", variant="primary")
331
- output_inicializacion = gr.Textbox(label="Estado", lines=5)
332
 
333
- btn_inicializar.click(
334
- fn=inicializar_datos,
335
- outputs=output_inicializacion
336
- )
337
-
338
- with gr.Tab("2️⃣ Análisis de Partido"):
339
- gr.Markdown("### Selecciona los equipos y obtén el análisis completo")
 
 
340
 
341
- with gr.Row():
342
- with gr.Column():
343
- equipo_local = gr.Dropdown(
344
- label="Equipo Local",
345
- choices=obtener_equipos(),
346
- interactive=True
347
- )
348
- btn_actualizar = gr.Button("🔄 Actualizar lista de equipos")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
 
350
- with gr.Column():
351
- equipo_visitante = gr.Dropdown(
352
- label="Equipo Visitante",
353
- choices=obtener_equipos(),
354
- interactive=True
355
- )
356
-
357
- api_key_input = gr.Textbox(
358
- label="API Key de Anthropic (opcional)",
359
- type="password",
360
- placeholder="sk-ant-..."
361
- )
362
-
363
- btn_analizar = gr.Button("📊 Analizar Partido", variant="primary", size="lg")
364
-
365
- with gr.Row():
366
- with gr.Column():
367
- gr.Markdown("### 📈 Análisis de Rendimiento")
368
- output_rendimiento = gr.Textbox(label="Ataque vs Defensa", lines=10)
369
 
370
- with gr.Column():
371
- gr.Markdown("### 📉 Análisis de Volatilidad")
372
- output_volatilidad = gr.Textbox(label="Consistencia y Riesgo", lines=10)
373
-
374
- gr.Markdown("### 🤖 Análisis Profesional con IA")
375
- output_ia = gr.Textbox(label="Recomendaciones", lines=15)
376
-
377
- # Eventos
378
- btn_actualizar.click(
379
- fn=obtener_equipos,
380
- outputs=[equipo_local, equipo_visitante]
381
- )
382
-
383
- btn_analizar.click(
384
- fn=analisis_completo,
385
- inputs=[equipo_local, equipo_visitante, api_key_input],
386
- outputs=[output_rendimiento, output_volatilidad, output_ia]
387
- )
388
-
389
- with gr.Tab("ℹ️ Información"):
390
- gr.Markdown("""
391
- ## Cómo usar esta aplicación
392
-
393
- ### Paso 1: Configuración
394
- 1. Ve a la pestaña "Configuración"
395
- 2. Haz clic en "Descargar y Procesar Datos"
396
- 3. Espera a que se complete el procesamiento
397
-
398
- ### Paso 2: Análisis
399
- 1. Ve a la pestaña "Análisis de Partido"
400
- 2. Actualiza la lista de equipos si es necesario
401
- 3. Selecciona el equipo local y visitante
402
- 4. (Opcional) Ingresa tu API Key de Anthropic para análisis con IA
403
- 5. Haz clic en "Analizar Partido"
404
-
405
- ### Interpretación de Resultados
406
-
407
- **Análisis de Rendimiento:**
408
- - Muestra el promedio de goles, tiros, corners, etc.
409
- - Compara el ataque de cada equipo vs la defensa del rival
410
-
411
- **Análisis de Volatilidad:**
412
- - Alta Consistencia: El equipo es predecible
413
- - Volatilidad Positiva: Tiene picos de buen rendimiento
414
- - Volatilidad Negativa: Tiene caídas en rendimiento
415
-
416
- **Análisis con IA:**
417
- - Combina ambos análisis
418
- - Proporciona recomendaciones de apuesta
419
- - Calcula probabilidades
420
 
421
- ### Obtener API Key de Anthropic
422
- 1. Visita https://console.anthropic.com/
423
- 2. Crea una cuenta o inicia sesión
424
- 3. Ve a "API Keys"
425
- 4. Genera una nueva clave
426
- """)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
 
428
  # Lanzar la aplicación
429
  if __name__ == "__main__":
430
- demo.launch(theme=gr.themes.Soft())
 
 
1
  # -*- coding: utf-8 -*-
2
+ """bet-inglaterra con Gradio - Versión optimizada
3
 
4
  Análisis estadístico de partidos de fútbol con interfaz Gradio
5
  """
6
 
 
 
 
7
  import os
8
  import shutil
9
  import pandas as pd
10
  import numpy as np
11
  import gradio as gr
12
  import anthropic
13
+ import warnings
14
+
15
+ # Suprimir warnings específicos
16
+ warnings.filterwarnings('ignore', category=UserWarning)
17
 
18
  # Variables globales para almacenar resultados
19
  analisis_partido_resultado = ""
 
28
  """Limpia la carpeta de trabajo"""
29
  folder = '/content'
30
  mensajes = []
31
+ if os.path.exists(folder):
32
+ for filename in os.listdir(folder):
33
+ file_path = os.path.join(folder, filename)
34
+ try:
35
+ if filename != 'sample_data' and not filename.startswith('.'):
36
+ if os.path.isfile(file_path) or os.path.islink(file_path):
37
+ os.unlink(file_path)
38
+ elif os.path.isdir(file_path):
39
+ shutil.rmtree(file_path)
40
+ mensajes.append(f"Eliminado: {filename}")
41
+ except Exception as e:
42
+ mensajes.append(f'No se pudo borrar {file_path}. Razón: {e}')
43
+ return "\n".join(mensajes) if mensajes else "Carpeta limpia"
44
 
45
  def descargar_datos():
46
  """Descarga los datos de football-data.co.uk"""
 
67
  """Renombra y filtra columnas del dataset"""
68
  global df
69
 
70
+ if df.empty:
71
+ return "Error: No hay datos cargados"
72
+
73
  column_mapping = {
74
  'Div': 'League_Division',
75
  'Date': 'Match_Date',
 
120
  """Genera estadísticas por equipo"""
121
  global df
122
 
123
+ if df.empty:
124
+ return "Error: No hay datos cargados"
125
+
126
  numeric_cols = df.select_dtypes(include=[np.number]).columns.tolist()
127
 
128
  def get_mode(x):
 
248
 
249
  def generar_analisis_profesional(api_key, datos_rendimiento, datos_volatilidad):
250
  """Genera análisis profesional usando Claude API"""
251
+ if not api_key or api_key.strip() == "":
252
+ return "⚠️ Proporciona tu API Key de Anthropic para obtener el análisis profesional con IA.\n\nPuedes obtener una en: https://console.anthropic.com/"
253
+
254
  SYSTEM_PROMPT = """
255
  Actúa como un experto analista estadístico de fútbol y apostador profesional.
256
 
 
285
  )
286
  return response.content[0].text
287
  except Exception as e:
288
+ return f"Error en la API: {e}\n\nVerifica que tu API Key sea válida."
289
 
290
  # =============================================================================
291
  # FUNCIONES PARA GRADIO
 
302
  def inicializar_datos():
303
  """Función para inicializar todos los datos"""
304
  resultado = []
305
+ resultado.append("🔄 Descargando datos...")
306
  resultado.append(descargar_datos())
307
+ resultado.append("\n🔄 Cargando datos...")
308
  resultado.append(cargar_datos())
309
+ resultado.append("\n🔄 Renombrando columnas...")
310
  resultado.append(renombrar_columnas())
311
+ resultado.append("\n🔄 Generando estadísticas...")
312
  resultado.append(generar_estadisticas())
313
+ resultado.append("\n✅ ¡Proceso completado! Puedes ir a la pestaña de Análisis.")
314
  return "\n".join(resultado)
315
 
316
  def analisis_completo(equipo_local, equipo_visitante, api_key):
317
  """Realiza el análisis completo del partido"""
318
  global analisis_partido_resultado, analisis_partido_volatilidad
319
 
320
+ if not equipo_local or not equipo_visitante:
321
+ return "Por favor selecciona ambos equipos", "", ""
322
+
323
  # Análisis de rendimiento
324
  rendimiento = analizar_partido(equipo_local, equipo_visitante)
325
 
 
327
  volatilidad = analizar_partido_volatilidad_func(equipo_local, equipo_visitante)
328
 
329
  # Análisis con IA
330
+ analisis_ia = generar_analisis_profesional(api_key, rendimiento, volatilidad)
 
 
 
331
 
332
  return rendimiento, volatilidad, analisis_ia
333
 
 
335
  # INTERFAZ GRADIO
336
  # =============================================================================
337
 
338
+ def crear_interfaz():
339
+ """Crea la interfaz de Gradio"""
340
+ with gr.Blocks(title="Análisis de Partidos de Fútbol") as demo:
341
+ gr.Markdown("""
342
+ # ⚽ Análisis Estadístico de Partidos - Premier League
343
+ ### Sistema de análisis avanzado para apuestas deportivas
344
+ """)
 
 
 
345
 
346
+ with gr.Tab("1️⃣ Configuración"):
347
+ gr.Markdown("### Paso 1: Inicializar datos")
348
+ btn_inicializar = gr.Button("🔄 Descargar y Procesar Datos", variant="primary", size="lg")
349
+ output_inicializacion = gr.Textbox(label="Estado", lines=10, show_copy_button=True)
350
+
351
+ btn_inicializar.click(
352
+ fn=inicializar_datos,
353
+ outputs=output_inicializacion
354
+ )
355
 
356
+ with gr.Tab("2️⃣ Análisis de Partido"):
357
+ gr.Markdown("### Selecciona los equipos y obtén el análisis completo")
358
+
359
+ with gr.Row():
360
+ with gr.Column():
361
+ equipo_local = gr.Dropdown(
362
+ label="Equipo Local",
363
+ choices=obtener_equipos(),
364
+ interactive=True
365
+ )
366
+ btn_actualizar = gr.Button("🔄 Actualizar lista de equipos")
367
+
368
+ with gr.Column():
369
+ equipo_visitante = gr.Dropdown(
370
+ label="Equipo Visitante",
371
+ choices=obtener_equipos(),
372
+ interactive=True
373
+ )
374
+
375
+ api_key_input = gr.Textbox(
376
+ label="API Key de Anthropic (opcional para análisis con IA)",
377
+ type="password",
378
+ placeholder="sk-ant-..."
379
+ )
380
+
381
+ btn_analizar = gr.Button("📊 Analizar Partido", variant="primary", size="lg")
382
+
383
+ with gr.Row():
384
+ with gr.Column():
385
+ gr.Markdown("### 📈 Análisis de Rendimiento")
386
+ output_rendimiento = gr.Textbox(label="Ataque vs Defensa", lines=10, show_copy_button=True)
387
 
388
+ with gr.Column():
389
+ gr.Markdown("### 📉 Análisis de Volatilidad")
390
+ output_volatilidad = gr.Textbox(label="Consistencia y Riesgo", lines=10, show_copy_button=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
391
 
392
+ gr.Markdown("### 🤖 Análisis Profesional con IA")
393
+ output_ia = gr.Textbox(label="Recomendaciones", lines=15, show_copy_button=True)
394
+
395
+ # Eventos
396
+ btn_actualizar.click(
397
+ fn=lambda: (gr.Dropdown(choices=obtener_equipos()), gr.Dropdown(choices=obtener_equipos())),
398
+ outputs=[equipo_local, equipo_visitante]
399
+ )
400
+
401
+ btn_analizar.click(
402
+ fn=analisis_completo,
403
+ inputs=[equipo_local, equipo_visitante, api_key_input],
404
+ outputs=[output_rendimiento, output_volatilidad, output_ia]
405
+ )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
406
 
407
+ with gr.Tab("ℹ️ Información"):
408
+ gr.Markdown("""
409
+ ## Cómo usar esta aplicación
410
+
411
+ ### Paso 1: Configuración
412
+ 1. Ve a la pestaña "Configuración"
413
+ 2. Haz clic en "Descargar y Procesar Datos"
414
+ 3. Espera a que se complete el procesamiento
415
+
416
+ ### Paso 2: Análisis
417
+ 1. Ve a la pestaña "Análisis de Partido"
418
+ 2. Actualiza la lista de equipos si es necesario
419
+ 3. Selecciona el equipo local y visitante
420
+ 4. (Opcional) Ingresa tu API Key de Anthropic para análisis con IA
421
+ 5. Haz clic en "Analizar Partido"
422
+
423
+ ### Interpretación de Resultados
424
+
425
+ **Análisis de Rendimiento:**
426
+ - Muestra el promedio de goles, tiros, corners, etc.
427
+ - Compara el ataque de cada equipo vs la defensa del rival
428
+
429
+ **Análisis de Volatilidad:**
430
+ - Alta Consistencia: El equipo es predecible
431
+ - Volatilidad Positiva: Tiene picos de buen rendimiento
432
+ - Volatilidad Negativa: Tiene caídas en rendimiento
433
+
434
+ **Análisis con IA:**
435
+ - Combina ambos análisis
436
+ - Proporciona recomendaciones de apuesta
437
+ - Calcula probabilidades
438
+
439
+ ### Obtener API Key de Anthropic
440
+ 1. Visita https://console.anthropic.com/
441
+ 2. Crea una cuenta o inicia sesión
442
+ 3. Ve a "API Keys"
443
+ 4. Genera una nueva clave
444
+ """)
445
+
446
+ return demo
447
 
448
  # Lanzar la aplicación
449
  if __name__ == "__main__":
450
+ demo = crear_interfaz()
451
+ demo.launch()