前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >01 使用LSTM模型预测双色球,中大奖指日可待!

01 使用LSTM模型预测双色球,中大奖指日可待!

作者头像
测试开发囤货
发布2021-09-08 10:27:29
6.4K0
发布2021-09-08 10:27:29
举报
文章被收录于专栏:测试开发囤货
背景

上班空闲之余,同事们经常去买买彩票乐呵乐呵,希望中了头等奖就可以走上人生巅峰,哈哈哈!

今天我们用「LSTM预测模型」对双色球进行预测,用我们选出来的号码,看看能不能中奖!!!

技术

  • Python
  • Tensorflow
  • LSTM预测模型

LSTM非常适用于基于时序数据的预测,比如预测未来的股票行情,预测未来某个时间段的交通情况,预测未来的房价等。

需求分析

如下为某双色球发布站的页面,可以看到每期会产生红/蓝两种颜色的数字,其中红球为 33 选 6,蓝球为 16 选 1,一共是从 49 个球中选 7 个。假如想对某一色号球下注,比如红1 球,要先分析一下该球以往的产出情况。

网址:http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html

数据爬取

LSTM预测模型需要海量的数据集做为支撑,所以我们首先去爬取双色球,历年中奖的号码!

话不多说,贴代码!!!

代码语言:javascript
复制
import re
import urllib.request
import urllib
import requests
from bs4 import BeautifulSoup


#获取该网页的源代码
def getPage(url):
    try:
        user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
        header = {'User-Agent': user_agent}
        request = urllib.request.Request(url,headers=header)
        response = urllib.request.urlopen(request)
        pageCode = response.read().decode('utf-8')
        return pageCode
    except Exception as e:
        print('Get Page Fail')
        print("An error has occurred:"+e)

#将双色球的信息写入txt文件
def writePage(date,dateNum,num):
    #日期的列表会比期号长1,因为最后加入了一组页数统计,所以不能以日期列表长度来写数据
    with open('./DCnumber.txt','a+') as f:
        for x in range(0,len(num)):
            f.write('('+date[x]+';'+dateNum[x]+';'+num[x]+')'+'\n')

#获取总页数
def getPageNum(url):
    try:
        pageCode = getPage(url)
        soup = BeautifulSoup(pageCode,'lxml')
        td_code = soup.find('td',colspan='7')       #获取表格中包含页数的列
        result = td_code.get_text().split(' ')      #将该列转换成列表,我们
        #result = ['\n', '共125', '页', '/2484', '条记录', '首页', '上一页', '下一页', '末页', '当前第', '2', '页']
        #用正则表达式从reslut[1]中提取出数字
        list_num = re.findall("[0-9]{1}",result[1])
        #将提取出来的数字转换成十进制的数值
        page_num = int(list_num[0]+list_num[1]+list_num[2])
        return page_num
    except Exception as e:
        print('Get Page Number Fail')
        print("An error has occurred:" + e)

#获取单页中的双色球中奖信息
def getDC(url):
    #循环读取每一页的信息
    for num in range(1,getPageNum(url)+1):
        print('begin get page:'+str(num))
        href = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'+str(num)+'.html'
        page = BeautifulSoup(getPage(href),'lxml')
        em_list = page.find_all('em')   #获取该页面中的em内容,即中奖编号所在
        td_list = page.find_all('td',{'align':'center'})    #获取该页面中的开奖日期,期号等信息

        i = 1   #计数器,每七个号码为一组
        DCnum = ''      #存放一期中奖号码
        DCnum_list = []     #存放该页每期的中奖号码
        for em in em_list:
            emnum = em.get_text()
            if i == 7:
                DCnum = DCnum + emnum
                DCnum_list.append(DCnum)
                DCnum = ''          #重置一期的号码
                i = 1               #重置计数器
            else:
                DCnum = DCnum + emnum +','
                i += 1

        DCdate = []         #存放开奖日期
        DCdateN = []        #存放期号
        t = 1              #计数器,每5个为一组,我们只需要每组的前两个td内容
        for td in td_list:
            td_text = td.get_text()
            if t == 1:
                DCdate.append(td_text)
                t += 1
            elif t == 2:
                DCdateN.append(td_text)
                t += 1
            elif t == 5:
                t = 1
            else:
                t+=1
        writePage(DCdate,DCdateN,DCnum_list)


if __name__ == '__main__':
    getDC('http://url.html')

爬取【2003-02-23--->2021-08-19】一共18年的双色球中奖号码做为数据集!

模型训练

接下来我们利用「LSTM预测模型」进行模型训练,数据集训练耗时比较久,我们下篇文章再做详细的介绍!

总结

温馨提示:本文仅做数据处理技术讨论,不构成任何资金投入建议!

下集预告

  • LSTM模型训练
  • 双色球实战

关注「测试开发囤货」公众号回复「AI」,送你一套 Python机器学习 电子书。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发囤货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 技术
  • 需求分析
  • 数据爬取
  • 模型训练
  • 总结
  • 下集预告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档