競馬であそぶ


血統評価のための Perl スクリプト


戻る



スクリプト名は一応、 Sbbout.pl としているが、お好きなように。

下の、 __END__ までをコピーして、( その下までコピーしても実行されないので問題ない )
Sbbout.pl というスクリプトを( リネームするなどして )作り、Target のレース検索で出力した
csv ファイルがある場所で実行すれば、多分、誰もが欲しがる?データが出現する。


#!/usr/bin/perl
# $Id:
use strict ;
# ---------------------------------------------------------------------------
# 出力したいデータをここで選択して $num に指定 ★
# 単勝率⇒3 or 複勝率⇒4 or 単回収⇒5 or 複回収⇒6 
my $num = 4 ;
# ソートする項目を数値で指定( 下のファイルのコメント部分を参照 )
my $sort = 0 ;
# ---------------------------------------------------------------------------
my %bl ;                        # 
my %al ;
my @br ;
my @sbbfiles = (    #  以下12個の csv ファイルを用意
        'P_new_T.txt',  #  0 種牡馬 2,3歳限定 芝
        'P_old_T.txt',  #  1 種牡馬 3,4歳以上 芝
        'P_new_D.txt',  #  2 種牡馬 2,3歳限定 ダ
        'P_old_D.txt',  #  3 種牡馬 3,4歳以上 ダ
        'M_new_T.txt',  #  4 母の父 2,3歳限定 芝
        'M_old_T.txt',  #  5 母の父 3,4歳以上 芝
        'M_new_D.txt',  #  6 母の父 2,3歳限定 ダ
        'M_old_D.txt',  #  7 母の父 3,4歳以上 ダ

        'Pomo.txt',             #  8 種牡馬 重不良 芝
        'Pomd.txt',             #  9 種牡馬 重不良 ダ
        'Momo.txt',             # 10 母の父 重不良 芝
        'Momd.txt'              # 11 母の父 重不良 ダ
) ;
# スクリプトをcsv ファイルと別の場所に置くときは $tgtps でパス指定 ★
my $tgtps ;

my $ii = 0 ;

for my $sbbfile ( @sbbfiles ) {
        my $ktf = join '', $tgtps, $sbbfile ;
        open DAT, $ktf or die "?? $ktf ??:$!\n";
    while ( <DAT> ) {
                next unless /^\d+/ ;
                chomp ;
                my ( $un, $su, $rf ) = ( split /,/ )[ 1, 2, $num ] ;
                $un =~ s/\"//g ;
                $rf =~ s/%// ;
                $bl{ $un }[ $ii ] = $rf ;
                $al{ $un } += ( split '/', $su )[1] if $ii < 8 ;
        }
        close DAT ;
        $ii++ ;
}

@br[ 3 .. 6 ] = ( '単勝率', '複勝率', '単回収', '複回収' ) ;

my $fname = join '', $br[ $num ],  $sort, '.txt' ;
open OUT, ">$fname" ;
print OUT       'A⇒2歳,3歳限定 ',
        '|      芝     [ 父 ]      ダ      |      芝     [母父]      ダ      |',
        "\nB⇒3歳上,4歳上 |",
        '  A     B   重  :  A    B    重  |  A     B   重  :  A    B    重  |  計',
        "\n 種牡馬名 ($br[ $num ])\n" ;

for my $papa ( sort { $bl{$b}[$sort] <=> $bl{$a}[$sort] } keys %bl ) {
        my $pname = substr ( $papa, 0, 18 ) ;   # 表示馬名は全角9文字( 半角 18 字 )でカット
        print OUT sprintf "%-18s| %4s %4s %4s : %4s %4s %4s | %4s %4s %4s : %4s %4s %4s |%5d\n",
                $pname, @{ $bl{ $papa } }[ 0 , 1, 8, 2, 3, 9, 4, 5, 10, 6, 7, 11 ], $al{ $papa } ;
}
close OUT ;

__END__

#-------------------------------------------------------------------------------------
usage: perl sbbout.pl

それぞれの名のついた txt ファイルが同じディレクトリに出力される。
つまり4つのデータがそれぞれの名前で出てくるので重複することはない。
( 単勝率n.txt, 複勝率n.txt, 単回収n.txt, 複回収n.txt )
#
Target のレース検索から出力した csv ファイルを順次読み込んで処理
( 種牡 )馬名をキーにしたハッシュに配列としてデータを保持。
出力時にソートすべき項目があれば指定。

下と同じ出力項目( & ファイル名 )なら、このスクリプトはそのまま使える。
キーとなる2番目の項目は、( 種牡馬 or 母父馬 ) となっているはず。

[ Target からの検索データ例 ]
順位,種牡馬,着別度数,勝率,複勝率,単勝回収値,複勝回収値
1,サンデーサイレンス, 330- 245- 219-1176/1970,16.8%,40.3%,80,81
2,ダンスインザダーク, 205- 208- 197-1900/2510,8.2%,24.3%,72,72
3,アグネスタキオン, 167- 155- 107- 776/1205,13.9%,35.6%,75,80
4,サクラバクシンオー, 158- 109- 112- 861/1240,12.7%,30.6%,82,80
5,フジキセキ, 145- 151- 134- 998/1428,10.2%,30.1%,68,87
    以下略・・

例によって例のごとく、、
ここまで読んで理解できなければ、縁がなかったということでヨロシク。

検索ではそれぞれの目的に応じて期間や最低サンプル数を決めればいいと思う。
sSeia は5年50( 重不良は20 )走を目安にしている。

エクセルでも同じことはできるが、スキルと時間と手間がかかる。
いくらでも応用がきくので、これを使いこなせば競馬データなど扱うのが楽しくなるかも。

↓ 出力サンプル。by 複勝率0.txt


A⇒2歳,3歳限定 |      芝     [ 父 ]      ダ      |      芝     [母父]      ダ      |
B⇒3歳上,4歳上 |  A     B   重  :  A    B    重  |  A     B   重  :  A    B    重  |  計
 種牡馬名 (複勝率)
サンデーサイレンス| 40.3 28.3 30.6 : 34.4 28.7 26.7 | 29.2 28.4 32.7 : 24.9 27.1 29.3 |17012
Kingmambo         | 36.4 30.6      :      17.1 30.6 | 28.9 16.3      : 25.2 23.7 23.3 |  998
ウォーエンブレム  | 36.4           :                |                :                |   88
アグネスタキオン  | 35.6 25.1 25.6 : 35.5 27.9 33.1 |                :                | 2565
ゴールデンフェザン| 32.9 15.1      : 22.6 13.5 20.0 | 24.3 22.2      : 13.6 16.4 25.0 |  711
Rahy              | 32.7 22.6      :      24.1      | 24.0 13.2      : 32.3 15.6 25.0 |  544
Fantastic Light   | 32.0           :                |                :                |   50
Silver Hawk       | 31.1 15.9      :                | 24.2 23.6 19.0 : 16.2 25.3  4.3 |  751
フレンチデピュティ| 31.0 27.8 27.9 : 37.2 26.3 29.8 |                :                | 2920
シンボリクリスエス| 30.8      31.8 : 32.1      41.9 |                :                |  561
サクラバクシンオー| 30.6 24.6 22.2 : 27.1 22.4 23.7 | 18.9 46.2      : 15.6      15.6 | 5394
フジキセキ        | 30.1 24.1 22.2 : 26.9 26.0 26.9 | 20.0 24.3 13.8 : 20.3 20.7 12.5 | 6123
エンドスウィープ  | 29.0 20.1 15.6 : 40.8 27.1 31.8 |                :                | 2377
ファルブラヴ      | 28.9           : 15.0      20.0 |                :                |  222
テンビー          | 28.8 15.8 11.4 : 12.0  6.3  9.1 |                :                | 1069
ザグレブ          | 28.6 18.6      :                |                :                |  160
Fusaichi Pegasus  | 28.4 18.3      : 36.9 35.7 29.3 |                :                |  424
スピードワールド  | 28.4           : 28.1           |                :                |  145
Grand Slam        | 27.9 17.8      : 38.4 23.2 26.7 |                :                |  349
ダイタクリーヴァ  | 27.5           :                |                :                |   69
Singspiel         | 27.1 36.3      :                |                :                |  231
アグネスデジタル  | 26.9           : 29.7      20.0 |                :                |  369
アドマイヤコジーン| 26.8 19.5 22.2 : 11.1      11.4 |                :                |  546
ブライアンズタイム| 26.6 22.3 22.5 : 33.0 29.4 30.9 | 17.4 21.8 18.0 : 23.4 23.7 25.9 | 8823
エルコンドルパサー| 26.5 27.7 36.4 : 25.3 29.2 29.3 |                :                | 3093

以下500件以上・・省略..

↓ 出力サンプル。by 複勝率4.txt なら


A⇒2歳,3歳限定 |      芝     [ 父 ]      ダ      |      芝     [母父]      ダ      |
B⇒3歳上,4歳上 |  A     B   重  :  A    B    重  |  A     B   重  :  A    B    重  |  計
 種牡馬名 (複勝率)
Last Tycoon       |                :                | 46.0 22.6      : 19.0 17.9      |  339
Alzao             |                :                | 44.4 41.1      : 13.5           |  222
Bluebird          |                :                | 43.9 26.3      :                |  133
Shirley Heights   |                :                | 39.3 20.7      :                |  114
Zilzal            |                :                | 36.4 26.5      :      18.9      |  225
Highest Honor     |                :                | 35.2 40.0      :                |  124
ウイニングチケット| 10.3 13.3      : 10.6 13.5 14.6 | 35.0           :                |  615
パドスール        |                :                | 34.1 28.7      : 14.7 27.3 11.1 |  355
Mtoto             |                :                | 34.0           :      29.4      |  104
Topsider          |                :                | 33.9 25.8      : 29.2 22.0 25.0 |  385
Danehill          | 23.4 22.6      :                | 33.3 20.2      : 18.6 23.6 18.9 |  734
Dehere            |                :                | 33.3 14.0      :                |  101
Chief's Crown     |                :                | 33.1 24.7      : 32.2 24.3 17.8 |  514
Storm Cat         |                :      43.4      | 32.4 17.8 24.5 : 30.7 24.7 25.8 | 1844
デインヒル        |      20.7      :                | 32.2 23.6      : 29.2 20.0 23.3 |  630
Darshaan          |                :                | 31.9 24.5      : 21.6 19.0 19.0 |  305
Relaunch          |                :                | 31.6           : 38.3 29.2      |  235
フレンチグローリー|                :                | 31.6           : 23.3 18.9 14.3 |  359
ホワイトマズル    | 24.1 21.8 20.5 : 20.1 18.1 20.1 | 31.6           : 36.4           | 2153
Caerleon          |       6.3      :                | 31.4 26.4 26.5 : 22.0 18.2 16.0 | 3070
Kenmare           |                :                | 31.0 38.1      :                |  155
Dixieland Band    |                :                | 30.8 26.3      : 34.4      34.6 |  282
ドクターデヴィアス|                :                | 30.6 20.7 22.9 : 16.4 20.8 19.7 | 1186
Miswaki           |                :                | 29.2 21.8 34.3 : 31.4 21.6 29.3 | 1191
Bering            |                :                | 29.2 35.4      : 10.2           |  230
サンデーサイレンス| 40.3 28.3 30.6 : 34.4 28.7 26.7 | 29.2 28.4 32.7 : 24.9 27.1 29.3 |17012

以下500件以上・・省略..

用途は人によって違うと思うけど、適性だけでなく成長度の目安にしても面白いんじゃない?

理解できてる人の質問なら無視することはないのだが、そういう人はオラの知らないことを
訊いてきたりする。



これを応用すると
例えば、以下のように調教師の傾向も簡単にチェックできる。( 調複勝率_0.txt )


A⇒2歳,3歳限定 |     芝          ダ     |
B⇒3歳上,4歳上 |  A     B   :  A    B   |  計
 調教師 (調複勝率_)
(美)藤沢和雄      | 46.8 37.3  :      41.7 | 1417
(栗)池江泰寿      | 46.2 26.1  : 41.1 32.0 |  765
(栗)伊藤雄二      | 44.1 37.0  :      28.8 |  617
(栗)松田国英      | 43.3 25.0  : 42.1 32.5 | 1075
(栗)松田博資      | 43.3 35.2  : 35.0 22.4 | 1140
(栗)池江泰郎      | 41.4 32.1  : 38.9 24.5 | 1325
(栗)音無秀孝      | 41.4 37.1  : 41.1 36.1 | 1351
(栗)瀬戸口勉      | 38.3 22.3  : 29.2 29.5 | 1200
(美)萩原清       | 37.7 22.7  : 47.0 37.5 | 1100
(美)国枝栄       | 37.2 26.5  : 37.9 26.8 | 1501
(美)二ノ宮敬      | 36.7 29.1  : 37.4 24.7 | 1466
(栗)白井寿昭      | 36.5 25.0  : 33.7 34.7 | 1010

... 以下省略

注: ↑ 5年間 100走を下限にしている。



戻る