どうも、こんにちは。今日はアメリカで今、熱いパワーボールの宝くじとPythonを使ってなんかやってみます。
宝くじは自己責任で行いましょう。
パワーボールとは
日本のロト6と同じようなものです。
最初に数字の5つを選び、次にパワーボールの数字を選びます。
この6桁の数字が予想できればジャックポッドがもらえるわけです。
最初の5つの数字は1から69です。
パワーボール(ラッキーナンバー)は1から26までの数字を選びます。
抽選は毎週、月曜日、水曜日、土曜日になります。
今はジャックポットを当てた人がしばらくいないのでどんどん積み重なって1.9ビリオンダラーになってます。(2022年11月7日時点)
日本円にすると277,946,250,000円になります。2779億円です。。。。
すごいですね。
まずは確率論を学ぶ
ちょっと前に本で読みましたが、なぜ、すべての並び方に同じ当たる確率が均等にあるはずなのに、1・2・3・4・5・6とか5・10・15・20・25・30という予想をする人がいないのか。もしくはそのようなあたりがないのかという理由に説明していました。
その結果、Powerballは3つの奇数と2つの偶数の組み合わせと小さい数と大きい組み合わせの数が良いことを知りました。
過去のデータを手に入れる
テキサス州の宝くじサイトで過去のパワーボールのデータがCSVで手に入りました。
https://www.texaslottery.com/export/sites/lottery/Games/Powerball/Winning_Numbers/

とりあえず、2010年からのすべてのデータを手に入れました。
Pythonですること
では、下記の順番でデータを分析していきます。
- CSVファイルを開くこと
- main_num(最初の5つの数字)の配列を作成
- power_num(パワーボールの数字)の配列を作成
- CSVのデータをループさせて上記の2つの配列に足す
- 頻度の多い数の順番に並べ替え、同じ数字を抜く
この方法で、当たる確率の高い数字が表示できるようになりました。
ではサンプルコードをどうぞ。
import csv from collections import Counter main_num = [] power_num = [] with open('powerball_all_year.csv', newline='') as csvfile: data = csv.reader(csvfile, delimiter=',') for row in data: for r in row[4:9]: main_num.append(int(r)) power_num.append(int(row[9])) def calc_num(array): # Reorder by frequency in list array = [item for items, c in Counter(array).most_common() for item in [items] * c] # Removing the suplicated numbers array = [i for n, i in enumerate(array) if i not in array[:n]] return array print(calc_num(main_num)) print(calc_num(power_num))
では、Pythonを実行すると、確率の高い数字が出てきました。

ここから先ほどの論理を合わせて数を選べば当たる確率も増えるのでは?
お疲れ様です。
この記事を書いた数日後に誰かがこのジャックポットを当てたようです。また20億円からスタートしていくようですね。夢がいっぱいです。