メインコンテンツへスキップ
見出し画像

MacOSのPCでWindowsソフトを使ってJRA-VANの直前オッズを取得する【競馬AI開発#28】

    Macユーザーであれば、業務・趣味でどうしてもWindows専用ソフトを使いたいのに、Macで動かせず困ってしまうという場面がよくあると思います。
    競馬AIの開発においても、スクレイピング以外の方法でデータを取得しようとするとJRA-VANデータラボのソフトを使う必要があるのですが、Windowsしか対応していないため、断念してしまっている人も多いのではないでしょうか。

    そこで本記事では、

    • 前半:MacOSのPCからWindowsを使う方法

    • 後半:JRA-VANデータベースを構築し、過去レースの直前オッズを一発で取得する方法

    について詳しく解説していきます。

    前半部分ついては、「リモートデスクトップ」という手元のPCからネットワークを通じて別のPCのデスクトップ環境を操作する技術を使い、クラウド上のWindowsPCを手元のMacで使用する手順を詳しく紹介します。

    画像
    リモートデスクトップ(WindowsApp)を利用し、MacOSのPCからWindowsを動かしている様子

    手元のMacのストレージを消費せずに「どこからでもアクセスできる自分専用のWindowsマシン」を手に入れることができるようなイメージです。

    後半部分については、JRA-VANのソフトを使ってデータベースを構築し、過去分の時系列オッズ(=レース直前オッズ)を取得する方法を解説します。

    今回配布するソースコード(記事下部からダウンロード可能)を実行することで、以下のように過去分の時系列オッズを一括で取得してCSVに保存することができます。

    from extract_odds_table import OddsExtractor
    
    extractor = OddsExtractor()
    # 単勝・複勝の時系列オッズ取得
    extractor.extract_odds_tanpuku()
    画像
    単勝・複勝の直近1年間の時系列オッズ(レース10分前〜発走時刻まで)
    # 馬連の時系列オッズ取得
    extractor.extract_odds_umaren()
    画像
    馬連の直近1年間の時系列オッズ(レース10分前〜発走時刻まで)

    なぜこの「時系列オッズ」が必要なのかについては、過去の記事で詳しく解説しているので、参考にしてください。

    ■筆者のプロフィール
    東京大学大学院卒業後、データサイエンティストとしてWEBマーケティング調査会社でWEB上の消費者行動ログ分析などを経験。
    現在は、大手IT系事業会社で、転職サイトのレコメンドシステムの開発を行っています。

    ■動画(前半パート)

    MacOSのPCでWindowsを使う3つの方法

    調べると主に3つの方法があるようですが、どれを選択すれば良いのでしょうか?それぞれの特徴を比較してみます。

    方法1:仮想化ソフトを使う(Parallels Desktopなど)
    仮想化ソフトは、Mac上でWindowsを「アプリのように」動作させる方法で、Parallels DesktopやVMware Fusionなどのソフトが有名です。

    これを使うと、MacOSを起動したまま、その中でWindowsを動かせます。
    最大の魅力はMacとWindowsを同時に使える点で、例えばMacのSafariでウェブ検索しながら、WindowsのExcelで作業するといった使い方が可能です。

    また、インターネット接続がなくても使えるため、場所を選ばず作業できる点も大きな利点です。

    ただし、MacのCPUやメモリをWindowsと分け合うため、性能面では制約があります。特に、重いゲームやグラフィック処理には不向きです。
    費用面では、Parallels Desktopが約8,000〜10,000円、Windows 11 Proのライセンスが約28,000円ほど必要となりやや高額です。

    方法2:Windowsサーバーをレンタルしてリモート接続する
    WindowsApp(旧Microsoft Remote Desktop)などのリモートデスクトップ・アプリを使って、クラウドでレンタルしたWindowsマシンに接続する方法です。

    処理はすべてリモート側で行われるためMacの性能に左右されず、クラウドでは高性能なスペックも選べます。
    また、Mac側に容量を取らない点や同じWindows環境に異なるデバイス(MacとiPadなど)から接続できるため、場所を選ばずに作業環境を維持できる点も大きな魅力です。

    一方で欠点は、常時インターネット接続が必要な点です。通信状況が悪いと操作に遅延が生じてしまいます。また費用面では、初期投資は少なくてすみますが、月額3,000円程度のランニングコストが発生するため、長期利用するとコストは仮想化ソフトより高くなりがちです。

    方法3:Boot Campを使う
    Boot Campは、Mac本体をWindowsパソコンとして起動させる方法です。これは単なるソフトウェアではなく、Mac本体のOS自体を切り替えるシステムで、起動時にmacOSかWindowsかを選択し、完全にWindowsマシンとして動作します。

    この方法は、Mac本体のハードウェアをWindowsが直接利用するため、MacのGPUの性能などをフルに発揮できます。そのため、重い3Dゲームや高度なグラフィック処理、動画編集など、高い処理能力が必要な作業にも対応できます。互換性も非常に高く、ほぼすべてのWindows向けソフトウェアが制限なく動作します。

    ただし、最大の欠点はAppleシリコン(M1/M2)Macでは使用できないという点です。また、MacとWindowsの切り替えには再起動が必要で、同時に両方のOSを使うことはできません。ストレージも物理的に分割する必要があり、一度設定した容量配分は後から変更しにくいという制約もあります。

    費用面では、Boot Camp自体はmacOSに標準搭載されているため、Windows 11のライセンス(約20,000円前後)のみで済みます。セットアップは標準の「Boot Campアシスタント」がガイドしてくれるため比較的簡単ですが、Windowsドライバーなど細かい設定が必要になることもあります。

    画像

    今回は「過去分の時系列オッズを一時的に取得したい」という目的なのと、Mac本体の容量も気になるので、方法2の「リモートデスクトップ」を選択することにします。

    リモートデスクトップの使い方

    Windows Serverのレンタル

    ここからの内容は、動画(概要編)の2:41〜でも解説しています。

    まずはWindowsのサーバーをレンタルします。
    レンタルできるサイトはいくつかありますが、この記事では前回VPSサーバーを借りたのと同じ「ConoHa」というサイトを利用していきます。

    アカウント登録をしていない方は、「お申し込み」から登録をし、ConoHaのコントロールパネルにログインしたら、左メニューから「サーバー追加」をクリックします。

    画像

    前回は「VPS」を選択しましたが、今回はサービスは「Windows Server」、イメージタイプは「Remote Desktop」を選択します。

    料金タイプとプランは必要なスペックに合わせましょう。
    今回は使用したいソフトの推奨スペックが2GB以上なので、プランは「2GB」、料金タイプは「時間課金」を選択することにします。

    画像

    次に、リモートデスクトップを使う場合に必要になるライセンスを一つ追加し(2台目以降は不要になります)、Windows Serverの管理者(Administrator)パスワードを設定します。

    画像

    設定内容を再度確認し、「追加」ボタンをクリックするとサーバーの作成が完了します。

    画像

    15分程度待ってページを更新するとWindows Serverが起動し、使用可能な状態となります。

    画像

    Windows AppでWindowsに接続する方法

    ここからの内容は、動画(概要編)の4:27〜でも解説しています。

    次に、作成したWindows Serverへリモートデスクトップ接続を行い、Macから操作できるようにします。

    まずは、App Storeから「Windows App」(旧Microsoft Remote Desktop)をインストールします。

    インストールできたら起動し、右上の+ボタンからAdd PCを選択します。

    画像

    PC nameの欄に、先ほど作成したWindws ServerのIPアドレスを入力します。

    画像

    IPアドレスはConoHaコントロールパネルの「サーバーリスト」から確認することができます。

    画像

    また、Friendly nameに、このPCを判別するための名前を設定します。(好きな名前を設定できるので、この記事では例えば"conoha-demo"というFriendly nameにします。)

    画像

    次に、Credentials: からAdd Credentials…を選択し、Usernameに「Administrator」、Passwordに先ほど設定したAdministratorパスワードを入力します。
    また、これも任意でFriendly nameを設定しておきます。

    画像

    「Edit PC」の画面に戻って「Save」を押すと、設定したPCが表示されているので、ダブルクリックします。

    画像

    表示されたダイアログで「continue」を押すと、デスクトップ画面が表示され、すぐにWindowsを使えるようになります。

    画像

    次回以降もダブルクリックでクラウド上のWindowsにアクセスすることができます。

    通常のWindows PC同様にソフトのインストールや操作が可能ですし、Macの画面にすぐ戻れるため、MacとWindowsを行き来しながら作業することもできます。

    Mac↔︎Windows間のファイル共有方法

    ここからの内容は、動画(概要編)の7:04〜でも解説しています。

    次に、手元のMacとWindowsサーバーの間でファイルをやり取りする方法について見ていきます。

    まず、WindowsAppで設定したPCの「Edit」を開きます。

    画像

    「Folders」や「Redirect Folders」の項目にチェックを入れ、右下の+ボタンを押します。

    画像

    共有したいMac側のフォルダを指定し、「Save」で保存します。

    画像

    Windows側のエクスプローラーを開くと「リダイレクトされたドライブとフォルダー」に先ほど追加したフォルダが表示され、MacとWindowsサーバー間でファイルを直接やり取りできるようになります。

    画像

    JRA-VANデータベースの構築と時系列オッズ取得

    ここからはJRA-VANのデータを効率よくデータベース化して過去の時系列オッズ(レース直前オッズ)を取得する手順を紹介します。

    以下のように、過去分の時系列オッズを一発で取得してCSVに保存するPythonコードを作成していきます。(完成したソースコードは、記事下部の「ソースコードのダウンロード」から入手できます)

    ▼jra_odds/by_jravan/src/main.ipynb

    from extract_odds_table import OddsExtractor
    
    extractor = OddsExtractor()
    # 単勝・複勝の時系列オッズ取得
    extractor.extract_odds_tanpuku()
    画像
    単勝・複勝の直近1年間の時系列オッズ(レース10分前〜発走時刻まで)

    ▼jra_odds/by_jravan/src/main.ipynb

    # 馬連の時系列オッズ取得
    extractor.extract_odds_umaren()
    画像
    馬連の直近1年間の時系列オッズ(レース10分前〜発走時刻まで)

    【ここからの目次】
    ・ソースコードのダウンロード
    ・動画(詳細編)
    ・JRA-VANデータ取得にはどのソフトを使うべきか?
    ・JRA-VANデータをPythonで操作する方法
    ・データベースを操作する「SQL」の使い方
      ・SQLの基礎
      ・WHERE何による条件指定
      ・文字列の連結
      ・JOINによるテーブル結合
      ・文字列から一部を取り出す SUBSTR()
      ・「A以上B以下」を表すBETWEEN
      ・馬連の時系列オッズ抽出・加工
    ・【実行コード】OddsExtractorクラス実装と実行方法
    ・その他SQLでよく使う命令・関数
      ・集計関数 (COUNT, AVG, SUM, MAX, MIN)
      ・文字列関数・演算子 (LIKE, LENGTH)

    ソースコードのダウンロード

    ■ディレクトリ構成

    keibaAI-v3/
    └── jra_odds/
        └── by_jravan/
            ├── data/
            │   └──table/
            │      ├── odds_tanpuku.csv     ・・・単勝・複勝の加工済み時系列オッズテーブル
            │      └── odds_umaren.csv      ・・・馬連の加工済み時系列オッズテーブル
            ├── src/
            │   ├── dev.ipynb               ・・・開発用のnotebook
            │   ├── extract_odds_table.py   ・・・時系列オッズを抽出・加工するクラスを定義
            │   └── main.ipynb              ・・・コードを実行するnotebook
            └── windows_server/             ・・・dbファイルの配置場所
     
     
    競馬予想AIを作ることを通して、機械学習・データサイエンスの勉強になるコンテンツの発信や、筆者が行った実験の共有などを行っていきます。

    あなたへのおすすめ