Kazu Home Page

Sep 27, 2020
XML
カテゴリ: 競馬


Python で 競馬予想 第1回(データ取得編 scraping スクレイピング)
Python で 競馬予想 第2回(HTML解析編)
Python で 競馬予想 第3回(Python上でのデータ加工)
Python で 競馬予想 第4回(Python上での配列定義)

Python で 競馬予想 第5回(機械学習用の前処理 1)

前回までで、配列まで到達できたので、あとは自由自在に配列をいじって、数値化すれば機械学習の前準備、いわゆる前処理が完成することになります。今回は数値化の前に競馬新聞のような表を作りたいと思います。

​前回までで馬柱を配列情報に変更するまで到達しました。(下記のような感じです。)



これを数値情報にしていきます。私の場合は拾ってきた情報を、独自の評価基準をまとめたエクセル(と言っても大したものではないですが)を使って、競馬場情報、騎手情報を数値化します。

<競馬場情報の読み込み>


<騎手情報の読み込み>


簡単に言うと競馬場情報は自分の評価基準の走破タイム、末脚評価(3F)。騎手情報は、前走で乗った場合のポイント乗数、今回乗った場合のポイント乗数です。他にもペースや馬場状態の別表を用いました。

まとめると下記のようになります。まずは基本情報です。
左から、馬名、休養が何週、鞍上、斤量、予想される戦法となります。


次にレース情報です。(前5走のレースデータです。下記はその中から1レースのみを記載)
左から開催場所、レース名、芝ダの種別、距離、走破タイム、馬場状態、人気、騎手、斤量、レース時のポジション、3F上がりタイム、着差です。



ここまでで、競馬新聞のようにはなったのですが、もう少し機械学習にかけられるようにデータを数値します。

左から馬名、休養週、騎手、斤量、戦法、 総合指数、1走前のレースの(距離等、ペース、馬場状態、走破タイム(秒表示)、上がり3Fタイム、鞍上、走破タイム指数、3F末脚指数、着差、1走前総合指数、レース名、頭数、位置取り)としました。これが5走前まで1行で表示されます。



全プログラムは長くなってきたので割愛ですが、よく使った関数はFind(文字を検索し、見つけた場所を返すコマンドとmath.ceil(切り上げ)コマンドです。
<findコマンド 下記だと芝のある場所返す>


<math.ceilコマンド 切り上げ>


下記がプログラムの一部です。下のメイン関数から make_race_info_4_2ndを呼んで(def定義)、コールバックをする処理をしています。サブルーチンも使えるようになったので冗長なプログラムがなくなって見やすくなりました。

次回は結果ファイルを読み込みしようかと思いましたが、そろそろ機械学習に入りたいのでスキップして、そちらを掲載します。

<呼び出され側 サブルーチン>​
def make_race_info_4_2nd(BASIC_INFORMATION_2,RACE_INFORMATION_4,Race_horse_num,RACE_POSITION_INFORMATION_CALL) :
    #5走の情報データから馬の戦法(逃げ、先行、差し、追い込み)を決める。
    for i in range(Race_horse_num):
        running_plan = [0,0,0,0]
        for j in range(5) :
            if RACE_INFORMATION_4[i][j][13] !=0 :
                for k in range(4) :
                    if RACE_INFORMATION_4[i][j][13] == RACE_POSITION_INFORMATION_CALL[k][0] :
                        running_plan[k] += 1
                        #print ('展開',i,j,k,running_plan[0],running_plan[1],running_plan[2],running_plan[3])
            else :
                running_plan[1] += 1 # もし入っていなかったら先行として扱う
        #一番大きい先方が入っているindexをひろう
        BASIC_INFORMATION_2[i][4] = RACE_POSITION_INFORMATION_CALL[running_plan.index(max(running_plan))][0]    
        #print (i,max(running_plan))

    print ('make_race_info_4_2nd end')
    return BASIC_INFORMATION_2
<メインプログラム ここでエクセルへの書き出し(csv)まで行います。>
for iraceloop in range(len(url_info)) :
    url_text=url_info[iraceloop]

    str_race= url_text[len(url_text)-2:]+'R'
    print (str_race)

    lines_s1_ret,Race_name_ret,Race_place_ret,Race_horse_num_ret,Race_sort_ret,Race_distance_ret = web_scribe(url_text,str_race)
    BASIC_INFORMATION_ret,Race_INFORMATION_ret = make_race_info(lines_s1_ret,Race_horse_num_ret)
    BASIC_INFORMATION_2_ret,RACE_INFORMATION_2_ret = make_race_info_2_1st(BASIC_INFORMATION_ret,Race_INFORMATION_ret,Race_horse_num_ret)
    RACE_INFORMATION_2_2nd_ret = make_race_info_2_2nd(RACE_INFORMATION_2_ret,Race_horse_num_ret)
    RACE_INFORMATION_3_ret = make_race_info_3(RACE_INFORMATION_2_2nd_ret,Race_horse_num_ret)
    RACE_INFORMATION_4_1st_ret = make_race_info_4_1st(RACE_INFORMATION_3_ret,Race_horse_num_ret)
    BASIC_INFORMATION_2_2nd_ret = make_race_info_4_2nd(BASIC_INFORMATION_2_ret,RACE_INFORMATION_4_1st_ret,Race_horse_num_ret,RACE_POSITION_INFORMATION)
    RACE_INFORMATION_4_2nd_ret = make_race_info_4_3rd(RACE_INFORMATION_4_1st_ret,RACE_INFORMATION_3_ret,Race_horse_num_ret,Race_Place_list,RACE_CONDITION_INFORMATION,Race_Person_list)
    file_name=str_race+'_'+Race_name_ret+'_'+Race_place_ret+Race_sort_ret+str(Race_distance_ret)+".csv"
    if iraceloop == 0 :
        RACE_WRITE_1st_ret = make_write_1st()
        f = open(file_name, 'w', newline='' , encoding='utf_8_sig')
        writer = csv.writer(f)
        writer.writerows(RACE_WRITE_1st_ret)
    RACE_WRITE_2nd_ret = make_write_2nd(BASIC_INFORMATION_2_2nd_ret,RACE_INFORMATION_4_2nd_ret,Race_horse_num_ret,Race_Person_list)
    f = open(file_name, 'a', newline='' , encoding='utf_8_sig')
    writer = csv.writer(f)
    writer.writerows(RACE_WRITE_2nd_ret)
    f.close()
    print (iraceloop+1,'/',len(url_info),'出馬情報スクレイピング完了')
    print ('抽出完了',file_name)





お気に入りの記事を「いいね!」で応援しよう

Last updated  Sep 27, 2020 10:37:44 PM
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

Free Space

設定されていません。

Calendar

Comments

kazu_x68k @ Re[1]:2021年ブログ初め 文字化け解消(01/04) グリ太さんへ 遅くなりましたが、明けまし…
グリ太 @ Re:2021年ブログ初め 文字化け解消(01/04) 明けましておめでとうございます。今年も…
グリ太 @ Re:Python で 競馬予想 実践第10回 チャンピオンズカップ他(12/06) 私も相手探しだとは思うのですが、川田がG…
kazu_x68k @ Re[1]:Python で 競馬予想 実践第8回 ジャパンカップ他(11/28) グリ太さんへ さすがに3強には勝てなかっ…

Favorite Blog

ごった煮 グリ太さん
趣味のDVDと投資… チャック・ハウアさん
 TM万太郎の なまら… TM万太郎さん

Archives

Mar , 2025
Feb , 2025
Jan , 2025
Dec , 2024
Nov , 2024

© Rakuten Group, Inc.
X
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: