Python分析一下双色球,中大奖指日可待!

点击上方“志斌的Python笔记”,选择“星标”公众号超级无敌干货,第一时间送达!!!

一、需求简介

之前偶然见到一位网友提出了关于双色球数据的分析需求,感觉颇有趣味,便着手操作了一番。如下为某双色球发布站的页面,可以看到每期会产生红/蓝两种颜色的数字,其中红球为 33 选 6,蓝球为 16 选 1,一共是从 49 个球中选 7 个。假如想对某一色号球下注,比如红1 球,要先分析一下该球以往的产出情况。可以从以下 3 个方面来分析,以史明鉴,看看最新一期是否值得选取该球:

1、遗漏情况

统计遗漏 n 期后命中的次数,如上图:遗漏 1 期后中的次数有 2 次,遗漏 2 期后中的次数有 1 次,遗漏 5 期后中的次数有 2 次,遗漏 7 期后中的次数有 1 次。

2、连续重号情况

如图,连续重号 3 期的有 1 次。

3、重号前的遗漏情况

如图,重号前遗漏 2 期的有 1 次。

二、源数据

节选源数据如下,数据是以 html 表格形式储存的,<td> 标签中 class="yl01" 表示未命中,class="chartBall01" 表示命中红球,class="chartBall02" 表示命中蓝球(文末获取近 100 期数据样本)。

    <tr>    <td class="c_fbf5e3 bd_rt_a">2021090</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">8</td><td class="yl01" style="font-size:xx-small">2</td><td class="chartBall01">05</td><td class="chartBall01">06</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">4</td><td class="yl01" style="font-size:xx-small">6</td><td class="yl01" style="font-size:xx-small">4</td><td class="yl01" style="font-size:xx-small">5</td><td class="chartBall01">12</td><td class="yl01" style="font-size:xx-small">1</td><td class="chartBall01">14</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">13</td><td class="yl01" style="font-size:xx-small">9</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">5</td><td class="yl01" style="font-size:xx-small">6</td><td class="yl01" style="font-size:xx-small">9</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">7</td><td class="yl01" style="font-size:xx-small">2</td><td class="chartBall01">27</td><td class="chartBall01">28</td><td class="yl01" style="font-size:xx-small">4</td><td class="yl01" style="font-size:xx-small">13</td><td class="yl01" style="font-size:xx-small">12</td><td class="yl01" style="font-size:xx-small">8</td><td class="yl01" style="font-size:xx-small">7</td><td class="v_line"></td><td class="yl01" style="font-size:xx-small">4</td><td class="yl01" style="font-size:xx-small">5</td><td class="yl01" style="font-size:xx-small">42</td><td class="yl01" style="font-size:xx-small">3</td><td class="yl01" style="font-size:xx-small">8</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">16</td><td class="chartBall02">08</td><td class="yl01" style="font-size:xx-small">10</td><td class="yl01" style="font-size:xx-small">13</td><td class="yl01" style="font-size:xx-small">54</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">11</td><td class="yl01" style="font-size:xx-small">31</td><td class="yl01" style="font-size:xx-small">18</td><td class="yl01" style="font-size:xx-small">25</td></tr><tr><td class="c_fbf5e3 bd_rt_a">2021091</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">9</td><td class="chartBall01">04</td><td class="yl01" style="font-size:xx-small">1</td><td class="chartBall01">06</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">5</td><td class="yl01" style="font-size:xx-small">7</td><td class="yl01" style="font-size:xx-small">5</td><td class="yl01" style="font-size:xx-small">6</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">3</td><td class="chartBall01">16</td><td class="yl01" style="font-size:xx-small">14</td><td class="yl01" style="font-size:xx-small">10</td><td class="yl01" style="font-size:xx-small">3</td><td class="yl01" style="font-size:xx-small">6</td><td class="yl01" style="font-size:xx-small">7</td><td class="yl01" style="font-size:xx-small">10</td><td class="yl01" style="font-size:xx-small">2</td><td class="chartBall01">24</td><td class="yl01" style="font-size:xx-small">8</td><td class="chartBall01">26</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">5</td><td class="yl01" style="font-size:xx-small">14</td><td class="yl01" style="font-size:xx-small">13</td><td class="yl01" style="font-size:xx-small">9</td><td class="chartBall01">33</td><td class="v_line"></td><td class="yl01" style="font-size:xx-small">5</td><td class="yl01" style="font-size:xx-small">6</td><td class="yl01" style="font-size:xx-small">43</td><td class="yl01" style="font-size:xx-small">4</td><td class="yl01" style="font-size:xx-small">9</td><td class="yl01" style="font-size:xx-small">3</td><td class="yl01" style="font-size:xx-small">17</td><td class="yl01" style="font-size:xx-small">1</td><td class="yl01" style="font-size:xx-small">11</td><td class="yl01" style="font-size:xx-small">14</td><td class="yl01" style="font-size:xx-small">55</td><td class="yl01" style="font-size:xx-small">2</td><td class="yl01" style="font-size:xx-small">12</td><td class="yl01" style="font-size:xx-small">32</td><td class="yl01" style="font-size:xx-small">19</td><td class="chartBall02">16</td></tr>

三、解析实现

1、数据结构

为了便于表示球的命中与颜色、数值,我们可以按以下规则映射:那么先用美丽汤把需要的内容捞出来,把所有 <td> 标签中表示名字与色号的内容取出,按上述规则映射表示。

soup = BeautifulSoup(res_table, "html.parser")
item_lst = []
for td in soup.find_all('td'):cls = td['class'][0]num = td.stringif cls in ['yl01', 'chartBall01', 'chartBall02']:item_lst.append('-'.join([cls, num]))
print(item_lst[:10])

输出前 10 个预览如下:

['yl01-3', 'yl01-5', 'chartBall01-03', 'yl01-5', 'yl01-1', 'yl01-5', 'chartBall01-07', 'yl01-9', 'yl01-6', 'yl01-6']

但这仅仅是一个超长列表,在此基础上处理起来还找不到头绪,至少要转变成和网页上结构一致的矩阵才好理解吧,那么可以想到利用 numpy 矩阵。先是用 np.array 将普通列表转为 numpy 数组,再利用 reshape 将一维数组转为二维数组,即 100 期 X 49 个球的矩阵。

array = np.array(item_lst).reshape(100, 49)

如图,numpy 矩阵的每一行与原页面结构对应。但我们想要进行的是纵向比较分析,比较各期之间的关系,所以还需要再对矩阵进行行列转置。

array_T = array.T  # 矩阵转置,一个元素对应一列

此时,array_T 中的每一个元素即表示某一色号的近 100 期情况。如果想看红1 球,则是 array_T[0];如果想看红2 球,则是 array_T[1];如果想看蓝1 球,则是 array_T[33](因为红球总共有 33 个,故第一个蓝球列的索引为 33)。为了便于选球,我们可以写一个映射方法:

def trans_col(txt):  # 翻译列索引号,如红1=0,红33=32,蓝1=33,蓝16=48if "红" in txt:col = int(txt.replace('红', '')) - 1else:col = int(txt.replace('蓝', '')) + 32return col

接下来就可以正式开始实现统计分析的需求啦!

2、遗漏统计

将转置矩阵和指定色号球所在列传入,获取该列后加入一个结束标记,因至少要出现 1 次未命中 +1 次命中才判定为遗漏 1 期,所以从该列的第二项数据开始判断,若其不等于前一项的值,且当前项为命中,则记录前一项的值(遗漏期数)。之后将记录列表中的表示遗漏的标记 yl01 去除,仅保留期数。

def fun_miss(array, col):  # 统计该列中遗漏后命中的次数line = array[col].tolist()order_grp = []for i, v in enumerate(line):if i > 0:if v != line[i - 1] and 'chart' in v:order_grp.append(line[i - 1])order_grp = [i.replace('yl01-', '') for i in order_grp]c = dict(Counter(order_grp))result = sorted(c.items(), key=lambda x: int(x[0]))for i in result:print(f"遗漏{i[0]}期后中的次数有{i[1]}次")fun_miss(array_T, trans_col("红1"))  # 执行

统计排序后输出如下:

遗漏1期后中的次数有4次 遗漏2期后中的次数有2次 遗漏3期后中的次数有3次 遗漏5期后中的次数有2次 遗漏7期后中的次数有2次 遗漏8期后中的次数有1次 遗漏9期后中的次数有2次 遗漏13期后中的次数有1次

3、连续重号统计

与遗漏统计相同,传入两个参数,先确定要选取的色号列。当前项等于前一项,且当前项为命中时表示重号,连续重号时 count 计数 +1,当出现不满足重号条件时表示连续重号中断,记录连续次数,并将计数清零,待下一轮重号出现时重新计数。

def fun_repeat(array, col):  # 统计该列中的重号次数line = array[col].tolist()count_grp = []count = 0for i, v in enumerate(line):if i > 0:if v == line[i-1] and 'chart' in v:count += 1elif count > 0:count_grp.append(count)count = 0c = dict(Counter(count_grp))result = sorted(c.items(), key=lambda x: x[0])for i in result:print(f"连续重号{i[0]}次的有{i[1]}次")fun_repeat(wt, trans_col("红2"))  # 执行

统计排序后输出如下:

连续重号1次的有1次 连续重号2次的有1次

4、重号前的遗漏统计

因要出现重号+遗漏才算入,所以至少从第三项数据开始判定。

def fun_return(array, col):  # 统计该列中重号前的遗漏次数line = array[col].tolist()order_grp = []for i, v in enumerate(line):if i > 1:if v == line[i - 1] and v != line[i - 2] and 'chart' in v:order_grp.append(line[i - 2])order_grp = [i.replace('yl01-', '') for i in order_grp]c = dict(Counter(order_grp))result = sorted(c.items(), key=lambda x: int(x[0]))for i in result:print(f"重号前遗漏{i[0]}期的有{i[1]}次")fun_return(wt, trans_col("红1"))  # 执行

统计排序后输出如下:

重号前遗漏2期的有1次

四、小结

点击下方[在看],即可找志斌领取源数据和完整代码哈~

emmmm...不过如此看来,单单分析一个球是不够滴,还要和其他色号深入对比,有兴趣的同学自己尝试吧哈哈哈!~这里是我命由天不由我的 Seon塞翁,下篇再见!

温馨提示:赌博有风险,本文仅做数据处理技术讨论,不构成任何资金投入建议!(不要怪我标题党啦 )

推荐阅读

滑动拼图验证码的原理和破解方法~

用Python看蜜雪冰城店铺在哪个省份最多~

滑块验证码的原理和破解方法~

计算型验证码反爬虫的原理和破解方法(附有计算型验证码制作代码~)

用Python爬了IPhone全部游戏免费榜的实时排名,我发现~

三行代码将Excel转为任意格式的Word

字符型验证码反爬虫的原理和破解方法(附有字符验证码制作代码~)

分享、在看与点赞,至少我要拥有一个吧~

扫码加好友,加入海归Python编程和人工智能群

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34722.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双色球 python

对双色球数据探索 数据准备 爬取双色球的数据 # -*- coding: utf-8 -*- import os import os.path import sys reload(sys) sys.setdefaultencoding("utf-8") #开奖日期中的字符需要引入 import urllib2 from bs4 import BeautifulSoup# 创建/打开一个文件放数据…

2023年7月1日起,五险一金缴费基数上调,到手工资变少了!

上一篇&#xff1a;被裁员了&#xff0c;月底走人拿n1&#xff0c;多待一个月拿n&#xff0c;该怎么选&#xff1f; 今天给大家盘点了一下各省市2023年最新的社保、公积金缴费基数。 2023社保缴费基数定了 一、上海 2023年6月28日&#xff0c;上海市人社局官方微信发布了《本市…

chatgpt赋能python:PythonUp:优秀的Python教育平台

Python Up: 优秀的Python教育平台 Python学习的重要性 随着大数据、人工智能等技术的蓬勃发展&#xff0c;Python作为一种可读性强、代码简洁、可扩展性好的编程语言&#xff0c;已经成为数据科学领域中最受欢迎的编程语言之一。因此&#xff0c;Python学习已成为现在最流行的…

chatgpt赋能Python-python_his

Python HIS: 基于Python的医院信息系统 作为现代医院管理的重要组成部分&#xff0c;医院信息系统(HIS)的重要性不言而喻。通过使用HIS&#xff0c;医院管理人员可以更加高效地处理管理任务&#xff0c;医疗人员可以更加便捷地记录、查看和互相交流患者信息&#xff0c;患者可…

抖音爆款脚本文案怎么写?写作时需要注意什么。

世上当然不会有这么简单的事情&#xff0c;虽然表面上看就是填一个表格&#xff0c;但是实际上有很多潜规则的要求&#xff0c;今天我们就主要讲讲我们在写脚本文案的时候&#xff0c;用的语言文字需要符合一个什么样的规则。其他的话我就不多说了&#xff0c;我们直接看案例&a…

云媒易推广:实体店铺抖音推广技巧分享

近两年&#xff0c;短视频和直播越来越火&#xff0c;除电商行业外&#xff0c;很多线下实体店也逐渐开始发展线上推广业务&#xff0c;意图通过抖音推广打开线上营销市场。但是&#xff0c;线上推广并不是一件简单的事情。那么&#xff0c;实体店铺究竟该怎么做抖音推广&#…

抖音的文案怎么做|成都聚华祥

要知道&#xff0c;开抖音直播不仅仅可以通过带货赚钱&#xff0c;但是还是有很多朋友不知道怎么去做&#xff0c;也在一定程度上花了很多时间&#xff0c;那么抖音的合拍带货是怎么样做的呢&#xff1f;跟着小编来看看吧&#xff01; 1.遵循选择的三个要素 广度&#xff1a;就…

PHP对接抖音开发平台接口

一、说明二、代码三、代码运行需知四、功能扩展五、接口调用需要注意的点六、接口文档中的 坑&#xff08;以订单列表接口为例&#xff09;1、请求参数、响应参数 代表的具体值不清晰2、页码从第0页开始&#xff08;这个属于需要注意的点&#xff09;3、金额 是元 还是 分&…

抖音怎么运营?分享个人抖音运营思路方案

抖音怎么运营&#xff1f; 符合这三点&#xff0c;你的视频很容易受欢迎&#xff0c;账号也很容易上升。她是如何做到这三点的&#xff1f; 1.让平台向您推荐更多流量。 2.让用户完全观看您的视频。 3.看完一段视频后&#xff0c;我想看下一个。 让平台向您推荐更多流量。 …

一篇文章带你了解抖音来客功能的使用方法和注意事项

抖音是近年来备受欢迎的社交媒体平台之一&#xff0c;其中的“来客”功能更是让许多人喜爱。那么什么是抖音来客呢&#xff1f;抖音来客是指在直播过程中&#xff0c;可以邀请其他抖音用户进行互动和参与&#xff0c;从而增加直播的热度和粉丝数量。下面不若与众科技就来介绍一…

抖音平台如何推广?代运营还是用优化系统

近年来&#xff0c;互联网进入下半场&#xff0c;移动端的新媒体抢到了流量风口&#xff0c;尤其是以抖音小红书为首的短视频平台深受关注。小马识途的客户开始通过抖音做推广、做宣传的企业越来越多&#xff0c;其中有一些公司已经尝到了抖音seo带来的甜头&#xff0c;加入抖音…

抖音上传视频(纯前端实现霸屏软件的功能)进店转发视频功能,详情搜索抖音霸屏软件

抖音霸屏软件 抖音霸屏介绍先来介绍一下吧&#xff0c;嫌啰嗦的可以直接跳转>>>思路分析 ↓ 抖音开发文档思路分析步骤 抖音霸屏介绍 先来介绍一下吧&#xff0c;嫌啰嗦的可以直接跳转>>>思路分析 ↓ 1.抖音同城霸屏&#xff1a;可控制所有扫码用户发布视频…

手把手教你接入抖音小程序发送模板消息通知

模板消息是指&#xff1a;按照一定的模板样式发送给用户的消息&#xff0c;顾名思义&#xff0c;它的内容必须限制在某一个模板框框内&#xff0c;只能做填空题&#xff0c;做不了主观题。 场景举例&#xff1a;用户A下了订单并交易成功&#xff0c;应该给该用户手机端下发一条…

关于抖音文案的重要性以及如何分享好的抖音文案,详情已附上

抖音文案是指在抖音平台上发布短视频时所配以的文字内容&#xff0c;它是短视频的重要补充和补充说明。接下来&#xff0c;不若与众科技将详细介绍抖音文案的重要性以及如何分享好的抖音文案。 一、抖音文案的重要性 1.提高视频的关注度 好的抖音文案可以让视频更加生动有趣&…

关键词推广怎么做比较好?抖音宣传做关键词推广有哪些好的方法

一、抖音宣传关键词推广的基本原则 关键词的选择要合理&#xff1a;选择的关键词要尽量针对性强、覆盖面广&#xff0c;且要具有较高的搜索量和热度&#xff0c;能够更好的满足用户的需求&#xff1b; 关键词的定位要准确&#xff1a;在抖音宣传关键词推广中&#xff0c;根据关…

对接微信支付接口

SpringBoot中对接微信支付接口 1.微信支付开发文档 https://pay.weixin.qq.com/wiki/doc/api/index.html 1.准备工作&#xff1a; 在微信上申请服务号类型的公众号&#xff0c;从公众号获取以下数据 appid&#xff1a;微信公众账号或开放平台APP的唯一标识 mch_id&#xf…

手把手教你如何在Java在Excel中进行数据分析

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前一段时间淘宝出了一个“淘宝人生”的模块&#xff0c;可以看从注册淘宝账号至今的消…

文心一格:文心一格发布会图文摘要及与ChatGPT对此分析

文章目录 [toc]简介1.文学创作二、商业文案创作三、数理逻辑推算四、中文理解五、[多模态](https://so.csdn.net/so/search?q多模态&spm1001.2101.3001.7020)生成六、原理分析七、社会反响小结 简介 GPT-4发布一天之后&#xff0c;压力全部给到百度这边。就在刚刚&#x…

​​​​​​​NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)

NLP之TEA&#xff1a;基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分) 目录 输出结果 设计思路 相关资料 1、关于代码 2、关于数据集 关于留言 1、留言内容的注意事项 2、如何留言&#xff1f; 2.1、第一种方法——在对应的博客下留言 2.2、备用第二…

Linux输密码不显示

Linux是一个安全性比较强的的操作系统&#xff0c;所以输入密码的时候是不会显示的&#xff0c;但是它会记忆用户输入的密码&#xff0c;所以一般还是不要把密码设置的太复杂了。不然