Esse repositório contém uma coleção de ferramentas, projetos e recursos que permitem análises e visualização eficazes dos dados do futebol.
Esse repositório contém uma coleção de ferramentas, projetos e recursos que visam apoiar a geração de informações significativas dos dados do futebol. O Python é usado para extração, processamento, análise e visualização de dados de eventos, dados agregados da equipe, dados de valor de mercado e muito mais.
O repositório é dividido em projetos e subprojetos mutliple, cada um com o objetivo de executar uma análise detalhada, gerar algumas informações específicas ou introduzir algum nível de automação na análise de dados de futebol. Usando o conteúdo deste repositório, vários visuais e threads de textos novos e informativos foram criados e compartilhados com a comunidade de análise de dados de futebol via Twitter (@_JKDS_).
Para apoiar outras pessoas que desejam desenvolver suas habilidades de análise de dados no contexto dos dados do futebol, eu produzi um guia para iniciar.
A árvore abaixo (clique em suspensão para expandir) apresenta a estrutura da pasta deste repositório Git. Observe que alguns arquivos individuais são omitidos do diagrama por simplicidade.
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 mostrado na estrutura da pasta acima, o repositório contém três pastas -chave:
Em geral, cada projeto segue uma série de etapas lógicas:
Os projetos são numerados com base no identificador numérico da área da pasta do projeto, na qual foram realizados e armazenados. Decimais são usados quando mais de um subprojeto/obra foi realizado na mesma área de pasta. Por exemplo, o sub-projeto 2.1 e 2.2 são duas peças separadas que existem no Projeto 2, que são armazenadas na área da pasta 02_player_team_valuation_transfermarkt. Selecione um título do projeto para expandir o suspensão e descubra mais.
Fonte de dados: Relatórios de Match Statsbomb e FIFA
Área do projeto: 01_WC2018_BOX2BOX_MIDS
Código: Worldcup_B2B_Mids.Py
Resumo e saída: uma investigação da caixa mais eficaz para caixa de meio -campistas da Copa do Mundo de 2018. Várias métricas personalizadas são usadas para marcar meio -campistas centrais em vitórias em bola, retenção e criatividade de bola e mobilidade. Uma boa caixa para o meio -campista é definida como um meio -campista central que se destaca em cada uma dessas áreas.
Fonte de dados: transfermarkt
Área do projeto: 00_data_import_and_misc_work & 02_player_team_valuation
Código: SCRAPE_DATA_TRANSFERMARKT.PY & TEAM_PLAYER_VALUE_ANALISHS.PY
Resumo e saída: Desenvolvimento de uma ferramenta para raspar informações sobre o valor de mercado de equipe e jogador de transfermarkt.co.uk. Geração de um "visual de observação" que destaca os jogadores de uma determinada liga com uma combinação favorável de idade e contribuição de metas por valor de mercado de £ m. O trabalho também explora o uso de modelos estatísticos para prever o valor de mercado com base no desempenho do jogador.
Fonte de dados: transfermarkt
Área do projeto: 00_data_import_and_misc_work & 02_player_team_valuation
Código: SCRAPE_DATA_TRANSFERMARKT.PY & TEAM_PLAYER_VALUE_ANALISHS.PY
Resumo e saída: Desenvolvimento de uma ferramenta para raspar informações sobre o valor de mercado de equipe e jogador de transfermarkt.co.uk. Investigação da equipe sob/excesso de desempenho, com base no ranking da liga e no ranking total de valores do esquadrão.
Fonte de dados: WysCout
Área do projeto: Model_Directory & 03_model_development_and_implementation
Código: xg_log_regression_model.py, xg_neural_network.py & shot_xg_plot.py
Resumo e saída: implementação e teste de objetivos esperados básicos modelos probabilísticos. Este trabalho inclui o desenvolvimento e a comparação de um modelo de metas esperadas de regressão logística e um modelo de metas esperadas para rede neural, cada um treinado em mais de 40000 chutes tirados nas ligas 'grandes cinco' da Europa durante a temporada 2017/2018. Os modelos são usados para calcular objetivos esperados para jogadores, clubes e ligas específicos durante um período de tempo definido.
Fonte de dados: Opta
Área do Projeto: Model_directory, 03_model_development_and_implementation & Repo Externo: ML_Models_Collection
Código: pass_cluster_data_collection.py, models.py, repo externo: ml_model.ipynb
Resumo e saída: Usando mais de 5.000.000 passes com as ligas "Big 5" da Europa (Opta Data, 2019/20 - 2022/23), construí um modelo de agrupamento capaz de atribuir passes bem -sucedidos a um dos 65 clusters. Este trabalho envolve a construção de um pipeline de aprendizado de máquina e teste de uma variedade de algoritmos de classificação. O modelo escolhido usa AK significa que o algoritmo de cluster para atribuir passes, que eu então embalei em uma função de cluster para suportar muitos dos meus projetos de análise de futebol.
Fonte de dados: STATSBOMB
Área do projeto: Análise_tools
Código: models.py
Resumo e saída: Implementação de um método Monte-Carlo para modelar a probabilidade de resultados de correspondências individuais com base em eventos de tiro e em seus objetivos esperados (XG). Um grande número (mais de 10000) de simulações é executado em uma determinada correspondência para aproximar a probabilidade de vitória para cada equipe e desenhar probabilidade. Os pontos esperados em uma determinada correspondência são simplesmente calculados como 3 × Win_Probability + 1 × draw_propition. O método adotado depende da suposição de que o XG representa a probabilidade de pontuação e que eventos individuais de tiro são independentes.
Fonte de dados: eufrendat
Área do projeto: 04_match_reports
Código: Shot_report_understat.py
Resumo e saída: Desenvolvimento de um script para extrair dados de tiro do eufemat e gerar relatórios de tiro para qualquer correspondência selecionada.
Fonte de dados: Opta/Whoscored
Área do projeto: 04_match_reports
Código: pass_report_ws.py
Resumo e saída: Design e desenvolvimento de um algoritmo que identifica e conta passes semelhantes com base na área do tom em que eles iniciam e terminam. Geração de relatórios de fluxo de passagem entre zonas para qualquer correspondência selecionada.
Fonte de dados: Opta/Whoscored
Área do projeto: 04_match_reports
Código: pass_report_ws.py
Resumo e saída: Design e desenvolvimento de um algoritmo para calcular os territórios dos jogadores com base nas posições de todas as ações em jogo ao longo de uma partida, incluindo a remoção de discrepantes. Geração de relatórios de forma para qualquer correspondência selecionada, incluindo o cálculo da área do território como um proxy para a área de afinação coberta.
Fonte de dados: Opta/Whoscored
Área do projeto: 05_competition_reports_top_players
Código: player_defensive_contribution.py
Resumo e produção: Avaliação da contribuição defensiva de todos os jogadores durante a duração de uma competição, com a identificação dos principais jogadores por métricas, como recuperações e vitórias de bola por 100 toques de oposição. O trabalho inclui a implicação de um diagrama de dispersão de diamante que pode ser reutilizado para qualquer gráfico de dispersão 2D.
Fonte de dados: Opta/Whoscored
Área do projeto: 05_competition_reports_top_players
Código: player_defensive_contribution.py
Resumo e saída: Avaliação do número de ações defensivas concluídas na terceira oposição por todos os jogadores durante a duração de uma competição, dando uma indicação de quem tende a se defender de frente.
Fonte de dados: Opta/Whoscored
Área do projeto: 05_competition_reports_top_players
Código: Player_effective_Passers.py
Resumo e saída: Identificação de transeuntes eficazes através da avaliação de todos os passes em jogo concluídos durante a duração de uma competição. Métricas como passes progressistas, ameaça esperada cumulativa e passam para a caixa de oposição por 90 são usadas para identificar os melhores jogadores. Este trabalho envolve a implementação de um modelo de ameaça esperado desenvolvido por Karun Singh.
Fonte de dados: Opta/Whoscored
Área do projeto: 05_competition_reports_top_players
Código: Player_effective_Carriers.py
Resumo e saída: Identificação de transportadoras eficazes através da avaliação de carregamentos concluídos durante a duração de uma competição. Este trabalho envolve o desenvolvimento de um módulo para inferir eventos de transporte dos dados do evento OPTA (como os carregamentos não são registrados).
Fonte de dados: Opta/Whoscored
Área do projeto: 05_competition_reports_top_players
Código: Player_effective_Carriers.py
Resumo e produção: Identificação dos principais criadores de ameaças através da avaliação de vários eventos/ações concluídas durante a duração de uma competição em diferentes áreas do campo. Este trabalho envolve a implementação de um modelo de ameaça esperado desenvolvido por Karun Singh.
Fonte de dados: Opta/Whoscored
Área do projeto: 05_competition_reports_top_players
Código: player_threat_creators.py
Resumo e saída: Identificação dos principais tomadores de penalidade em várias competições. A qualidade da penalidade é avaliada minha distância média de penalidade no alvo do goleiro Midriff, com penalidades fora do alvo atribuídas a uma distância de zero. Este trabalho inclui a implementação de "projeções 3D" dentro de subparcelas 2D.
Fonte de dados: Opta/Whoscored
Área do projeto: 05_competition_reports_top_players
Código: player_impact_on_team.py
Resumo e produção: Determinação de como as métricas agregadas de uma equipe (ameaça esperada da equipe, a ameaça esperada da equipe concedida, a diferença de ameaça esperada da equipe etc.) variam quando um jogador específico está em campo vs. quando não está jogando
Fonte de dados: Opta/Whoscored
Área do projeto: 06_competition_reports_top_teams
Código: Team_Thereat_creation.py
Resumo e produção: classificação de equipes por ameaça total criada por meio de passes e carregamentos em jogo por 90, incluindo a identificação das zonas em que cada equipe gera ameaça.
Fonte de dados: Opta/Whoscored
Área do projeto: 06_competition_reports_top_teams
Código: Team_ball_winning.py
Resumo e saída: Classificação de equipes pela altura média no campo de que eles ganham a bola de volta, incluindo a identificação das zonas em que ganham posse da bola com a oposição.
Fonte de dados: Opta/Whoscored
Área do projeto: 06_competition_reports_top_teams
Código: Team_cross_success.py
Resumo e saída: Classificação de equipes pela taxa de sucesso cruzado no jogo. Este trabalho inclui uma definição personalizada de uma cruz eficaz (ou bem -sucedida), onde uma cruz eficaz é seguida por um passe de tiro ou chave dentro de 5 segundos de jogo (independentemente do resultado da cruz inital).
Fonte de dados: Opta/Whoscored
Área do projeto: 06_competition_reports_top_teams
Código: Team_fullback_combinations.py
Resumo e saída: Classificação de equipes pela frequência em que suas costas completas se combinam. Os passes entre os zagueiros de cada equipe são identificados e destacados com base no fato de o passe levar a um tiro no gol.
Fonte de dados: Opta/Whoscored
Área do projeto: 06_competition_reports_top_teams
Código: Team_Delta_Thereat_Creation.Py
Resumo e produção: Classificação de equipes por melhoria na ameaça total criada por meio de passes em jogo e carregamentos por 90 - temporada atual vs. na última temporada. Inclui a contabilização de equipes que estavam em divisão acima ou abaixo do ano anterior. A mudança na criação de ameaças também é quebrada pela zona de pitch
Fonte de dados: Opta/Whoscored
Área do projeto: 06_competition_reports_top_teams
Código: Team_setpiece_shot_concession.py
Resumo e saída: Investigação da capacidade da equipe de defender as peças de defesa por meio de chances agregadas concedidas dentro de 5 segundos de uma oposição "indireta". As peças "indiretas" se referem ao canto e aos chutes livres, onde a bola permanece em jogo depois que o bloqueio de bola é tomada, portanto, os chutes livres fora do alvo e as metas diretas das peças de defesa são excluídas da análise.
Fonte de dados: STATSBOMB
Área do projeto: 06_competition_reports_top_teams
Código: xg_league_table_sb.py
Resumo e saída: geração de vários rankings de tabela da liga com base no desempenho XG, XG, ração XG/XT e várias outras métricas.
Fonte de dados: Opta/Whoscored
Área do projeto: 07_player_reports
Código: player_report_fullback.py
Resumo e saída: o relatório do jogador específico para os zagueiros, incluindo o desenvolvimento de um mecanismo flexível/robusto para comparar o relatório sujeito a jogadores semelhantes e, em seguida, classificar o conjunto de jogadores contra todos os zagueiros dentro de uma liga escolhida.
Fonte de dados: Opta/Whoscored
Área do projeto: 07_player_reports
Código: Advanced_Swarm_Radar.py
Resumo e saída: Desenvolvimento de um meio novo e inovador de visualizar o desempenho do jogador. O radar "enxame" pode rapidamente perfilar, avaliar e comparar os jogadores, mas também fornece um contexto mais profundo através da expectativa das distribuições das pontuações métricas entre um conjunto de jogadores de comparação.
Fonte de dados: Opta/Whoscored
Área do projeto: 08_evolution_of_shooting
Código: Shot_Characteristic_trending.py
Resumo e saída: Um trabalho contratado pela Associação de Análise Profissional de Futebol (APFA), explorando como a arte do tiro está mudando no futebol e fornecendo uma visão da evolução do tiro na Premier League.
APFA - A evolução do tiro no artigo da Premier League
APFA - A evolução de atirar na Premier League.pdf
Fonte de dados: Opta/Whoscored
Área do projeto: 09_League_Position_Metric_CorreLation
Código: Team_Metrics_pts_Correlation.py
Resumo e saída: trabalho exploratório para identificar as características de equipes de sucesso em ligas específicas. A investigação de quão fortemente uma série de métricas de equipe se correlacionam com pontos acumulados em uma temporada, usando dados de mais de 5 temporadas. A saída deste projeto foi incluída em um vídeo TIFO - por que o Everton é melhor do que você pensa.
Fonte de dados: Opta/Whoscored
Área do projeto: 10_team_buildup_passes
Código: Team_Pass_tendências.py
Resumo e saída: Exploração de trabalhos anteriores no cluster de passe para identificar tendências passageiras das equipes no acúmulo. Este Inolves, olhando para os clusters de passe comum para os 6 primeiros passes que uma equipe faz em várias áreas do campo.
Fonte de dados: STATSBOMB
Área do projeto: 11_Justice_League
Código: Justice_League.py
Resumo e saída: Exploração de trabalhos anteriores sobre modelagem de pontos para simular uma temporada completa de partidas e reproduzir as classificações da tabela da liga com base em resultados de correspondência probablística (ou pontos esperados).