xgboost算法预测彩票中奖号
仅供学习
效果图:
步骤:
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算法预测彩票中奖号相关推荐
- 彩民看过来,看老程序员如何用Python数据分析双色球基于线性回归算法预测下期中奖结果示例
@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 本文实例讲述了Python数据分析之双色球基于线性回归算法预测下期中奖结果.分享给大家供大家参考,具体如下: 前面讲述了关于双色球 ...
- python数据分析6:双色球 使用线性回归算法预测下期中奖结果
友情提示:双色球预测分析只为练习技术,不要抱着预测中大奖的心态,不可能预测准确. python数据分析1:获取双色球历史信息 python数据分析2:双色球 蓝红球分析统计 python数据分析3:双 ...
- 通过AI算法预测彩票
最近工作上比较闲,于是抽时间写了个APP,运用一些AI算法,先排除一些明显不可能的号,然后结合历史数据,分析测算出可能得结果,试运行了大概10期,中了一个三等奖,蓝球概率有明显提高,红球最高中了5个号 ...
- 彩票 量子计算机,科学家发明了能预测未来的量子计算机?且慢,它还不能预测彩票中奖号码...
科学家们创造了一种颇具未来风格的设备,可以预测不同的现实和潜在的未来. 他们建造了一台量子计算机,可以同时产生"未来",就像观察一系列不同的水晶球一样. 这台机器并不完全能够预测潜 ...
- python实现bp神经网络预测,神经网络算法预测彩票
神经网络预测双色球有多靠谱 你好,这东西没人会预测.如果真会预测,早就成为百万富翁了.预测这东西我早就不信了,上一回在网站上,看别人预测,结果买了,连一个号码都没对上.楼主真要买,就权当是献爱心吧. ...
- Python数据分析之双色球基于线性回归算法预测
@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 本文实例讲述了Python数据分析之双色球基于线性回归算法预测下期中奖结果.分享给大家供大家参考,具体如下: 前面讲述了关于双色球 ...
- Boosting算法预测银行客户流失率
Boosting算法预测银行客户流失率 描述 为了防止银行的客户流失,通过数据分析,识别并可视化哪些因素导致了客户流失,并通过建立一个预测模型,识别客户是否会流失,流失的概率有多大.以便银行的客户服务 ...
- 如果你提前知道了下期彩票中奖号码
昨天看了<蝴蝶效应>回想起一个之前想了很久的问题. 如果你有能力到了未来世界,并获知了下一期的彩票中奖号(并且知道了自己没有中奖).然后又回到实现,如果你真的去买那一注中奖彩票.就一定能中 ...
- python中奖号_Python分析彩票记录并预测中奖号码过程详解
0 引言 上周被一则新闻震惊到了,<2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 >,在2019年5月2日开奖的双色球中,广东中山一位彩民博中2454万元,兑奖时间截至201 ...
最新文章
- qstringlist格式怎么写到txt_进阶能力 | 一招解决TXT电子书乱码问题
- A.02.00—功能定义与唤醒—起始
- gj5 自定义序列类
- ping网关丢包_网络/摄像机丢包的原因分析
- pthread_cleanup_push()/pthread_cleanup_pop()
- 电脑显示没有被指定在上运行_电脑出现“**.dll没有被指定在Windows上运行”提示怎么解决...
- cpan mysql dbd,Perl中DBI和DBD-mysql模块的安装
- 谈因辐射拆基站,理在哪里?
- 互联网基础知识_互联网广告前景怎么样?
- iNOC产品部--完全数计算
- Jmeter 线程数、Ramp-Up、循环次数 详解
- 通过STM32CubeMX实现LED闪烁——基于HAL库
- 性价比高的骨传导耳机,国产top1品牌推荐
- 赛格威机器人待遇_赛格威配送机器人:年内做到10天无故障 3年10万台
- 找回SecureCRT密码
- 微信开发之服务号设置
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)MockMvc服务端的单元测试
- python 错误--UnboundLocalError: local variable 'num' referenced before assignment
- 给财务小姐姐写了个Python批量发工资邮件!抱得美人归?
- 抖音账号矩阵系统源码/矩阵霸屏系统搭建部署/源码