前言
人工智能目前是越来越火了,而我们本次的主题就是通过人工智能技术来预测彩票,来提高我们的中奖概率;
大家知道,彩票数据是按照每期一组数的顺序排列的,从第一期到最新的一期,实际上是时间序列的数据。跟回归预测有很大的区别,因为特征上没有特殊的意义,不具备一组特征x映射到label y的条件。但是按照时间序列来训练的话就不一样了,输入x是一期的开奖结果,要学习的y是下一期的开奖结果。

LSTM介绍
既然我们需要通过过往的历史数据中寻找规律,那么LSTM再适合不过了。如果你对LSTM不熟悉的话,又希望进一步学习的话,以下几篇文章可以帮助你进一步学习:
- 一文详解LSTM网络
- 深度学习:人人都能看懂的LSTM
- 多图|入门必看:万字长文带你轻松了解LSTM全貌
安装前准备
python 3.6
Flask==1.1.1
tensorflow==2.0.0
tensorflow-gpu==2.0.0
requests==2.22.0
bs4==0.0.1
其中TensorFlow和TensorFlow-GPU只需要安装其中一个即可,如果有较好的独立显卡,建议安装TensorFlow-gpu,如果只是笔记本集成显卡或者普通显卡,建议使用TensorFlow即可;
建立项目
在本地建立项目predict_Lottery_ticket-master,在里面新建两个文件夹data、model,分别用于存放历史数据和模型;整体项目结构如下

项目结构
采集历史数据
既然要训练模型,我们首先,先要收集数据,创建python文件get_train_data.py,内部代码如下:
# -*- coding:utf-8 -*-
import requests
import pandas as pd
from bs4 import BeautifulSoup
from config import *
def get_current_number():
""" 获取最新一期数字
:return: int
"""
r = requests.get("{}{}".format(URL, "history.shtml"))
r.encoding = "gb2312"
soup = BeautifulSoup(r.text, "lxml")
current_num = soup.find("div", class_="wrap_datachart").find("input", id="end")["value"]
return current_num
def spider(start, end, mode):
""" 爬取历史数据
:param start 开始一期
:param end 最近一期
:param mode 模式
:return:
"""
url = "{}{}{}".format(URL, path.format(start), end)
r = requests.get(url=url)
r.encoding = "gb2312"
soup = BeautifulSoup(r.text, "lxml")
trs = soup.find("tbody", attrs={"id": "tdata"}).find_all("tr")
data = []
for tr in trs:
item = dict()
item[u"期数"]= tr.find_all("td")[0].get_text().strip()
item[u"红球号码_1"] = tr.find_all("td")[1].get_text().strip()
item[u"红球号码_2"] = tr.find_all("td")[2].get_text().strip()
item[u"红球号码_3"] = tr.find_all("td")[3].get_text().strip()
item[u"红球号码_4"] = tr.find_all("td")[4].get_text().strip()
item[u"红球号码_5"] = tr.find_all("td")[5].get_text().strip()
item[u"红球号码_6"] = tr.find_all("td")[6].get_text().strip()
item[u"蓝球"] = tr.find_all("td")[7].get_text().strip()
item[u"快乐星期天"] = tr.find_all("td")[8].get_text().strip()
item[u"奖池奖金(元)"] = tr.find_all("td")[9].get_text().strip()
item[u"一等奖_注数"] = tr.find_all("td")[10].get_text().strip()
item[u"一等奖_奖金(元)"] = tr.find_all("td")[11].get_text().strip()
item[u"二等奖_注数"] = tr.find_all("td")[12].get_text().strip()
item[u"二等奖_奖金(元)"] = tr.find_all("td")[13].get_text().strip()
item[u"总投注额(元)"] = tr.find_all("td")[14].get_text().strip()
item[u"开奖日期"] = tr.find_all("td")[15].get_text().strip()
data.append(item)
if mode == "train":
df = pd.DataFrame(data)
df.to_csv("data/data.csv", encoding="utf-8")
elif mode == "predict":
return pd.DataFrame(data)
if __name__ == "__main__":
print("最新一期期号:{}".format(get_current_number()))
print("正在获取数据。。。")
spider(1, get_current_number(), "train")
运行后,会发现在data文件夹内多了一个data.csv,打开后会发现里面存放了历史的彩票数据,后续每次开奖后,运行此python文件,就可以收集最新一期的双色球数据了;

data内的双色球历史数据
大家有任何问题都可以进行评论,下一期,我们将重点讲述如何训练创建和训练模型;