python统计分析2003-2024年所有的中奖记录,通过人工智能机器学习预测双色球,个人意见,仅供参考.
声明:双色球具有随机性,任何工具无法预测。本文章仅作为技术交流,提供学习参考。本文所涉及的代码均为python之机器学习的代码。双色球为公益事业,请大家一起为公益加油!
一,收集数据。
首先,我们需要将双色球的历史数据收集到本地。可以通过官方网站、网络爬虫或API接口来获取相关数据。历史数据通常包括开奖日期、红球号码、蓝球号码及其他相关信息。确保将数据保存为CSV或Excel格式,以便后续分析和处理。
以下是采集数据的代码。
python
'''
@date 2024年11月20日
@author liandyao
抖音号: liandyao
'''
import csv
import time
import numpy as np
import requests
from bs4 import BeautifulSoup
# 定义 URL
url = "https://kaijiang.78500.cn/ssq/"
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0',
'cookie': '__jsluid_s=5cbbf684106add1620b7f5ce24625702; Hm_lvt_04f41dcf6d388d39feb87abb77da8596=1732092072,1732159935; Hm_lpvt_04f41dcf6d388d39feb87abb77da8596=1732159935; HMACCOUNT=99BF57D36F600EB6',
'referer': 'https://kaijiang.78500.cn/ssq/'
}
data = [] # 用于存储提取的数据
# 循环从 2004 年到 2024 年
for year in range(2003, 2025): # 2025 是上限,因此将终止于 2024
params = {
"startqi": "", # 空字符串
"endqi": "", # 空字符串
"year": str(year), # 当前年份
"action": "years"
}
# 发送 POST 请求
response = requests.post(url, data=params,headers=header)
time.sleep(np.random.randint(1, 5))
# 输出请求状态码和返回内容的前100个字符
print(f"年份: {year}, 状态码: {response.status_code}, 返回内容: {response.text[:100]}") # 只输出前100个字符
# 检查请求是否成功
# 检查请求是否成功
if response.status_code == 200:
# 解析 HTML 内容
soup = BeautifulSoup(response.text, 'html.parser')
# 查找 tbody 下的所有 tr
tbody = soup.find('tbody', class_='list-tr')
if tbody:
rows = tbody.find_all('tr')
for row in rows:
# 提取期号和开奖时间
tds = row.find_all('td')
if len(tds) >= 3: # 确保有足够的 td
issue_number = tds[0].text.strip() # 期号
draw_time = tds[1].text.strip() # 开奖时间
# 提取开奖号码
numbers_div = tds[2].find('div') # 找到包含号码的 div
red_numbers = [num.text.strip() for num in numbers_div.find_all('span', class_='red')]
# 注意,这里的蓝球是一个列表,有时会开出快乐星期天的另一个篮球,所以我们只取第一个篮球
blue_numbers = [num.text.strip() for num in numbers_div.find_all('span', class_='blue')]
top1 = tds[5].text.strip() # 一等奖
top2 = tds[7].text.strip() # 二等奖
top3 = tds[9].text.strip() # 三等奖
# 整合数据
data.append([issue_number, draw_time] + red_numbers + [blue_numbers[0]] +[top1,top2,top3])
# 导出为 CSV 文件
with open('lottery_results_2003_2024.csv', 'w', newline='', encoding='utf-8') as csvfile:
csv_writer = csv.writer(csvfile)
# 写入标题行
csv_writer.writerow(['期号', '开奖时间', '红球1', '红球2', '红球3', '红球4', '红球5', '红球6', '蓝球', '一等奖', '二等奖', '三等奖'])
# 写入数据
csv_writer.writerows(data)
print("数据已成功导出为 lottery_results_2003_2024.csv")
采集是数据包括:
二,python导入数据
在完成数据收集后,我们可以使用Python的Pandas库导入数据。以下是一个简单的示例:
python
import pandas as pd
# 导入数据
data = pd.read_csv('shuangseqiu_data.csv')
print(data.head())
可以打印前5行数据显示 ,确认数据是否加载成功。
三,数据预处理
数据预处理是机器学习中至关重要的一环。我们需要对数据进行清洗和转换,以便模型能够有效地进行训练和预测。主要步骤包括:
- 处理缺失值
- 转换数据类型
- 归一化或标准化数值
以下是一个处理缺失值的示例:
python
# 检查缺失值
print(data.isnull().sum())
# 填充缺失值
data.fillna(method='ffill', inplace=True)
转换数据类型
python
# 将开奖时间转换为日期格式
df['开奖时间'] = pd.to_datetime(df['开奖时间'])
归一化或标准化数值
采集的数据比较标准,无需处理.
四,创建特征数据和建立模型。
在准备好数据后,我们需要创建特征数据集并选择合适的机器学习模型进行训练。特征可以包括红球和蓝球的历史出现频率、和值、跨度等。我们可以使用Scikit-learn库来创建和训练模型。
我们使用期数作为特征值,红球和蓝球作为预测目标值.
python
# 特征和标签
X = df[['期号']]
y_red = df[['红球1', '红球2', '红球3', '红球4', '红球5', '红球6']]
y_blue = df[['蓝球']]
划分训练集和测试集,80%的训练集和20%的测试集
python
# 划分数据集
X_train, X_test, y_red_train, y_red_test = train_test_split(X, y_red, test_size=0.2, random_state=42)
X_train, X_test, y_blue_train, y_blue_test = train_test_split(X, y_blue, test_size=0.2, random_state=42)
使用随机森林算法来训练模型。
python
# 训练红球模型
red_model = RandomForestClassifier(n_estimators=100, random_state=42)
red_model.fit(X_train, y_red_train)
# 训练蓝球模型
blue_model = RandomForestClassifier(n_estimators=100, random_state=42)
blue_model.fit(X_train, y_blue_train)
五,预测结果
**开始预测,我们输入特征值:**2025100期
python
# 预测2025005期的红蓝球
future_issue = pd.DataFrame({'期号': [2025100]})
predicted_red = red_model.predict(future_issue)
predicted_blue = blue_model.predict(future_issue)
print(f"预测的红球结果: {predicted_red[0]}")
print(f"预测的蓝球结果: {predicted_blue[0]}")
预测的红球结果: [ 4 6 13 21 22 25]
预测的蓝球结果: 6
完整代码:
python
'''
@date 2024年01月20日
@author liandyao
抖音号: liandyao
'''
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 创建数据框
df = pd.read_csv('shuangseqiu_data.csv',encoding='gbk')
# 特征和标签
X = df[['期号']]
y_red = df[['红球1', '红球2', '红球3', '红球4', '红球5', '红球6']]
y_blue = df[['蓝球']]
# 划分数据集
X_train, X_test, y_red_train, y_red_test = train_test_split(X, y_red, test_size=0.2, random_state=42)
X_train, X_test, y_blue_train, y_blue_test = train_test_split(X, y_blue, test_size=0.2, random_state=42)
# 训练红球模型
red_model = RandomForestClassifier(n_estimators=100, random_state=42)
red_model.fit(X_train, y_red_train)
# 训练蓝球模型
blue_model = RandomForestClassifier(n_estimators=100, random_state=42)
blue_model.fit(X_train, y_blue_train)
# 预测2025005期的红蓝球
future_issue = pd.DataFrame({'期号': [2025008]})
predicted_red = red_model.predict(future_issue)
predicted_blue = blue_model.predict(future_issue)
print(f"预测的红球结果: {predicted_red[0]}")
print(f"预测的蓝球结果: {predicted_blue[0]}")
总结
- 数据量:提供的数据量较小,可能影响模型的准确性。通常需要更多的历史数据来训练有效的模型。
- 随机性:双色球的结果具有随机性,预测结果不应被视为实际的开奖结果。
通过以上步骤,我们简单地演示了如何使用Python进行双色球数据分析与预测。尽管机器学习可以帮助我们理解数据中的某些模式,但彩票的随机性质使得任何预测都不能保证成功。希望大家在进行这些技术探索时,始终保持理性和谨慎。双色球是公益事业,祝大家好运!