見出し画像

ロト6の当選番号をPythonを使って可視化してみた


どうも、じぇいかわさきです。

みなさんも知っていると思いますが、毎週2回ロト6の抽選会が行われています。

この抽選方法は、数字の書かれたターゲットが回転し、無作為に矢を放ち的に当て、出た数値が当選番号になっています。

従って、周期性も法則も無いと言われていますが、本当でしょうか?偏りとか無いでしょうか?

今回、習い始めたばかりのPythonを使って、データの可視化をしてみました。

当てに行くつもりは有りませんが、本当に当選番号がばらついているのか確認したかったからです。

結果を紹介しますので、みなさんの意見を是非聞いてみたいと思います。



ランダムだと言われても、有る所に固まってるように見える

画像1

このデータと数値から何か見えそうな感じ
参考データにはなりそう




なぜロト6なのか

一般的に宝くじ系は、数字の入ったルーレットを回して、矢を当てた数字で当選番号を決定していく。

イカサマデモしない限り、何処に当たるか分からないので、当選番号に法則などの必勝パターンは無いと言われている。

スクラッチなどの場合には、削った後のパターンのは位置に法則性があり、ある程度当選を予測できるそうだ。(当たるか、外れか程度だが)

ロト6の場合、当選数字はランダムと言われていますが、毎回当選番号を見ていると、何時も出るような数字ってのが有るんですよね。

この数字前回も有ったなって感じですが。

そこで、実際の当選数字は本当にランダムで出ているのか、Pythonでチェックしてみました。

自分は、ロト6の当選番号データをMariaDBに入力しております。昨日が第1555回になりましたが、この1555回分のデータを使います。

まずはいつも通りに、macでターミナルウィンドウを立ち上げ、MariaDBに接続します。

goose@NERV ~ % mysql -u neo -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.4.6-MariaDB Homebrew
 
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> use loto6
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed

ここまでで、loto6というデータベースの使用が可能になりました。

まずは、昨日の当選番号をデータに追加します。

MariaDB [loto6]> INSERT INTO result (kaisai, date, No1, No2, No3, No4, No5, No6, bonus) values ('1555','2021/1/28','2','8', '17', '23', '24', '27', '5');
Query OK, 1 row affected (0.010 sec)

毎回同じコマンドなので、数値だけ変えれば直ぐに登録ができるようにしてあります。

そして、実際のロト6の予測に使用するのは、最新から24回分程度で十分だと、世間では言われていますので、まずは先程のデータが本当に追加されたかを含め、終わりから24個分のデータを確認します。

MariaDB [loto6]> select * from result where kaisai > 1555-24 ;
+--------+------------+------+------+------+------+------+------+-------+
| kaisai | date | No1 | No2 | No3 | No4 | No5 | No6 | bonus |
+--------+------------+------+------+------+------+------+------+-------+
| 1532 | 2020-11-05 | 2 | 9 | 14 | 16 | 17 | 21 | 34 |
| 1533 | 2020-11-09 | 15 | 22 | 27 | 37 | 38 | 41 | 5 |
| 1534 | 2020-11-12 | 1 | 9 | 18 | 22 | 24 | 43 | 39 |
| 1535 | 2020-11-16 | 1 | 9 | 14 | 30 | 35 | 38 | 32 |
| 1536 | 2020-11-19 | 2 | 5 | 9 | 30 | 37 | 40 | 28 |
| 1537 | 2020-11-23 | 6 | 13 | 14 | 32 | 33 | 37 | 20 |
| 1538 | 2020-11-26 | 8 | 14 | 19 | 33 | 35 | 40 | 38 |
| 1539 | 2020-11-30 | 13 | 29 | 33 | 37 | 41 | 42 | 43 |
| 1540 | 2020-12-03 | 1 | 20 | 25 | 28 | 33 | 37 | 31 |
| 1541 | 2020-12-07 | 12 | 26 | 28 | 32 | 33 | 35 | 41 |
| 1542 | 2020-12-10 | 11 | 12 | 16 | 17 | 20 | 36 | 18 |
| 1543 | 2020-12-14 | 17 | 21 | 26 | 33 | 36 | 38 | 34 |
| 1544 | 2020-12-17 | 3 | 11 | 25 | 26 | 39 | 42 | 34 |
| 1545 | 2020-12-21 | 8 | 14 | 15 | 26 | 37 | 43 | 12 |
| 1546 | 2020-12-24 | 1 | 18 | 19 | 24 | 31 | 40 | 16 |
| 1547 | 2020-12-28 | 4 | 11 | 14 | 17 | 22 | 39 | 21 |
| 1548 | 2021-01-04 | 18 | 24 | 26 | 35 | 39 | 42 | 32 |
| 1549 | 2021-01-07 | 4 | 5 | 27 | 28 | 35 | 41 | 33 |
| 1550 | 2021-01-11 | 8 | 11 | 22 | 32 | 37 | 42 | 41 |
| 1551 | 2021-01-14 | 3 | 14 | 18 | 24 | 38 | 43 | 23 |
| 1552 | 2021-01-18 | 5 | 9 | 15 | 30 | 32 | 39 | 11 |
| 1553 | 2021-01-21 | 7 | 8 | 16 | 32 | 41 | 42 | 31 |
| 1554 | 2021-01-25 | 6 | 14 | 16 | 27 | 40 | 42 | 26 |
| 1555 | 2021-01-28 | 2 | 8 | 17 | 23 | 24 | 27 | 5 |
+--------+------------+------+------+------+------+------+------+-------+
24 rows in set (0.001 sec)
 
MariaDB [loto6]>

はい、OKですね。一番最後に先程のデータが追加されています。

それでは、Pythonが扱える場所へこのデータをCSV形式で出力し、MariaDBの接続を切ります。

MariaDB [loto6]> select * from result where kaisai > 1555-24 into outfile '/Users/goose/24d.csv' fields terminated by ',';
Query OK, 24 rows affected, 1 warning (0.004 sec)
 
MariaDB [loto6]>
MariaDB [loto6]> exit
Bye
goose@NERV ~ %




過去24回分のデータを見える化してみる

さて、過去24回分のデータをCSV形式でMariaDBが出力しましたので、それを使用してデータの見えるかをしていきましょう。

まずは、MariaDBから出力した内容が、本当に24回分のデータであるのか確認しています。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font=["Meiryo", "Yu Gothic", "Hiragino Maru Gothic Pro"])
df = pd.read_csv("24d.csv", index_col=0, header=None)
df.columns=["kaisai","No1","No2","No3","No4","No5","No6","Bonus"]
df = df.drop("kaisai", axis=1)
print(df)
================= RESTART: /Users/******/Documents/loto-test.py ================
No1 No2 No3 No4 No5 No6 Bonus
0
1532 2 9 14 16 17 21 34
1533 15 22 27 37 38 41 5
1534 1 9 18 22 24 43 39
1535 1 9 14 30 35 38 32
1536 2 5 9 30 37 40 28
1537 6 13 14 32 33 37 20
1538 8 14 19 33 35 40 38
1539 13 29 33 37 41 42 43
1540 1 20 25 28 33 37 31
1541 12 26 28 32 33 35 41
1542 11 12 16 17 20 36 18
1543 17 21 26 33 36 38 34
1544 3 11 25 26 39 42 34
1545 8 14 15 26 37 43 12
1546 1 18 19 24 31 40 16
1547 4 11 14 17 22 39 21
1548 18 24 26 35 39 42 32
1549 4 5 27 28 35 41 33
1550 8 11 22 32 37 42 41
1551 3 14 18 24 38 43 23
1552 5 9 15 30 32 39 11
1553 7 8 16 32 41 42 31
1554 6 14 16 27 40 42 26
1555 2 8 17 23 24 27 5
>>>

データから不要な日付を削除して、予定した24個分のデータが表示されました。

次に、各列毎の中央値と最頻値を出してみます。この時、平均値は意味を成さないので得意実施はしませんでした。

print(df.median())
print(df.mode())
================= RESTART: /Users/******/Documents/loto-test.py ================
No1 No2 No3 No4 No5 No6 Bonus
0
1532 2 9 14 16 17 21 34
1533 15 22 27 37 38 41 5
1534 1 9 18 22 24 43 39
1535 1 9 14 30 35 38 32
1536 2 5 9 30 37 40 28
1537 6 13 14 32 33 37 20
1538 8 14 19 33 35 40 38
1539 13 29 33 37 41 42 43
1540 1 20 25 28 33 37 31
1541 12 26 28 32 33 35 41
1542 11 12 16 17 20 36 18
1543 17 21 26 33 36 38 34
1544 3 11 25 26 39 42 34
1545 8 14 15 26 37 43 12
1546 1 18 19 24 31 40 16
1547 4 11 14 17 22 39 21
1548 18 24 26 35 39 42 32
1549 4 5 27 28 35 41 33
1550 8 11 22 32 37 42 41
1551 3 14 18 24 38 43 23
1552 5 9 15 30 32 39 11
1553 7 8 16 32 41 42 31
1554 6 14 16 27 40 42 26
1555 2 8 17 23 24 27 5
No1 5.5
No2 12.5
No3 18.0
No4 29.0
No5 35.0
No6 40.0
Bonus 31.0
dtype: float64
No1 No2 No3 No4 No5 No6 Bonus
0 1.0 9.0 14.0 32.0 33 42.0 34.0
1 NaN 14.0 NaN NaN 35 NaN NaN
2 NaN NaN NaN NaN 37 NaN NaN
>>>

最頻値は最も多い発生数は全列ありますが、殆どの列では2番め3番めが無いですね。

それではこれを見やすいように、ローソクチャートのように可視化してみます。

チャート

このグラフを見ると、ばらつきはありますが、それでも出目はある部分に固まって出ているようにも見えます。

とりあえず、完全にバラバラな状態ではなく。ある程度の範囲を持ってバラついているという事実が見えました。

次は、もう少し分解できるか考えてみます。




可視化されると思いが広がる

今回は、可視化されていないロト6の当選番号のバラツキを可視化してみました。

今まで、数値の羅列だけを見て予測したりしていましたが、数値データが可視化されることで、更に考えるべき点が絞れてきたようにも思えます。

可視化と言うのは、本当に大事なことなんですね。

これを使いながら、予測をしていきたいと思います。

夢は広がるな。


じぇいかわさきです。生産技術者として35年、今まで培った経験とスキルを元に、ものづくりに関わる世の出来事に対して思ったことをホンネで書いてます。ノウハウやアイデアもありますよ。 また写真も全力で撮っています、気に入った写真があればサポートや感想をぜひお寄せください。