关键词搜索

源码搜索 ×
×

Python项目分析:预测双色球福利彩票中奖号码

发布2022-11-17浏览2557次

详情内容

前言

大家早好、午好、晚好吖 ❤ ~


双色球是中国福利彩票的一种玩法。

红球一共6组,每组从1-33中抽取一个,六个互相不重复。

然后蓝球是从1-16中抽取一个数字,这整个组成的双色球

python从零基础入门到实战,想要源码+数据集的,戳我

今天,我们就用Python来统计一下各号码的中奖概率,并可视化展示(随便玩玩,不要当真)。

我本人,也会买概率最大的几个号码试试,中奖的话,我就删号,并开始朴实无华有钱人的生活!!!

采集数据

先是数据的来源,采集双色球往期中奖数据

导入模块

import requests # 数据请求
  • 1

requests 发送请求模块, 是第三方模块,需要手动安装。

win + r输入cmd按回车打开命令提示符窗口,使用pip安装

发送请求的url地址


发送请求

params = {
    'name': 'ssq',
    'issueCount': '',
    'issueStart': '',
    'issueEnd': '',
    'dayStart': '2017-10-24',
    'dayEnd': '2021-08-04',
    'pageNo': page,
}
headers = {
    'Referer': '',
    # 有网址不给过,照下方图片添加一下哦~
    '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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

<> 对象 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']
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

保存数据

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

运行代码,这样就得到了往期双色球的数据了

分析数据

先导入需要用到的模块

import pandas as pd
from pyecharts.charts import *
from sklearn.linear_model import LogisticRegression
  • 1
  • 2
  • 3

读取采集到的表格数据

data = pd.read_csv('双色球.csv',encoding='utf-8', engine='python')
data.head()
  • 1
  • 2


取数据,指定训练集和测试集

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

建立线性回归模型

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

使用线性回归推测中奖号码

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'), '号球')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

预测结果

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可视化展示

红球中奖概率分布图

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10


蓝球中奖概率分布图

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9


蓝球中奖次数分布

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29


中奖注数漏斗图

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

很真实,基数太大,一、二等奖的中奖数都看不见了

尾语 ?

好了,今天的分享就差不多到这里了!

宁外给大家推荐一个好的教程:

【48小时搞定全套教程!你和大佬只有一步之遥【python教程】

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

请添加图片描述

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载