動機
手軽で分かりやすい「ロト6」のデータをPythonで分析し、勝ちやすくなる方法を探してみたいと思いました。ソースコードについても、なるべく分かりやすく紹介していきます。
LOTO6とは?
以下のような特徴を持つ宝くじの一種です。買い手は「①いつ買うか」「②どの数字を選ぶか」を選択できます。詳細はロト6 – Wikipedia等をご確認ください。
- 1~43の数字から好きな6つを選び、最低3個以上当たっていれば賞金が得られる。
- 週2回開催されており、サマージャンボ等と比較して、購入できる機会が多い。
- 当選金額は的中者で山分けすることで決まる。従って当選人数が少ないほど高額になる。
- 1等が1人も出ていない場合、賞金が次回以降に上乗せされる。(キャリーオーバーと呼ぶ)
その1での分析内容
ロト6データ分析サービスにある過去データを使って、Pythonコードの解説・紹介をしながら、データの確認・可視化を追ってみます。位置づけとしては、その2で「LOTO6に出やすい数字はあるのか?」を説明するための導入になります。Pythonの環境構築はいろんなサイトにわかりやすい説明があると思いますが、一応以下も参考で。
pythonの開発環境構築
実践
データ読み込み
まずは、前章で紹介しているWebサイトからcsvデータを入手し、Pythonの作業をするフォルダに保存します。その後、Pythonの開発環境であるSpyderを開き、以下のスクリプトを用いて読み込みます。
# -*- coding: utf-8 -*- #① import pandas as pd #② if __name__ == "__main__": #③ df = pd.read_csv("loto6.csv", encoding="cp932", index_col=0, parse_dates=[1]) #④
①文字コードはutf-8という意味。
②pandasというモジュールをインポートし、この後はpdと省略して使うという宣言。
③このスクリプトを対象に実行した場合、という意味。おまじないに近い。
④pandasのread_csvという関数を使ってloto6のデータを読み込み、dfという変数に保存します、という処理。encodingが文字コードの指定、index_colがインデックス列の指定、parse_datesが日付列(ある場合)の指定。細かい引数の説明はこちらを参考にしてみてください。
Pandasのread_csvの全引数を解説
データ確認
Spyderを使っている場合、Variable explorerからデータが格納された変数であるdfを開くと、以下のように中身が確認できます。左から、開催回数、日付、当たり数字、当たり口数、賞金金額、キャリーオーバー金額が記録として残されていることが分かります。
次にこのデータをグラフにしてプロットしてみましょう。pandasにはplot機能があり、かなり自由にグラフを書くことができます。以下は、全データを一括でプロットするものです。
df.plot(subplots=True, layout=(5,4), figsize=(20, 15))
次回は、どの数字が出やすいかを分析してみました。
PythonでLOTO6のデータ分析をしてみた ~その2~
次々回では、どの数字を買うと期待値が高まるかを分析してみました。
PythonでLOTO6のデータ分析をしてみた ~その3~
予測結果と検証結果を都度Twitterでつぶやいてます。
https://twitter.com/deebot9