专栏首页机器学习AI算法工程【python分析】买彩票机选和守号哪个中奖概率高?

【python分析】买彩票机选和守号哪个中奖概率高?

作者:Powerxing 厦门大学计算机系13级研究生

很多人有买彩票,不过就是瞎买买。早之前是随机买过一注,然后一直买这个号,不过断过一段时间没买,后来就一直是每期机选一注了。算起来也有一年多了,但目前最高奖金还是停留在5元…

于是乎就冒出了这么一个想法,机选跟守号(随意买的,没有刻意去研究彩票)哪个中奖的可能性高一些?

本着实践出真知的想法,顺便学习下拖了很久的Python网络爬虫,写了个小程序,抓取了历年大乐透/双色球的开奖数据,进行了简单的验证。

抓取彩票开奖数据

Python网络爬虫,结合pyQuery解析HTML内容,很容易就将历年开奖数据保存到本地csv文件中。

抓取、保存大乐透历年开奖数据:

# coding: utf-8# 抓取大乐透的历年开奖数据# author: 给力星(www.powerxing.com)import urllib2from pyquery import PyQuery as pyqimport csvdef writeToCsv(jq, writer):    table = jq('.tr3')    for i in table:        vol = pyq(i).find('td.b').text()        red = pyq(i).find('td.cred').text().split()        blue = pyq(i).find('td.cblue').text().split()        data = [int(vol)]        for item in red:            data.append(int(item))        for item in blue:            data.append(int(item))        writer.writerow(data)csvfile = file('daletou.csv', 'wb')writer = csv.writer(csvfile)writer.writerow(['期号', '红1', '红2', '红3', '红4', '红5', '蓝1', '蓝2'])url = 'http://www.sunlava.com/daletou_history.htm'index = 0while (url):    print index, url    index += 1    req = urllib2.Request(url)    response = urllib2.urlopen(req)    html = response.read()    jq = pyq(html)    writeToCsv(jq, writer)    url = jq('.page-next').attr('href')    if url:        url = 'http://www.sunlava.com/' + urlcsvfile.close()print 'done'

验证机选、守号哪种中奖概率高

这个写起来也没什么难度,主要是使用 Python 中集合的取交集运算,判断是否中奖,中几等奖:

# coding=utf-8# 测试大乐透的中奖概率# author: 给力星(www.powerxing.com)import csvimport random# 中奖红球,中奖篮球,我的红球,我的蓝球def isWin(vol, wRed, wBlue, mRed, mBlue):    if len(wRed) != 5 or len(wBlue) != 2 or len(mRed) != 5 or len(mBlue) != 2:        print '出错!,位数不对!', vol, wRed, wBlue, mRed, mBlue, exit()    R = len( wRed & mRed )    B = len( wBlue & mBlue )    if R == 5 and B == 2:        return 1    elif R == 5 and B == 1:        return 2    elif (R == 5) or (R == 4 and B == 2):        return 3    elif (R == 4 and B == 1) or (R == 3 and B == 2):        return 4    elif (R == 4) or (R == 3 and B == 1) or (R == 2 and B == 2):         return 5    elif (R == 3) or (R == 2 and B == 1) or (R == 1 and B == 2) or (B == 2):        return 6    else:        return 0# 读取数据csvfile = file('daletou.csv', 'rb')reader = csv.reader(csvfile)data = []first_row = Truefor line in reader:    if first_row: # 过滤首行        first_row = False    else:        vol = int(line[0])        red = set()        blue = set()        for item in line[1:6]:            red.add(int(item))        for item in line[6:8]:            blue.add(int(item))        d = {            'vol': vol,            'red': red,            'blue': blue        }        data.append(d)data.reverse() # 按照从最早到最新的期数顺序csvfile.close()# 设置N = 1000    # 设置迭代次数prize = [0, 7923000, 131000, 4900, 200, 10, 5]  # 奖金,浮动奖金取最近15期的平均值print '期数', len(data)print '迭代次数', N# 机选模式result = [0]*7for i in range(N):    for item in data:        vol = item['vol']        wRed = item['red']        wBlue = item['blue']        # 每一期都机选一注彩票        mRed = set(random.sample(range(1, 36), 5))        mBlue = set(random.sample(range(1, 13), 2))        w = isWin(vol, wRed, wBlue, mRed, mBlue)        result[w] += 1win_money = 0for i in range(1, 7):    win_money += result[i]*prize[i]print '\n=== 机选模式 ==='print '得奖次数', resultprint '总花费', len(data)*2*Nprint '总收益', win_money# 追号模式result = [0]*7for i in range(N):    # 每次迭代机选一注彩票作为守号    mRed = set(random.sample(range(1, 36), 5))    mBlue = set(random.sample(range(1, 13), 2))    for item in data:        vol = item['vol']        wRed = item['red']        wBlue = item['blue']        w = isWin(vol, wRed, wBlue, mRed, mBlue)        result[w] += 1win_money = 0for i in range(1, 7):    win_money += result[i]*prize[i]print '=== 追号模式 ==='print '得奖次数', resultprint '总花费', len(data)*2*Nprint '总收益', win_moneyprint 'done!'

大乐透的数据是从07年到14年097期这7年多共1114期的数据,测试结果如下(注意,下面的图片有错,第二个模式应该是追号模式):

迭代次数1,即验证买彩7年共1114期:

买大乐透彩票7年的中奖可能结果

买大乐透彩票7年的中奖可能结果

1114期的量比较少,结果相对不稳定。

再来看看迭代次数10的情况,就是70年,大概也就是这一生能买的彩票数了:

买大乐透70年的中奖可能结果

结果已经相对稳定了,再看看迭代次数1000:

测试结果

结果已经很稳定了,可以看出,不论机选还是守号,收益都差不多,大概是投入的1/4。

最后看看迭代次数5000的情况:

测试结果

显然,如果没有中头奖,绝对是亏的节奏。

至于双色球,机选和守号的概率也基本持平:

双色球的测试结果

而且总体来看,双色球收益与投入比略高于大乐透,但没有中一二等奖的话反正都是亏…

本文只是简单的测试,但也能看出来,随意的机选或者守号,中奖概率真差不多,毕竟彩票头奖是接近两千万分之一的概率(双色球1/17721088,大乐透1/21425712,摘自网络),一般人买的彩票数比起来真不算什么。而且如果不是中头奖、二等奖,随意的买彩票肯定是亏的。彩票的黑幕也爆出不少,水深得很,买买彩票就当当娱乐好了,不必太认真。

本文分享自微信公众号 - 大数据挖掘DT数据分析(datadw)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Python绘制点击图、热图

    via: http://blog.csdn.net/wenyusuran/article pyHeatMap是一个使用Python生成热图的库,基本代码是我一年...

    机器学习AI算法工程
  • python实现朴素贝叶斯模型:文本分类+垃圾邮件分类

    学习了那么多机器学习模型,一切都是为了实践,动手自己写写这些模型的实现对自己很有帮助的,坚持,共勉。本文主要致力于总结贝叶斯实战中程序代码的实现(python)...

    机器学习AI算法工程
  • 网络挖掘技术——微博文本特征提取

    文本特征向量 经典的向量空间模型(VSM: Vector Space Model)由Salton等人于60年代提出,并成功地应用于著名的SMART文本检索系统。...

    机器学习AI算法工程
  • 利用XMLHttpRequest 通过HTTP POST向ABAP backend发送数据

    设置Content-Type为form-urlencoded, 即需要通过http post发送到server端的数据通过name-value pair的形式加...

    Jerry Wang
  • 基于Spark Mllib的文本分类

    基于Spark Mllib的文本分类 文本分类是一个典型的机器学习问题,其主要目标是通过对已有语料库文本数据训练得到分类模型,进而对新文本进行类别标签的预测。这...

    Spark学习技巧
  • TensorFlow2.0(10):加载自定义图片数据集到Dataset

    前面的推文中我们说过,在加载数据和预处理数据时使用tf.data.Dataset对象将极大将我们从建模前的数据清理工作中释放出来,那么,怎么将自定义的数据集加...

    统计学家
  • Python3爬虫实战(二):电子书标题、作者、简介

    本文以'allitebooks'网站对象,实现电子书标题、作者、简介批量获取,并以json和csv文件形式存入本地。

    用户5473628
  • 《鸟哥的linux私房菜》基本命令笔记

    1.以前没注意过的,略写的命令option后面只能空格后加参数,而标准option即可以空格也可以等号后跟着参数,如date命令,date -r filenam...

    s1mba
  • T4 级老专家:AIOps 在腾讯的探索和实践

    我今天要讲的主题,AIOps,是一个比较新的话题,其实从概念的提出到我们做,只有差不多一年的时间。一个新事物,有其发展的周期,在腾讯里面我们做了比较多的探索,但...

    旺仔小小鹿 .
  • PS|基础原理之‘图层混合模式’

    说到PS,就免不了对图层的讨论。而图层之间的关系——‘图层混合模式’更是图层的重点。今天就为大家介绍‘图层混合模式’的原理。

    算法与编程之美

扫码关注云+社区

领取腾讯云代金券