続・競馬であそぶ 2

 人間、誉められると良いヒトになることもある




5. 血統の表示

sSeia の競走馬マスタの処理がタコなので、うまくいかないと責められたので仕方なく
簡単にやります。でも、役に立つのかなぁ?

非蓄積系でも、競争馬マスタには3代血統表を埋める14頭の馬名が含まれています。
普通は、母の父くらいでいいと思うのですが、 これを表示する方法です。

kbsTk.pl の修正という形で説明します。ヒントだけになります。

具体的には、一番役に立っていない、戦績集計を外して、そこに血統参照とかいう形で
入れるのがいいと思います。
この戦績集計に関しては以前、単独の機能のスクリプトをUPしていましたが、希望があ
ればそれをもう一度出します。
しかし、この集計は正直いって役に立ちません。同じクラスと上のクラスに限定して集計
したものでないと意味がないんじゃないでしょうか。



rd_base というサブルーチンの中で、競走馬マスタを処理するときに、馬コードをキーに
してその馬の行データをそっくりハッシュに入れていたのですがその部分を変更します。
予め切り分けてから行データの代りにリファレンスとしてハッシュに入れることにします。


    if ( $head eq 'UMPW' ) {    # 血統
        open DAT, $file or die "?? $file ??:$!\n" ;
#       while ( <DAT> ) {
#           chomp ;
#           my $uuu = substr( $_, 11, 10) ;
#           $ummast{ $uuu } = $_ ;
#       }
        until ( eof( DAT ) ) {
            my $record ;
            my $dm = read ( DAT, $record, 1576 ) ;
            my ( $uuu, $titi, $haha, $jiji, $hons, $sskal, $ssk_mw,
         $ssk_ky, $kyst, $rsuk ) = 
                unpack '@11 A10 @212 a18 @256 a18 @388 a18 @1020 A9
          @1092 A18 @1110 A108 @1452 A108 @1560 A12 @1572 A3',
          $record ;
            $ummast{ $uuu } = 
                 [ $titi, $haha, $jiji, $hons, $sskal, $ssk_mw, $ssk_ky, $kyst, $rsuk ] ;
        }
        close DAT ;
    }

# でコメントアウトしたところが、以前の部分で青字の部分が書き換えたところです。
$titi(父)、$haha(母)、$jiji(母の父)です。
それぞれ、全角なら9文字、半角なら18文字分で一応切りました。
本当に、+戦績集計と差し替えるのであれば、$jiji 以降は要りません。

この部分のデータを使うときは、使う場所で( その馬コードが $ucd だとすると )

    my ( $titi, $haha, $jiji, $hons, $sskal, $ssk_mw, $ssk_ky, $kyst, $rsuk ) = 
        @{ $ummast{ $ucd } } ;

こんな感じで活かします。リファレンスですね。
少し難しいかもしれませんが、挑戦してみてください。
他の場所でも数箇所、書き換えが必要なところがあります。

どうしてもダメだったら、修正したスクリプトを Mailででも送ってください。
ヒマなときに拝見します。できたらコメントも付けといてください。
ナンともならないかもしれませんが、なんとかなるかもしれません。

最終的には、差し替えるとこんな感じになります。

    if ( $rad == 2 ) {
        my ( $titi, $haha, $jiji ) = @{ $ummast{ $ucd } } ;
        my $skline = sprintf "%s(%2d)%-9s(父)%s (母)%s (母父)%s\n",
                            $waku, $ub, $unami, $titi, $haha, $jiji ;
        push @skline, $skline ;
    }

基本情報の下に、例えばコノように表示されます。





6. 騎手データFormat

現在使っているオッズ対応騎手データにも飽きてきたのと展開を考えるように
なってから、どうも騎手の得意とする脚質がありそうなので、そっちに対応で
きるデータが必要になってきた。

逃げ〜先行のポジションを取れた場合は、ゴク少数の騎手を除いて回収率は
当然のように100%を超えているので、問題は「中団から差せるのかどうか
を知る方法。

ということで、TARGET の検索で個別にピックアップしたデータを : で区切った
以下のフォーマットでまとめた。過去36ヶ月についての検索分。
折角、データを作ったのでここに出しておきます。2005.12.01 現在


-騎手名 コード 差芝.ダ 芝内.外.偶.奇 ダ内.外.偶.奇
内田博幸: 00422: 42 66 : ** ** 43 ** : ** ** 72 73
ペリエ : 00432: 94 58 : ** 84 ** 85 : ** 71 76 76
大西直宏: 00597: 75 55 : 55 55 70 76 : 96 39 57 66
本田優 : 00600: 59 53 : 90 ** 94 98 : ** 72 71 78
木幡初広: 00629: 77 66 : 85 93 89 65 : 69 69 90 76
中舘英二: 00635: 45 37 : 65 68 68 72 : 77 71 83 62
石橋守 : 00637: 24 49 : 79 53 46 45 : 72 91 89 96
柴田善臣: 00641: 68 70 : 63 59 80 80 : 90 86 89 75
熊沢重文: 00652: 62 44 : ** ** 67 88 : 99 31 63 86
松永幹夫: 00657: 76 58 : 72 69 82 84 : 62 87 79 76
横山典弘: 00660: 84 52 : 78 61 89 79 : 46 93 80 69
蛯名正義: 00663: 60 54 : 70 71 76 70 : 73 87 62 66
武豊  : 00666: 66 58 : 72 64 69 74 : 83 75 78 73
菊沢隆徳: 00672: 90 62 : 65 65 78 96 : 78 55 77 77
芹沢純一: 00674: 56 75 : 71 62 69 77 : 55 72 75 63
小野次郎: 00679: 53 59 : 58 81 81 92 : 44 ** 78 71
佐藤哲三: 00682: 74 60 : ** 96 90 89 : 80 41 70 84
田中勝春: 00684: 63 97 : 65 48 65 67 : 91 72 79 81
角田晃一: 00685: 53 66 : 50 64 55 48 : ** 43 34 73
江田照男: 00689: 78 50 : 94 75 70 65 : 70 61 54 62
四位洋文: 00700: 87 48 : 64 81 77 ** : 48 55 66 72
藤田伸二: 00705: 80 46 : ** 56 90 81 : 63 83 77 78
安田康彦: 00708: 61 83 : 37 ** 84 69 : ** 35 60 85
上村洋行: 00709: 65 67 : 88 ** 75 79 : ** ** 76 **
後藤浩輝: 00711: 80 52 : 78 73 93 81 : 93 91 73 89
-騎手名 コード 差芝.ダ 芝内.外.偶.奇 ダ内.外.偶.奇
小林淳一: 00712: 90 62 : 70 63 74 88 : 51 38 69 48
飯田祐史: 00718: 78 64 : 20 16 79 54 : 67 50 87 60
幸英明 : 00732: 48 66 : 64 73 75 65 : 50 57 79 57
吉田豊 : 00733: 72 57 : 38 ** 77 78 : 78 ** 83 67
渡辺薫彦: 00734: 76 52 : ** ** 52 74 : 61 47 57 67
石崎隆之: 00863: ** 60 : 31 55 71 78 : ** 46 59 63
小牧太 : 00894: 66 ** : 52 ** 63 57 : ** 98 94 88
デザーモ: 00897: 91 ** : ** ** 88 97 : ** 96 ** 86
安藤勝己: 00945: 82 61 : 62 ** 93 77 : 91 97 78 69
福永祐一: 01014: 67 81 : 81 55 71 80 : 51 ** 90 92
和田竜二: 01018: 38 62 : 54 53 65 80 : 95 37 90 91
秋山真一: 01019: 82 ** : 54 ** 70 86 : ** 58 ** 79
勝浦正樹: 01025: 60 47 : 88 54 72 72 : 28 97 75 70
武幸四郎: 01026: 56 48 : 59 65 66 69 : 71 48 76 76
村田一誠: 01031: 70 58 : 87 50 64 67 : 49 28 47 70
池添謙一: 01032: 72 64 : 65 69 77 72 : 91 37 60 77
太宰啓介: 01037: 70 68 : 37 42 60 57 : 35 ** 70 96
北村宏司: 01043: 74 70 : ** 83 82 80 : 67 ** 87 77
二本柳壮: 01049: 52 45 : 45 25 58 68 : 49 78 61 65
柴原央明: 01074: 64 41 : ** 40 87 75 : 56 ** 63 74
田辺裕信: 01075: ** 98 : 99 40 83 83 : 77 46 ** 66
石橋脩 : 01077: 54 44 : 78 50 77 58 : 48 ** 77 54
北村浩平: 01079: 44 52 : 27 42 72 62 : ** ** 70 73
生野賢一: 01081: 54 43 : 85 35 51 57 : ** ** 67 52
長谷川浩: 01084: 84 65 : 65 34 81 63 : ** 16 62 76
-騎手名 コード 差芝.ダ 芝内.外.偶.奇 ダ内.外.偶.奇
松岡正海: 01085: 68 ** : **  5 50 82 : 84 62 85 90
川田将雅: 01088: 45 72 : 96 ** ** 64 : ** 37 77 76
丹内祐次: 01091: 53 55 :  7 68 47 91 : 48 44 73 63
津村明秀: 01092: 49 90 : ** 28 73 69 : 18 30 84 91
藤岡佑介: 01093: 75 49 : 77 ** 94 64 : ** 41 61 85
吉田隼人: 01095: 99 89 : 94 18 78 79 : 18 ** 78 80
赤木高太: 05223: 69 87 : 25 17 61 49 : ** 79 71 95
柴山雄一: 05243: 86 56 : ** ** 61 69 : 60 ** 80 57
ルメール: 05339: 68 39 : 58 82 88 76 : 35 27 74 **
吉田稔 : 05041: 75 50 : 78 48 86 63 : 28 ** 79 59
小林徹弥: 00722: 59 77 : 40 68 51 63 : 82 94 50 **
鮫島良太: 01099: ** 27 : **  0 78 68 : 12 39 74 21
橋本美純: 00714: 76 61 : 63 94 64 74 : 38 76 64 52
武士沢友: 01029: 68 85 : 37 ** 64 73 : 55 78 73 72
岩田康誠: 05203: 75 80 : 69 54 70 91 : ** 80 96 67
川島信二: 01062: 81 73 : ** ** 87 69 : ** ** ** **
-騎手名 コード 差芝.ダ 芝内.外.偶.奇 ダ内.外.偶.奇

数値は(無難ということで)複の回収率を使い、100%を超えるものは ** という
表示にした。
勝ち数で上位50人くらいに数名追加しただけのもの。
これをベースにして何かが出てこないかテストする予定。

差芝.ダ の部分は、中団からの複回収率でこれがメインだけど、ついでに最内、
大外、偶数枠、奇数枠のも一緒にした。
当然、偶&奇数枠のデータには最内大外も含まれているので注。

上の例(内田博幸騎手)では、
中団からの場合は芝で42%ダートで66%、芝の最内大外共100%以上、
偶数枠では43%、奇数枠では100%以上
ダートでも最内大外共100%以上、、、という意味。

スクリプトなどで使う場合は、血統の表示のときと同じようにハッシュで。
キーは騎手コードでも騎手名でもOK。下の例では騎手コード。

ハッシュ名とファイル名。

my %testks ;
my $kstest = 'test_k.dat' ;

以下のように、リファレンスをハッシュに

    open DAT, $kstest or die " nothing $kstest \n" ;
    while( <DAT> ) {
        chomp ;
        next if /^\-/ ;
        my ( $kn, $cd, $ss, $tf, $dt ) = split /: / ;
        $testks{ $cd } = [ $ss, $tf, $dt ] ;
    }
    close DAT ;

使うときは、当然騎手コードまたは騎手名が識別できるところで、

    my $ksts ;
    KAD: {
        defined( $testks{ $kcd } ) or last KAD ;
        my ( $ss, $tf, $dt ) = @{ $testks{ $kcd } } ;
        my ( $sst, $ssd ) = split ' ', $ss ;
        my $ads = '  ' ;
        my ( $in, $out, $gu, $ki ) = () ;
        if ( $tr < 23 ) {        # 芝
            ( $in, $out, $gu, $ki ) = split ' ', $tf ;
            $ksts = $sst ;
        } else {                 # ダート
            ( $in, $out, $gu, $ki ) = split ' ', $dt ;
            $ksts = $ssd ;
        }
        if ( $ub == 1 ) {        # 最内
            $ads = $in ;
        } elsif ( $ub == $to ) { # 大外
            $ads = $out ;
        } elsif ( $ub % 2 ) {    # 奇数
            $ads = $ki ;
        } else {                 # 偶数
            $ads = $gu ;
        }
        $ksts .= $ads ;
    }

で、$ksts には例えばペリエが芝の1枠1番に入ると、94** となるので、適当な
ところに出力するだけで、表示形式は好きなように変えればいい。

このデータ、目安くらいにはなるように工夫したいけれど、役に立つかどうかは不明。


ざっと過去1年4ヶ月分集計してみたところでは、過去36ヶ月の実績を使ったデータ
だから当然重なる部分での数値を押し上げている筈だが、芝の場合は差しでの回収
率は水準以上とはいえず意外。
ダートも数値はマズマズだが、少し疑問符がつく。これは、pcd と対比させることに原
因があるのかもしれない。単に騎手の属性程度の評価と考えるべきか。
むしろ、芝ダートとも枠順データのほうが好結果だった。
しばらく、あそびながら検証予定。


INDEXへ トップページへ 次へ