Este repositorio contiene una colección de herramientas, proyectos y recursos que permiten un análisis y visualización efectivos de los datos de fútbol.
Este repositorio contiene una colección de herramientas, proyectos y recursos que tienen como objetivo apoyar la generación de información significativa de los datos de fútbol. Python se utiliza para la extracción, procesamiento, análisis y visualización de datos de eventos, datos agregados del equipo, datos de valor de mercado y más.
El repositorio se divide en proyectos y subproyectos de Mutliple, cada uno de los cuales tiene como objetivo realizar un análisis detallado, generar una visión específica o introducir cierto nivel de automatización para el análisis de datos de fútbol. Utilizando el contenido de este repositorio, se han creado y compartido una serie de imágenes y hilos de texto novedosos e informativos con la comunidad de análisis de datos de fútbol a través de Twitter (@_jkds_).
Para apoyar a otros que deseen desarrollar sus habilidades de análisis de datos dentro del contexto de los datos de fútbol, he producido una guía de inicio.
El árbol de abajo (haga clic en el menú desplegable para expandir) presenta la estructura de la carpeta de este repositorio Git. Tenga en cuenta que algunos archivos individuales se omiten del diagrama por simplicidad.
football-data-analytics
│
├── analysis_tools
│ ├── __init__.py
│ ├── get_football_data.py [not included in git repo]
│ ├── logos_and_badges.py
│ ├── models.py
│ ├── pitch_zones.py
│ ├── statsbomb_custom_events.py
│ ├── statsbomb_data_engineering.py
│ ├── whoscored_custom_events.py
│ ├── whoscored_data_engineering.py
│ ├── wyscout_data_engineering.py
│
├── data_directory
│ ├── leaguetable_data
│ ├── misc_data
│ │ ├── articles
│ │ ├── images
│ ├── statsbomb_data [contents not included in git repo]
│ ├── transfermarkt_data
│ ├── whoscored_data [contents not included in git repo]
│ ├── wyscout_data
│
├── model_directory
│ ├── pass_cluster_model
│ │ ├── PassClusterModel65.joblib
│ ├── xg_model
│ │ ├── log_regression_xg_model.joblib
│
├── projects
│ ├── 00_data_import_and_misc_work
│ │ ├── download_yt_video.py
│ │ ├── import_data_fbref.py
│ │ ├── import_data_leaguetable.py
│ │ ├── import_data_whoscored.py
│ │ ├── scrape_data_transfermarkt.py
│ │ ├── misc_work
│ ├── 01_wc2018_box2box_mids
│ │ ├── worldcup_b2b_mids.py
│ ├── 02_player_team_valuation
│ │ ├── team_player_value_analysis.py
│ ├── 03_model_development_and_implementation
│ │ ├── pass_cluster_data_collection.py
│ │ ├── shot_xg_plot.py
│ │ ├── xg_log_regression_model.py
│ │ ├── xg_neural_network.py
│ ├── 04_match_reports
│ │ ├── off_def_shape_report_ws.py
│ │ ├── pass_report_ws.py
│ │ ├── shot_report_understat.py
│ ├── 05_competition_reports_top_players
│ │ ├── player_defensive_contribution.py
│ │ ├── player_effective_carriers.py
│ │ ├── player_effective_passers.py
│ │ ├── player_high_defensive_actions.py
│ │ ├── player_impact_on_team.py
│ │ ├── player_penalty_takers.py
│ │ ├── player_threat_creators.py
│ │ ├── player_threat_creators_zonal_comparison.py
│ ├── 06_competition_reports_top_teams
│ │ ├── team_ball_winning.py
│ │ ├── team_common_zonal_actions.py
│ │ ├── team_cross_success.py
│ │ ├── team_delta_threat_creation.py
│ │ ├── team_fullback_combinations.py
│ │ ├── team_setpiece_shot_concession.py
│ │ ├── team_threat_creation.py
│ │ ├── xg_league_table_sb.py
│ ├── 07_player_reports
│ │ ├── advanced_swarm_radar.py
│ │ ├── player_report_fullback.py
│ ├── 08_evolution_of_shooting
│ │ ├── shot_characteristics_trending.py
│ ├── 09_league_position_metric_correlation
│ │ ├── team_metric_pts_correlation.py
│ ├── 10_team_buildup_passes
│ │ ├── team_pass_tendencies.py
│ ├── 11_justice_league
│ │ ├── justice_league.py
│ ├── 99_private_work
│
├── .gitignore
│
├── Getting Started with Football Analytics.md
│
├── LICENSE
│
├── README.md
Como se muestra en la estructura de la carpeta anterior, el repositorio contiene tres carpetas clave:
En general, cada proyecto sigue una serie de pasos lógicos:
Los proyectos están numerados en función del identificador numérico del área de la carpeta del proyecto en la que se han llevado a cabo y almacenados. Los decimales se usan cuando se ha realizado más de un subproyecto/trabajo en el área de la misma carpeta. Por ejemplo, el subproyecto 2.1 y 2.2 son dos piezas de trabajo separadas que existen dentro del Proyecto 2, que se almacena dentro del área de la carpeta 02_Player_Team_Valuation_Transfermarkt. Seleccione un título de proyecto para expandir el desplegable y obtener más información.
Fuente de datos: Informes de partidos de STATSBOMB y FIFA
Área de proyecto: 01_wc2018_box2box_mids
Código: WorldCup_B2B_Mids.py
Resumen y salida: una investigación de la caja más efectiva para los centrocampistas en la Copa Mundial 2018. Varias métricas personalizadas se utilizan para anotar centrocampistas centrales en la bola ganadora, retención y creatividad de la pelota, y movilidad. Un buen centrocampista de caja para box se define como un centrocampista central que sobresale en cada una de estas áreas.
Fuente de datos: TransferMarkt
Área de proyecto: 00_data_import_and_misc_work & 02_player_team_valuation
Código: scrape_data_transfermarkt.py & team_player_value_analysis.py
Resumen y salida: Desarrollo de una herramienta para raspar la información de valor de mercado del equipo y el jugador de Transfermarkt.co.uk. Generación de una "visual de exploración" que destaca a los jugadores de una liga dada con una combinación favorable de contribución de edad y objetivos por valor de mercado de £ m. El trabajo también explora el uso de modelos estadísticos para predecir el valor de mercado en función del rendimiento del jugador.
Fuente de datos: TransferMarkt
Área de proyecto: 00_data_import_and_misc_work & 02_player_team_valuation
Código: scrape_data_transfermarkt.py & team_player_value_analysis.py
Resumen y salida: Desarrollo de una herramienta para raspar la información de valor de mercado del equipo y el jugador de Transfermarkt.co.uk. Investigación del equipo bajo/sobreinforme basado en la clasificación de la liga y el valor de valor total del escuadrón.
Fuente de datos: Wyscout
Área de proyecto: model_directory & 03_model_develovelment_and_implementation
Código: xg_log_regression_model.py, xg_neural_network.py & shot_xg_plot.py
Resumen y salida: implementación y prueba de modelos probabilísticos básicos de objetivos esperados. Este trabajo incluye el desarrollo y la comparación de un modelo de objetivos esperados de regresión logística y un modelo de objetivos esperados de la red neuronal, cada uno capacitó más de 40000 tiros tomados en las leguas 'Big Five' de Europa durante la temporada 2017/2018. Los modelos se utilizan para calcular los objetivos esperados para jugadores, clubes y ligas específicos durante un período de tiempo definido.
Fuente de datos: OPTA
Área de proyecto: model_directory, 03_model_develovelment_and_implementation y repositorio externo: ml_models_collection
Código: pass_cluster_data_collection.py, modelos.py, repositorio externo: ml_model.ipynb
Resumen y salida: utilizando más de 5,000,000 de pases con las ligas "Big 5" de Europa (OPTA Data, 2019/20 - 2022/23), he construido un modelo de agrupación que puede asignar pases exitosos a uno de los 65 grupos. Este trabajo implica la construcción de una tubería de aprendizaje automático y las pruebas de una variedad de algoritmos de clasificación. El modelo elegido utiliza AK significa algoritmo de agrupación para asignar pases, que luego he empaquetado dentro de una función de agrupación para admitir muchos de mis proyectos de análisis de fútbol.
Fuente de datos: statsbomb
Área del proyecto: análisis_tools
Código: modelos.py
Resumen y salida: implementación de un método de Monte-Carlo para modelar la probabilidad de los resultados de la coincidencia individual basado en eventos de disparo y sus objetivos esperados asociados (XG). Un gran número (más de 10000) de simulaciones se ejecutan en un partido determinado para aproximar la probabilidad de ganar para cada equipo, y extraer probabilidad. Los puntos esperados en un partido dado simplemente se calculan simplemente como 3 × win_probability + 1 × draw_proability. El método adoptado depende de la suposición de que XG representa la probabilidad de puntuación, y que los eventos de disparos individuales son independientes.
Fuente de datos: ESTUCTA
Área del proyecto: 04_Match_reports
Código: shot_report_understat.py
Resumen y salida: Desarrollo de un script para extraer datos de disparos de la subestimación y generar informes de disparos para cualquier coincidencia seleccionada.
Fuente de datos: OPTA/Whoscored
Área del proyecto: 04_Match_reports
Código: pass_report_ws.py
Resumen y salida: diseño y desarrollo de un algoritmo que identifica y cuenta pases similares basados en el área del tono en el que comienzan y terminan. Generación de informes de flujo de pase entre zonas para cualquier coincidencia seleccionada.
Fuente de datos: OPTA/Whoscored
Área del proyecto: 04_Match_reports
Código: pass_report_ws.py
Resumen y salida: diseño y desarrollo de un algoritmo para calcular los territorios de los jugadores en función de las posiciones de todas las acciones en juego a lo largo de un partido, incluida la eliminación de valores atípicos. Informes de generación de formas para cualquier coincidencia seleccionada, incluido el cálculo del área del territorio como proxy para el área de tono cubierta.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 05_Competition_Reports_Top_Players
Código: Player_defensive_contribution.py
Resumen y producción: Evaluación de la contribución defensiva de todos los jugadores durante la duración de una competencia, con la identificación de los principales jugadores por métricas como recuperaciones y victorias de pelota por cada 100 toques de oposición. El trabajo incluye la implicación de un diagrama de dispersión de diamantes que se puede reutilizar para cualquier diagrama de dispersión 2D.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 05_Competition_Reports_Top_Players
Código: Player_defensive_contribution.py
Resumen y producción: Evaluación del número de acciones defensivas completadas en el tercer oposición por todos los jugadores durante la duración de una competencia, dando una indicación de quién tiende a defenderse desde el frente.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 05_Competition_Reports_Top_Players
Código: Player_Effective_Passers.py
Resumen y salida: identificación de transeúntes efectivos a través de la evaluación de todos los pases en juego completados durante la duración de una competencia. Las métricas como los pases progresivos, la amenaza esperada acumulativa y los pasos en el cuadro de oposición por 90 se utilizan para identificar a los mejores jugadores. Este trabajo implica la implementación de un modelo de amenaza esperado desarrollado por Karun Singh.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 05_Competition_Reports_Top_Players
Código: Player_Effective_Carriers.py
Resumen y salida: identificación de portadores efectivos a través de la evaluación de los acarreos completados durante la duración de una competencia. Este trabajo implica el desarrollo de un módulo para inferir eventos de transporte de los datos de eventos OPTA (ya que no se registran los acarreos).
Fuente de datos: OPTA/Whoscored
Área de proyecto: 05_Competition_Reports_Top_Players
Código: Player_Effective_Carriers.py
Resumen y salida: identificación de los creadores de amenazas principales a través de la evaluación de varios eventos/acciones completadas durante la duración de una competencia dentro de diferentes áreas del campo. Este trabajo implica la implementación de un modelo de amenaza esperado desarrollado por Karun Singh.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 05_Competition_Reports_Top_Players
Código: Player_threat_Creators.py
Resumen y salida: identificación de los principales tomadores de penalización en múltiples competiciones. Se evalúa la calidad de la penalización mi distancia media de la penalización en el objetivo del arquero del portero, con sanciones fuera del objetivo asignadas una distancia de cero. Este trabajo incluye la implementación de "proyecciones 3D" dentro de las subtramas 2D.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 05_Competition_Reports_Top_Players
Código: Player_impact_on_team.py
Resumen y producción: la determinación de cómo las métricas aggregradas de un equipo (amenaza esperada del equipo, amenaza esperada admitida, diferencia de amenaza esperada del equipo, etc.) varían cuando un jugador específico está en el campo frente a cuando no están jugando
Fuente de datos: OPTA/Whoscored
Área de proyecto: 06_Competition_Reports_Top_Teams
Código: Team_threat_Creation.py
Resumen y producción: clasificación de equipos por amenaza total creada a través de pases en juego y transportes por 90, incluida la identificación de las zonas en las que cada equipo genera amenaza.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 06_Competition_Reports_Top_Teams
Código: Team_ball_winning.py
Resumen y salida: clasificación de equipos por la altura media en el campo que recuperan el balón, incluida la identificación de las zonas en las que obtienen posesión de la pelota de la oposición.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 06_Competition_Reports_Top_Teams
Código: Team_Cross_Success.py
Resumen y salida: clasificación de equipos por tasa de éxito cruzado en juego. Este trabajo incluye una definición personalizada de una cruz efectiva (o exitosa), donde una cruz efectiva es seguida por un disparo o un pase clave dentro de los 5 segundos del juego (independientemente del resultado de la cruz inital).
Fuente de datos: OPTA/Whoscored
Área de proyecto: 06_Competition_Reports_Top_Teams
Código: Team_fullBack_Combinations.py
Resumen y salida: clasificación de equipos por la frecuencia en que se combinan sus espaldas completas. Los pases entre las espaldas de cada equipo se identifican y se destacan en función de si el pase lleva a un disparo en la portería.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 06_Competition_Reports_Top_Teams
Código: Team_delta_threat_Creation.py
Resumen y producción: clasificación de equipos por mejora en la amenaza total creada a través de pases en juego y acarreos por 90, temporada actual frente a la temporada pasada. Incluye contabilidad de equipos que estaban en la división arriba o debajo del año anterior. El cambio en la creación de amenazas también se descompone en la zona de lanzamiento
Fuente de datos: OPTA/Whoscored
Área de proyecto: 06_Competition_Reports_Top_Teams
Código: Team_setpiece_Shot_Concession.py
Resumen y producción: Investigación de la capacidad del equipo para defender las piezas establecidas a través de las oportunidades de agregación admitidas dentro de los 5 segundos de una oposición "indirecta". Las piezas "indirectas" se refieren a la esquina y los tiros libres donde la pelota permanece en juego después de que se toma la pieza, por lo tanto, se excluyen el análisis fuera del objetivo y los objetivos directos de las piezas del análisis.
Fuente de datos: statsbomb
Área de proyecto: 06_Competition_Reports_Top_Teams
Código: xg_league_table_sb.py
Resumen y salida: Generación de varias clasificaciones de tabla de ligas basadas en el rendimiento XG, XG de equipo, XG/XT Ration y varias otras métricas.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 07_Player_reports
Código: Player_report_fullBack.py
Resumen y salida: el reproductor de jugadores es específico de los respaldos, incluido el desarrollo de un mecanismo flexible/robusto para comparar el informe sujeto a jugadores similares, y luego clasificar el conjunto de jugadores contra todos los respaldos dentro de una liga elegida.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 07_Player_reports
Código: Advanced_swarm_radar.py
Resumen y salida: desarrollo de un medio novedoso e innovador para visualizar el rendimiento del jugador. El radar del "enjambre" puede perfilar rápidamente, evaluar y comparar jugadores, pero también ofrece un contexto más profundo a través de la desplazamiento de las distribuciones de puntajes métricos entre un grupo de jugadores de comparación.
Fuente de datos: OPTA/Whoscored
Área del proyecto: 08_evolution_of_shooting
Código: shot_characteristics_trending.py
Resumen y producción: un trabajo contratado por la Asociación de Análisis de Fútbol Profesional (APFA), explorando cómo el arte del disparo está cambiando en el fútbol y proporcionando una idea de la evolución del disparo en la Premier League.
APFA - La evolución del disparo en el artículo web de la Premier League
APFA - La evolución del tiro en la Premier League.pdf
Fuente de datos: OPTA/Whoscored
Área de proyecto: 09_league_position_metric_correlation
Código: Team_Metrics_Pts_Correlation.py
Resumen y salida: trabajo exploratorio para identificar las características de los equipos exitosos en ligas específicas. La investigación de cuán fuertemente una gama de métricas del equipo se correlaciona con los puntos acumulados en una temporada, utilizando datos de más de 5 temporadas. La salida de este proyecto se incluyó en un video TIFO: por qué Everton es mejor de lo que piensas.
Fuente de datos: OPTA/Whoscored
Área de proyecto: 10_team_buildup_passes
Código: Team_Pass_tendencies.py
Resumen y salida: explotación de trabajos anteriores sobre la agrupación de pases para identificar tendencias de aprobación de equipos en la acumulación. Esto inolsa a los grupos de pases comunes para los primeros 6 pases que un equipo hace en varias áreas del campo.
Fuente de datos: statsbomb
Área del proyecto: 11_justice_league
Código: justice_league.py
Resumen y salida: explotación de trabajos anteriores en modelos de puntos para simular una temporada completa de partidos y volver a producir la clasificación de la tabla de la liga basada en los resultados probables del partido (o puntos esperados).