摘要:声明:双色球具有随机性,任何工具无法预测。本文章仅作为技术交流,提供学习参考。本文所涉及的代码均为python之机器学习的代码。双色球为公益事业,请大家一起为公益加油!
python统计分析2003-2024年所有的中奖记录,通过人工智能机器学习预测双色球,个人意见,仅供参考.
声明:双色球具有随机性,任何工具无法预测。本文章仅作为技术交流,提供学习参考。本文所涉及的代码均为python之机器学习的代码。双色球为公益事业,请大家一起为公益加油!
首先,我们需要将双色球的历史数据收集到本地。可以通过官方网站、网络爬虫或API接口来获取相关数据。历史数据通常包括开奖日期、红球号码、蓝球号码及其他相关信息。确保将数据保存为CSV或Excel格式,以便后续分析和处理。
以下是采集数据的代码。
'''@date 2024年11月20日@author liandyao抖音号: liandyao'''import csvimport timeimport numpy as npimport requestsfrom bs4 import BeautifulSoup# 定义 URLurl = "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的pandas库导入数据。以下是一个简单的示例:
import pandas as pd # 导入数据data = pd.read_csv('shuangseqiu_data.csv')print(data.head)可以打印前5行数据显示 ,确认数据是否加载成功。
数据预处理是机器学习中至关重要的一环。我们需要对数据进行清洗和转换,以便模型能够有效地进行训练和预测。主要步骤包括:
处理缺失值转换数据类型归一化或标准化数值以下是一个处理缺失值的示例:
# 检查缺失值 print(data.isnull.sum)# 填充缺失值data.fillna(method='ffill', inplace=True)转换数据类型
# 将开奖时间转换为日期格式df['开奖时间'] = pd.to_datetime(df['开奖时间'])归一化或标准化数值
采集的数据比较标准,无需处理.
在准备好数据后,我们需要创建特征数据集并选择合适的机器学习模型进行训练。特征可以包括红球和蓝球的历史出现频率、和值、跨度等。我们可以使用Scikit-learn库来创建和训练模型。
我们使用期数作为特征值,红球和蓝球作为预测目标值.
# 特征和标签 X = df[['期号']]y_red = df[['红球1', '红球2', '红球3', '红球4', '红球5', '红球6']]y_blue = df[['蓝球']]划分训练集和测试集,80%的训练集和20%的测试集
# 划分数据集 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)五,预测结果开始预测,我们输入特征值:2025100期
# 预测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进行双色球数据分析与预测。尽管机器学习可以帮助我们理解数据中的某些模式,但彩票的随机性质使得任何预测都不能保证成功。希望大家在进行这些技术探索时,始终保持理性和谨慎。双色球是公益事业,祝大家好运!
来源:李白也学编程