2017年3月12日日曜日

Python競馬予想プログラミング【6】~Excelデータから馬番ごとの複勝率(3着以内に来る確率)を求める~

Excelデータから各種データの値を取得する方法は過去の記事を参照してください






今回はとりあえず2016年1月5日に開催された中山のダート1200mだけの結果を抽出して出力します。
この日は該当するレースが3レースがあり、出走数はいずれも16頭でした。
出走数は16で固定していますが、次回以降必要に応じて変数にしていきます。

print("レースごとの着順データ (allumabanに格納されている)")
print(allumaban)
print("レース情報、allbabaにダートか芝か、allkyoriに距離が格納されている")
print(allbaba)
print(allkyori)
tousuu = 16
fukulist = [[0 for i in range(3)]for j in range(tousuu)]
numofrace = 0
for i in range(12):
if allbaba[i][0]== "ダ":
if allkyori[i]=="1200":
fuku = (allumaban[i][:3])
for t in range(3):
fukulist[int(fuku[t])-1][t]+=1
numofrace +=1
print ("該当レース数")
print (numofrace)
print ("馬番ごとの3着以内の数")
print (fukulist)
print ("複勝率")
for i in range(tousuu):
print (str(i+1)+"番 "+str(sum(fukulist[i])/numofrace*100))
view raw 03121 hosted with ❤ by GitHub



出力結果
----------
レースごとの着順データ (allumabanに格納されている)
[['12', '11', '13', '9', '5', '7', '14', '4', '10', '2', '15', '6', '16', '3', '8', '1'], ['5', '15', '7', '9', '11', '6', '8', '3', '14', '2', '12', '10', '13', '4', '1', '16'], ['12', '8', '13', '11', '4', '5', '15', '16', '7', '6', '1', '14', '2', '9', '10', '3'], ['10', '7', '2', '14', '13', '11', '6', '12', '16', '3', '1', '8', '9', '4', '5', '15'], ['2', '13', '10', '5', '1', '6', '9', '4', '7', '15', '12', '14', '11', '8', '3'], ['8', '9', '4', '11', '5', '2', '14', '10', '13', '12', '1', '7', '3', '6'], ['12', '3', '8', '11', '5', '1', '14', '2', '13', '6', '7', '16', '10', '4', '15', '9'], ['16', '12', '3', '5', '2', '7', '4', '9', '8', '6', '14', '1', '15', '11', '13', '10'], ['3', '5', '1', '13', '7', '8', '2', '10', '9', '14', '11', '4', '15', '6', '12'], ['4', '10', '6', '2', '9', '1', '8', '5', '7', '3'], ['5', '7', '10', '14', '3', '6', '4', '2', '13', '1', '8', '12', '11'], ['8', '3', '7', '15', '11', '5', '2', '12', '9', '4', '10', '13', '1', '6', '16', '14']]
レース情報、allbabaにダートか芝か、allkyoriに距離が格納されている
[['ダ'], ['ダ'], ['ダ'], ['ダ'], ['芝'], ['芝'], ['ダ'], ['ダ'], ['ダ'], ['芝'], ['芝'], ['芝']]
['1200', '1800', '1200', '1800', '2000', '2000', '1800', '1200', '1800', '1600', '2000', '1600']
該当レース数
3
馬番ごとの3着以内の数
[[0, 0, 0], [0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 1, 0], [0, 0, 0], [0, 0, 0], [0, 1, 0], [2, 1, 0], [0, 0, 2], [0, 0, 0], [0, 0, 0], [1, 0, 0]]
複勝率
1番 0.0
2番 0.0
3番 33.33333333333333
4番 0.0
5番 0.0
6番 0.0
7番 0.0
8番 33.33333333333333
9番 0.0
10番 0.0
11番 33.33333333333333
12番 100.0
13番 66.66666666666666
14番 0.0
----------

今回の肝となるのは、出走頭数に応じた"0"のリストを作成することです

tousuu = 16
fukulist = [[0 for i in range(3)]for j in range(tousuu)]


2次元の要素が全て"0"であることで、着順に応じた馬番に1を足すことができます。
例えば馬番"12"番が"1"着の場合、fukulist[12][1]の値が+1となります。

複勝率は3着以内ですので、sum[fukulist[i]]で3着以内の回数を求めます。
あとはダート1200mに該当したレース数"numofrace"で割り算すれば複勝率になります。

ちなみに3着以内の合計を求めなければ1着率になります。



だんだん解析コードっぽくなってきましたね


<<<  Python競馬予想プログラミング【5】~Excelシートをレースごとにリスト化~


0 件のコメント:

コメントを投稿