Bootstrap

基于Python机器学习的双色球数据分析与预测

python统计分析2003-2024年所有的中奖记录,通过人工智能机器学习预测双色球,个人意见,仅供参考.

声明:双色球具有随机性,任何工具无法预测。本文章仅作为技术交流,提供学习参考。本文所涉及的代码均为python之机器学习的代码。双色球为公益事业,请大家一起为公益加油!

一,收集数据。

首先,我们需要将双色球的历史数据收集到本地。可以通过官方网站、网络爬虫或API接口来获取相关数据。历史数据通常包括开奖日期、红球号码、蓝球号码及其他相关信息。确保将数据保存为CSV或Excel格式,以便后续分析和处理。

以下是采集数据的代码。

'''

@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库导入数据。以下是一个简单的示例:

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

完整代码:

'''

@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]}")

总结 

  1. 数据量:提供的数据量较小,可能影响模型的准确性。通常需要更多的历史数据来训练有效的模型。
  2. 随机性:双色球的结果具有随机性,预测结果不应被视为实际的开奖结果。

通过以上步骤,我们简单地演示了如何使用Python进行双色球数据分析与预测。尽管机器学习可以帮助我们理解数据中的某些模式,但彩票的随机性质使得任何预测都不能保证成功。希望大家在进行这些技术探索时,始终保持理性和谨慎。双色球是公益事业,祝大家好运!

;