Está en la página 1de 66

Fantasy Pro: análisis Big Data

aplicado a ligas fantasy


Jesús Castañón Rincón

Máster en Big Data Deportivo


Proyecto final de Máster
1
1. Introducción 3
1.1 Introducción 3
1.2 Planteamiento del problema: big data en ligas fantasy 7
1.3 Objetivos 8

2. Desarrollo del proyecto big data 9


2.1 Obtención de datos 11
2.2 Procesamiento de datos 14
2.3 Enriquecimiento de datos 19
2.4 Analítica avanzada. Machine learning 25
2.5 Visualización de los datos 37
2.6 Desarrollo del sitio web 44

3. Conclusiones 48
3.1 Arquitectura del proyecto 48
3.2 Conclusiones 49
3.3 Líneas futuras 50

4. Referencias 52

2
1. Introducción

1.1 Introducción

A. Big data

Cada día se generan en el mundo más de 2,5 exabytes de datosi. Para tener una idea de la
inmensidad de esta cifra, 5 exabytes equivalen a todas las palabras pronunciadas por todos
los seres humanos a lo largo de la Historia. Este crecimiento exponencial es tan grande que
el 90% de los datos guardados en la actualidad han sido generados en los dos últimos años.
Estos datos proceden de diferentes fuentes: vídeos, imágenes, redes sociales,
transacciones de comercio electrónico, búsquedas en internet, comunicaciones 3G, 4G, 5G
y GPS, sensores del internet de las cosas, etc.

El big dataii se refiere comúnmente a una gran cantidad de datos, expresados en términos
de petabytes (1015) o exabyties (1018), que tomaría demasiado tiempo y sería muy costoso
cargar en una base de datos relacional para analizarlos. Por otra parte, big data implica una
tendencia en el avance de la tecnología que permite un nuevo enfoque de entendimiento y
toma de decisiones para obtener, describir y analizar esta enorme información, permitiendo
sacar conclusiones útiles y valiosas.

3
Para definir y explicar big data se suele recurrir a las cinco uvesiii:

- Volumen: la gran cantidad de datos generada hoy en día ha dejado obsoletas ciertas
tecnologías que no son capaces de tratar semejante cantidad de información. Esta
información es generada de manera exponencial, por lo que aparecen nuevos
términos como terabytes, petabytes, zetabytes, etc.

- Velocidad: debido a la demanda de la sociedad, la recogida y procesamiento de datos


se tiene que dar en tiempo real, por lo que se necesita una velocidad de respuesta en
tiempo real para procesarla.

- Variedad: la complejidad de los datos es enorme al existir datos estructurados


conviviendo con datos no estructurados como imágenes, videos, etc. Es necesario
tratar datos de todo tipo para poder analizarlos y describirlos.

- Veracidad de la información: los datos incorporados, ya sean de origen interno o


externo, han de provenir de una fuente fiable, sin que hayan sido manipulados por un
intermediario.

- Valor: el objetivo de los datos debe dar respuesta a diferentes preguntas, según el
objetivo marcado, y sacar conclusiones útiles y valiosas.

4
B. Ligas fantasy

Las ligas fantasy soniv un juego en el cual los participantes forman un equipo de fútbol virtual
basado en jugadores reales, que forman parte de equipos reales y que sobre la base de su
actuación en los partidos de los diferentes campeonatos y ligas (La Liga española, para el
presente trabajo), obtienen una puntuación.

Para formar su equipo, el usuario dispone de un presupuesto ficticio inicial, con el que puede
adquirir jugadores que salgan al mercado pujando por ellos. Un jugador sólo puede
pertenecer a un usuario. El precio de mercado de cada jugador es calculado de forma
automática por cada fantasy, basado en su rendimiento en la vida real.

Los puntos que obtiene cada jugador tras la disputa de un partido dependen de cada liga
fantasy, pero por norma general viene determinado por los siguientes factores:
- Tiempo jugado.
- Si marcó gol.
- Si dio asistencia de gol.
- Si su equipo no recibió gol.
- Si recibe buena crítica en los medios.
- Si fue el mejor del partido.

Además, hay actuaciones que pueden ser sancionadas con pérdida de puntos para los
jugadores:
- Si su equipo recibe goles.
- Si es amonestado con tarjeta.
- Si falla un penalti.
- Si marca un gol en propia puerta.

5
La idea de fútbol fantasy fue concebida en 1990 por el italiano Riccardo Albini e introducida
en Italia en el mismo año.

En España, el fútbol fantasy llegó en 2011 de la mano de Comunio, posteriormente llegaron


otros sistemas como FutMondo, Biwenger, LaLiga Fantasy Marca o Mister Fantasy. Cada
fantasy, aparte de las funcionalidades básicas ofrece algunas especiales, como son el uso
de cláusulas de rescisión para fichar a jugadores de otro usuario, pago de salarios a los
jugadores que forman parte del equipo, cesiones, trueques y un sinfín de opciones, siendo
algunas de pago. Para el presente trabajo se hará uso de los datos procedentes de algunos
fantasy de los citados anteriormente, dejando la inclusión de otros para futuras líneas de
investigación.

Se estima que en España existen más de un millón de usuarios activosv que juegan alguna
liga fantasy, y cada vez existen más páginas dedicadas a recoger opiniones, análisis y
estadísticas relacionadas con este hobby.

6
1.2 Planteamiento del problema: big data en ligas fantasy
Actualmente existen varias páginas webvi,vii que se dedican a recopilar noticias, análisis y
estadísticas específicas para ligas fantasy. Pese a ser de gran valor lo que hacen, ya que
permiten a los usuarios obtener información de forma clara y en una sola plataforma, en
cuanto a los datos se limitan a mostrar las estadísticas básicas.

Este trabajo surge con el objetivo de ir un paso más allá, no limitarse a mostrar estadísticas
básicas, sino también crear métricas propias avanzadas para un mejor entendimiento del
rendimiento de los jugadores en cada fantasy. Además, se pretende aplicar algoritmos de
machine learning que permita dotar de mayor calidad y variedad a la información que se
ofrece a los usuarios.

Para esto, de este trabajo nace una herramienta llamada Fantasy Pro, que permite a los
usuarios de ligas fantasy interactuar con los datos y visualizarlos de una forma dinámica,
divertida y clara. Fantasy Pro persigue llenar un hueco en el nicho del análisis de las ligas
fantasy, ofreciendo algo más profundo y especializado de lo que actualmente se puede
encontrar en internet.

7
1.3 Objetivos

A. Objetivos generales

Los objetivos generales de este trabajo son:


- Realizar el Proyecto Fin de Máster del Máster en Big Data Deportivo.
- Desarrollar un proyecto big data.
- Utilizar el conocimiento, herramientas y lenguajes de programación impartidos en el
presente Máster.

B. Objetivos específicos

Los objetivos específicos de este trabajo son:


- Desarrollar una herramienta capaz de presentar datos referentes a ligas fantasy.
- Buscar y obtener datos y estadísticas de jugadores de fútbol de La Liga española.
- Limpiar los datos obtenidos.
- Crear nuevas métricas y estadísticas.
- Ejecutar algoritmos de machine learning.
- Visualizar los datos mediante un dashboard.
- Realizar una página web.

8
2. Desarrollo del proyecto big data

En este bloque se exponen y describen cada uno de los pasos que componen este proyecto
de big data. Estos apartados son los siguientes:

- Obtención de datos: en este primer paso, se obtienen los datos procedentes de las
distintas fuentes de datos.

- Procesamiento de los datos: a continuación se unen todos los datos obtenidos en una
única tabla, y se limpia la información.

- Enriquecimiento de los datos: en esta fase se añaden nuevas métricas de creación


propia a los datos existentes.

- Analítica avanzada. Machine learning: durante este paso se elaboran y ejecutan


distintos modelos de inteligencia artificial para clasificar, predecir y asociar distintas
métricas de los datos existentes.

- Visualización de los datos: una vez realizados todos los pasos anteriores, se elabora
un dashboard para visualizar y filtrar algunas métricas de relevancia obtenidas en los
pasos anteriores.

- Desarrollo del sitio web: por último, se realiza una página web para dar visibilidad al
dashboard de visualización, y que los usuarios puedan utilizar la herramienta.

Cada uno de los pasos expuestos requieren de ciertos inputs, y generan un output. Excepto
en el primer paso, donde el input son las fuentes de datos proporcionadas por las distintas
páginas web analizadas, en los demás casos el input es un archivo csv generado en el paso
anterior (output).

9
Cada uno de los apartados está estructurado de la misma manera, constando de la siguiente
información:

- Introducción y marco teórico: en primer lugar se expone a nivel teórico el significado


del proceso en cuestión dentro de un proyecto Big Data, y se especifica en qué ámbito
del mismo es aplicado al presente trabajo. Además, en caso de que se utilicen
herramientas o software específico, en esta sección se enuncia su uso.

- Marco práctico: en esta sección se detalla cómo se ha aplicado el proceso al presente


trabajo, detallando librerías específicas utilizadas, así como mostrando imágenes del
procedimiento seguido para poner en práctica el conocimiento teórico en el que se
sustenta.

En conclusión, la sección ‘Introducción y marco teórico’ pretende responder a las preguntas


¿Qué significa esta fase dentro de un proyecto Big Data? y ¿Qué herramientas o recursos
son utilizados?; mientas que la sección ‘Marco práctico’ busca responder la pregunta ¿Cómo
se ha aplicado esta fase en el presente trabajo en concreto?

10
2.1 Obtención de datos

A. Introducción y marco teórico

El primer paso en el proceso de la utilización del big data es la recogida de la información.


Este paso es esencial de todo el proceso, ya que, si no se obtiene una información fiable y
de calidad, todo el proceso posterior estaría sustentado en una base incoherente.

En el presente trabajo, se va a recoger información de las siguientes fuentes de datos:

- FBref: se autodefineviii como un sitio web dedicado al seguimiento de estadísticas de


equipos de fútbol y jugadores de todo el mundo. FBref fue creado por Sports-
Reference, el equipo detrás de sitios web de estadísticas populares como Baseball-
Reference y Basketball-Reference.
De esta web se obtienen estadísticas tanto de equipos, como específicas de
jugadores; desde métricas básicas como partidos y minutos jugados, a estadísticas
más avanzadas, como goles o asistencias esperadas (xG, xA).

- Transfermarkt: este portalix tiene puntuaciones, resultados, noticias de transferencias,


calendarios de liga, y valores de jugadores. A pesar de que los valores de los
jugadores, junto con algunos otros hechos, son estimaciones, investigadores del
Centre for Economic Performance han encontrado que son en gran parte cuidadosas
y acertadas.
En el presente trabajo se recogen las valoraciones de mercado de cada uno de los
jugadores de La Liga española.

- Comunio: el presente trabajo recopila los puntos y el precio fantasy para cada uno de
los jugadores.

- Biwenger: De este fantasy se extraen datos sobre los puntos obtenidos por los
jugadores, así como su precio.

11
Todas las estadísticas obtenidas están detalladas en el Anexo II del presente trabajo.

Para extraer los datos de los sitios web mencionados anteriormente, se utiliza la técnica web
scrapingx: durante el web scraping (del inglés scraping = arañar/raspar) se extraen y
almacenan de forma automática datos de páginas web para analizarlos o utilizarlos en otra
parte.

B. Marco práctico

Para la recogida de datos procedentes de las fuentes citadas anteriormente, son necesarias
las siguientes librerías:

- Requestxi: es una librería python que facilita el trabajo con peticiones HTTP. Permite
hacer peticiones web, ya sea para consumir un API, extraer información de una
página o enviar el contenido de un formulario de manera automatizada.
En este caso, será necesario acceder a las web de referencia mencionadas
anteriormente, desde donde después se extraerá la información.

- BeautifulSoupxii: es una librería de python para extraer contenido de ficheros HTML y


XML. Resulta muy útil para obtener información de forma procesable (en un sistema
de árbol fácil de manejar) de páginas web.
Mediante el código y utilizando BeautifulSoup, se establece a qué elemento HTML es
necesario acceder para obtener la información deseada.

- Pandasxiii: es una librería de python especializada en el manejo y análisis de


estructuras de datos. Las principales características de esta librería son:
o Define nuevas estructuras de datos basadas en los arrays de la librería NumPy
pero con nuevas funcionalidades.
o Permite leer y escribir fácilmente ficheros en formato CSV, Excel y bases de
datos SQL.
o Permite acceder a los datos mediante índices o nombres para filas y columnas.
o Ofrece métodos para reordenar, dividir y combinar conjuntos de datos.
o Realiza todas estas operaciones de manera muy eficiente.

12
En el presente trabajo se recurrirá a pandas en numerosas ocasiones para resolver
situaciones donde es necesario almacenar, ordenar y trabajar con datos; creando
para ello distintos dataframes, que no es más que una estructura de datos con dos
dimensiones (filas y columnas).

Mediante código elaborado en python, se accede a cada una de las páginas web de
referencia utilizando la técnica web scraping, y se obtienen los datos. Después se guarda la
información en un dataframe en local, y posteriormente se exporta en un archivo csv.

El código utilizado en este apartado se encuentra en:


- 1. Scrape FBref/scrape_fbref.ipynb
- 1. Scrape transfermarkt/scrape_transfermarkt.ipynb
- 1. Scrape comuniazo/scrape_comuniazo.ipynb
- 1. Scrape biwenger/scrape_biwenger.ipynb

En conclusión, el flujo de trabajo seguido durante este primer apartado es el siguiente:

Ilustración 1. Obtención de datos

13
2.2 Procesamiento de datos

A. Introducción y marco teórico

El siguiente paso en cualquier aplicación big data consiste en procesar los datos recogidos
anteriormente, llevando a cabo una “limpieza” que deje la información lista para ser tratada
y analizada. Algunas operaciones propias de este apartado son:

- Tratamiento de los valores nulos: existen varias posibilidades, como darles valor cero,
eliminar los registros que contengan un valor nulo, igualarlos a la media, etc.
- Tratamiento de los registros duplicados: lo habitual es eliminar uno de los dos
registros duplicados, pero es necesario un análisis detallado de cada registro
duplicado para entender mejor el conjunto de datos que se tienen y optar por la mejor
solución para cada caso.
- Asignación de tipos correctos a las columnas: en ocasiones es necesario tratar ciertas
columnas para que mantengan un tipo concreto o se ajusten mejor a la realidad que
representan.

En el presente trabajo, este apartado se lleva a cabo de la siguiente manera:

- Preprocesamiento: primero se une la información procedente de las cuatro fuentes de


datos expuestas en el apartado 1. Obtención de datos en un único dataframe, para
poder trabajar con el conjunto de todos los datos y analizarlos de una forma más
simple.
- Comprobación: este dataframe obtenido, compuesto por la información de cada una
de las fuentes de datos expuestas anteriormente, es chequeado para comprobar que
ningún registro ha quedado fuera durante el paso anterior.
- Procesamiento: por último se hace propiamente el procesamiento de datos,
realizando un conjunto de operaciones con el propósito de “limpiar” la información;
por ejemplo, tratando los nulos y duplicados, comprobando los tipos de las columnas,
etc.

14
B. Marco práctico

B.1 Preprocesamiento: unión de dataframes

Para juntar los dataframes obtenidos en el apartado 1. Obtención de datos en un único


dataframe, se hará uso de las siguientes librerías y funciones:

- Fuzzywuzzyxiv: es una librería de python que se utiliza para analizar la coincidencia


de cadenas. La coincidencia aproximada de cadenas es el proceso de encontrar
cadenas que coincidan con un patrón determinado. Básicamente, utiliza la distancia
de Levenshtein para calcular las diferencias entre secuencias.
En este trabajo, se utiliza Fuzzywuzzy para unir dataframes según el nombre del
jugador, ya que puede ser diferente según la fuente de datos de la que provenga. Por
ejemplo:

FBref Transfermarkt Comunio Biwenger


John Joe John Joe Patrick John Patrick John Finn Patrick
Finn
Tabla 1. Algoritmo fuzzywuzzy

- pandas.DataFrame.mergexv: la función merge permite realizar "joins" entre tablas. El


join es realizado sobre las columnas o sobre las filas.
Durante esta fase, se utiliza esta función para unir los cuatro dataframes procedentes
de las distintas fuentes de datos en un único dataframe con toda la información.

El código utilizado en este apartado se encuentra en:


- 2. Juntar dataframes y limpieza de datos/1. Juntar dataframes/1juntardataframes.ipynb

15
B.2 Comprobación

En este paso, se hace una comparación entre el dataframe final obtenido en el paso anterior
y el dataframe obtenido de Comunio, con el fin de comprobar cuantos y qué jugadores se
han quedado fuera durante el preprocesamiento.

Figura 1. Procesamiento de datos, comprobación

Se observa que los jugadores que han quedado fuera son aquellos que tienen ficha en el
equipo filial de su club, o que tienen un precio muy bajo debido a que han tenido una
participación reducida en la temporada actual.

El código utilizado en este apartado se encuentra en:


- 2. Juntar dataframes y limpieza de datos/1. Juntar dataframes/2comprobarjugadoresfuera.ipynb

16
El flujo de trabajo seguido durante este paso de comprobación es el siguiente:

Ilustración 2. Comprobación de dataframes

B.3 Procesamiento: limpieza del dataframe

En este paso, que es propiamente el procesamiento del dataframe final que se ha obtenido
juntando todos los datos recogidos hasta ahora, se realiza una “limpieza” de los datos. Se
llevan a cabo las siguientes operaciones:

- Borrado de columnas irrelevantes.


- Renombrado de columnas para hacerlas más entendibles.
- Procesado de las posiciones de los jugadores:
o En Biwenger: las posiciones vienen representadas con números, se realiza un
renombrado.
1 = Portero, 2 = Defensa, 3 = Centrocampista, 4 = Delantero.
o En FBref: las posiciones vienen dadas en inglés, se traducen al español.
FW = Delantero, GK = Portero, DF = Defensa, MF = Centrocampista,
DF,FW = Defensa/Delantero, DF,MF = Defensa/Centrocampista,
FW,MF = Delantero/Centrocampista, MF,FW = Centrocampista/Delantero,
MF,DF = Centrocampista/Defensa, FW,DF = Delantero/Defensa.

17
- Procesado de la nacionalidad: en FBref la nacionalidad viene representada de la
siguiente forma: es ESP, br BRA, fr FRA, etc.
Se selecciona únicamente la segunda cadena, por ejemplo, ESP, BRA, FRA, etc.
- Procesado de los precios y valor de mercado: se pasan a millones los valores de
mercado de Transfermarkt, y los precios de Comunio y Biwenger. Posteriormente se
redondean y se convierten a tipo float.
- Procesado de los tipos de las columnas para que se adapten al dato que representan.
- Comprobación de duplicados: uno de los dos registros idéntico es eliminado.
- Comprobación de valores nulos: se igualan a cero.

El código utilizado en este apartado se encuentra en:


- 2. Juntar dataframes y limpieza de datos/2. Limpiar datos/3limpiardatos.ipynb

En conclusión, durante este apartado 2. Procesamiento de datos, se realizan las siguientes


operaciones:

Ilustración 3. Procesamiento de datos

18
2.3 Enriquecimiento de datos

A. Introducción y marco teórico

En este apartado se realiza el enriquecimiento de los datos obtenidos hasta ahora, entendido
comoxvi una serie de procesos de combinación de diversos conjuntos de datos de fuentes
internas y externas, con el fin de mejorar el entendimiento de este conjunto de datos.

Concretamente, en este trabajo se lleva a cabo la creación de distintas métricas, que por su
grado de complejidad se diferencian en:

- Métricas básicas: procedentes de cálculos sencillos y de un solo paso, por ejemplo,


teniendo los puntos fantasy de un jugador y los partidos que ha disputado, se calcula
el ratio puntos por partido.

- Métricas avanzadas: se calculan índices de rendimiento para cada jugador, un índice


general, y otro específico por posición. Ambos índices son resultado de una serie de
operaciones algo más complejas que en las métricas básicas.

19
B. Marco práctico

B.1 Métricas básicas

En primer lugar, se crean las siguientes métricas básicas, resultado de operaciones básicas
entre datos ya obtenidos anteriormente:

- Precio por punto: el sentido de esta métrica es conocer cuánto cuesta cada punto
fantasy que consigue un determinado jugador.

𝑝𝑟𝑒𝑐𝑖𝑜 𝑐𝑜𝑚𝑢𝑛𝑖𝑜
𝑝𝑟𝑒𝑐𝑖𝑜 / 𝑝𝑢𝑛𝑡𝑜 (𝑐𝑜𝑚𝑢𝑛𝑖𝑜) =
𝑝𝑢𝑛𝑡𝑜𝑠 𝑐𝑜𝑚𝑢𝑛𝑖𝑜

𝑝𝑟𝑒𝑐𝑖𝑜 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟
𝑝𝑟𝑒𝑐𝑖𝑜 / 𝑝𝑢𝑛𝑡𝑜 (𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟) =
𝑝𝑢𝑛𝑡𝑜𝑠 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟

- Puntos por partido: esta medida permite conocer el rendimiento regular durante la
temporada de un jugador determinado.

𝑝𝑢𝑛𝑡𝑜𝑠 𝑐𝑜𝑚𝑢𝑛𝑖𝑜
𝑝𝑢𝑛𝑡𝑜𝑠 / 𝑝𝑎𝑟𝑡𝑖𝑑𝑜 (𝑐𝑜𝑚𝑢𝑛𝑖𝑜) =
𝑝𝑎𝑟𝑡𝑖𝑑𝑜𝑠 𝑗𝑢𝑔𝑎𝑑𝑜𝑠

𝑝𝑢𝑛𝑡𝑜𝑠 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟
𝑝𝑢𝑛𝑡𝑜𝑠 / 𝑝𝑎𝑟𝑡𝑖𝑑𝑜 (𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟) =
𝑝𝑎𝑟𝑡𝑖𝑑𝑜𝑠 𝑗𝑢𝑔𝑎𝑑𝑜𝑠

- Relación entre el valor real, procedente de Transfermarkt, y el precio fantasy: esta


métrica muestra si un jugador está caro (>1) o barato (<1) en la liga fantasy respecto
a la realidad.

𝑝𝑟𝑒𝑐𝑖𝑜 𝑐𝑜𝑚𝑢𝑛𝑖𝑜
𝑝𝑟𝑒𝑐𝑖𝑜 𝑓𝑎𝑛𝑡𝑎𝑠𝑦 / 𝑟𝑒𝑎𝑙𝑖𝑑𝑎𝑑 (𝑐𝑜𝑚𝑢𝑛𝑖𝑜) =
𝑣𝑎𝑙𝑜𝑟 𝑡𝑟𝑎𝑛𝑠𝑓𝑒𝑟𝑚𝑎𝑟𝑘𝑡

𝑝𝑟𝑒𝑐𝑖𝑜 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟
𝑝𝑟𝑒𝑐𝑖𝑜 𝑓𝑎𝑛𝑡𝑎𝑠𝑦 / 𝑟𝑒𝑎𝑙𝑖𝑑𝑎𝑑 (𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟) =
𝑣𝑎𝑙𝑜𝑟 𝑡𝑟𝑎𝑛𝑠𝑓𝑒𝑟𝑚𝑎𝑟𝑘𝑡

20
B.2 Métricas avanzadas

Para el cálculo de estas métricas avanzadas es necesaria la utilización de la siguiente


librería:
- sklearn.preprocessing.MinMaxScalerxvii: este escalador transforma las características
escalándolas a un rango dado, por defecto (0,1), aunque puede ser personalizado.
Este tipo de escalado suele denominarse frecuentemente "normalización" de los
datos.
Concretamente, se normalizan todos los valores numéricos en un rango de 0 a 1, para
a partir de los datos normalizados crear las métricas avanzadas.

Tras normalizar los datos numéricos, se calculan los siguientes índices de rendimiento para
cada jugador, estando comprendidos entre 0 y 10:

- Índice general: se ponderan distintas medidas obtenidas anteriormente para analizar


el impacto y coste de un determinado jugador en la liga fantasy.

𝑝𝑢𝑛𝑡𝑜𝑠 𝑐𝑜𝑚𝑢𝑛𝑖𝑜 𝑝𝑢𝑛𝑡𝑜𝑠 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟 𝑝𝑟𝑒𝑐𝑖𝑜 𝑐𝑜𝑚𝑢𝑛𝑖𝑜


í𝑛𝑑𝑖𝑐𝑒 𝑔𝑒𝑛𝑒𝑟𝑎𝑙 = 1 ∗ 𝑚𝑖𝑛𝑢𝑡𝑜𝑠 𝑗𝑢𝑔𝑎𝑑𝑜𝑠 + 2 ∗ +2∗ − 1.25 ∗
𝑝𝑎𝑟𝑡𝑖𝑑𝑜𝑠 𝑗𝑢𝑔𝑎𝑑𝑜𝑠 𝑝𝑎𝑟𝑡𝑖𝑑𝑜𝑠 𝑗𝑢𝑔𝑎𝑑𝑜𝑠 𝑝𝑢𝑛𝑡𝑜𝑠 𝑐𝑜𝑚𝑢𝑛𝑖𝑜
𝑝𝑟𝑒𝑐𝑖𝑜 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟 𝑣𝑎𝑙𝑜𝑟 𝑐𝑜𝑚𝑢𝑛𝑖𝑜 𝑣𝑎𝑙𝑜𝑟 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟
− 1.25 ∗ − 1.25 ∗ − 1.25 ∗
𝑝𝑢𝑛𝑡𝑜𝑠 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟 𝑣𝑎𝑙𝑜𝑟 𝑡𝑟𝑎𝑛𝑠𝑓𝑒𝑟𝑚𝑎𝑟𝑘𝑡 𝑣𝑎𝑙𝑜𝑟 𝑡𝑟𝑎𝑛𝑠𝑓𝑒𝑟𝑚𝑎𝑟𝑘𝑡

Los 15 jugadores con mejor índice general son los siguientes:

Figura 2. Índice general

21
- Índice específico: para cada jugador se calcula un índice específico basado en
medidas concretas a la posición en la que juega.

í𝑛𝑑𝑖𝑐𝑒 𝑒𝑠𝑝𝑒𝑐í𝑓𝑖𝑐𝑜 𝑑𝑒𝑙𝑎𝑛𝑡𝑒𝑟𝑜


= 𝑔𝑜𝑙𝑒𝑠 𝑦 𝑎𝑠𝑖𝑠𝑡𝑒𝑛𝑐𝑖𝑎𝑠 𝑝𝑜𝑟 90′ + 𝑥𝐺 𝑝𝑜𝑟 90′ + 𝑥𝐴 𝑝𝑜𝑟 90′ + 𝑔𝑜𝑙𝑒𝑠 𝑝𝑜𝑟 𝑡𝑖𝑟𝑜
+ % 𝑟𝑒𝑔𝑎𝑡𝑒𝑠 𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑑𝑜𝑠 + % 𝑡𝑖𝑟𝑜𝑠 𝑎 𝑝𝑜𝑟𝑡𝑒𝑟í𝑎 + 𝑝𝑒𝑛𝑎𝑙𝑡𝑖𝑒𝑠 𝑔𝑒𝑛𝑒𝑟𝑎𝑑𝑜𝑠

Los 10 delanteros con mejor índice específico son los siguientes:

Figura 3. Índice específico, delanteros

í𝑛𝑑𝑖𝑐𝑒 𝑒𝑠𝑝𝑒𝑐í𝑓𝑖𝑐𝑜 𝑐𝑒𝑛𝑡𝑟𝑜𝑐𝑎𝑚𝑝𝑖𝑠𝑡𝑎


= 𝑔𝑜𝑙𝑒𝑠 𝑦 𝑎𝑠𝑖𝑠𝑡𝑒𝑛𝑐𝑖𝑎𝑠 𝑝𝑜𝑟 90′ + 𝑥𝐺 𝑝𝑜𝑟 90′ + 𝑥𝐴 𝑝𝑜𝑟 90′ + % 𝑝𝑎𝑠𝑒𝑠 𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑑𝑜𝑠
+ 𝑝𝑎𝑠𝑒𝑠 𝑎𝑙 𝑡𝑒𝑟𝑐𝑖𝑜 𝑓𝑖𝑛𝑎𝑙 + 𝑝𝑎𝑠𝑒𝑠 𝑎𝑙 á𝑟𝑒𝑎 𝑓𝑖𝑛𝑎𝑙 + 𝑝𝑎𝑠𝑒𝑠 𝑑𝑒 𝑝𝑟𝑜𝑔𝑟𝑒𝑠𝑖ó𝑛

Los 10 centrocampistas con mejor índice específico son los siguientes:

22
Figura 4. Índice específico, centrocampistas

í𝑛𝑑𝑖𝑐𝑒 𝑒𝑠𝑝𝑒𝑐í𝑓𝑖𝑐𝑜 𝑑𝑒𝑓𝑒𝑛𝑠𝑎


= 𝑡𝑎𝑐𝑘𝑙𝑒𝑠 𝑔𝑎𝑛𝑎𝑑𝑜𝑠 + % 𝑝𝑟𝑒𝑠𝑖𝑜𝑛𝑒𝑠 𝑔𝑎𝑛𝑎𝑑𝑎𝑠 + 𝑏𝑙𝑜𝑞𝑢𝑒𝑜𝑠 + % 𝑝𝑎𝑠𝑒𝑠 𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑑𝑜𝑠
+ 𝑖𝑛𝑡𝑒𝑟𝑐𝑒𝑝𝑡𝑎𝑐𝑖𝑜𝑛𝑒𝑠 + 𝑑𝑒𝑠𝑝𝑒𝑗𝑒𝑠 + 𝑟𝑒𝑐𝑢𝑝𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑑𝑒 𝑏𝑎𝑙ó𝑛

Los 10 defensas con mejor índice específico son los siguientes:

Figura 5. Índice específico, defensas

23
Para que se realce el cálculo de los índices expuestos anteriormente, tanto el general como
los específicos, es necesario que el jugador haya disputado un mínimo del 10% de partidos
respecto al jugador que más partidos ha jugado. De esta forma, se evita que jugadores con
baja participación, puedan crear confusión alterando el sentido y entendimiento de los datos.

El código utilizado en este apartado se encuentra en:


- 3. Métricas propias/metricaspropias.ipynb

El flujo de trabajo seguido durante este paso de enriquecimiento de datos es el siguiente:

Ilustración 4. Enriquecimiento de datos


.

24
2.4 Analítica avanzada. Machine learning

A. Introducción y marco teórico

En este apartado se aplican algoritmos de machine learning: el machine learning o


aprendizaje autónomo es una rama de la inteligencia artificial que tiene como objetivo crear
sistemas capaces de aprender por ellos mismos a partir de un conjunto de datos (data set),
sin ser programados de forma explícita, con el objetivo de hacer prediccionesxviii.

Según el tipo de implementación, dentro del machine learning se pueden encontrar dos
grandes grupos:

- Machine learning supervisado: los algoritmos trabajan con datos “etiquetados”


(labeled data), intentado encontrar una función que, dadas las variables de entrada
(input data), les asigne la etiqueta de salida adecuada. El algoritmo se entrena con un
“histórico” de datos y así “aprende” a asignar la etiqueta de salida adecuada a un
nuevo valor, es decir, predice el valor de salidaxix.

A su vez, existen dos grupos dentro de machine learning supervisadoxx:

o Clasificación: clasifican un objeto dentro de diversas clases. Por ejemplo, para


determinar si un paciente está enfermo o si un correo electrónico es spam.
o Regresión: predicen un valor numérico. Sería el caso de los precios de una
casa al escoger diferentes opciones o la demanda de ocupación de un hotel.

25
- Machine learning no supervisado: tiene lugar cuando no se dispone de datos
“etiquetados” para el entrenamiento. Sólo se conocen los datos de entrada, pero no
existen datos de salida que correspondan a un determinado input. Por tanto, sólo se
puede describir la estructura de los datos, para intentar encontrar algún tipo de
organización que simplifique el análisis. Por ello, tienen un carácter exploratorio.

A su vez, existen dos grupos dentro de machine learning no supervisado:

o Clustering: clasifica en grupos los datos. Es el caso de las segmentaciones de


clientes según qué hayan comprado.
o Reducción de dimensionalidad: se crea un conjunto nuevo de dimensiones que
representa nuestros mismos datos con menor dimensionalidad. Esto permite
utilizar técnicas de machine learning en una dimensionalidad menor.

Figura 6. Clasificación machine learning

26
B. Marco práctico

B.1 No supervisado

Primero se ejecutan dos algoritmos de machine learning no supervisado: reducción


dimensional (PCA) y clustering.

1) Reducción dimensional (PCA): El objetivo de este algoritmo es conocer el jugador


más similar para un determinado jugador, en base a todos los registros numéricos
que se han recopilado durante los apartados anteriores.

Es necesario utilizar la librería sklearn.decomposition.PCAxxi: método de reducción de


dimensionalidad que permite simplificar la complejidad de espacios con múltiples
dimensiones a la vez que conserva su información.

En primer lugar se realiza una reducción dimensional, donde el dataset original de


153 registros es reducido a un nuevo dataset de 62 registros, capaces de explicar la
varianza a un 98%.

Figura 7. Reducción dimensional (PCA)

27
Después se obtiene una matriz de correlación entre todos los jugadores, a partir de la
cual es posible conocer el jugador más similar (con mayor valor de correlación) para
cada uno de los jugadores.

Figura 8. Matriz de correlación

Figura 9. Jugadores similares

28
2) Clustering: se ejecuta un proceso de clustering para agrupar a los jugadores según
las siguientes métricas:
valor biwenger, valor comunio, puntos biwenger, puntos comunio, puntos biwenger
/partido, puntos comunio/partido, índice general e índice específico.

Es necesario utilizar la librería sklearn.cluster.KMeansxxii: el algoritmo trabaja


iterativamente para asignar a cada “punto” (las filas de nuestro conjunto de entrada
forman una coordenada) uno de los “K” grupos basado en sus características. Son
agrupados en base a la similitud de sus features (las columnas).

Primero se realiza una reducción dimensional, obteniendo un dataset con 6 variables


que explica la varianza a un 99%.

Figura 10. Clustering, reducción dimensional

29
Después, tras visualizar los resultados de inercia y sillhoute score, se decide
establecer en 4 el número de clústeres a visualizar.

o La inercia esxxiii la suma de las distancias al cuadrado de cada objeto del


Cluster a un punto ‘μ’ conocido como Centroide (punto medio de todos los
objetos del Cluster).

Figura 11. Clustering, inercia

o El valor de la silueta esxxiv una medida de la similitud de un objeto a su propio


cúmulo (cohesión) en comparación con otros cúmulos (separación)

Figura 12. Clustering, sillhoute score

30
Finalmente se obtienen los 4 clústeres, y se le asigna a cada uno una etiqueta (C, B
y A).

Figura 13. Clustering, distribución

Esta etiqueta es introducida en el dataframe a cada jugador en una nueva columna:

Figura 14. Clusering, clústeres asignados

El código utilizado en este apartado se encuentra en:


- 4. Machine learning/1.pcaycluster.ipynb

31
B.2 Supervisado

Después se ejecutan otros dos algoritmos de machine learning supervisado: regresión lineal
y K-nearest neighbours (knn).

1) Regresión lineal: el objetivo de este algoritmo es predecir cuántos puntos ha


conseguido un jugador en una liga fantasy (variable objetivo), en función de su precio
(variable de entrada).

Es necesario usar, entre otras, la librería sklearn.linear_model.LinearRegressionxxv:


La gran mayoría de los algoritmos de Machine Learning que entran en la clasificación
de aprendizaje supervisado forman parte de scikit-learn, desde los modelos lineales
generalizados, como lo es regresión lineal, como las máquina de vectores de soporte
(SVM), árboles de decisión y hasta los métodos bayesianos.
La regresión lineal o linear regression es un método para predecir la variable
dependiente (y) en función de los valores de las variables independientes (X).

En primer lugar se realiza una división de los datos que se disponen, para obtener un
dataset de entrenamiento (75%), y otro dataset para testear el modelo obtenidos
(25%).

Figura 15. Regresión lineal, dataset

32
Tras entrenar el modelo con los datos de entrenamiento, se obtienen las siguientes
fórmulas:
𝑝𝑢𝑛𝑡𝑜𝑠 𝑐𝑜𝑚𝑢𝑛𝑖𝑜 = 13,67 ∗ 𝑝𝑟𝑒𝑐𝑖𝑜 𝑐𝑜𝑚𝑢𝑛𝑖𝑜 + 60,74

𝑝𝑢𝑛𝑡𝑜𝑠 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟 = 10,16 ∗ 𝑝𝑟𝑒𝑐𝑖𝑜 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟 + 48,32

Con esta fórmula generada, se evalúan los datos de test. Obteniendo los siguientes
resultados para fantasy Comunio.

Figura 16. Regresión lineal, gráfico test

Figura 17. Regresión lineal, distribución test

33
Obteniéndose los siguientes resultados de error:

𝑒𝑟𝑟𝑜𝑟 𝑎𝑏𝑠𝑜𝑙𝑢𝑡𝑜 𝑐𝑜𝑚𝑢𝑛𝑖𝑜 = 26,5

𝑒𝑟𝑟𝑜𝑟 𝑎𝑏𝑠𝑜𝑙𝑢𝑡𝑜 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟 = 25,1

Por último, se añade en el dataframe a cada jugador el resultado de aplicar el modelo


obtenido, para calcular sus puntos esperados en Comunio (xP comunio) y en
Biwenger (xP biwenger).

Figura 18. Regresión lineal, puntos esperados

El código utilizado en este apartado se encuentra en:


- 4. Machine learning/2.regresion.ipynb

34
2) K-nearest neighbours (knn): el objetivo de este algoritmo es predecir cuántos
puntos ha conseguido un jugador en una liga fantasy, en función de los puntos
conseguidos por los 5 jugadores más similares.

Es necesario usar, entre otras, la librería sklearn.neighbors.KNeighborsRegressorxxvi:


sirve esencialmente para clasificar valores buscando los puntos de datos “más
similares” (por cercanía) aprendidos en la etapa de entrenamiento y haciendo
conjeturas de nuevos puntos basado en esa clasificación.

En primer lugar se realiza una división de los datos que se disponen, para obtener un
dataset de entrenamiento (66,6%), y otro dataset para testear los resultados
obtenidos (33,3%).

Las métricas a utilizar para obtener los vecinos más cercanos son (variables de
entrada):
valor biwenger, valor comunio, puntos biwenger (para variable objetivo comunio),
puntos comunio (para variable objetivo puntos biwenger), puntos biwenger /partido,
puntos comunio/partido.

Tras entrenar el modelo con los datos de entrenamiento, se realizan las predicciones
con el modelo entrenado sobre los datos de test, obteniendo los siguientes resultados
de error (raíz cuadrada del error cuadrático medio):

𝑟𝑚𝑠𝑒 𝑐𝑜𝑚𝑢𝑛𝑖𝑜 = 21,78

𝑟𝑚𝑠𝑒 𝑏𝑖𝑤𝑒𝑛𝑔𝑒𝑟 = 27,32

35
Por último, se añade en el dataframe para cada jugador el cálculo aplicando este
modelo, obteniendo sus puntos esperados en relación a sus vecinos en Comunio
(comunio vecinos) y en Biwenger (biwenger vecinos).

Figura 19. Knn, puntos esperados

El código utilizado en este apartado se encuentra en:


- 4. Machine learning/3.knn.ipynb

En conclusión, el flujo de trabajo aplicado durante este apartado 4. Analítica avanzada.


Machine Learning es el siguiente:

Ilustración 5. Machine Learning

36
2.5 Visualización de los datos

A. Introducción y marco teórico

Por último, en este paso se presentan los datos obtenidos,xxvii permitiendo a los tomadores
de decisiones ver la analítica presentada de forma visual, de modo que puedan captar
conceptos difíciles o identificar nuevos patrones. Con la visualización interactiva, es posible
profundizar en diagramas y gráficas para observar mayor detalle, cambiando de forma
interactiva qué datos se ven y cómo se procesan.

Para este trabajo, se utiliza el software Power BIxxviii: es la principal herramienta de


visualización dentro de Microsoft. Permite realizar cuadros de mandos interactivos de forma
muy ágil.
La forma que tiene el usuario final de interactuar con los datos es a través de los cuadros de
mando o dashboards, que es un elemento de explotación con un alto nivel de interacción
entre sus componentes. En un cuadro de mando se pueden representar muchas métricas,
analizándolas en función de diferentes dimensiones.

Mediante los distintos cuadros de mando o dashboards elaborados, el usuario puede


conocer métricas y datos obtenidos durante los pasos anteriores, e interactuar con ellos
mediante diferentes filtros para conseguir información detallada acorde a sus necesidades.

37
B. Marco práctico

B.1 Preparación de los datos

Previamente a realizar el visionado de los datos, es necesario hacer un preprocesamiento


del dataframe obtenido en el paso anterior.

Existe la posibilidad de que un jugador haya jugado en la misma temporada en dos equipos
de La Liga, ya sea porque se ha producido un traspaso, o por una cesión. En este caso en
el dataframe existen dos registros para el mismo jugador, por lo que en este paso se elimina
el más antiguo, permaneciendo sólo el registro correspondiente al equipo actual.

Por ejemplo, Geoffrey Kondogbia empezó la temporada en el Valencia, donde jugó 5


partidos. Posteriormente, el 3 de noviembre de 2020, el Atlético de Madrid se hizo con sus
servicios tras pagar un traspaso de 17,5 millones de euros. En este caso, se eliminaría del
dataframe el registro de Kondogbia en el Valencia, ya que no aporta información útil al
usuario final y puede crear confusión.

El código utilizado en este apartado se encuentra en:


- 5. Visualización/visualizacion.ipynb

El flujo de trabajo realizado en este paso es el siguiente:

Ilustración 6. Visualización de los datos

38
B.2 Dashboard de visualización

El dashboard creado para la visualización de los datos consta de 4 páginas, desde ahora
llamadas módulos, y se puede acceder a través de este enlace. A continuación se describen
las funcionalidades de cada módulo:

1. Módulo top (portada): en esta página estática se muestran los jugadores con
mejores estadísticas:

o Puntos: obtenidos en el apartado 1. Obtención de datos del presente bloque.


o Ratios precio/puntos: obtenidos en el apartado 3. Enriquecimiento de datos del
presente bloque.
o Índices: obtenidos en el apartado 3. Enriquecimiento de datos del presente
bloque.
o Relación calidad precio: obtenidos en el apartado 4. Analítica avanzada.
Machine Learning del presente bloque.

Figura 20. Módulo top

39
2. Módulo jugador: en esta página el usuario puede elegir un jugador, del que se
muestra la siguiente información:

o Información básica: obtenida de FBref en el apartado 1. Obtención de datos


del presente bloque.
o Información estadística: obtenida de FBref en el apartado 1. Obtención de
datos del presente bloque.
o Valor de mercado: obtenidos en Transfermarkt en el apartado 1. Obtención de
datos del presente bloque.
o Puntos: obtenidos en el apartado 1. Obtención de datos del presente bloque.
o Ratios precio/puntos y puntos/partido: obtenidos en el apartado 3.
Enriquecimiento de datos del presente bloque.
o Índices: obtenidos en el apartado 3. Enriquecimiento de datos del presente
bloque.
o Relación calidad precio: obtenidos en el apartado 4. Analítica avanzada.
Machine Learning del presente bloque.
o Puntos esperados: obtenidos en el apartado 4. Analítica avanzada. Machine
Learning del presente bloque.
o Jugador similar: obtenido en el apartado 4. Analítica avanzada. Machine
Learning del presente bloque.
o Puntos esperados según vecinos: obtenidos en el apartado 4. Analítica
avanzada. Machine Learning del presente bloque.

40
Figura 21. Módulo jugador

41
3. Módulo comparador: el usuario debe elegir un mínimo de tres jugadores para
comparar las siguientes métricas entre ellos:

o Puntos: obtenidos en el apartado 1. Obtención de datos del presente bloque.


o Puntos esperados: obtenidos en el apartado 4. Analítica avanzada. Machine
Learning del presente bloque.
o Índices: obtenidos en el apartado 3. Enriquecimiento de datos del presente
bloque.

Figura 22. Módulo comparador

42
4. Módulo similares: en esta página el usuario puede visualizar jugadores similares
a un jugador determinado, o que jueguen en una posición o equipo en concreto.
Las uniones se realizan en base a los puntos obtenidos en Comunio o en
Biwenger, datos obtenidos en el apartado 1. Obtención de datos del presente
bloque.

Figura 23. Módulo similares

5. Por último, para navegar entre los distintos módulos descritos se presenta el
siguiente menú en el lateral, coloreándose el icono correspondiente a la página en
la que está el usuario en cada momento.

Figura 24. Menú


En el Anexo III se presenta una guía detallada para cada uno de los módulos.

43
2.6 Desarrollo del sitio web

A. Introducción y marco teórico

Por último, se crea una página web para dar visibilidad a la herramienta generada, y que los
usuarios puedan interactuar con el dashboard y los módulos elaborados.

Para la creación del sitio web, se utiliza WordPressxxix: es un sistema de gestión de


contenidos web (CMS o content management system), utilizado para publicar contenido en
la web de forma sencilla. Es líder a nivel mundial para la creación de webs desde hace
muchos años.

44
B. Marco práctico

La página web desarrollada se encuentra alojada en https://fantasypro.es y está compuesta


por los dos componentes siguientes:

- Home: esta es la página principal. Aquí se hace una breve introducción presentando
las funcionalidades que se ofrecen, los datos de los que se dispone y los módulos
que componen el dashboard de visualización.

Figura 25. Web, introducción

45
Figura 26. Web, módulos

- Blog: bajo el nombre de ‘Análisis Fantasy’ se crea una página donde periódicamente
se publican artículos relacionados con el análisis de datos en distintos fantasy,
estudiando y analizando métricas obtenidas durante el presente trabajo.

46
Figura 27. Web, blog

Figura 28. Blog, artículo

47
3. Conclusiones
3.1 Arquitectura del proyecto
Tras llevar a cabo todos los pasos explicados en el bloque anterior, se puede definir la
arquitectura del proyecto, desde la obtención de los datos hasta el desarrollo del sitio web,
de la siguiente manera:

Ilustración 7. Arquitectura del proyecto

Se recuerda que el output de cada proceso, es el input del proceso posterior.

48
3.2 Conclusiones
La realización del presente trabajo me ha servido para poner en práctica todos los
conocimientos adquiridos en este Máster en Big Data Deportivo, así como para aplicar tantas
herramientas y lenguajes de programación como han sido posibles.

Fantasy Pro espera ocupar un espacio en un nicho en el que actualmente no existe ninguna
opción similar, ofreciendo a los usuarios la posibilidad de analizar y visualizar datos
específicos fantasy para confeccionar una mejor plantilla. Además, espero seguir
desarrollando nuevas funcionalidades asociadas al big data y machine learning, para a
través de las sugerencias que puedan tener los usuarios, hacer de esta herramienta una
referencia en el mundo fantasy y que esté en continua evolución.

Por último, la realización de este trabajo me ha servido para llegar a las siguientes
conclusiones:

- Leer el error: durante la programación en python de las diferentes etapas fue


constante la aparición de errores. Muchas veces, con leer qué estaba fallando y hacer
un pequeño ajuste se solucionó. Otras, fue necesaria acudir a foros especializados.
- Obtener datos: es necesario dedicar gran parte del proyecto al primer paso, para
después poder trabajar con distintas fuentes de datos y dotar de mayor riqueza y
capacidades al proyecto.
- Mantener los datos limpios y ordenados: para evitar confusiones y agilizar todo el
proceso es necesario mantener cierta estructura a la hora de nombrar variables,
definir funciones, renombrar columnas, etc.
- Visualización clara: es importante que el usuario pueda acceder a los datos que se
muestran de un solo vistazo, de manera clara y concisa; y que mediante filtros pueda
ajustar la búsqueda a sus necesidades.
- ¿Qué se busca?: es necesario saber lo que se espera encontrar en los datos que se
tienen, pues elaborar algoritmos de machine learning sin tener una idea de lo que se
quiere obtener puede llevar a malas interpretaciones o a conclusiones irrelevantes.

49
3.3 Líneas futuras
El resultado de este trabajo se encuentra en un estado completo, totalmente operativo en
todas las funcionalidades expuestas durante los distintos apartados. No obstante, el ámbito
en el que se encuadra el contenido de este trabajo permite que la herramienta desarrollada
pueda seguir evolucionando y esté en constante crecimiento, añadiendo nuevas opciones y
funcionalidades.

Algunas propuestas, clasificadas según el apartado al que corresponderían, para continuar


futuras líneas de investigación son:

A. Obtención de datos

- Añadir más fuentes de datos genéricas: sería interesante añadir datos procedentes
de SofaScore xxx: es una página de resultados en vivo y una aplicación que cubre un
total de 23 deportes, entre ellos todas las principales ligas y torneos de fútbol.
Además, SofaScore ofrece una variedad de estadísticas para cada liga, cada partido
y cada jugador, incluidas las notas por rendimiento de los jugadores. En total,
SofaScore otorga calificaciones a los jugadores de más de 35 competiciones.

- Añadir más fuentes de datos de ligas fantasy: para poder llegar al máximo número de
usuarios, sería interesante añadir datos de otros fantasy, como pueden ser LaLiga
Fantasy Marca, FutMondo o Mister Fantasy.

- Añadir más fuentes de datos de valoración de jugadores: para tener un mejor


entendimiento de los datos, sería interesante incorporar la valoración de los jugadores
realizada por el Centro Internacional de Estudios del Deporte (CIES)xxxi: Desde 2013,
el Observatorio de Fútbol CIES ha desarrollado un poderoso enfoque econométrico
para evaluar el valor de transferencia de los futbolistas profesionales sobre una base
científica.

50
B. Procesamiento de los datos

- Automatización del proceso: para evitar tener que realizar cada uno de los pasos de
forma manual ejecutando cada uno de los scripts python, sería interesante
automatizar todo el proceso desde la obtención de datos hasta la obtención del
dataframe final para su visualización.

C. Enriquecimiento de datos

- Elaborar un índice específico para la posición de portero: debido a que las estadísticas
relativas a los porteros procedentes de FBref se encuentran en un formato y directorio
distinto, no se ha realizado en el presente trabajo un índice específico para esta
posición.

- Obtener el análisis del sentimiento en Twitte para cada jugador: durante la realización
de este trabajo se han llevado a cabo diferentes pruebas para obtener tuits de todos
los jugadores de La Liga española, para posteriormente evaluarlos y obtener el
análisis del sentimiento en Twitter. No obstante, no se ha conseguido el resultado
deseado, por lo que queda pendiente para futuras incorporaciones a la herramienta
Fantasy Pro.

D. Visualización de los datos

- Insertar fotografías de los jugadores en el módulo jugador del dashboard de


visualización.

E. Desarrollo del sitio web

- Con el fin de llegar a más usuarios y visitantes, mejorar el posicionamiento del sitio
web, buscar colaboradores, patrocinadores, mejorar la presencia en redes sociales,
etc.

51
4. Referencias

i
https://www.elmundo.es/elmundo/2011/02/08/navegante/1297179889.html
ii
Manual Módulo 2 MBDD
iii
Manual Módulo 1 MBDD
iv
https://es.wikipedia.org/wiki/F%C3%BAtbol_fantasy
v
https://as.com/futbol/2018/09/28/mas_futbol/1538098376_153042.html
vi
https://futbolfantasy.es/
vii
https://www.comuniazo.com/
viii
https://fbref.com/es/about/
ix
https://es.wikipedia.org/wiki/Transfermarkt
x
https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/que-es-el-web-scraping/
xi
https://j2logo.com/python/python-requests-peticiones-http/
xii
https://clouding.io/hc/es/articles/360010618600-Introducci%C3%B3n-a-BeautifulSoup-4-en-Python-2
xiii
https://aprendeconalf.es/docencia/python/manual/pandas/
xiv
https://www.geeksforgeeks.org/fuzzywuzzy-python-library/
xv
https://interactivechaos.com/es/manual/tutorial-de-pandas/dataframes-la-funcion-merge
xvi
https://anyconnector.com/es/enterprise-application/what-is-data-enrichment.html
xvii
https://interactivechaos.com/es/manual/tutorial-de-machine-learning/minmaxscaler
xviii
https://jarroba.com/machine-learning-python-ejemplos/
xix
https://empresas.blogthinkbig.com/que-algoritmo-elegir-en-ml-aprendizaje/
xx
https://blog.bismart.com/es/diferencias-machine-learning-supervisado-no-supervisado
xxi
https://www.cienciadedatos.net/documentos/py19-pca-python.html
xxii
https://www.aprendemachinelearning.com/k-means-en-python-paso-a-paso/
xxiii
https://github.com/RicardoMoya/KMeans_Python
xxiv
https://es.wikipedia.org/wiki/Silhouette_(clustering)
xxv
https://aprendeia.com/libreria-scikit-learn-de-python/
xxvi
https://www.aprendemachinelearning.com/clasificar-con-k-nearest-neighbor-ejemplo-en-python/
xxvii
https://www.sas.com/es_pe/insights/big-data/data-visualization.html
xxviii
Manual Módulo 8 MBDD
xxix
https://institutocajasol.com/que-es-wordpress-y-como-funciona/
xxx
https://magazine.comunio.es/sofascore-puntos-preguntas-mas-frecuentes/
xxxi
https://football-observatory.com/-values-134692

52
ANEXO I
Figuras, ilustraciones y tablas

FIGURA 1. PROCESAMIENTO DE DATOS, COMPROBACIÓN


FIGURA 2. ÍNDICE GENERAL
FIGURA 3. ÍNDICE ESPECÍFICO, DELANTEROS
FIGURA 4. ÍNDICE ESPECÍFICO, CENTROCAMPISTAS
FIGURA 5. ÍNDICE ESPECÍFICO, DEFENSAS
FIGURA 6. CLASIFICACIÓN MACHINE LEARNING
FIGURA 7. REDUCCIÓN DIMENSIONAL (PCA)
FIGURA 8. MATRIZ DE CORRELACIÓN
FIGURA 9. JUGADORES SIMILARES
FIGURA 10. CLUSTERING, REDUCCIÓN DIMENSIONAL
FIGURA 11. CLUSTERING, INERCIA
FIGURA 12. CLUSTERING, SILLHOUTE SCORE
FIGURA 13. CLUSTERING, DISTRIBUCIÓN
FIGURA 14. CLUSERING, CLÚSTERES ASIGNADOS
FIGURA 15. REGRESIÓN LINEAL, DATASET
FIGURA 16. REGRESIÓN LINEAL, GRÁFICO TEST
FIGURA 17. REGRESIÓN LINEAL, DISTRIBUCIÓN TEST
FIGURA 18. REGRESIÓN LINEAL, PUNTOS ESPERADOS
FIGURA 19. KNN, PUNTOS ESPERADOS
FIGURA 20. MÓDULO TOP
FIGURA 21. MÓDULO JUGADOR
FIGURA 22. MÓDULO COMPARADOR
FIGURA 23. MÓDULO SIMILARES
FIGURA 24. MENÚ
FIGURA 25. WEB, INTRODUCCIÓN
FIGURA 26. WEB, MÓDULOS
FIGURA 27. WEB, BLOG
FIGURA 28. BLOG, ARTÍCULO
ILUSTRACIÓN 1. OBTENCIÓN DE DATOS
ILUSTRACIÓN 2. COMPROBACIÓN DE DATAFRAMES
ILUSTRACIÓN 3. PROCESAMIENTO DE DATOS
ILUSTRACIÓN 4. ENRIQUECIMIENTO DE DATOS
ILUSTRACIÓN 5. MACHINE LEARNING
ILUSTRACIÓN 6. VISUALIZACIÓN DE LOS DATOS
ILUSTRACIÓN 7. ARQUITECTURA DEL PROYECTO

TABLA 1. ALGORITMO FUZZYWUZZY


ANEXO II
Estadísticas utilizadas

Comunio
Jugador Puntos Precio

Biwenger
Jugador Equipo Puntos Precio
Partidos jugados Puntos en casa Puntos visitante Puntos temporada
anterior

Transfermarkt
Jugador Valor de mercado

FBref
Jugador Nacionalidad Edad Equipo Posición
Presiones Partidos Titularidades Minutos jugados Goles + asistencias
ganadas por 90’

Goles Asistencias xG+xA por 90’ Interceptaciones Porcentaje de


entradas ganadas
Goles + xG por 90’ xA por 90’ Goles por tiro Porcentaje de
asistencias regates completado
por 90’
Porcentaje Penalties Porcentaje de Pases al último tercio Pases al área rival
de tiros generados pases
entre palos compleatos
Pases Bloqueos Entradas Despejes Recuperaciones de
progresivos ganadas balón
ANEXO III
Dashboard de visualización

El dashboard creado para la visualización de los datos consta de 4 páginas, desde


ahora llamadas módulos. A continuación se describen las funcionalidades de cada
módulo:

1. Módulo top (portada): en esta página estática se muestran los jugadores con
mejores estadísticas:

o Puntos: obtenidos en el apartado 1. Obtención de datos del bloque 2.


o Ratios precio/puntos: obtenidos en el apartado 3. Enriquecimiento de
datos del bloque 2.
o Índices: obtenidos en el apartado 3. Enriquecimiento de datos del bloque
2.
o Relación calidad precio: obtenidos en el apartado 4. Analítica avanzada.
Machine Learning del bloque 2.
o En la cabecera se muestran los datos totales del número de jugadores
presentes en el dataframe, jornadas y partidos disputados, así como la
media de puntos comunio y biwenger obtenidos por los jugadores
analizados.

o A continuación se muestran los jugadores con más puntos y con mejor


ratio precio/punto (con un mínimo de 100 puntos).
o Por último, se muestran los jugadores con mejor índice general e índice
específico por posición.
También se muestra el clúster A que representa a los jugadores con
mejor ratio calidad/precio.
2. Módulo jugador: en esta página el usuario puede elegir un jugador, del que
se muestra la siguiente información:

o Información básica: obtenida de FBref en el apartado 1. Obtención de


datos del bloque 2.
o Información estadística: obtenida de FBref en el apartado 1. Obtención
de datos del bloque 2.
o Valor de mercado: obtenidos en Transfermarkt en el apartado 1.
Obtención de datos del bloque 2.
o Puntos: obtenidos en el apartado 1. Obtención de datos del bloque 2.
o Ratios precio/puntos y puntos/partido: obtenidos en el apartado 3.
Enriquecimiento de datos del bloque 2.
o Índices: obtenidos en el apartado 3. Enriquecimiento de datos del bloque
2.
o Relación calidad precio: obtenidos en el apartado 4. Analítica avanzada.
Machine Learning del bloque 2.
o Puntos esperados: obtenidos en el apartado 4. Analítica avanzada.
Machine Learning del bloque 2.
o Jugador similar: obtenido en el apartado 4. Analítica avanzada. Machine
Learning del bloque 2.
o Puntos esperados según vecinos: obtenidos en el apartado 4. Analítica
avanzada. Machine Learning del bloque 2.
o En la cabecera el usuario puede elegir un jugador a analizar, y se
muestran datos básicos del mismo.

o A continuación se muestra distintas métricas fantasy, tanto obtenidas


directamente, como calculadas.
o También se muestran otras métricas referidas al rendimiento del jugador,
y se muestra el jugador más similar.

o Por último, se muestra métricas referentes a distintos aspectos del juego.


3. Módulo comparador: el usuario debe elegir un mínimo de tres jugadores para
comparar las siguientes métricas entre ellos:

o Puntos: obtenidos en el apartado 1. Obtención de datos del bloque 2.


o Puntos esperados: obtenidos en el apartado 4. Analítica avanzada.
Machine Learning del bloque 2.
o Índices: obtenidos en el apartado 3. Enriquecimiento de datos del bloque
2.

o En la cabecera el usuario puede elegir jugadores para comparar


utilizando los filtros de equipo y posición. Además se muestra qué
jugador de los seleccionados presenta el índice general e índice
específico superior.
o A continuación se muestra la comparativa de los jugadores seleccionados
previamente, en función a los puntos que han obtenido, y a los valores de
puntos esperados tanto para comunio como para biwenger.

o Por último, se muestra la comparación de los jugadores seleccionados en


relación a su índice general y específico por posición.
4. Módulo similares: en esta página el usuario puede visualizar jugadores
similares a un jugador determinado, o que jueguen en una posición o equipo
en concreto.
Las uniones se realizan en base a los puntos obtenidos en comunio o en
biwenger, datos obtenidos en el apartado 1. Obtención de datos del bloque 2.

o En la cabecera el usuario puede usar los filtros para seleccionar uno o


varios equipos y posiciones, y establecer un rango de precios en comunio
o biwenger.
o A continuación se muestran los jugadores que corresponden a los filtros
aplicados, agrupados según los puntos obtenidos en comunio y biwenger.

5. Por último, para navegar entre los distintos módulos descritos se presenta el
siguiente menú en el lateral, coloreándose el icono correspondiente a la
página en la que está el usuario en cada momento.

También podría gustarte