このリポジトリには、サッカーデータの効果的な分析と視覚化を可能にするツール、プロジェクト、リソースのコレクションが含まれています。
このリポジトリには、サッカーデータから意味のある洞察の生成をサポートすることを目的とするツール、プロジェクト、リソースのコレクションが含まれています。 Pythonは、イベントデータの抽出、処理、分析、視覚化に使用され、チームデータの集約、市場価値データなどが使用されます。
リポジトリは、詳細な分析を実行したり、特定の洞察を生成したり、フットボールデータ分析にある程度の自動化を導入することを目的としています。このリポジトリの内容を使用して、多くの斬新で有益なビジュアルとテキストスレッドが作成され、Twitter(@_jkds_)を介してサッカーデータ分析コミュニティと共有されています。
サッカーデータのコンテキスト内でデータ分析スキルを開発したいと思っている他の人をサポートするために、Getting Guideを作成しました。
下のツリー([ドロップダウン]をクリックして展開)は、このGitリポジトリのフォルダー構造を示しています。簡単にするために、一部の個々のファイルは図から省略されていることに注意してください。
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
上記のフォルダー構造に示されているように、リポジトリには3つのキーフォルダーが含まれています。
一般に、各プロジェクトは多くの論理的な手順に従います。
プロジェクトには、実施および保存されているプロジェクトフォルダー領域の数値識別子に基づいて番号が付けられています。デシマルは、同じフォルダー領域で複数のサブプロジェクト/作業が行われている場合に使用されます。たとえば、サブプロジェクト2.1と2.2は、プロジェクト2内に存在する2つの別々の作品であり、フォルダー領域02_Player_Team_Valuation_TransferMarktに保存されています。プロジェクトタイトルを選択して、ドロップダウンを展開し、詳細を確認してください。
データソース: StatsBomb&FIFAマッチレポート
プロジェクト領域: 01_WC2018_BOX2BOX_MIDS
コード: worldcup_b2b_mids.py
概要と出力: 2018年ワールドカップで最も効果的なボックスミッドフィールダーの調査。多くのカスタムメトリックを使用して、ボールの勝利、ボールの保持と創造性、モビリティで中央のミッドフィールダーを獲得しています。良い箱から箱へのミッドフィールダーは、これらの各エリアで優れた中央のミッドフィールダーとして定義されています。
データソース: TransferMarkt
プロジェクトエリア: 00_DATA_IMPORT_AND_MISC_WORK&02_PLAYER_TEAM_VALUATION
コード: scrape_data_transfermarkt.py&team_player_value_analysis.py
概要と出力: TransferMarkt.co.ukからチームとプレーヤーの市場価値情報をスクレイプするツールの開発。市場価値あたりの年齢と目標の貢献度の有利な組み合わせで、特定のリーグのプレイヤーを強調する「スカウティングビジュアル」の生成。また、この作業では、プレーヤーのパフォーマンスに基づいて市場価値を予測するための統計モデルの使用も調査します。
データソース: TransferMarkt
プロジェクトエリア: 00_DATA_IMPORT_AND_MISC_WORK&02_PLAYER_TEAM_VALUATION
コード: scrape_data_transfermarkt.py&team_player_value_analysis.py
概要と出力: TransferMarkt.co.ukからチームとプレーヤーの市場価値情報をスクレイプするツールの開発。リーグのランキングと総分隊価値ランキングに基づくチームの下/過剰なパフォーマンスの調査。
データソース: wyscout
プロジェクトエリア: Model_Directory&03_Model_Development_and_implementation
コード: xg_log_regression_model.py、xg_neural_network.py&shot_xg_plot.py
概要と出力:基本的な予想される目標確率モデルの実装とテスト。この作業には、ロジスティック回帰の予想される目標モデルとニューラルネットワーク予想目標モデルの開発と比較が含まれます。各シーズン中にヨーロッパの「ビッグファイブ」リーグで撮影された40000を超えるショットを訓練しました。モデルは、定義された期間にわたって特定のプレーヤー、クラブ、リーグの期待目標を計算するために使用されます。
データソース: Opta
プロジェクト領域: Model_Directory、03_Model_Development_and_implementation&external Repo:ml_models_collection
コード: pass_cluster_data_collection.py、models.py、外部レポ:ml_model.ipynb
概要と出力:ヨーロッパの「ビッグ5」リーグ(Opta Data、2019/20-2022/23)とともに5,000,000以上のパスを使用して、65のクラスターのいずれかに成功したパスを割り当てることができるクラスタリングモデルを構築しました。この作業には、機械学習パイプラインの構築と、さまざまな分類アルゴリズムのテストが含まれます。選択されたモデルは、AKを使用してクラスタリングアルゴリズムを意味してパスを割り当てます。これをクラスタリング機能内にパッケージ化して、サッカー分析プロジェクトの多くをサポートします。
データソース: statsbomb
プロジェクトエリア: Analysis_Tools
コード: models.py
概要と出力:モンテカルロ法の実装ショットイベントとそれに関連する予想される目標(XG)に基づいて、個々の一致結果の確率をモデル化します。特定の一致で大量(10000以上)のシミュレーションが実行され、各チームの概算WIN確率があり、確率が引き出されます。特定の一致の予想されるポイントは、3×win_probability + 1×draw_proabilityとして単純に計算されます。採用された方法は、XGがスコアリング確率を表し、個々のショットイベントが独立しているという仮定に依存しています。
データソース:控えめなもの
プロジェクトエリア: 04_Match_Reports
コード: shot_report_understat.py
概要と出力: StoshTATからショットデータを抽出し、選択した一致のショットレポートを生成するスクリプトの開発。
データソース: opta/whoscored
プロジェクトエリア: 04_Match_Reports
コード: pass_report_ws.py
概要と出力:開始と終了のピッチの領域に基づいて同様のパスを識別およびカウントするアルゴリズムの設計と開発。選択した一致のゾーン間パスフローレポートの生成。
データソース: opta/whoscored
プロジェクトエリア: 04_Match_Reports
コード: pass_report_ws.py
概要と出力:アウトライアの除去を含む試合全体のすべてのプレイ内アクションの位置に基づいて、プレーヤーの領土を計算するアルゴリズムの設計と開発。選択した一致の形状レポートの生成。これには、カバーされたピッチエリアのプロキシとしての領土エリアの計算を含む。
データソース: opta/whoscored
プロジェクトエリア: 05_competition_reports_top_players
コード: player_defience_contribution.py
概要と出力:競争の期間にわたるすべてのプレイヤーの防御的な貢献の評価。100回の野党タッチあたりの回復やボールの勝利などのメトリックによるトッププレイヤーの識別。作業には、2D散布図で再利用できるダイヤモンド散布図の埋め込みが含まれます。
データソース: opta/whoscored
プロジェクトエリア: 05_competition_reports_top_players
コード: player_defience_contribution.py
概要と出力:競争の期間中にすべてのプレイヤーが3番目に3番目に反対派で完了した防御行動の数の評価は、誰が正面から防御する傾向があるかを示しています。
データソース: opta/whoscored
プロジェクトエリア: 05_competition_reports_top_players
コード: player_efftectient_passers.py
概要と出力:競争の期間中に完了したすべてのプレイ内パスの評価を通じて、効果的な通行人の識別。プログレッシブパス、累積予想される脅威、90あたりの対立ボックスへの通過などのメトリックは、トッププレーヤーを識別するために使用されます。この作業には、Karun Singhが開発した予想される脅威モデルの実装が含まれます。
データソース: opta/whoscored
プロジェクトエリア: 05_competition_reports_top_players
コード: player_efftectient_carriers.py
概要と出力:競争の期間中に完了したキャリーの評価による効果的なキャリアの識別。この作業には、OPTAイベントデータからのキャリーイベントを推測するモジュールの開発が含まれます(キャリーが記録されていないため)。
データソース: opta/whoscored
プロジェクトエリア: 05_competition_reports_top_players
コード: player_efftectient_carriers.py
概要と出力:ピッチの異なる領域内で競争の期間中に完了したさまざまなイベント/アクションの評価を通じて、トップの脅威作成者の識別。この作業には、Karun Singhが開発した予想される脅威モデルの実装が含まれます。
データソース: opta/whoscored
プロジェクトエリア: 05_competition_reports_top_players
コード: player_threat_creators.py
概要と出力:複数の競技にわたる最高のペナルティテイカーの識別。ペナルティの品質は、ゴールキーパーMidriffからのターゲットペナルティの平均距離を評価し、ターゲット外のペナルティにゼロの距離が割り当てられています。この作業には、2Dサブプロット内の「3Dプロジェクション」の実装が含まれます。
データソース: opta/whoscored
プロジェクトエリア: 05_competition_reports_top_players
コード: player_impact_on_team.py
概要と出力:チームのアガリグレートメトリック(チームの予想される脅威、チームの予想される脅威が認められ、チームが期待する脅威の違いなど)の決定は、特定のプレーヤーがピッチにいる場合とプレイしていないときに異なります
データソース: opta/whoscored
プロジェクト領域: 06_competition_reports_top_teams
コード: team_threat_creation.py
概要と出力:各チームが脅威を生成するゾーンの識別を含め、90回あたりのパスおよび運搬によって作成された総脅威によるチームのランキング。
データソース: opta/whoscored
プロジェクト領域: 06_competition_reports_top_teams
コード: team_ball_winning.py
概要と出力:チームのランキングは、ボールを獲得したピッチの平均高さでのランキングで、野党からボールの所有を獲得するゾーンの識別を含めます。
データソース: opta/whoscored
プロジェクト領域: 06_competition_reports_top_teams
コード: team_cross_success.py
概要と出力:成功率の成功率によるチームのランキング。この作業には、効果的な(または成功した)クロスのカスタム定義が含まれます。このクロスでは、効果的なクロスに続いて、プレイから5秒以内にショットまたはキーパスが続くものです(無効のクロス結果に関係なく)。
データソース: opta/whoscored
プロジェクト領域: 06_competition_reports_top_teams
コード: team_fullback_combinations.py
概要と出力:フルバックが結合する頻度によるチームのランキング。各チームのフルバック間のパスは、パスがゴールのショットにつながるかどうかに基づいて特定され、強調表示されます。
データソース: opta/whoscored
プロジェクト領域: 06_competition_reports_top_teams
コード: team_delta_threat_creation.py
概要と出力:プレイ中のパスを通じて作成された総脅威の改善によるチームのランキング、および昨シーズンの90件のシーズンごとにキャリー。前年に上下に分割されていたチームの会計が含まれます。脅威の作成の変化もピッチゾーンによって分解されます
データソース: opta/whoscored
プロジェクト領域: 06_competition_reports_top_teams
コード: team_setpiece_shot_concession.py
概要と出力:野党の「間接的な」セットピースから5秒以内に認められた集約チャンスを通じてセットピースを守るチームの能力の調査。 「間接的な」セットピースは、セットピースの後にボールがプレイされているコーナーとフリーキックを指します。
データソース: statsbomb
プロジェクト領域: 06_competition_reports_top_teams
コード: XG_LEAGUE_TABLE_SB.PY
概要と出力:チームのXG、XGパフォーマンス、XG/XTの配給、およびその他のさまざまなメトリックに基づくさまざまなリーグテーブルランキングの生成。
データソース: opta/whoscored
プロジェクトエリア: 07_Player_Reports
コード: player_report_fullback.py
概要と出力:プレーヤーは、柔軟な/堅牢なメカニズムの開発を含むフルバックに固有のレポートをレポートして、レポートを同様のプレイヤーと比較し、選択したリーグ内のすべてのフルバックに対してプレイヤーのセットをランク付けします。
データソース: opta/whoscored
プロジェクトエリア: 07_Player_Reports
コード: Advanced_swarm_radar.py
概要と出力:プレーヤーのパフォーマンスを視覚化する斬新で革新的な手段の開発。 「群れ」レーダーは、プレーヤーのプール間のメトリックスコアの分布を表示することにより、プレーヤーを迅速にプロファイル、評価、比較することもできます。
データソース: opta/whoscored
プロジェクトエリア: 08_EVOLUTION_OF_SHOOTING
コード: shot_characteristics_trending.py
概要と出力:プロサッカー分析協会(APFA)と契約された作業は、サッカーで射撃の芸術がどのように変化しているかを調査し、プレミアリーグでの射撃の進化に関する洞察を提供します。
APFA-プレミアリーグのWeb記事での撮影の進化
APFA-プレミアリーグでの撮影の進化
データソース: opta/whoscored
プロジェクト領域: 09_LEAGUE_POSITION_METRIC_CORRELATION
コード: team_metrics_pts_correlation.py
概要と出力:特定のリーグで成功したチームの特性を特定するための探索的作業。チームメトリックの範囲が、5つ以上のシーズンのデータを使用して、シーズンに蓄積されたポイントとどれだけ強く相関しているかを調査します。このプロジェクトからの出力は、TIFOビデオに含まれていました - なぜあなたが思っているよりもエバートンが優れているのか。
データソース: opta/whoscored
プロジェクト領域: 10_TEAM_BUILDUP_PASSES
コード: team_pass_tendencies.py
概要と出力:パスクラスタリングでの以前の作業の利用は、ビルドアップ中のチームの合格傾向を特定します。このイノルフは、チームがピッチのさまざまなエリアで行う最初の6パスの一般的なパスクラスターを見ています。
データソース: statsbomb
プロジェクトエリア: 11_Justice_league
コード: Justice_league.py
概要と出力:マッチのフルシーズンをシミュレートし、確率的マッチアウトカム(または予想されるポイント)に基づいてリーグテーブルの順位を再現するためのポイントモデリングに関する以前の作業の利用。