用Python預測雙色球福利彩票中獎號碼(請不要當真)

松鼠愛出餅乾發表於2021-08-05

前言

雙色球是中國福利彩票的一種玩法。

紅球一共6組,每組從1-33中抽取一個,六個互相不重複。然後藍球是從1-16中抽取一個數字,這整個組成的雙色球

python從零基礎入門到實戰

今天,我們就用Python來統計一下各號碼的中獎概率,並視覺化展示。我本人,也會買概率最大的幾個號碼試試,中獎的話,我就刪號,並開始樸實無華有錢人的生活!!!

先是資料的來源,採集雙色球往期中獎資料

傳送求情
import requests # 資料請求

# 傳送請求的url地址
url = 'http://www.cwl.gov.cn/cwl_admin/kjxx/findDrawNotice'

params = {
    'name': 'ssq',
    'issueCount': '',
    'issueStart': '',
    'issueEnd': '',
    'dayStart': '2017-10-24',
    'dayEnd': '2021-08-04',
    'pageNo': page,
}
headers = {
    'Referer': 'http://www.cwl.gov.cn/kjxx/ssq/kjgg/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}
response = requests.get(url=url, params=params, headers=headers)
# <> 物件 200 請求成功  狀態碼

 

解析資料,for遍歷
for index in result:
    dit = {
        '期號': index['code'],
        '開獎日期': index['date'],
        '紅球': index['red'],
        '藍球': index['blue'],
        '一等獎中獎注數': index['prizegrades'][0]['typenum'],
        '一等獎中獎金額': index['prizegrades'][0]['typemoney'],
        '二等獎中獎注數': index['prizegrades'][1]['typenum'],
        '二等獎中獎金額': index['prizegrades'][1]['typemoney'],
        '三等獎中獎注數': index['prizegrades'][2]['typenum'],
        '三等獎中獎金額': index['prizegrades'][2]['typemoney'],
        '四等獎中獎注數': index['prizegrades'][3]['typenum'],
        '四等獎中獎金額': index['prizegrades'][3]['typemoney'],
        '五等獎中獎注數': index['prizegrades'][4]['typenum'],
        '五等獎中獎金額': index['prizegrades'][4]['typemoney'],
        '六等獎中獎注數': index['prizegrades'][5]['typenum'],
        '六等獎中獎金額': index['prizegrades'][5]['typemoney'],
        '一等獎中獎地區': index['content'],
        '獎池金額': index['poolmoney']
    }

 

儲存資料
import csv # 內建模組

f = open('雙色球.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['期號',
                                '開獎日期',
                                '紅球',
                                '藍球',
                                '一等獎中獎注數',
                                '一等獎中獎金額',
                                '二等獎中獎注數',
                                '二等獎中獎金額',
                                '三等獎中獎注數',
                                '三等獎中獎金額',
                                '四等獎中獎注數',
                                '四等獎中獎金額',
                                '五等獎中獎注數',
                                '五等獎中獎金額',
                                '六等獎中獎注數',
                                '六等獎中獎金額',
                                '一等獎中獎地區',
                                '獎池金額'])

csv_writer.writeheader() # 寫入表頭
csv_writer.writerow(dit)
print(dit)

 

執行程式碼,這樣就得到了往期雙色球的資料了

 

用Python預測雙色球福利彩票中獎號碼(請不要當真)

現在開始,我們來分析這些資料

先匯入需要用到的模組
import pandas as pd
from pyecharts.charts import *
from sklearn.linear_model import LogisticRegression

 

讀取採集到的表格資料
data = pd.read_csv('雙色球.csv',encoding='utf-8', engine='python')
data.head()

 

用Python預測雙色球福利彩票中獎號碼(請不要當真)
取資料,指定訓練集和測試集
def get_lotto_data(data, lotto, lotto_id):
    data['lotto_id'] = lotto_id
    X = []
    Y = []
    # 標籤and值
    for s, p in zip(data['lotto_id'], data[lotto]):
        X.append([float(s)])
        Y.append(float(p))
    return X, Y

 

建立線性迴歸模型
def linear_model_test(X, Y, predict_value):
    regr = LogisticRegression()
    regr.fit(X, Y)
    predict_outcome = regr.predict(predict_value)
    predictions = {}
    predictions['intercept'] = regr.intercept_
    predictions['coefficient'] = regr.coef_
    predictions['predicted_value'] = predict_outcome
    return predictions

 

使用線性迴歸推測中獎號碼
def get_predicted_num(file, lotto, lotto_id):
    X, Y = get_lotto_data(file, lotto, lotto_id)
    predict_value = [[33]]
    result = linear_model_test(X, Y, predict_value)
    if lotto_id < 7:
        print(f'中獎第{lotto_id}個紅球為:', result['predicted_value'].astype('int64'), '號球')
    else:
        print('中獎藍球為:', result['predicted_value'].astype('int64'), '號球')

 

預測結果
get_predicted_num(data, 'r1', 1)  # 預測紅1
get_predicted_num(data, 'r2', 2)  # 預測紅2
get_predicted_num(data, 'r3', 3)  # 預測紅3
get_predicted_num(data, 'r4', 4)  # 預測紅4
get_predicted_num(data, 'r5', 5)  # 預測紅5
get_predicted_num(data, 'r6', 6)  # 預測紅6
get_predicted_num(data, '藍球', 7)  # 預測藍7

 

用Python預測雙色球福利彩票中獎號碼(請不要當真)

視覺化展示

紅球中獎概率分佈圖
x = red_ball_count.index.tolist()
y = red_ball_count.values.tolist()
# 視覺化展示 
pie = (
    Pie()
    .add(""
        ,[list(z) for z in zip(x, y)]
        )
)
pie.render_notebook()

 

用Python預測雙色球福利彩票中獎號碼(請不要當真)
藍球中獎概率分佈圖
x = blue_ball_count.index.tolist()
y = blue_ball_count.values.tolist()
pie = (
    Pie()
    .add(""
        ,[list(z) for z in zip(x, y)]
        )
)
pie.render_notebook()

 

用Python預測雙色球福利彩票中獎號碼(請不要當真)
藍球中獎次數分佈
from pyecharts import options as opts
from pyecharts.charts import PictorialBar
from pyecharts.globals import SymbolType

c = (
    PictorialBar()
    .add_xaxis(x)
    .add_yaxis(
        "",
        y,
        label_opts=opts.LabelOpts(is_show=False),
        symbol_size=18,
        symbol_repeat="fixed",
        symbol_offset=[0, 0],
        is_symbol_clip=True,
    )
    .reversal_axis()
    .set_global_opts(
        title_opts=opts.TitleOpts(title='藍球中獎號碼'),
        xaxis_opts=opts.AxisOpts(is_show=False),
        yaxis_opts=opts.AxisOpts(
            axistick_opts=opts.AxisTickOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(opacity=0)
            ),
        ),
    )
)
c.render_notebook()

 

用Python預測雙色球福利彩票中獎號碼(請不要當真)
中獎注數漏斗圖
x_data = df['中獎注數'].index.tolist()
y_data = df['中獎注數'].values.tolist()

c = (
    Funnel()
    .add(
        "中獎注數漏斗圖",
        [list(z) for z in zip(x_data, y_data)],
        label_opts=opts.LabelOpts(position="inside"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="中獎注數漏斗圖"))
)
c.render_notebook()

 

很真實,基數太大,一、二等獎的中獎數都看不見了

用Python預測雙色球福利彩票中獎號碼(請不要當真)

相關文章