目次
サッカーのパスネットワーク可視化:試合後の作成手順
試合が終わってから「今日はどこが良かった?」「どこで詰まった?」と振り返るとき、感覚だけではもったいないです。パスの流れをチーム全体で俯瞰し、誰が中継点になっていたのか、どのレーンが生きていたのかを見える化するのが「パスネットワーク可視化」。この記事では、試合後にパスネットワークを作るための具体的な手順を、データの用意から描画、検証、共有まで一気通貫で解説します。専門的なツールがなくても始められる方法と、PythonやGephiを使った発展形もあわせて紹介します。
導入:なぜ「パスネットワーク可視化」を試合後に行うのか
可視化の目的とベネフィット
パスネットワークは、試合中の「つながり」を図として整理する方法です。誰と誰が多くつながったか、ボール循環の中心は誰だったか、どのゾーンでボールが止まりやすかったかが直感的に分かります。主なメリットは以下です。
- チーム全体の循環が一枚で把握できる
- 改善ポイント(詰まり・孤立)を発見しやすい
- 選手ごとの役割(リンクマン、出口、スイッチャー)を明確にできる
- 再現性のあるレビュー資料として蓄積できる
戦術的意思決定への効果
次の練習や試合準備に直結させやすいのが特徴です。例えば、左サイドで循環が止まるなら「立ち位置の調整」「サポート距離の再設定」を検討できます。ボランチの一方に負荷が集中するなら、ビルドアップの初期配置や降りるタイミングを再設計できます。
指標とビジュアルの関係
ネットワーク図は見た目だけでなく、中心性や密度などの数値指標とセットで理解すると効果が高まります。太い線=本数が多い、という直感に加えて、「重要な節点」や「橋渡し役」を数値で裏づけることで、主観と客観のバランスが取れます。
パスネットワークとは何か
ノード(選手)とエッジ(パス)の定義
ネットワーク図では、選手を点(ノード)、選手間のパスを線(エッジ)として表します。ノードの位置は平均受け位置などで配置し、エッジの太さや色でパスの特徴(本数や成功率)を示します。
有向・無向と重みづけの違い
パスは方向を持つので、基本は「有向グラフ」です。A→BとB→Aを区別します。重みは本数、距離、成功率、期待スレット(xT)など目的に応じて決めます。相互の往復が多いだけの「手戻り」を強調しすぎないよう、重みの意味づけは明確にしましょう。
成功・未成功パスの扱いと分析目的の整合
攻撃の設計を評価したいなら成功パスを中心に、リスク管理やプレス耐性を見たいなら未成功も含むのが有効です。両者を混ぜる場合は、色や破線で区別して混乱を避けます。
必要なデータと取得方法
最低限必要なフィールド(選手ID・時刻・座標・パス成否など)
- match_id, team_id
- pass_id, passer_id(出し手), receiver_id(受け手)
- timestamp(試合時間), period(前半/後半)
- start_x, start_y(出し手座標), end_x, end_y(受け手座標または受け位置)
- outcome(成功/未成功), pass_length, pass_height(グラウンダー等)
- player_on/off(交代), minute_range(出場時間帯)
取得ソース別の特徴(イベントデータ/トラッキング/手動記録)
- イベントデータ:パス単位の離散記録。比較的安価で扱いやすいが、受け位置の解像度に限界。
- トラッキング:全選手の座標が高頻度で取得可能。精緻だが費用と処理負荷が大きい。
- 手動記録:自前で表計算に記録。精度は担当者次第だが、現場に合わせた柔軟な設計が可能。
権利・プライバシー・データ品質の留意点
- リーグや配信元の利用規約を確認(二次利用範囲、公開可否)。
- 個人情報や選手識別の扱いに配慮(外部公開時は匿名化も検討)。
- 欠損・重複・座標系の違いなど品質を必ず点検。
試合後の作成手順(全体フロー)
ステップ1:データ収集
イベントやトラッキング、手動ログから必要フィールドを集めます。形式はCSVが扱いやすいです。
ステップ2:データ整形
座標の正規化、時間表記の統一、選手ID紐づけ、重複の除去を行います。
ステップ3:ネットワーク構築
パスごとにエッジを作り、重み(本数や成功率など)を集計します。
ステップ4:レイアウト計算
平均受け位置、フォーメーション、力学モデルなどからノード配置を決定します。
ステップ5:描画と注釈
ノードサイズ、色、エッジ太さ・矢印を設定し、凡例や注釈を加えます。
ステップ6:検証と修正
映像と照合し、明らかなミス(座標反転など)や過読化を修正します。
ステップ7:出力と共有
PNGやPDFで出力。チーム内共有と外部公開でバージョンを分け、説明文を添えます。
データ収集とクリーニング
イベントログの標準化と欠損処理
- 列名の統一(passer_id/receiver_id など)。
- 欠損は「除外」「補完」「不明扱い」の方針を明記。
- 重複pass_idの排除、タイムスタンプの昇順整列。
座標系の統一とピッチ反転処理
ピッチサイズを横方向105、縦方向68(例)などに正規化。ハーフで攻撃方向が変わる試合は、チームの攻撃方向を統一するため後半の座標を反転させます。
選手ID・出場時間・交代の扱い
交代選手は別ノードとして扱い、出場時間で重みを正規化するか、そもそも短時間を除外するかを事前に決めます。
セットプレー・リスタートの分類
ゴールキック、スローイン、CK、FKなどは通常の循環と別扱いにするか検討。セットプレーのみのサブグラフも有用です。
重複・外れ値の検出と修正
異常な距離や明らかにピッチ外の座標は検出ルールをつくり、手動確認します。
フィルタ設計(分析目的に合わせる)
時間帯別/ハーフ別の抽出
0-15、16-30などの時間スライスで、序盤・終盤の傾向差を比較。アディショナルは別枠にすると見やすいです。
ゾーン別・レーン別の分割
ピッチを縦3〜5レーン、横3〜5段に区切り、レーン間のスイッチ頻度や特定ゾーンの停滞を確認します。
スコア状態やプレス強度によるフィルタ
リード時/ビハインド時での循環の違い、相手のプレス強度(主観メモでもOK)で分けて解析します。
相手チーム別の比較設計
同じ自チームの複数試合を並べ、相手のブロック高さや守り方によるネットワークの変化を比較します。
ネットワーク構築のルール設計
エッジの重み(本数/距離/成功率/xT/EPV)
初めては「成功本数」が扱いやすいです。発展形として、距離で重みを調整したり、xT/EPV(ゾーンの脅威・価値の変化を推定するモデル)でパスの貢献度を評価する方法もあります。xT/EPVは推定方法が複数あるため、モデルの前提を明示しましょう。
有向グラフと矢印の扱い・閾値設定
矢印は見やすさを優先し、一定本数未満は非表示にするなどの閾値を設定。チームの傾向を隠さない範囲で過読化を防ぎます。
サブグラフ化(先発のみ/交代後/特定ユニット)
先発11人のみ、交代後15分のみ、DFユニットのみ等のサブグラフで比較すると、原因が切り分けやすくなります。
自己ループ・バックパス・横幅制限の扱い
キーパーの保持など自己ループは原則除外。バックパスは破線や薄い色で表し、縦方向の進行を強調するレイアウトと組み合わせます。
レイアウトと座標の決め方
平均受け位置レイアウト
各選手の受け位置の平均をノード位置にします。実際の立ち位置が反映され、役割の解像度が高いのが利点です。
フォーメーション基準レイアウト
4-3-3や3-4-2-1などの定型座標に選手を配置し、試合間比較を容易にします。試合内の変化にはやや鈍感です。
力学モデル(Force-directed)レイアウト
つながりの強い選手同士が近づく自動配置。循環の「近さ」は見やすいですが、ピッチ座標とは整合しないため、解釈時に注意が必要です。
レイヤー表現(DF/MF/FWの帯)と重なり回避
ポジション帯のレイヤーを用意し、ノードが重ならないよう微調整。ラベルは視線の邪魔をしない位置に配置します。
可視化デザインのベストプラクティス
ノードサイズと色分けの意味付け
サイズ=受け数、色=ポジションや中心性など、意味を固定し一貫性を保ちます。
エッジ太さ・透明度・矢印の設定
太さ=本数、透明度で重なりを緩和。矢印は短いパスでも識別できるようヘッドをやや大きめに。
ラベル・凡例・注釈の一貫性
凡例は図の外にまとめ、注釈は多くても3点まで。見せたいメッセージを短文で添えます。
色覚多様性・印刷対応・背景コントラスト
色覚多様性に配慮したパレット(例:ColorBrewerの配色)を選択。印刷用は背景を薄めに、濃淡で差を表現します。
指標(メトリクス)の選定と解釈
次数中心性・重み付き次数
次数はつながりの多さ、重み付き次数はパス本数の総量を表します。リンクマンの把握に有効です。
媒介中心性・クローズネス・固有ベクトル・PageRank
- 媒介中心性:ボール循環の「通過点」になりやすい選手。
- クローズネス:全員への到達の近さ。配球の広さを反映。
- 固有ベクトル・PageRank:重要な相手とつながるほど評価が上がる指標。質の高い結節点の発見に。
ネットワーク密度・クラスター係数・モジュラリティ
密度はネットワークの詰まり度、クラスター係数は小集団のまとまり、モジュラリティはグループ分割の強さ。サイドごとの孤立を見抜くのに役立ちます。
ポジション別の基準値と比較の考え方
SBは接続数が多くなりやすい、CFは重みが局所的に集中しやすいなど、役割による期待値を踏まえて解釈します。
Pythonでの実装ガイド(概要)
使用ライブラリと環境準備(pandas/networkx/mplsoccer/plotly)
- pandas:データ整形
- networkx:グラフ構築と中心性
- mplsoccer or plotly:ピッチ描画と可視化
データ読み込みと前処理(座標・時間・選手の整合)
# インストール例# pip install pandas networkx mplsoccer plotlyimport pandas as pddf = pd.read_csv("passes.csv")# 例: 必須列 ['passer_id','receiver_id','start_x','start_y','end_x','end_y','outcome','period','minute']# 攻撃方向統一(後半を反転:105x68のピッチ想定)def flip(row): if row['period'] == 2: row['start_x'] = 105 - row['start_x'] row['end_x'] = 105 - row['end_x'] row['start_y'] = 68 - row['start_y'] row['end_y'] = 68 - row['end_y'] return rowdf = df.apply(flip, axis=1)# 成功パスのみdf_succ = df[df['outcome'] == 'Complete']
networkxでのグラフ構築と中心性計算
import networkx as nx# エッジ重み=成功本数edges = (df_succ.groupby(['passer_id','receiver_id']) .size().reset_index(name='weight'))G = nx.DiGraph()for _, r in edges.iterrows(): G.add_edge(r['passer_id'], r['receiver_id'], weight=r['weight'])# 指標deg = dict(G.degree(weight='weight'))bet = nx.betweenness_centrality(G, weight='weight', normalized=True)pr = nx.pagerank(G, weight='weight')
matplotlib/plotlyでの描画とエクスポート
from mplsoccer import Pitchimport matplotlib.pyplot as plt# 受け位置の平均をノード座標にrecv_pos = (df_succ.groupby('receiver_id')[['end_x','end_y']] .mean().rename(columns={'end_x':'x','end_y':'y'}))# ノードサイズ=受け数recv_count = df_succ['receiver_id'].value_counts()pitch = Pitch(pitch_type='statsbomb', pitch_length=105, pitch_width=68)fig, ax = pitch.draw(figsize=(10,7))# ノード描画for pid, row in recv_pos.iterrows(): size = 50 + 2 * recv_count.get(pid, 0) ax.scatter(row['x'], row['y'], s=size, color='#1f77b4', alpha=0.9) ax.text(row['x'], row['y'], str(pid), ha='center', va='center', color='white', fontsize=8)# エッジ描画for u, v, d in G.edges(data=True): if d['weight'] < 3: # 閾値例 continue x1, y1 = recv_pos.loc[v]['x'], recv_pos.loc[v]['y'] # 受け手位置 x0, y0 = (df_succ[df_succ['receiver_id']==u][['end_x','end_y']].mean() if u in recv_pos.index else recv_pos.mean()) pitch.arrows(x0, y0, x1, y1, ax=ax, width=2, headwidth=6, color='black', alpha=0.4)plt.tight_layout()plt.savefig('pass_network.png', dpi=200)
Excel/スプレッドシートでの簡易作成
ピボットでの隣接行列作成
列にreceiver_id、行にpasser_id、値に件数(成功パス本数)でピボット。これが隣接行列になります。
ノードリスト・エッジリストの整備
- ノードリスト:player_id、名前、ポジション、平均受け位置(手動入力可)。
- エッジリスト:source、target、weight。閾値未満は削除。
Gephiへのインポートとスタイリング手順
- ノードCSVとエッジCSVをGephiに読み込み。
- レイアウトは「ForceAtlas2」などを選択、安定後に停止。
- サイズ=重み付き次数、色=モジュール(コミュニティ)で可視化。
- ラベル配置で重なりを回避、PNG/PDFで書き出し。
品質管理と検証
再現性チェック(スクリプト化・バージョン管理)
同じデータから同じ図が必ず出るよう、処理をスクリプト化。ファイル名と日付、設定値を記録します。
サンプルサイズと信頼性の判断
出場10分未満などは偏りが出やすいので注記。1試合の結果を結論化しない工夫(複数試合の比較)を。
コーチ・選手レビューでの現実妥当性確認
図と映像を並べて確認。現場感覚とズレる場合は、フィルタやレイアウトを見直します。
別試合・別条件でのロバスト性テスト
相手やスコア状況が違う試合で同じ手順を実施し、傾向が再現されるか確認します。
よくある落とし穴と対策
出場時間の偏りによる誤解
出場時間で重みを割る(本数/出場分)か、短時間は別枠で表示します。
セットプレーの過大評価
CKやロングスローの本数が多いとネットワークが歪みがち。別図に分けるか、薄色で表示します。
座標反転ミス・単位混在
前後半で反転し忘れや、ヤードとメートル混在は要チェック。処理の順番を固定しましょう。
エッジ閾値の過剰フィルタリング
閾値が高すぎると重要な細い線を落とします。2〜3本程度から表示し、補助的に透明度を使うと安全です。
可視化の過読化(情報過多)の回避
一図一メッセージを徹底。凡例・注釈は最小限に、詳細は別ページに切り出します。
応用:深掘り分析のバリエーション
時間スライスによるネットワーク推移
15分刻みで4枚並べると、修正や疲労の影響が見えます。交代の前後で変化を追跡します。
サイドチェンジ・スイッチの検出
横方向40m以上のパスを抽出し、どの中継が効いているか特定。相手の圧縮を外す糸口が見えます。
プレス回避チェーンと出口の特定
自陣→中盤→前線の3本以上の連続成功をチェーンとして可視化。出口役(アウトレット)の特定に。
キープレイヤー不在時の構造変化分析
主力不在の試合または交代後で、中心性や密度の変化を比較。役割の代替パターンを検討します。
ゾーン別xTフローの重ね合わせ
各パスのxT変化をゾーンごとに合計し、ネットワークに色で重ねます。どこで価値が生まれたかを強調できます。
活用シーンと共有方法
ミーティング資料への落とし込み方
1スライド1テーマで貼り付け、要点を3行でまとめる。次のトレーニング項目にリンクさせると効果的です。
育成年代での指導例と段階的導入
U-15〜U-18では「受ける角度・距離」を学ぶ教材として、成功本数ベースの簡易図から始めます。
スカウティング・対戦準備での使い方
相手の循環の中心やスイッチの起点を特定し、プレスの誘導先を設計します。
SNS/ウェブ発信時の注意点と説明責任
モデル条件(成功パスのみ、閾値、座標処理)を明記。データ出所と権利表記を守り、誤解を招かない説明文を添えましょう。
チェックリスト(試合後の作成手順まとめ)
データ取得・整形の確認
- 必須フィールドが揃っている
- 座標・時間・IDの整合が取れている
- 反転処理と欠損処理が完了
ルール・フィルタ設定の確認
- 成功/未成功の扱いを明記
- 閾値とサブグラフの方針を決定
- 時間帯・ゾーン・スコア状態の条件を記録
可視化デザインの確認
- ノードサイズ/色、エッジ太さ/透明度の意味が一貫
- 凡例・注釈が過不足ない
- 色覚・印刷対応を考慮
検証・レビューの確認
- 映像と整合、現実妥当性のチェック
- 過読化の回避、誤差の注記
公開・共有の最終確認
- 出力形式と解像度の最適化
- 権利表記・出典・作成条件の明示
- チーム内版と外部公開版の切り分け
用語集
パスネットワーク関連用語
ノード:選手。エッジ:選手間のパス。重み:本数やxTなど線に付与する数値。中心性:ネットワーク内の重要度を示す指標。
可視化・統計用語
有向グラフ:方向を持つエッジを含むグラフ。モジュラリティ:グループ分割の強さ。密度:つながりの多さ。
データソース・計測用語
イベントデータ:プレー単位の記録。トラッキング:選手の位置情報。xT/EPV:ゾーン価値の変化を推定するモデル群。
参考リソース
論文・書籍
- Networks in Sports Analytics(スポーツにおけるネットワーク分析の概説)
- Friends of Tracking 講義資料(サッカー分析の基礎と応用)
オープンデータ・ツール
- Metrica Sports Sample Data
- StatsBomb リソース(提供条件に従って利用)
- Gephi(ネットワーク可視化)
- mplsoccer(Pythonでのピッチ描画)
チュートリアル・コミュニティ
まとめ
パスネットワーク可視化は、「感じていたこと」をチームで共有できる形に変える強力な手段です。試合後にデータを整え、目的に沿ったフィルタとルールでネットワークを構築し、分かりやすいデザインで描画する。最後に映像と照らし合わせて妥当性を確かめ、次のトレーニングや対戦準備へ落とし込みましょう。最初は成功本数×平均受け位置のシンプル設計から始め、慣れてきたら中心性やxT、時間スライスなどを加えていけば十分です。継続して作るほど「自分たちの型」と「改善の糸口」がはっきり見えてきます。