Pandasでミニロトで遊ぶ

!pip install lxml

import pandas as pd
import io
import requests

# User-agentを設定しないとダウンロードできない
url = 'http://www.japannetbank.co.jp/lottery/co/minilotojnb.csv'

headers = {
    'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
}

r = requests.get(url, headers=headers).content

df = pd.read_csv(io.StringIO(r.decode('cp932')), index_col=0)

# ソート
df.sort_index(inplace=True)

df.head()

df.dtypes

# 抽せん数字+ボーナス数字のみにする
dfl = df.iloc[:, 2:8]
dfl.head()

# DataframeからSeriesに変換
sel = dfl.melt()
sel.head()

# 度数分布
ptl = pd.pivot_table(sel, index='value', aggfunc='count')
ptl

ptl.columns = ['frequency']
ptl.sort_values('frequency', ascending=False).plot.bar()

# 抽せん数字の数字部分を削除
ser = sel.replace('抽せん数字\d$', '抽せん数字', regex=True)
ser

# 度数分布
ptr = ser.pivot_table(values='value', index='value', columns='variable', aggfunc=lambda x : len(x), fill_value = 0)
ptr['合計'] = ptr['抽せん数字'] + ptr['ボーナス数字']
ptr

ptr.sort_values('合計', ascending=False).plot.bar(y=['抽せん数字', 'ボーナス数字'], stacked=True)
  • 抽せん数字とボーナス数字の度数分布の積上棒グラフが作りたい f:id:imabari_ehime:20180424094701g:plain

f:id:imabari_ehime:20180505132938p:plain