DataTennis. NET

データテニス ドットネット

【Webスクレイピング】錦織圭実況掲示板のデータ記録(サーブコースや速度など)を抽出してまとめてみました

公開日:
最終更新日:2018/07/27

      2018/07/27

きっかけはツイッターでの下記やりとりから。
(私=おたこ@otakoma)

掲示板を確認してみると、サーブコースや速度やポイントの勝ち負け(〇×)がほとんどのポイントで記録されていて。
素晴らしい。是非データベースなどデータ分析をしやすい形にしてみたいなと。

ということでスクレイピングでデータを自動収集してスプレッドシートにまとめてみました。

そのやり方について簡単に説明したいと思います。

便利なWebスクレイピングだが、注意も必要

Webスクレイピングとは、Web上の情報を自動で収集する技術のことを言います。
一度プログラムコードを書けば、ボタン一つでページを巡回してデータを決めたルールに則って自動抽出してくれるので非常に便利です。

ただし、サーバに負荷をかけない、著作権に気を付けるなど注意も必要です。

私は以下を読みました。
Webスクレイピングの注意事項一覧

抽出したデータはcsvファイル(スプレッドシート)で保存

↓は保存したスプレッドシートのスクリーンショットです。

DcOxlb5VAAAT0Zf

データ数は、2016/4バルセロナ以降の70試合5734ポイント分です。
下記項目をデータとして抽出しています。

・AceDbF エース、ダブルフォルトなど
・Cource サーブコース(wide center body)
・FirstSecond 1stサーブか2ndサーブか
・OpponentPlayer 対戦相手
・Set 何セット目か
・Speed サーブ速度
・TotalGame 何ゲーム目か
・Tournament 大会名
・WinLose 〇⇒Won ×⇒Lost
・ScoreServer ScoreReturner データ記録時のスコア
・Side DeuceサイドかAdサイドか

データ抽出方法について

データ抽出ですが、
ページを巡回して、下記ルールをコードに書いてサーブデータを抽出しました。
(プログラムコードは最後に記載してます)

・赤黄色さんのコメントだけを抽出
・抽出したコメントを各セット毎に分類
・正規表現を用いて文章をゲーム、ポイント毎に区切る

赤黄色さんのコメントだけを抽出

↓は掲示板のスクリーンショットになり、赤黄色さん以外にも多くの方がコメントを書いてます。
基本的には赤黄色さんがサーブデータを記録してくれているので、赤黄色さんのコメントだけを抽出するようにしました。

hanaji

抽出したコメントを各セット毎に分類

コメントの冒頭にコメントが第何セットの内容なのかわかるような書き方をしてくれているので、何セット目のコメントかでデータを分類しました。

(例)
set1 2-6
set2

と書いてあれば、set2の2の数字を抽出して、コメント内のデータ全てのデータで、setに2を格納するようにします。

正規表現を用いて文章をゲーム、ポイント毎に区切る

各ゲーム毎の情報が、↓のように1行でまとめて書かれています。

G1圭〇×〇〇〇1-0(1w1662c1522c1482c1481c)

この例でいくと、
G1:1ゲーム目
圭:サーバー
〇×〇〇〇〇:勝ち負けが順番に書かれてます。
1-0:ゲーム後のゲームカウント
(1w1662c1522c1482c1481c):サーブの情報が順番に書かれています。
1w166 2c152 2c148 2c148 1c と分割でき、1w166は1stサーブ、コースはワイド、166km/hとなります。

これらを、正規表現という手法でゲーム、サーバー、etc、それぞれの項目を分割して抽出し、データとして格納していきました。

↓のような正規表現を使ったコードです。

Image

正規表現の基本的な考え方については下記をみるといいと思います。
サルにもわかる正規表現
リンク先では正規表現について、
「なぜこの表現方法が有名なのかといえば、この表現方法を利用すれば、たくさんの文章の中から容易に見つけたい文字列を検索することができるためです」
と書かれています。

これ以上の細かい説明は省略しますがデータの抽出ルールをコードに書いたら、あとはページを巡回して自動収集させてデータを格納させました。

他にも空白削除など細かい処理はいくつかやってますが、最後に記載したプログラムコードをみていただければわかるかと思います。

全体の傾向をATPデータと比較してみた

データ収集したら、
まずはATPサイトのServe&Return Trackerの錦織選手のデータと比較してみました。
全体の傾向としてはだいたい合っていそうです。

データのビジュアライズとか

収集したデータを使って、BIツール(redashとかtableau)などでビジュアライズさせるようなことできないかなあと、いろいろ試したりしています。
せっかくのデータなので良い形で公開できないかなと。

やるとしたらデータをAWSなどクラウド上に置く必要があるんですけど、従量課金なのでアクセス多いと大金を払う羽目になりそうで怖く。

いいやり方ないかなあ。

コードについて(Python)

 - blog, データ分析, 錦織圭