準備するもの |
|
年末年始、何かとお金が入用です。 本気で宝くじを当てにいかねばなりません。
といっても、億円レベルは要らないので(いただけるのなら貰いますが)、ローリターンで確率の高い宝くじにします。やはりナンバーズ3、ミニでしょう。00から99の間の数字の中から選ぶので、当たる確率は100分の1。
過去の当たり番号(みずほ銀行)の当選発表から、
日付(タブ)番号
という形式で約400回分をまとめたminiというファイルを使って、数字がどう現れているのか確認したいと思います。
takk@deb83:~/blog/src$ wc -l mini 400 mini takk@deb83:~$ head mini 12/01 39 11/30 28 11/29 17 11/28 90 11/25 09 11/24 39 11/23 50 11/22 25 11/21 22 11/18 81 takk@deb83:~$
400回中一番多く出現した数字は?
takk@deb83:~$ cut -f2 mini | sort | uniq -c | sort -r | head -1 9 87 takk@deb83:~$
87という番号が9回当たっています。
00〜99すべての数字が出現していたのでしょうか。wcで確認します。
takk@deb83:~/blog/src$ cut -f2 mini | sort | uniq | wc -l 97 takk@deb83:~/blog/src$
あれ、3個足りません。
はて。この3つは何番なんでしょうか。
sortしてdiffを使えば以下のようにすぐ抽出できますが、今回は「集合の差」で求めたいと思います。
takk@deb83:~$ seq -f "%02g" 0 99 > all takk@deb83:~$ cut -f2 mini | sort | uniq | sort | diff - all 35a36 > 35 37a39 > 38 74a77 > 76 takk@deb83:~$
まずpythonのリストを使って全番号を並べてみます。
ソースはこれです。
takk@deb83:~$ cat -n read-mini.py 1 f=open("mini") 2 lis=f.readlines() 3 lis=[int(x.split('\t')[1]) for x in lis] 4 print lis
これを実行すると、当選番号のリストが表示されます。
takk@deb83:~$ python read-mini.py [39, 28, 17, 90, 9, 39, 50, 25, 22, 81, (省略) 37, 41, 65, 78, 84, 9, 66, 62, 77] takk@deb83:~$
当選番号リストができたら、次は00-99のリストも作って、00-99リストと、当選番号の集合(set)の差を求めます。
ソースです。
takk@deb83:~$ cat -n read-mini.py 1 f=open("mini") 2 lis=f.readlines() 3 lis=[int(x.split('\t')[1]) for x in lis] 4 all=[x for x in range(100)] 5 print set(all) - set(lis)
実行してみましょう。
takk@deb83:~$ python read-mini.py set([35, 76, 38]) takk@deb83:~$
35,76,38が、過去400回のうち一度も当選していない番号です。
確率なので、00-99の番号は同じ確率で出現するはず。。。。
しかし400回も出現していないなんて、35,76,38という番号は、今後果たして当たりやすいのか外れやすいのか。
コメント