# (必須)モジュールのインポート
import os
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
try:
    import japanize_matplotlib
except:
    pass
# (必須)カレントディレクトリの変更(自分の作業フォルダのパスをコピーして入力する)
os.chdir(r"C:\Users\parar\OneDrive\sport_data")

1. イントロダクション#

1.1. スポーツデータ分析とは?#

1.1.1. スポーツデータの取得とスポーツ科学の発展#

スポーツデータ分析を行うには,まずは何らかの方法でデータを取得する必要がある. スポーツデータの取得方法はおおよそ以下のように分類できる:

  • 手作業での取得

  • カメラ撮影と画像解析による取得

  • 各種センサによる取得

例えば,野球において1球ごとに何が起こったかをまとめた1球データは,(ある程度自動化されているとはいえ,)手作業での取得が基本である. 一方,最近取得が可能になったサッカーのトラッキングデータは,スタジアムに取り付けられたカメラによって自動取得されている. また,選手の動作を解析する際には,被験者に取り付けたウェアラブルセンサを用いて位置情報や加速度などを取得している.

スポーツデータの取得技術は近年急速に進歩し,1つの競技に対し様々なデータが取得できるようになっている. また,これまでに取得が難しかった競技,特に集団球技や格闘技のデータも取得されるようになってきた. これにより,個人競技だけでなく集団球技や格闘技なども含めたあらゆるスポーツデータを扱う,スポーツデータサイエンスが発展している. 今後は個別の動作の理解に加え,集団運動や相互作用を含めたスポーツの理解がスポーツ科学の課題になると考えられる.

1.1.2. スポーツデータの特徴#

このように取得したデータは,取得時刻とその時刻における様々な情報がセットになっており,時系列データ(time series data)と呼ばれる. また,スポーツデータには,時刻に加えて位置座標のデータが含まれていることも多く,これを時空間データ(spatiotemporal data)と呼ぶこともある. スポーツデータにおける,時間と空間の解像度(データの取得精度)は様々である. 例えば,サッカーのデータにおける空間解像度は1m程度であり,時間スケールは以下のような階層構造を成している:

  • 1試合の得点データ(試合単位)

  • イベント時系列データ

    • 得点の時系列データ(〜数十分単位)

    • シュートの時系列データ(〜数分単位)

    • パスの時系列データ(〜数秒単位)

  • トラッキングデータ(〜1/30秒単位)

この中で,基本的には下に行くほど取得が難しくなる. 例えば,得点データは取得が容易であったため,既に様々な競技で多くのデータが蓄積されているが,ボールのトラッキングは未だに難しい. また,得点,シュート,パスなどのイベント時系列をまとめたイベントデータの取得も進んでおり,大規模なオープンデータセットが利用可能となっている. 一方,最も時間スケールの細かいトラッキングデータは,ここ10年ほどでようやく取得が可能になったため,大規模なデータセットの出現が待たれている.

1.1.3. スタッツの取得とプログラミング#

スポーツデータが取得できたら,実際にデータ分析を行うことになるが,その結果はスタッツという形にまとめられる. ここではスタッツを以下のように定義することにする:「スポーツデータに何らかの(統計)解析を行うことにより抽出された意味のある情報」.これより,スタッツを得るには元になるデータを取得・加工した上で,何らかの(統計)解析を行い,意味のある情報を抽出することが必要になる.スタッツの例としては,サッカーにおける選手の走行距離やスプリント回数,野球における長打率やOPSなどの各種統計指標などが挙げられる.多くの場合,スポーツデータ分析の第一目標は何らかのスタッツを得ることと言って良い.

スタッツを得るためには,まずデータを取得して扱いやすい形に加工・整形し,その上で何らかの(統計)解析を行う必要がある.また,スタッツをわかりやすく伝えるには解析結果を可視化することも必要である.基本的にこうした一連の手順を手作業で行うことは不可能なので,プログラミング技術が必須である.プログラミング言語には様々な種類が存在するが,近年スポーツを含むデータ分析にはPythonが用いられることが多い.Pythonはスクリプト言語と呼ばれ,コンパイルの必要がない.また,高速に動作する目的別のライブラリが多数用意されており,データの加工・解析・可視化を1つの言語で完結できる.

1.1.4. Pythonを用いる理由#

スポーツデータ分析にPythonを用いる理由は様々であるが,データの加工・解析・可視化を1つの言語で完結できる点が特に重要だろう. 例えば,個人的によく使うライブラリは以下の通りである:

  • データの加工・解析全般

    • Pandas, NumPy, Scipy

  • データの可視化

    • Matplotlib, Tkinter

  • 動画・画像処理

    • OpenCV, Matplotlib, Pillow

  • ネットワーク解析

    • networkx

  • 空間データ処理

    • shapely

  • 機械学習

    • scikit-learn

1.2. 講義の概要#

1.2.1. 本講義の目的と構成#

本講義では,スポーツデータの取得からスタッツを得るまでの一連の過程で必要なプログラミング技術を解説する.プログラミング言語には,本学で1年次から必修となっているPythonを用いることとし,「プログラミング基礎」および「プログラミング基礎実習」で扱った内容は既知とする.

講義は基礎編と実践編から成る.基礎編ではNumPy,Pandas,Matplotlibの基礎知識について解説する.基礎編の内容は,以下のテキストを参考にしている:

  • Wes McKinney, Pythonによるデータ分析入門,オライリー,2018

  • Jake VanderPlas, Pythonデータサイエンスハンドブック,オライリー,2018

  • 株式会社ロンバート・増田秀人,現場で使える!pandsデータ前処理入門,翔泳社,2020.

ただし,扱う内容は取捨選択し,オリジナルな内容も多く含む.

実践編では,サッカーのデータを例に,データの加工と解析に必要なプログラミング技術を解説する. 実践編で扱うデータは,以下の3つである:

  • イベントデータ

    • Pappalardoデータセット

  • トラッキングデータ

    • Pettersonデータセット

  • 映像データ

このうち,イベントデータとトラッキングデータはいずれもサッカーのデータである. 映像データについては,余裕があったら扱う(たぶんない). データセットの詳細については後述する. なお,高度な解析手法は扱わない.

1.2.2. 評価方法#

以下の基準で評価する:

  • レポート

    • 基礎編で1回,実践編で1回を予定(変更の可能性あり)

  • 授業への取り組み姿勢

    • とりあえず出席すること

1.3. プログラミングの心得#

  • まずはググる

    • 文章ではなく短いキーワードで検索する

      • numpy 並び替え 昇順

    • ページ内検索(Ctrl+F, Ctrl+G)を活用する

    • 自分用のチートシートを作る

  • 英語が読めるようになる

    • 関数名や変数名はほぼ英語

    • エラーの説明は英語

    • 日本語化されている情報が少ない

    • 困ったときのDeepL

  • パソコンを使いこなす

    • パソコンを整理する(後述)

    • 使いやすい環境にカスタマイズする

    • キーボードショートカットを覚える

  • 最低限の基本機能だけ覚える

    • プログラミング基礎の内容

      • リストの操作,辞書,for文,if文,関数

    • NumPy配列の生成,参照,条件付き抽出,操作

    • DataFrameの参照,条件付き抽出,操作

    • Matplotlibのplot関数の使い方

  • 後はとにかくググる

  • 手を動かす

    • 実際にデータ分析をするようになるとすぐに上達する

  • 環境を整える

    • 椅子

    • サブディスプレイ

    • キーボード

    • トラックボール