PythonでLOTO6のデータ分析をしてみた ~その1~

動機

手軽で分かりやすい「ロト6」のデータをPythonで分析し、勝ちやすくなる方法を探してみたいと思いました。ソースコードについても、なるべく分かりやすく紹介していきます。

LOTO6とは?

以下のような特徴を持つ宝くじの一種です。買い手は「①いつ買うか」「②どの数字を選ぶか」を選択できます。詳細はロト6 – Wikipedia等をご確認ください。

  • 1~43の数字から好きな6つを選び、最低3個以上当たっていれば賞金が得られる。
  • 週2回開催されており、サマージャンボ等と比較して、購入できる機会が多い。
  • 当選金額は的中者で山分けすることで決まる。従って当選人数が少ないほど高額になる。
  • 1等が1人も出ていない場合、賞金が次回以降に上乗せされる。(キャリーオーバーと呼ぶ)

その1での分析内容

ロト6データ分析サービスにある過去データを使って、Pythonコードの解説・紹介をしながら、データの確認・可視化を追ってみます。位置づけとしては、その2で「LOTO6に出やすい数字はあるのか?」を説明するための導入になります。Pythonの環境構築はいろんなサイトにわかりやすい説明があると思いますが、一応以下も参考で。

Pythonの開発環境構築(Anaconda)

実践

データ読み込み

まずは、前章で紹介している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を開くと、以下のように中身が確認できます。左から、開催回数、日付、当たり数字、当たり口数、賞金金額、キャリーオーバー金額が記録として残されていることが分かります。
f:id:Rosyuku:20160801225729p:plain

次にこのデータをグラフにしてプロットしてみましょう。pandasにはplot機能があり、かなり自由にグラフを書くことができます。以下は、全データを一括でプロットするものです。

df.plot(subplots=True, layout=(5,4), figsize=(20, 15))

f:id:Rosyuku:20160802002604p:plain

細かい引数については、以下にまとめたので参考にしてみてください。

Pandasのplotの全引数を解説

このグラフを見るだけでも、いろんなことが分かりそうですね。次回からは、もう少し詳しい分析に入っていきます。
その2:出やすい目はあるか?

PythonでLOTO6のデータ分析をしてみた ~その2~

番外編1:販売額をスクレイピングで取得

BeautifulSoupを用いてLoto6の販売実績額を取得

番外編2:データの加工

Pandasを使ってloto6のデータを整形・加工する


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA