仅供学习
效果图:

步骤:
1.先爬取排5历史的开奖记录,保存至CSV文件
2.将数据保存成dataset.pkl文件,方便日后追加排3的中奖号码
3.使用近128期的历史出奖记录建立序列模型,预测下期的出奖号
4.更新dataset.pkl文件,方便3步骤调用

1.爬虫:data.py

# -*- coding:utf-8 -*-import time
import requests
from lxml import etree
import re
import os
import logging
import json
import csv
logging.basicConfig(format="%(asctime)s %(message)s",datefmt="%Y-%m-%d %I:%M:%S %p")   #格式化日志class My_Data:def __init__(self,urls,data,header):self.urls = urlsself.data = dataself.header = headerdef it_url(self,count,n):    """定义一个生成器,用于生成每页url的data参数"""for i in range(1,count+1,n):data["pageNo"] = iyield data   def page_count(self):"""子url数"""try:counts = 192n = 1return counts,nexcept Exception as e:logging.WARNING("请求访问失败",e)return Nonedef children_url(self):"""获取html"""count,n = self.page_count()try:for dt in self.it_url(count,n):response = requests.get(self.urls,headers=self.header,params=dt)#print(response.url)    #用于校验url是否正确if response.status_code == requests.codes.ok:html = response.textlogging.warning(f"第{k}请求成功,URL为{response.url}")self.parsing(html)   #调用解析html方法  except:return Nonedef parsing(self,html):"""用于解析html"""datas = json.loads(html)num = len(datas["value"]["list"])filename = "pai5_date.csv"with open(filename,"a",newline="") as csvfile:writer = csv.writer(csvfile)for i in range(num):time = datas["value"]["list"][i]["lotteryDrawTime"]values = datas["value"]["list"][i]["lotteryDrawResult"]values = (time,values)writer.writerow(values)if __name__ == "__main__":k = 1 header = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)\Chrome/84.0.4147.105 Safari/537.36"}data = {"pageNo":0}urls = "https://webapi.sporttery.cn/gateway/lottery/getHistoryPageListV1.qry?gameNo=350133&provinceId=0&pageSize=30&isVerify=1"  m = My_Data(urls,data,header)m.children_url()

2.预处理:pre.dataset.py

# -*- coding:utf-8 -*-import numpy as np
import pandas as pd
from joblib import load,dump
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号#第一次处理数据
#pf = pd.read_csv("pai5_date.csv",header=None)
##拆分每个数据
#data = []
#for i in range(len(pf[1])):#data.append(pf[1][i].split())
#pff = pd.DataFrame(data)
#dump(pff,r"model\dataset.pkl")#导入原数据
pffs = load(r"model\dataset.pkl")#获取最近一期时间
t = pffs["time"].tolist()
print(f"最近一期数据的时间为:{t[0]}")#输入进几期排5数据,返回datafrom形式
n = int(input("请输入输入数据的组数:"))
data_list = []
time = []
for i in range(n):time = input("请输入开奖日期,如2021-01-23:")data_list.append(input("请输入开奖号码,用空格割开,如:8  4  0  6  7:").split())
#转换数据为array形式
data_arr = np.array(data_list).astype(float)
time_arr = np.array(time).reshape(-1,1)
#转换成dataframe形式
data_pd = pd.DataFrame(data_arr)
time_pd = pd.DataFrame(time_arr)
#合并数据
data_pd.insert(0,"time",time_pd)#合并现在数据与原先数据
pff = pd.concat([data_pd,pffs])
dump(pff,r"model\dataset.pkl")

3.序列模型预测

# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
from joblib import dump,loaddef dataset(a1):x,y = [],[]for i in range(n,len(a1)-1):x.append(a1[i-n:i])y.append(a1[i+1])x = np.array(x).astype(float)y = np.array(y).astype(float).Treturn x,ydef train(X_train, y_train):model = xgb.XGBRegressor(max_depth=20, learning_rate=0.1, n_estimators=50, silent=True, objective='reg:gamma')#训练model.fit(X_train, y_train)return modelif __name__ == "__main__":pff = load(r"model\dataset.pkl")#设置维度数n = 128     aa = pff[0].tolist() bb = pff[1].tolist()cc = pff[2].tolist()aa = aa[::-1]bb = bb[::-1]cc = cc[::-1]    x1s,y1s = dataset(aa)x2s,y2s = dataset(bb)x3s,y3s = dataset(cc)#划分数据X1_train,X1_test,y1_train,y1_test = train_test_split(x1s[:len(x1s)-1],y1s[:len(x1s)-1],test_size=0.2,random_state=1234)X2_train,X2_test,y2_train,y2_test = train_test_split(x2s[:len(x1s)-1],y2s[:len(x1s)-1],test_size=0.2,random_state=1234)X3_train,X3_test,y3_train,y3_test = train_test_split(x3s[:len(x1s)-1],y3s[:len(x1s)-1],test_size=0.2,random_state=1234)#训练model1 = train(X1_train,y1_train)model2 = train(X2_train,y2_train)model3 = train(X3_train,y3_train)#预测x1 = aa[len(aa)-n-1:len(aa)-1]x1 = np.array(x1).astype(float)x1 = np.expand_dims(x1, 0)x2 = bb[len(bb)-n-1:len(bb)-1]x2 = np.array(x2).astype(float)x2 = np.expand_dims(x2, 0)  #增加一个维度x3 = cc[len(cc)-n-1:len(cc)-1]x3 = np.array(x3).astype(float)x3 = np.expand_dims(x3, 0)yy_predict1 = model1.predict(x1)yy_predict2 = model2.predict(x2)yy_predict3 = model3.predict(x3)print(f"{np.around(yy_predict1[0],4)} -- {np.around(yy_predict2[0],4)} -- {np.around(yy_predict3[0],4)}")#画图totel = len(y1s)xx1 = x1s[-1:totel-100:-1]yy1 = y1s[-1:totel-100:-1]    yy_pred1 = model1.predict(xx1)yy1 = yy1[-1::-1]  #方便画图yy_pred1 = yy_pred1[-1::-1]print(f"预测值:{yy_pred1[-1]},真实值:{yy1[-1]}")xx2 = x2s[-1:totel-100:-1]yy2 = y2s[-1:totel-100:-1]    yy_pred2 = model2.predict(xx2)yy2 = yy2[-1::-1]  #方便画图yy_pred2 = yy_pred2[-1::-1]print(f"预测值:{yy_pred2[-1]},真实值:{yy2[-1]}")xx3 = x3s[-1:totel-100:-1]yy3 = y3s[-1:totel-100:-1]    yy_pred3 = model3.predict(xx3)yy3 = yy3[-1::-1]  #方便画图yy_pred3 = yy_pred3[-1::-1]print(f"预测值:{yy_pred3[-1]},真实值:{yy3[-1]}")#准确率acc = (yy1 ==np.around(yy_pred1)).sum()/len(yy1)plt.figure(figsize=(16,12))plt.subplot(311)plt.plot(list(range(len(yy1))),yy1,c="r",label="真实值")plt.plot(list(range(len(yy1))),yy_pred1,c="b",label="预测值")plt.legend(loc='upper left')plt.text(40, 8, f"1号位置:上期预测值:{yy_pred1[-1]},真实值:{yy1[-1]}")plt.text(87, yy_predict1[0],f"预测值:{round(yy_predict1[0],4)}")plt.subplot(312)plt.plot(list(range(len(yy1))),yy2,c="r",label="真实值")plt.plot(list(range(len(yy1))),yy_pred2,c="b",label="预测值")plt.legend(loc='upper left')plt.text(40, 8, f"2号位置:上期预测值:{yy_pred2[-1]},真实值:{yy2[-1]}")plt.text(87, yy_predict2[0]+1,f"预测值:{round(yy_predict2[0],4)}")plt.subplot(313)plt.plot(list(range(len(yy1))),yy3,c="r",label="真实值")plt.plot(list(range(len(yy1))),yy_pred3,c="b",label="预测值")plt.legend(loc='upper left')plt.text(40, 8, f"3号位置:上期预测值:{yy_pred3[-1]},真实值:{yy3[-1]}")plt.text(87, yy_predict3[0],f"预测值:{round(yy_predict3[0],4)}")plt.savefig("排3预测图.png")#plt.show()

注:纸上得来终觉浅,绝知此事要躬行。

xgboost算法预测彩票中奖号相关推荐

  1. 彩民看过来,看老程序员如何用Python数据分析双色球基于线性回归算法预测下期中奖结果示例

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 本文实例讲述了Python数据分析之双色球基于线性回归算法预测下期中奖结果.分享给大家供大家参考,具体如下: 前面讲述了关于双色球 ...

  2. python数据分析6:双色球 使用线性回归算法预测下期中奖结果

    友情提示:双色球预测分析只为练习技术,不要抱着预测中大奖的心态,不可能预测准确. python数据分析1:获取双色球历史信息 python数据分析2:双色球 蓝红球分析统计 python数据分析3:双 ...

  3. 通过AI算法预测彩票

    最近工作上比较闲,于是抽时间写了个APP,运用一些AI算法,先排除一些明显不可能的号,然后结合历史数据,分析测算出可能得结果,试运行了大概10期,中了一个三等奖,蓝球概率有明显提高,红球最高中了5个号 ...

  4. 彩票 量子计算机,科学家发明了能预测未来的量子计算机?且慢,它还不能预测彩票中奖号码...

    科学家们创造了一种颇具未来风格的设备,可以预测不同的现实和潜在的未来. 他们建造了一台量子计算机,可以同时产生"未来",就像观察一系列不同的水晶球一样. 这台机器并不完全能够预测潜 ...

  5. python实现bp神经网络预测,神经网络算法预测彩票

    神经网络预测双色球有多靠谱 你好,这东西没人会预测.如果真会预测,早就成为百万富翁了.预测这东西我早就不信了,上一回在网站上,看别人预测,结果买了,连一个号码都没对上.楼主真要买,就权当是献爱心吧. ...

  6. Python数据分析之双色球基于线性回归算法预测

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 本文实例讲述了Python数据分析之双色球基于线性回归算法预测下期中奖结果.分享给大家供大家参考,具体如下: 前面讲述了关于双色球 ...

  7. Boosting算法预测银行客户流失率

    Boosting算法预测银行客户流失率 描述 为了防止银行的客户流失,通过数据分析,识别并可视化哪些因素导致了客户流失,并通过建立一个预测模型,识别客户是否会流失,流失的概率有多大.以便银行的客户服务 ...

  8. 如果你提前知道了下期彩票中奖号码

    昨天看了<蝴蝶效应>回想起一个之前想了很久的问题. 如果你有能力到了未来世界,并获知了下一期的彩票中奖号(并且知道了自己没有中奖).然后又回到实现,如果你真的去买那一注中奖彩票.就一定能中 ...

  9. python中奖号_Python分析彩票记录并预测中奖号码过程详解

    0 引言 上周被一则新闻震惊到了,<2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 >,在2019年5月2日开奖的双色球中,广东中山一位彩民博中2454万元,兑奖时间截至201 ...

最新文章

  1. qstringlist格式怎么写到txt_进阶能力 | 一招解决TXT电子书乱码问题
  2. A.02.00—功能定义与唤醒—起始
  3. gj5 自定义序列类
  4. ping网关丢包_网络/摄像机丢包的原因分析
  5. pthread_cleanup_push()/pthread_cleanup_pop()
  6. 电脑显示没有被指定在上运行_电脑出现“**.dll没有被指定在Windows上运行”提示怎么解决...
  7. cpan mysql dbd,Perl中DBI和DBD-mysql模块的安装
  8. 谈因辐射拆基站,理在哪里?
  9. 互联网基础知识_互联网广告前景怎么样?
  10. iNOC产品部--完全数计算
  11. Jmeter 线程数、Ramp-Up、循环次数 详解
  12. 通过STM32CubeMX实现LED闪烁——基于HAL库
  13. 性价比高的骨传导耳机,国产top1品牌推荐
  14. 赛格威机器人待遇_赛格威配送机器人:年内做到10天无故障 3年10万台
  15. 找回SecureCRT密码
  16. 微信开发之服务号设置
  17. Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)MockMvc服务端的单元测试
  18. python 错误--UnboundLocalError: local variable 'num' referenced before assignment
  19. 给财务小姐姐写了个Python批量发工资邮件!抱得美人归?
  20. 抖音账号矩阵系统源码/矩阵霸屏系统搭建部署/源码

热门文章

  1. 复数的常规运算与C代码实现
  2. HTML5淡黄色企业品牌专题网站模板
  3. 基于中台思想的物流系统设计(二):构建物流订单能力
  4. 数据库(DB)、数据库管理系统(DBMS)、MySQL、SQL之间的关系
  5. 同元软控新一代复杂装备虚拟试验解决方案与实践
  6. 我的世界网易是java版吗,看完这篇彻底明白了
  7. linux安装git
  8. mysql hy093_SQLSTATE [HY093]:参数号无效:未定义参数
  9. php基础练习题,php基础编程练习题.doc
  10. 中小型网络工程设计与实现