2017年3月11日土曜日

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

とりあえずレース数を入力すると、そのレースの結果を出力するコードを書きました

着順と一緒の順に、馬番・騎手・人気・倍率を出力します。

コード全部は載せませんが、重要なところだけをピックアップします。

import xlrd
import os.path
nanR =10 #何レース目か
r =nanR-1 #数え方を合わせます
#Excelファイルを開きます
xlsfile ="2016010506.xls"
if os.path.exists(xlsfile):
xls = xlrd.open_workbook(xlsfile)
sheet1 = xls.sheet_by_index(0)
開催場所
basho = sheet1.cell(0,0).value.split(" ")[3]
"""
着順・馬番・馬名・騎手・人気・単勝
"""
#空のリストを作成
allbaba=[]
allkyori=[]
allchaku=[]
allumaban=[]
#12レース分のデータがあるので、縦方向に3R,横方向に4R分のループを作ります
for n in range(4):
for m in range(3):
  #ループの中で空のリストを作ります
baba=[]
kyori=[]
chakujun =[]
umabanjun =[]
#10R以降は書式が異なるのでifで場合分けします
if nanR>=10:
race = sheet1.cell(1+m*25,n*12).value.split(" ")[2]
else:
race = sheet1.cell(1+m*25,n*12).value.split(" ")[3]
#馬場状態とそのレースの距離を出力
baba += race[:1]
kyori =race[1:5]  
#着順に相当する列を取得し、ループで得た結果を空のリストに追加していきます
for i in range (4,22):
chaku = sheet1.cell(i+m*25,0+n*12).value.split(" ")
if "" in chaku:
chaku.remove("")
chakujun += chaku   
#あとは同様
for i in range (4,22):
umaban = sheet1.cell(i+m*25,1+n*12).value.split(" ")
if "" in umaban:
umaban.remove("")
umabanjun += umaban
#レース毎の結果を.appendで追加していきます
allbaba.append(baba)
allkyori.append(kyori)
allchaku.append(chakujun)
allumaban.append(umabanjun)
#最初に入力したレースの結果を出力します
print (allbaba[r])
print (allkyori[r])
print (allchaku[r])
print (allumaban[r])
view raw 03111 hosted with ❤ by GitHub



出力結果(3回分)
['芝']
1600
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16']
['8', '3', '7', '15', '11', '5', '2', '12', '9', '4', '10', '13', '1', '6', '16', '14']
['ルメー', 'ベリー', '横山典', '田中勝', '柴田善', '柴田大', '戸崎圭', '内田博', '蛯名正', '石橋脩', '津村明', '柴山雄', '井上敏', '池添謙', 'コント', '伴啓太']
['1', '3', '6', '4', '9', '8', '2', '7', '11', '5', '13', '10', '16', '12', '15', '14']
['1.8', '10.8', '15.6', '13.4', '29.8', '21.3', '5.6', '18.9', '46.8', '14.3', '104.0', '31.1', '345.4', '67.8', '177.3', '136.6']

----------------------------------
['ダ']
1800
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15']
['3', '5', '1', '13', '7', '8', '2', '10', '9', '14', '11', '4', '15', '6', '12']
['デムー', '黛弘人', '勝浦正', '戸崎圭', 'ベリー', '嘉藤貴', '吉田豊', '内田博', '横山典', '大野拓', '蛯名正', '江田照', '柴山雄', '石川裕', '柴田大']
['2', '9', '3', '1', '10', '12', '7', '6', '8', '13', '5', '15', '11', '4', '14']
['4.8', '50.9', '5.9', '2.5', '59.2', '73.1', '32.4', '12.1', '39.3', '98.6', '8.9', '189.3', '61.6', '7.1', '144.1']

----------------------------------
['芝']
1600
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
['4', '10', '6', '2', '9', '1', '8', '5', '7', '3']
['丸山元', 'ベリー', '大野拓', 'ルメー', '柴田大', '戸崎圭', '嘉藤貴', '池添謙', '長岡禎', '蛯名正']
['4', '1', '7', '2', '8', '5', '10', '3', '9', '6']
['10.4', '1.9', '17.0', '4.6', '22.8', '11.4', '137.7', '8.2', '53.8', '11.6']


と、だいぶ長くなってきましたね。

正直わかりにくくてブログ書きながらも自分しかわからないコードになってしまっているかもしれません。

今回は微修正や調整が主だったので、pythonの新たなメソッドを使ったりはしていません。

強いて言えば前回の.appendを使うところが重要ですねw
.appendの使い方ですが、例えば

a=[1,2,3,4,5]と
b=[6,7,8,9] というリストがあったときに

a + b  => [1,2,3,4,5,6,7,8,9]
ですが
a.append(b) =>[1,2,3,4,5,[6,7,8]]
となります。


bレース目のデータを取り出すとしたら、前者のよくわからないところから取得するよりも、次元を増やして別々のリストから取得したほうがわかりやすいですよね。

.appendにより決まった数値から機会的に欲しい数値を取り出してくれるリスト作成を学びました。


<<<Python競馬予想プログラミング【4】~Excelシートをすべてリスト化~



0 件のコメント:

コメントを投稿