サッカー日本代表のデータ分析をしてみた #1

はじめに

これまで業務上、RDBを利用したシステム開発やデータ分析を多くやってきましたが、Outputできる内容が無いので、趣味と継続学習を兼ねてサッカー日本代表(以下『日本代表』)のデータを用いて分析してみようと思い立ちました。
学習中のため誤った内容も多くあると思いますが、ご理解くださいm(__)m

何を分析する?

執筆時点の2023年10月、日本代表はドイツやトルコなどの強豪国を含む国際親善試合で6連勝しFIFAランクも20位→19位→18位と上がり、本当に強い時代になりました。
誰が出ても一定の結果が出ていて見ていて楽しいですが、おそらく森保監督は毎回頭を悩ませてスタメンや交代選手を考えていると思います。
そこで誰が出場すると勝てるかをデータで示すことを目的としてみます。

どうやって分析する?

趣味と学習レベルなのでまずは代表の試合のみのデータで分析することとします。(所属クラブのデータまでは集めない)
過去の代表の試合において得点関与プレーを重みづけし、出場選手の定量評価を可能とすることで分析できるか示そうと思います。

どうやって実現する?

試合のスタッツやデータを参照できるサイトはたくさんありますが、一般人がそのデータを活用して分析できるようなサービスは見つかりませんでした。
そのため、まずはデータを収集して、加工して、見える化を順に対応していけるシステム構築をしていきます。
見える化した後、得点関与プレーとなる変数を洗い出し、それぞれに重みをつけて評価します。

システム構築

要件定義

PRDとして簡単にユースケース図を書いてみます。今後汎用的にできるよう他のチームや選手データも取り入れるよう考慮してみます。

ユースケース図

これをもとにドメインモデル(概念図)を描いてみました。

エンティティ図

アーキテクチャ設計

今後拡張していくか未検討なため、まずは個人がプロトタイプとして運用できること、コストをかけない(可能なかぎり無償)ことを主眼に以下としました。

  • DBMS:PostgreSQL

    • 選定理由:オープンソース(無償)かつ昔から利用しているため

  • UI:Tableau Public

    • 選定理由:ツール利用&Web公開が無償(ただし、PostgreSQL接続は有償なのでCSV連携を検討)

データベース設計

ドメインモデルを参考にER図を作成しました。(関連線は省略。何度も直しが発生し、面倒くさくなった。。。)

ER図

環境構築

ローカルにPostgreSQLをインストール。久々にやったので色々忘れていたが以下サイトを参考。

DDLはニーズがあれば公開予定。

DDL

データ収集

以下のサイトを参考。Webスクレイピングなどで自動収集は今後検討予定。

データ加工

スプレッドシート(数式)を利用してDMLを作成。まずは主に下記データを投入

  • 日本代表の2023年以降の試合(2023年10月時点で8試合)

    • 相手チーム

    • 各チームの得点(分)

    • 出場選手(開始分~終了分)

      • 得点関与

      • 得点関与の重み

DML

SQL・VIEW・CSV出力

テーブルを正規化しすぎてSQLは苦労しました。。。日本代表の試合一覧を出力するだけでも計8テーブルのjoinが必要になりました。今後VIEW化して簡略化を検討します。
まずは選手ごとのプレー情報のサマリをSQLで出しCSV出力しました。

SQL実行例

Tableau Desktop

Tableauは初めての経験ですが、何ができるか継続して学習していきます。
とりあえずデータソースにCSVを読み込み、シート作成して一覧に表示することや、いい感じにグラフ化することができました。

Tableau Desktop データソース
Tableau Desktop シート1
Tableau Desktop シート2

VIZ公開

「Tableau Publicに保存」することで簡単に公開できました。

データ分析(チーム得失点 / 90分間)

今回は、チーム得失点 / 90分間を変数として比較してみます。この値は出場した時間中でチームが得点・失点した値から出場時間で割り、90分間に換算した値です。
言い換えると、90分間出場した場合にどれだけの得点差をつけられるか、を数値化します。
この変数が得点関与プレーとなりうる変数かどうかを考察していきます。

変数=チーム得失点 / 90分間
  =(出場時間中のチーム得点 - 出場時間中のチーム失点)÷出場時間×90

ただし、出場時間が少ない選手だと極端なデータができてしまうこともあるので、条件フィルタとして出場試合数を選択可能として、2試合以上出場した選手を評価対象とします。

データ分析例1:右サイドバック

  • 菅原選手

    • 459分出場(6試合)

      • 出場時間中のチーム得点:12

      • 出場時間中のチーム失点:4

      • チーム得失点 / 90分間:1.57

  • 毎熊選手

    • 135分出場(2試合)

      • 出場時間中のチーム得点:7

      • 出場時間中のチーム失点:2

      • チーム得失点 / 90分間:3.34

  • 相馬選手

    • 74分出場(2試合)

      • 出場時間中のチーム得点:4

      • 出場時間中のチーム失点:1

      • チーム得失点 / 90分間:3.64

  • 橋岡選手

    • 67分出場(5試合)

      • 出場時間中のチーム得点:3

      • 出場時間中のチーム失点:2

      • チーム得失点 / 90分間:1.34

現状では8試合中6試合に先発出場している菅原選手がファーストチョイスですが、チーム得失点 / 90分間の変数値では毎熊選手、相馬選手の方が大きいです。引き続き今後の試合データもあわせて再評価してみたいところです。
一方、橋岡選手は出場時間も短い中、チーム得失点 / 90分間の変数値も小さい結果となりました。

Tableau Public データ分析例1

データ分析例2:ボランチ

現状では遠藤選手と守田選手がファーストチョイスとして多いですが、点取り屋として絶好調の田中碧選手はチーム得失点 / 90分間は一番大きいです。また旗手選手も出場時間中のチーム失点数が少なくチーム得失点 / 90分間が大きいです。
一方、伊藤敦樹選手、川辺選手は出場時間が短く、チーム得失点 / 90分間の変数値は0という結果になりました。

Tableau Public データ分析例2

データ分析例3:1トップ

一番競争が激しいと考える1トップですが、データからも浅野選手と上田選手がほぼ同じ値になり優劣つけがたい結果となっています。
一方、古橋選手は出場時間のチーム得点は浅野選手と変わらないが、出場時間のチーム失点が2選手よりも大きい値のため、得失点 / 90分間の変数値も2選手より小さい値になりました。
※考察ですが、現在の日本代表は前からの連動したプレスも武器となっているため1トップといえども大事なポイントと考えて良さそうです。

Tableau Public データ分析例3

考察

各選手でチーム得失点 / 90分間に差が出たこと、特に先発出場以外の選手で差が出たことから差に意味があると考え、得点関与プレーの変数の一つとする。(本当は統計学的な評価をしたいが別の機会に・・・)
引き続き試合結果を集計し再分析する。

まとめ

  • 今後の課題

    • システム構築()

      • データベース

        • データの自動収集・加工

        • ビューを作成してSQLの簡略化

        • CSV出力自動化

    • データ分析

      • Tableau Public

        • データの可視化方法・分析方法を学習

  • このnoteについて

    • 初めてnote書いてみたけど、業務利用していたWiki(Confluence)の経験が生きて、さっと書けたのは良かった。でもたぶん書き直す。

    • 飽きずに継続したい。2023年内に10件を目標に。



この記事が気に入ったらサポートをしてみませんか?