LoginSignup
21
29

More than 1 year has passed since last update.

競馬データをスクレイピングしてみた

Last updated at Posted at 2019-12-26

先日、Twitterで競馬についてのツイートをみました。ある大学生さん、自作のAIに有馬記念を予想させ、118万当たったというツイートがネットで話題になりました。本当にAIに予想できるの、競馬というもの?

グーグルしてみると、競馬予想の方法が様々ですが、AIは今年から登場しました。AIは統計解析によって競馬の結果を予測しているそうです。競馬にも技術介入の時代ですね。

ですが、競馬の統計解析を行うには、解析するためのデータがなければ何も始まりません。ということで、今回は競馬のデータをスクレイピングしてみることにします。

今回、JRA公式サイトのデータソースをスクレイピングします。JRA公式サイトには、有馬記念はもちろん、過去の様々なレースの成績データを見ることができます。

データを取得にはOctoparseを使います。Octoparseは使いやすいWebスクレイピングツールで、プログラミングを必要としなく誰でも簡単にWebデータを取得できます。これから、2019年の有馬記念のデータを収集します。

さて、始めましょう!

ステップ1. 対象のWebページを設定する

Octoparseを起動して、ホーム画面の「カスタマイズモード」に表示されている「+ タスク」ボタンをクリックします。「Webサイト」に対象のURLを入力し、「URLを保存する」ボタンをクリックします。

下記のURLを使います。

ステップ2. 取得する項目を設定する

今回は着順、馬名、騎手、調教師などテーブルにあるデータを全部取得します。

まず、着順の「1」をクリックすると、緑色に変わり、選択されたことを示します。残りの着順は赤色に変わり、類似した要素として識別されたことを示します。各行目のデータを行別で取得するには、「操作ヒント」でエリア拡大のボタンをクリックし、一行目のデータが全部選択されるようにします。テーブルの構造だから、ソースコードには各行のタグは「TR」です。

各行にあるデータを細かく取得するため、「操作ヒント」で「すべてのサブ要素を選択する」をクリックします。そうすると、16行にあるデータはすべて選択され、「すべて選択」、「選択したデータを抽出する」を順番にクリックすると、Octoparseはデータを抽出します。
微信截图_20191225183349.png

フィールド名を編集し、余計なデータを削除することもできます。
图片6.png

「ループアイテム」の各項目をクリックして、データが正しく抽出されるかどうかを確認することができます。

検証したところ、「枠」のデータが取得されません。その部分は画像で表示されるのです。しかし、その数字は画像のURLに隠されています。そのため、まず画像のURLを取得し、それから数字を取得します。

「枠」の画像をクリックし、「操作ヒント」で「選択した画像のURLを抽出する」をクリックすると、データを取得できます。
图片8.png

画像のURLから数字を取得には、2つの方法があります。1つはエクセルの「切り替える」機能です。もう1つはOctoparseのデータ再フォーマット機能です。どっちでも簡単ですので、ここでは省略します。

ステップ3. データ抽出を実行する

これで、スクレイピングのワークフローが完成しました。簡単でしょう!「抽出の開始」をクリックし、「ローカル抽出」を選択し、実行してみると、とてもきれいにまとまてくれました!

この方法でほか年度のデータも取得できます。競馬のデータはほぼテーブルで表示されるから、テーブルのスクレイピングを把握すれば、簡単に取得できますね。最近、Octoparseは初心者への「Hello World」を用意し、テストサイトを使って、スクレイピングの方法を紹介しています。テーブルのスクレイピングデモもありますので、必要があれば、参考してみてください。

分析し予測しようとしますが、手元に適当な統計モデルがないし、やる気も尽きてしまったので、今回はここまでにしましょう(笑)。もし皆さんが予測モデルがあれば、教えてくださいね!

21
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
29