Ce référentiel contient une collection d'outils, de projets et de ressources qui permettent une analyse et une visualisation efficaces des données de football.
Ce référentiel contient une collection d'outils, de projets et de ressources qui visent à soutenir la génération d'un aperçu significatif des données de football. Python est utilisé pour l'extraction, le traitement, l'analyse et la visualisation des données d'événements, les données de l'équipe agrégées, les données de valeur marchande et plus encore.
Le référentiel est décomposé en projets et sous-projets Mutliple, chacun vise à effectuer une analyse détaillée, à générer des informations spécifiques ou à introduire un certain niveau d'automatisation à l'analyse des données de football. En utilisant le contenu de ce référentiel, un certain nombre de visuels et de threads de texte nouveaux et informatifs ont été créés et partagés avec la communauté d'analyse de données de football via Twitter (@_jkds_).
Pour soutenir d'autres personnes qui souhaitent développer leurs compétences d'analyse de données dans le contexte des données de football, j'ai produit un guide de démarrage.
L'arbre ci-dessous (cliquez sur Down-down pour se développer) présente la structure du dossier de ce référentiel GIT. Notez que certains fichiers individuels sont omis du diagramme pour la simplicité.
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
Comme indiqué dans la structure du dossier ci-dessus, le référentiel contient trois dossiers de clés:
En général, chaque projet suit un certain nombre d'étapes logiques:
Les projets sont numérotés en fonction de l'identifiant numérique de la zone de dossier du projet dans lequel ils ont été entrepris et stockés. Des décimales sont utilisées lorsque plusieurs sous-projets / travaux ont été entrepris dans la même zone de dossier. Par exemple, le sous-projet 2.1 et 2.2 sont deux travaux séparés qui existent dans le projet 2, qui est stocké dans la zone du dossier 02_player_team_valuation_transfermarkt. Sélectionnez un titre de projet pour étendre le déroulement et en savoir plus.
Source de données: STATSBOMB & FIFA Match Rapports
Zone du projet: 01_WC2018_BOX2BOX_MIDS
Code: worldcup_b2b_mids.py
Résumé et sortie: une enquête sur les milieux de terrain les plus efficaces de la boîte à la boîte lors de la Coupe du monde 2018. Un certain nombre de mesures personnalisées sont utilisées pour marquer des milieux de terrain centraux dans la victoire au ballon, la rétention de balle et la créativité et la mobilité. Un bon milieu de terrain en boîte est défini comme un milieu de terrain central qui excelle dans chacune de ces zones.
Source de données: TransferMarkt
Zone du projet: 00_data_import_and_misc_work & 02_player_team_valuation
CODE: scrape_data_transfermarkt.py & team_player_value_analysy.py
Résumé et sortie: Développement d'un outil pour gratter l'équipe et les informations sur la valeur marchande des joueurs de TransferMarkt.co.uk. Génération d'un "visuel de dépistage" qui met en évidence les joueurs d'une ligue donnée avec une combinaison favorable d'âge et de contribution d'objectifs par valeur marchande £ m. Le travail explore également l'utilisation de modèles statistiques pour prédire la valeur marchande en fonction des performances des joueurs.
Source de données: TransferMarkt
Zone du projet: 00_data_import_and_misc_work & 02_player_team_valuation
CODE: scrape_data_transfermarkt.py & team_player_value_analysy.py
Résumé et sortie: Développement d'un outil pour gratter l'équipe et les informations sur la valeur marchande des joueurs de TransferMarkt.co.uk. Enquête sur l'équipe sous / sur-performance basée sur le classement de la ligue et le classement total de la valeur de l'escouade.
Source de données: Wyscout
Zone du projet: Model_Directory & 03_Model_Development_and_Implementation
Code: xg_log_regression_model.py, xg_neural_network.py & shot_xg_plot.py
Résumé et sortie: mise en œuvre et test des modèles probabilistes d'objectifs attendus de base. Ce travail comprend le développement et la comparaison d'un modèle d'objectifs attendu de régression logistique et d'un modèle d'objectifs attendu de réseau neuronal, chacun s'est entraîné plus de 40000 tirs effectués dans les ligues `` Big Five '' de l'Europe au cours de la saison 2017/2018. Les modèles sont utilisés pour calculer les objectifs attendus pour des joueurs, des clubs et des ligues spécifiques au cours d'une période définie.
Source de données: OPTA
Zone du projet: Model_Directory, 03_Model_development_and_implementation & Repo externe: ML_MODELS_COLLECTION
Code: pass_cluster_data_collection.py, modèles.py, repo externe: ml_model.ipynb
Résumé et sortie: en utilisant plus de 5 000 000 passes avec les ligues "Big 5" d'Europe (Opta Data, 2019/20 - 2022/23), j'ai construit un modèle de clustering capable d'attribuer des passes réussies à l'un des 65 grappes. Ce travail implique la construction d'un pipeline d'apprentissage automatique et les tests d'une variété d'algorithmes de classification. Le modèle choisi utilise AK signifie un algorithme de clustering pour attribuer des passes, que j'ai ensuite emballées dans une fonction de clustering pour soutenir bon nombre de mes projets d'analyse de football.
Source de données: Statsbomb
Zone de projet: analyse_tools
Code: Models.py
Résumé et sortie: mise en œuvre d'une méthode de Monte-Carlo pour modéliser la probabilité de résultats de correspondance individuels basés sur les événements de prise de vue et leurs objectifs attendus associés (XG). Un grand nombre (10000+) de simulations est exécuté sur un match donné pour approximer la probabilité de victoire pour chaque équipe et dessiner la probabilité. Les points attendus dans une correspondance donnée sont ensuite simplement calculés comme 3 × win_probability + 1 × dessin_proabilité. La méthode adoptée dépend de l'hypothèse que XG représente la probabilité de notation et que les événements de prise de vue individuels sont indépendants.
Source de données: le non-mal
Zone du projet: 04_Match_Reports
Code: Shot_Report_Understat.py
Résumé et sortie: Développement d'un script pour extraire les données de prise de vue de Thenwat et générer des rapports de tir pour une correspondance sélectionnée.
Source de données: Opta / WhoScored
Zone du projet: 04_Match_Reports
Code: pass_report_ws.py
Résumé et sortie: Conception et développement d'un algorithme qui identifie et compte des passes similaires en fonction de la zone de la hauteur dans laquelle ils commencent et terminent. Génération de rapports de flux de passes inter-zones pour toute correspondance sélectionnée.
Source de données: Opta / WhoScored
Zone du projet: 04_Match_Reports
Code: pass_report_ws.py
Résumé et sortie: Conception et développement d'un algorithme pour calculer les territoires des joueurs en fonction des positions de toutes les actions en jeu tout au long d'un match, y compris la suppression des valeurs aberrantes. Génération de rapports de forme pour toute correspondance sélectionnée, y compris le calcul de la zone du territoire comme indicateur indirect de la zone de hauteur couverte.
Source de données: Opta / WhoScored
Zone du projet: 05_COMPETITION_REPORTS_TOP_PLAYERS
Code: Player_Defensive_Contribution.py
Résumé et sortie: Évaluation de la contribution défensive de tous les joueurs pendant la durée d'une compétition, avec l'identification des meilleurs joueurs par des mesures telles que les récupérations et les victoires en balle pour 100 touches d'opposition. Les travaux comprennent l'impression d'un diagramme de dispersion de diamant qui peut être réutilisé pour n'importe quel tracé de dispersion 2D.
Source de données: Opta / WhoScored
Zone du projet: 05_COMPETITION_REPORTS_TOP_PLAYERS
Code: Player_Defensive_Contribution.py
Résumé et production: Évaluation du nombre d'actions défensives réalisée dans l'opposition troisième par tous les joueurs de la durée d'une compétition, donnant une indication à qui a tendance à se défendre du front.
Source de données: Opta / WhoScored
Zone du projet: 05_COMPETITION_REPORTS_TOP_PLAYERS
Code: Player_Effective_Passers.py
Résumé et sortie: Identification des passants efficaces grâce à l'évaluation de toutes les passes en jeu terminées au cours de la durée d'une compétition. Des mesures telles que les laissez-passer progressives, la menace cumulative attendue et les passes dans la boîte d'opposition par 90 sont utilisées pour identifier les meilleurs joueurs. Ce travail implique la mise en œuvre d'un modèle de menace attendu développé par Karun Singh.
Source de données: Opta / WhoScored
Zone du projet: 05_COMPETITION_REPORTS_TOP_PLAYERS
Code: Player_Effective_Carriers.py
Résumé et sortie: L'identification des transporteurs efficaces grâce à l'évaluation des portées terminées au cours de la durée d'une compétition. Ce travail implique le développement d'un module pour déduire les événements de transport à partir des données d'événements OPTA (comme les portées ne sont pas enregistrées).
Source de données: Opta / WhoScored
Zone du projet: 05_COMPETITION_REPORTS_TOP_PLAYERS
Code: Player_Effective_Carriers.py
Résumé et sortie: Identification des principaux créateurs de menaces grâce à l'évaluation de divers événements / actions achevés au cours de la durée d'une compétition dans différentes zones de la hauteur. Ce travail implique la mise en œuvre d'un modèle de menace attendu développé par Karun Singh.
Source de données: Opta / WhoScored
Zone du projet: 05_COMPETITION_REPORTS_TOP_PLAYERS
Code: Player_Threat_creators.py
Résumé et sortie: Identification des preneurs de pénalités supérieures dans plusieurs compétitions. La qualité des pénalités est évaluée ma distance moyenne de pénalité sur cible du ventre de gardien de but, avec des pénalités hors cible attribuées à une distance de zéro. Ce travail comprend la mise en œuvre de "projections 3D" dans les sous-intrigues 2D.
Source de données: Opta / WhoScored
Zone du projet: 05_COMPETITION_REPORTS_TOP_PLAYERS
Code: Player_impact_on_team.py
Résumé et sortie: détermination de la façon dont les mesures agricorées d'une équipe (l'équipe attendue attendue, l'équipe attendue concédée, l'équipe attendue de la différence de menace, etc.) varient lorsqu'un joueur spécifique est sur le terrain par rapport à
Source de données: Opta / WhoScored
Zone du projet: 06_COMPETITION_REPORTS_TOP_TEAMS
Code: team_thereat_cretion.py
Résumé et sortie: classement des équipes par menace totale créée par des passes et des portes en jeu par 90, y compris l'identification des zones dans lesquelles chaque équipe génère une menace.
Source de données: Opta / WhoScored
Zone du projet: 06_COMPETITION_REPORTS_TOP_TEAMS
Code: team_ball_winning.py
Résumé et sortie: Classement des équipes par la hauteur moyenne dans le terrain qu'ils remportent le ballon, y compris l'identification des zones dans lesquelles ils prennent possession du ballon de l'opposition.
Source de données: Opta / WhoScored
Zone du projet: 06_COMPETITION_REPORTS_TOP_TEAMS
Code: team_cross_success.py
Résumé et sortie: classement des équipes par taux de réussite croisé en jeu. Ce travail comprend une définition personnalisée d'une croix efficace (ou réussie), où un croisement efficace est suivi par un coup de feu ou des clés dans les 5 secondes suivant le jeu (quel que soit le résultat croisé inital).
Source de données: Opta / WhoScored
Zone du projet: 06_COMPETITION_REPORTS_TOP_TEAMS
Code: team_fullback_combinations.py
Résumé et sortie: classement des équipes par la fréquence à laquelle leurs dos complet se combinent. Les passes entre l'arrière de chaque équipe sont identifiées et mises en évidence en fonction de la question de savoir si la passe mène à un tir sur le but.
Source de données: Opta / WhoScored
Zone du projet: 06_COMPETITION_REPORTS_TOP_TEAMS
Code: team_delta_thereat_cretion.py
Résumé et sortie: classement des équipes par amélioration de la menace totale créée à travers des passes en jeu et des portées par 90 - saison en cours contre la saison dernière. Comprend la comptabilité des équipes qui se trouvaient dans la division supérieure ou en dessous de l'année précédente. Le changement dans la création de menaces est également décomposé par la zone de pitch
Source de données: Opta / WhoScored
Zone du projet: 06_COMPETITION_REPORTS_TOP_TEAMS
Code: team_setpiece_shot_concession.py
Résumé et sortie: Enquête sur la capacité de l'équipe à défendre les décors grâce à des chances agrégées concédées dans les 5 secondes suivant un coup de set "indirect" de l'opposition. Les décors "indirects" se réfèrent aux coups de coin et aux coups francs où la balle reste en jeu après la prise de la pièce, donc des coups francs hors cible et des buts directs des sets sont exclus de l'analyse.
Source de données: Statsbomb
Zone du projet: 06_COMPETITION_REPORTS_TOP_TEAMS
Code: xg_league_table_sb.py
Résumé et sortie: Génération de divers classements de table de ligue basés sur les performances XG de l'équipe, XG, la ration XG / XT et diverses autres mesures.
Source de données: Opta / WhoScored
Zone du projet: 07_Player_Reports
Code: Player_Report_Fullback.py
Résumé et sortie: Rapport des joueurs spécifique aux arrières latéraux, y compris le développement d'un mécanisme flexible / robuste pour comparer le rapport soumis à des joueurs similaires, puis classer l'ensemble des joueurs contre toutes les arrières latéral au sein d'une ligue choisie.
Source de données: Opta / WhoScored
Zone du projet: 07_Player_Reports
Code: Advanced_swarm_radar.py
Résumé et sortie: Développement d'un moyen nouveau et innovant de visualiser les performances des joueurs. Le radar "Swarm" peut rapidement profiler, évaluer et comparer les joueurs, mais donne également un contexte plus profond en déplorant les distributions des scores métriques entre un pool de joueurs de comparaison.
Source de données: Opta / WhoScored
Zone du projet: 08_evolution_of_shooting
Code: shot_characteristics_trending.py
Résumé et sortie: un travail contracté par l'Association of Professional Football Analysis (APFA), explorant comment l'art du tournage change dans le football et donne un aperçu de l'évolution du tournage en Premier League.
APFA - L'évolution du tournage dans l'article Web de Premier League
APFA - L'évolution du tir en Premier League.pdf
Source de données: Opta / WhoScored
Zone du projet: 09_league_position_metric_correlation
Code: team_metrics_pts_correlation.py
Résumé et sortie: travaux exploratoires pour identifier les caractéristiques des équipes réussies dans des ligues spécifiques. L'étude de la force d'une gamme de mesures d'équipe est en corrélation avec les points accumulés dans une saison, en utilisant des données de plus de 5 saisons. La sortie de ce projet a été incluse dans une vidéo TIFO - pourquoi Everton est meilleur que vous ne le pensez.
Source de données: Opta / WhoScored
Zone du projet: 10_team_buildup_passes
Code: team_pass_tences.py
Résumé et sortie: Exploitation des travaux antérieurs sur le clustering de passe pour identifier les tendances de passage des équipes dans la construction. Cela stimule les grappes de passes communes pour les 6 premières passes qu'une équipe fait dans diverses régions du terrain.
Source de données: Statsbomb
Zone du projet: 11_Justice_league
Code: Justice_league.py
Résumé et sortie: Exploitation des travaux précédents sur la modélisation des points pour simuler une saison complète de matchs et ré-élaborer le classement du tableau de la ligue basé sur des résultats probables de match (ou des points attendus).