Hataraita.net

馬鹿なこととITと馬鹿なことと競馬と変な資格が好きです。でも馬鹿なことはもっと好きです。

JRA-VAN DataLab. PYTHON対応化計画(非公式)①動機と環境設定

f:id:bananawoma:20160926170603j:plain

こんにちは。

ニコニコ生放送の『電脳賞』も終わり平穏な日々を過ごしております。

『電脳賞』出演において、場を提供していただいたドワンゴ様、共演者様、視聴者様には遅くなりましたが、この場を借りてお礼申し上げます。

(この記事では人工知能という言葉を繰り返しますが、私の定義する人工知能の意味合いとは少し違います。一般化して書いてるつもりなのでご容赦ください)

電脳賞をふり返って-DatalabとPythonの相性悪くない?-

 

『電脳賞』をふり返ってみると、ふがいない気持ちなどの個人的感情はさておき、少し残念な点がありました。

電脳賞とはJRA-VANが提供するDatalabという競馬データベースを用いた電脳予想大会です。

将棋、囲碁などで人工知能が人間をやっつける中いよいよ競馬にもその波が来たか、という感じですね。

人工知能を用いて参戦するチームもあれば、人工知能を使わず参加するチームもありまさに混迷を極めた大会でした。

さて、話を戻すと、私が残念と感じた点はJRA-VANの提供するJV-LinkというソフトウェアおよびAPIと、人工知能のライブラリが豊富な言語Pythonの相性がすこぶる悪いということです。

その為、競馬ファンは人工知能を活用できず、人工知能技術に秀でたものは競馬の知識が十分ではないという状況が発生しました。

結果的に上位に両方の知識を兼ね備えるチームが名を連ねたことを考えると、バランスは良かったとも言えるのですが、私の希望としては競馬ファンにもっと人工知能を身近に感じてもらいたいという思いが強くなりました。

 

じゃあPythonのDatalab. JV-Linkライブラリを作ればいいじゃない

第3回電脳賞があるかどうかは分からないのですが、今の状況では次回以降もJRA-VANのデータを用いた機械学習ソフトを開発するのは少しハードルが高い気がします。

もっと大会を盛り上げるためには、予想の部分に時間をかけられるように前段の準備期間を短くする必要があると感じています。(これは優勝チームのニコちゃんAI競馬さんもおっしゃってました)

なので唐突ですが、JV-LinkようのPythonライブラリをつくっちゃおうと思っています。(というかもう作り始めています。)

意外と嵌る環境設定の落とし穴

さて、このプロジェクトを始めるにあたってまず環境設定で相当嵌ったので忘備録として嵌った場所を残しておこうと思います。

  1. python3でも大丈夫だけど32bit版じゃないとダメ
  2. Ctypesじゃなくてwin32comを使う
  3. anacondaはめっちゃ楽

とりあえず、環境設定の段階で上の3つが激嵌りしたところです。

python3でも大丈夫だけど32bit版じゃないとダメ

まずはこれです。これは本当にめちゃくちゃはまりました。何をやってもダメな状態でした。

まず、JV-Linkの説明ですが、このアプリケーションはVBやC#など公式サポートされてる言語で開発する分には32bit及び64bitに対応しています。

しかし、JV-Link自体は32bit用の64bit用の両方が用意されているわけではなく、用意されているのは32bit版のみです。windowsのWOW64というエミュレーション機能により64bit版でも使えるというだけなのです。

私は64bit版python3.5を使用していたため、どうしても32bitアプリであるJV-Linkをpythonからたたくことができませんでした。

(私は低スペック低スキルのため実際にはpython上でWOW64的にエミュレートすることもできるかもしれません)

32bit版python3.5をインストールしそちらを使用するだけで解決したので、Jv-Linkを使う時は32bit版のpythonで行うことをお勧めします。

Ctypesじゃなくてwin32comを使う

はじめにCtypesを使ってJV-Linkに接続を試みたのですが、大はまりの大失敗でした。

どうやってもCtypesではJV-LinkのDLLを呼び出すことができません。

JV-Linkの主な機能はJVDTLab.dllの中のJVLinkクラスの中にあるようなのですが、Ctypesではどうしても表面だけしか参照することができずJVLinkクラスにアクセスさえできませんでした。

(おそらくこれらも私の低スキル低スペックが原因)

そこで、Ctypesをあきらめwin32comで接続を試みたところすぐに接続することができました。

こちらについては次回詳しく書いていこうと思います。

anacondaはめっちゃ楽

3つ目のはまりポイントは作業効率のお話です。

始めはテキストエディタと標準のpython3.5のみでコツコツやっていたのですが、生産性が悪すぎてanacondaを入れることにしました。

するとどうでしょう。必要なライブラリはだいたい入っているし、Spyderも使い勝手が悪くないし生産性が格段に上がりました。

上級者のかたは、それでも生産性が悪いとおっしゃるかもしれませんが、私にとっては大きな進歩です。

というか、もっと生産性が上がる方法教えてください。おねがいします。ぺろぺろ。

 

さて、もし完成したらライブラリとしてオープンソースで公開しようと思ってるこのプロジェクトですが、前途は多難そうです。VBA中心にやってたおっさんにはなかなかハードルが高いというか心が折れそうになることが多々あります。

でもやっぱり一度参加したものとしては電脳賞が今後盛り上がるように何かできればと考えているので頑張ります!

大会ではご声援にこたえることはできませんでしたが引き続き頑張りますのでご応援いただけると有難いです。