今日は1日雨降りでしたので、ふと思い立ってロト6用のツールを作って見ました。
ロト6の当選データは、現在当選日の翌日に自分で入力してMariaDBで管理しています。従って、第1回から最新の第1896回までの当選番号6つとボーナス数字1つを1レコードとして保管しています。
以前にも書きましたが、ロト6を予想する場合に大事なのは最新から24回分のデータをまとめて、各数字の出た回数をまずはまとめなければなりません。
今まで、全てのデータはMariaDBに入っていますが、24回分は自分でクエリにより抜き出さなければ行けないので、24回分のデータをExcelに入れ、1つ追加する毎に最初の1つを削除するようにして管理し、その数字を全てまとめてからソートしExcelで各数字の発生回数を管理していました。
この方法でも良いのですが、問題は時間と手間暇が掛かることで、いちいちデータの追加修正をしなければいけないと言う事です。
そこで、MariaDBに新規のデータを追加した後、Pythonで一気に最新から24個分のデータを抜き取り、かつ各数字の発生回数を表示するプログラムを作れば直ぐに終わるかなと思ったからです。
次回予想のプログラムは難しくて直ぐにはできないので、まずは自分で途中まで集計するのを自動化した感じです。
import pymysql
from collections import Counter
# MariaDBに接続する
conn = pymysql.connect(host='あなたのホスト名', user='あなたのユーザー名', password='あなたのパスワード', db='あなたのデータベース名', charset='utf8mb4')
try:
# カーソルを取得する
with conn.cursor() as cursor:
# 最後のレコード番号を取得する
cursor.execute("SELECT MAX(あなたのレコード番号のカラム名) FROM あなたのテーブル名")
max_id = cursor.fetchone()[0]
# 最後のレコード番号から24個前までのsuji1からsuji6までのカラムのレコードを抽出する
cursor.execute("SELECT suji1, suji2, suji3, suji4, suji5, suji6 FROM あなたのテーブル名 WHERE あなたのレコード番号のカラム名 BETWEEN %s AND %s", (max_id-24, max_id))
# 結果をリストに格納する
all_numbers = []
rows = cursor.fetchall()
for row in rows:
all_numbers.extend(row) # 各行の数字をリストに追加
# 数字を小さい順に並べる
sorted_numbers = sorted(all_numbers)
# 同じ番号の出現回数をカウントする
number_counts = Counter(sorted_numbers)
# 結果を表示する
for number, count in number_counts.items():
print(f"{number},{count}")
finally:
# 接続を閉じる
conn.close()
たったこれだけのソースで、各数字の発生回数が一目で分かるので、最初に外す出そうもない数字も削除しやすくなります。
次に、一番出目が多いと言われる、3回まは4回発生している数字も簡単に見つけられます。
これを利用して、次は発生回数が2回以下で次回対象から外した残りで、3回または4回発生している数字だけを抜き出すプログラムに修正したいと思います。
これだけでだいぶ時間が短縮できました。