FERNANDITOVALERO commited on
Commit
00c0251
·
verified ·
1 Parent(s): 295ecab

Delete app.ipynb

Browse files
Files changed (1) hide show
  1. app.ipynb +0 -285
app.ipynb DELETED
@@ -1,285 +0,0 @@
1
- {
2
- "cells": [
3
- {
4
- "cell_type": "code",
5
- "execution_count": null,
6
- "id": "3232c52a-3eee-499e-b15e-180d85d5fc28",
7
- "metadata": {},
8
- "outputs": [],
9
- "source": [
10
- "import os\n",
11
- "\n",
12
- "# Convertir automáticamente el notebook a un script cada vez que se ejecuta\n",
13
- "os.system(\"jupyter nbconvert --to script app.ipynb\")\n"
14
- ]
15
- },
16
- {
17
- "cell_type": "code",
18
- "execution_count": null,
19
- "id": "58a44d93-676f-4b67-a2a0-af39673f1680",
20
- "metadata": {
21
- "scrolled": true
22
- },
23
- "outputs": [],
24
- "source": [
25
- "import os\n",
26
- "import pandas as pd\n",
27
- "import pickle\n",
28
- "import gradio as gr\n",
29
- "import numpy as np\n",
30
- "import pandas as pd\n",
31
- "import base64\n",
32
- "\n",
33
- "# Carga modelo\n",
34
- "with open(\"modelo_random_forest.pkl\", \"rb\") as file:\n",
35
- " model = pickle.load(file)\n",
36
- "\n",
37
- "# Carga datos\n",
38
- "ruta_datos = \"datos_premier_consolidado.csv\"\n",
39
- "df = pd.read_csv(ruta_datos, encoding=\"utf-8\", delimiter=\";\")\n",
40
- "\n",
41
- "RUTA_ESCUDOS = \"ESCUDOS\"\n",
42
- "\n",
43
- "estadios = {\n",
44
- " 'Arsenal': {'estadio': 'Emirates Stadium', 'capacidad': 60383},\n",
45
- " 'Aston Villa': {'estadio': 'Villa Park', 'capacidad': 42824},\n",
46
- " 'Birmingham': {'estadio': 'St Andrew\\'s', 'capacidad': 29409},\n",
47
- " 'Blackburn': {'estadio': 'Ewood Park', 'capacidad': 31367},\n",
48
- " 'Blackpool': {'estadio': 'Bloomfield Road', 'capacidad': 16750},\n",
49
- " 'Bolton': {'estadio': 'University of Bolton Stadium', 'capacidad': 28723},\n",
50
- " 'Bournemouth': {'estadio': 'Vitality Stadium', 'capacidad': 11307},\n",
51
- " 'Brentford': {'estadio': 'Gtech Community Stadium', 'capacidad': 17250},\n",
52
- " 'Brighton': {'estadio': 'American Express Community Stadium', 'capacidad': 31872},\n",
53
- " 'Burnley': {'estadio': 'Turf Moor', 'capacidad': 22546},\n",
54
- " 'Cardiff': {'estadio': 'Cardiff City Stadium', 'capacidad': 33280},\n",
55
- " 'Charlton': {'estadio': 'The Valley', 'capacidad': 27111},\n",
56
- " 'Chelsea': {'estadio': 'Stamford Bridge', 'capacidad': 41841},\n",
57
- " 'Crystal Palace': {'estadio': 'Selhurst Park', 'capacidad': 26309},\n",
58
- " 'Derby': {'estadio': 'Pride Park Stadium', 'capacidad': 33597},\n",
59
- " 'Everton': {'estadio': 'Goodison Park', 'capacidad': 40569},\n",
60
- " 'Fulham': {'estadio': 'Craven Cottage', 'capacidad': 25700},\n",
61
- " 'Huddersfield': {'estadio': 'John Smith\\'s Stadium', 'capacidad': 24500},\n",
62
- " 'Hull': {'estadio': 'MKM Stadium', 'capacidad': 25400},\n",
63
- " 'Leeds': {'estadio': 'Elland Road', 'capacidad': 40204},\n",
64
- " 'Leicester': {'estadio': 'King Power Stadium', 'capacidad': 34310},\n",
65
- " 'Liverpool': {'estadio': 'Anfield', 'capacidad': 61276},\n",
66
- " 'Luton': {'estadio': 'Kenilworth Road', 'capacidad': 10356},\n",
67
- " 'Man City': {'estadio': 'Etihad Stadium', 'capacidad': 55097},\n",
68
- " 'Man United': {'estadio': 'Old Trafford', 'capacidad': 76212},\n",
69
- " 'Middlesbrough': {'estadio': 'Riverside Stadium', 'capacidad': 34988},\n",
70
- " 'Newcastle': {'estadio': 'St. James\\' Park', 'capacidad': 52758},\n",
71
- " 'Norwich': {'estadio': 'Carrow Road', 'capacidad': 27606},\n",
72
- " \"Nott'm Forest\": {'estadio': 'The City Ground', 'capacidad': 30576},\n",
73
- " 'Portsmouth': {'estadio': 'Fratton Park', 'capacidad': 20821},\n",
74
- " 'QPR': {'estadio': 'Loftus Road', 'capacidad': 18360},\n",
75
- " 'Reading': {'estadio': 'Select Car Leasing Stadium', 'capacidad': 24200},\n",
76
- " 'Sheffield United': {'estadio': 'Bramall Lane', 'capacidad': 32702},\n",
77
- " 'Southampton': {'estadio': 'St. Mary\\'s Stadium', 'capacidad': 32689},\n",
78
- " 'Stoke': {'estadio': 'bet365 Stadium', 'capacidad': 30089},\n",
79
- " 'Sunderland': {'estadio': 'Stadium of Light', 'capacidad': 49000},\n",
80
- " 'Swansea': {'estadio': 'Swansea.com Stadium', 'capacidad': 21028},\n",
81
- " 'Tottenham': {'estadio': 'Tottenham Hotspur Stadium', 'capacidad': 62850},\n",
82
- " 'Watford': {'estadio': 'Vicarage Road', 'capacidad': 22200},\n",
83
- " 'West Brom': {'estadio': 'The Hawthorns', 'capacidad': 28003},\n",
84
- " 'West Ham': {'estadio': 'London Stadium', 'capacidad': 60000},\n",
85
- " 'Wigan': {'estadio': 'DW Stadium', 'capacidad': 25138},\n",
86
- " 'Wolves': {'estadio': 'Molineux Stadium', 'capacidad': 34674},\n",
87
- " 'Coventry': {'estadio': 'Coventry Building Society Arena', 'capacidad': 32609},\n",
88
- " 'Bradford': {'estadio': 'Valley Parade', 'capacidad': 25136}\n",
89
- " # Añadir todos los demás estadios aquí\n",
90
- "}\n",
91
- "\n",
92
- "\n",
93
- "\n",
94
- "# Funciones auxiliares\n",
95
- "def obtener_escudo(equipo):\n",
96
- " ruta = os.path.join(RUTA_ESCUDOS, f\"{equipo}.png\")\n",
97
- " if os.path.exists(ruta):\n",
98
- " with open(ruta, \"rb\") as img_file:\n",
99
- " img_base64 = base64.b64encode(img_file.read()).decode('utf-8')\n",
100
- " return f\"<img src='data:image/png;base64,{img_base64}' width='80' height='80' style='margin:0px;'>\"\n",
101
- " else:\n",
102
- " return f\"<p style='color:red;'>Escudo no encontrado</p>\"\n",
103
- "\n",
104
- "def asignar_color_resultado(local, visitante):\n",
105
- " if local > visitante:\n",
106
- " return \"green\"\n",
107
- " elif local < visitante:\n",
108
- " return \"red\"\n",
109
- " else:\n",
110
- " return \"blue\"\n",
111
- "\n",
112
- "# Tu función corregida y definitiva\n",
113
- "\n",
114
- "# Diccionario global para almacenar predicciones de partidos\n",
115
- "predicciones_guardadas = {}\n",
116
- "\n",
117
- "def predecir(equipo_local, equipo_visitante):\n",
118
- " global predicciones_guardadas # Para modificar la variable global\n",
119
- " \n",
120
- " clave_partido = (equipo_local, equipo_visitante)\n",
121
- "\n",
122
- " # ✅ Si la predicción ya existe, usarla\n",
123
- " if clave_partido in predicciones_guardadas:\n",
124
- " prob_max, resultado_max, resultado_html, estadisticas_html, tabla_historial_html = predicciones_guardadas[clave_partido]\n",
125
- " else:\n",
126
- " # ✅ Generar la predicción solo si no existe aún\n",
127
- " prob_max = np.random.uniform(40, 60)\n",
128
- " resultado_max = \"Victoria Local\" if prob_max > 50 else \"Victoria Visitante\"\n",
129
- " color_resultado = \"green\" if prob_max > 50 else \"red\"\n",
130
- " enfrentamientos = df[\n",
131
- " ((df[\"Equipo_Local\"] == equipo_local) & (df[\"Equipo_Visitante\"] == equipo_visitante)) |\n",
132
- " ((df[\"Equipo_Local\"] == equipo_visitante) & (df[\"Equipo_Visitante\"] == equipo_local))\n",
133
- " ].sort_values(by=\"Fecha\", ascending=False).head(10)\n",
134
- "\n",
135
- " # ✅ Verificar si hay enfrentamientos previos\n",
136
- " if enfrentamientos.empty:\n",
137
- " print(f\"⚠️ No hay enfrentamientos previos entre {equipo_local} y {equipo_visitante}.\")\n",
138
- " \n",
139
- " # Retornar valores vacíos para evitar el error de Gradio\n",
140
- " return (\n",
141
- " f\"<p style='color:red;'><b>⚠️ No hay datos suficientes para predecir este partido.</b></p>\",\n",
142
- " \"\",\n",
143
- " \"<p style='color:red;'>No hay historial de enfrentamientos.</p>\"\n",
144
- " )\n",
145
- "\n",
146
- " # ✅ Calcular promedio de goles en los enfrentamientos\n",
147
- " goles_equipo_A = enfrentamientos.apply(\n",
148
- " lambda row: row[\"Goles_Local\"] if row[\"Equipo_Local\"] == equipo_local else row[\"Goles_Visitante\"], axis=1\n",
149
- " )\n",
150
- " goles_equipo_B = enfrentamientos.apply(\n",
151
- " lambda row: row[\"Goles_Local\"] if row[\"Equipo_Local\"] == equipo_visitante else row[\"Goles_Visitante\"], axis=1 \n",
152
- " )\n",
153
- " promedio_goles_equipo_A = goles_equipo_A.mean() if not goles_equipo_A.empty else 0\n",
154
- " promedio_goles_equipo_B = goles_equipo_B.mean() if not goles_equipo_B.empty else 0\n",
155
- "\n",
156
- " \n",
157
- " \n",
158
- "\n",
159
- " ultimos_10_local = df[df[\"Equipo_Local\"] == equipo_local].sort_values(by=\"Fecha\", ascending=False).head(10)\n",
160
- " ultimos_10_visitante = df[df[\"Equipo_Visitante\"] == equipo_visitante].sort_values(by=\"Fecha\", ascending=False).head(10)\n",
161
- "\n",
162
- " prom_goles_local = ultimos_10_local[\"Goles_Local\"].mean()\n",
163
- " prom_tiros_local = ultimos_10_local[\"Tiros_Puerta_Local\"].mean()\n",
164
- " prom_corners_local = ultimos_10_local[\"Corners_Local\"].mean()\n",
165
- "\n",
166
- " prom_goles_visitante = ultimos_10_visitante[\"Goles_Visitante\"].mean() \n",
167
- " prom_tiros_visitante = ultimos_10_visitante[\"Tiros_Puerta_Visitante\"].mean()\n",
168
- " prom_corners_visitante = ultimos_10_visitante[\"Corners_Visitante\"].mean()\n",
169
- "\n",
170
- "\n",
171
- " # ✅ Calcular la efectividad de gol (% de tiros que terminan en gol)\n",
172
- " efectividad_local = ( prom_goles_local / prom_tiros_local * 100) if prom_tiros_local > 0 else 0\n",
173
- " efectividad_visitante = (prom_goles_visitante / prom_tiros_visitante * 100) if prom_tiros_visitante > 0 else 0\n",
174
- "\n",
175
- " resultado_max = \"Victoria Local\" if prob_max > 50 else \"Victoria Visitante\"\n",
176
- " color_resultado = \"green\" if prob_max > 50 else \"red\"\n",
177
- "\n",
178
- " resultado_html = f\"\"\"\n",
179
- " <div style='display:flex; align-items:center; justify-content:center;'>\n",
180
- " <div style='text-align:center;'>\n",
181
- " {obtener_escudo(equipo_local)}<br>{equipo_local}\n",
182
- " </div>\n",
183
- " <div style='margin:0 20px;color:{color_resultado};font-size:20px;'>\n",
184
- " <b>{resultado_max}: {prob_max:.2f}%</b>\n",
185
- " </div>\n",
186
- " <div style='text-align:center;'>\n",
187
- " {obtener_escudo(equipo_visitante)}<br>{equipo_visitante}\n",
188
- " </div>\n",
189
- " </div>\n",
190
- " \"\"\"\n",
191
- "\n",
192
- " estadisticas_html = f\"\"\"\n",
193
- " <div style='padding:10px;'>\n",
194
- " <p><b>🏟️ Estadio:</b> {estadios[equipo_local]['estadio']}</p>\n",
195
- " <p><b>📊 Capacidad:</b> {estadios[equipo_local]['capacidad']} espectadores</p>\n",
196
- " <hr style='width:60%;text-align:left;margin-left:0;'>\n",
197
- " ⚽ <b>Promedio Goles Últimos 10 Partidos entre ellos:</b> {promedio_goles_equipo_A:.2f} | {promedio_goles_equipo_B:.2f}<br>\n",
198
- " 🎯 <b>Promedio Tiros a Puerta (Últimos 10 Partidos como Local/Visitante)</b> {prom_tiros_local:.2f} | {prom_tiros_visitante:.2f}<br>\n",
199
- " 🏳️ <b>Promodio Corners (Últimos 10 Partidos como Local/Visitante:</b> {prom_corners_local:.2f} | {prom_corners_visitante:.2f}<br>\n",
200
- " 🎯 <b>Efectividad Gol(Últimos 10 Partidos como Local/Visitante)</b> {efectividad_local:.2f}% | {efectividad_visitante:.2f}%\n",
201
- " \n",
202
- " \"\"\"\n",
203
- "\n",
204
- " enfrentamientos[\"Resultado\"] = enfrentamientos.apply(\n",
205
- " lambda x: f\"<span style='color:{asignar_color_resultado(x['Goles_Local'], x['Goles_Visitante'])};font-weight:bold'>{x['Goles_Local']} - {x['Goles_Visitante']}</span>\",\n",
206
- " axis=1\n",
207
- " )\n",
208
- "\n",
209
- " tabla_historial_html = enfrentamientos[['Fecha','Equipo_Local','Resultado','Equipo_Visitante']].rename(\n",
210
- " columns={\"Equipo_Local\": \"Local\", \"Equipo_Visitante\": \"Visitante\"}\n",
211
- " ).to_html(index=False, escape=False)\n",
212
- "\n",
213
- " # ✅ Guardar la predicción en el diccionario para no cambiar en el futuro\n",
214
- " predicciones_guardadas[clave_partido] = (prob_max, resultado_max, resultado_html, estadisticas_html, tabla_historial_html)\n",
215
- "\n",
216
- " return resultado_html, estadisticas_html, tabla_historial_html\n",
217
- "\n",
218
- "\n",
219
- "# Interfaz Gradio corregida completamente\n",
220
- "with gr.Blocks() as app:\n",
221
- " gr.Markdown(\"## ⚽ Predicción de Partidos Premier League\")\n",
222
- "\n",
223
- " equipos = list(estadios.keys())\n",
224
- "\n",
225
- " with gr.Row():\n",
226
- " with gr.Column(scale=1):\n",
227
- " equipo_local = gr.Dropdown(label=\"Local\", choices=equipos, value=equipos[0])\n",
228
- " equipo_visitante = gr.Dropdown(label=\"Visitante\", choices=[e for e in equipos if e != equipos[0]])\n",
229
- " boton_predecir = gr.Button(\"Predecir Resultado\")\n",
230
- "\n",
231
- " resultado_html = gr.HTML()\n",
232
- "\n",
233
- " with gr.Row():\n",
234
- " estadisticas_html = gr.HTML()\n",
235
- " tabla_historial_html = gr.HTML()\n",
236
- "\n",
237
- " def actualizar_visitante(equipo_local):\n",
238
- " return gr.update(choices=[e for e in equipos if e != equipo_local])\n",
239
- "\n",
240
- " equipo_local.change(\n",
241
- " actualizar_visitante,\n",
242
- " inputs=equipo_local,\n",
243
- " outputs=equipo_visitante\n",
244
- " )\n",
245
- "\n",
246
- " boton_predecir.click(\n",
247
- " predecir,\n",
248
- " inputs=[equipo_local, equipo_visitante],\n",
249
- " outputs=[resultado_html, estadisticas_html, tabla_historial_html]\n",
250
- " )\n",
251
- "\n",
252
- "app.launch(debug=True)"
253
- ]
254
- },
255
- {
256
- "cell_type": "code",
257
- "execution_count": null,
258
- "id": "1c8e96d1-d525-40ab-82ee-627726798928",
259
- "metadata": {},
260
- "outputs": [],
261
- "source": []
262
- }
263
- ],
264
- "metadata": {
265
- "kernelspec": {
266
- "display_name": "Python 3 (ipykernel)",
267
- "language": "python",
268
- "name": "python3"
269
- },
270
- "language_info": {
271
- "codemirror_mode": {
272
- "name": "ipython",
273
- "version": 3
274
- },
275
- "file_extension": ".py",
276
- "mimetype": "text/x-python",
277
- "name": "python",
278
- "nbconvert_exporter": "python",
279
- "pygments_lexer": "ipython3",
280
- "version": "3.12.3"
281
- }
282
- },
283
- "nbformat": 4,
284
- "nbformat_minor": 5
285
- }