2014年7月22日火曜日

例外的なデータ

Webページを解析するで、書いたように、Yahoo競馬のWebページをもとに競馬のデータを取得しようとしていて、前後の文字列を使用した。これで、データを取れるのだが、レースによってエラーが出る。すべてのデータを確認して、仕様を予測したのではないので、例外的なデータの場合があるからだ。まずややこしいのは払戻金の情報。昔は、三連単は2004年から三連複は2002年から始まったので、それより昔は当然ない。馬連は8頭立て以下では存在しないとか、競馬をわかっている人には当たり前のことではあるが、ややこしい。同着も存在する。それらを考慮してデータ構造を作った上で、取り出さなければならない。リスト型を使い、ない場合を含めていくつになることもありうるようにした。

他、競争中止になったときには、着順やタイム、上がり3ハロンなどの情報もなくなる。着順には数字が書かれるかわりに中止書かれている。競争除外になれば、それに加えて、オッズや馬体重、人気、通過順位もなくなることになる。値が空欄になったり、"-"になったりする。エラーが出るごと、これらを受け入れられるように修正した。

降着があるのも注意点。"5(3)"のように書かれている。こう書かれている場合は、もともとは3着だったのが5着に変更されたということのようだ。降着の取り扱いをデータ上どうするか悩んだが、そのレースの他の馬については降着で訂正される前の着順は書かれていない。なので、降着を反映した後のデータを取り扱うのがいいのだろう。なので、上記の例では、(3)の部分は捨てることになる。

 String[] strorders = strorder.split("\\(");
 horse.order = Integer.parseInt(strorders[0].replaceAll("[^0-9]", ""));

上記のようにして、括弧の前の部分だけを取り出し。"("でsplitするときは、"\\"を前につける必要がある。このことを最初知らずに少しだけはまった。

0 件のコメント:

コメントを投稿