用Python编程预测双色球手机版

UHHVH 数码 2

本篇文章将从数据爬取、数据清洗、模型训练、模型预测四个方面详细介绍使用Python预测双色球的过程。

在进行预测之前,首先需要采集历史双色球开奖数据。我们选择从官网抓取数据,代码如下:


import requests
from bs4 import BeautifulSoup

# 官方网站历史页面
url = 'http://www.cwl.gov.cn/kjxx/ssq/kjgg/'

r = requests.get(url)
r.encoding = 'utf-8'
web_text = r.text

soup = BeautifulSoup(web_text, 'html.parser')

# 官方网站历史开奖号码区块
main_div = soup.find('div', {'class': 'main'})
data_div = main_div.find_all('tr')

# 解析数据
for each in data_div:
    row = each.find_all('td')
    # 处理获取到的数据
    ...

解析数据过程中,我们需要注意对数据进行清洗,排除无效数据,同时将期号和开奖号码分别保存到不同的数组中。

在获取到历史开奖数据后,我们需要对数据进行清洗,去除重复数据、空值、异常值等。


import pandas as pd

# 将期号和开奖号码存放到 DataFrame 中
df = pd.DataFrame({'red1': red1, 'red2': red2, 'red3': red3, 'red4': red4, 'red5': red5, 'red6': red6, 'blue': blue})

# 删除重复数据
df.drop_duplicates(inplace=True)

# 删除空值
df.dropna(inplace=True)

# 删除异常数据
df = df[(df['red1'] <= 33) & (df['red2'] <= 33) & (df['red3'] <= 33)
        & (df['red4'] <= 33) & (df['red5'] <= 33) & (df['red6'] <= 33) & (df['blue'] <= 16)]

经过数据清洗后,我们需要对数据进行预处理,并将数据拆分为训练集和测试集,用于训练模型与测试模型的准确度。我们选择使用随机森林算法训练数据,并保存训练模型。


from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
import joblib

# 数据预处理
X = df.drop('blue', axis=1)
y = df['blue']
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 数据拆分
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)

# 随机森林模型训练
rf = RandomForestClassifier()
rf.fit(X_train, y_train)

# 测试模型准确度
accuracy = rf.score(X_test, y_test)
print(f"随机森林模型预测准确度为 {accuracy:.2%}")

# 保存模型
joblib.dump(rf, "model.pkl")

在训练好模型后,我们可以直接调用模型进行预测。我们选择对最近10期数据进行预测,并将预测结果与官方开奖结果进行比对,来评估模型的准确度。


from datetime import datetime

# 最近10期数据
new_data = [['2022058', 4, 6, 14, 19, 28, 33],
            ['2022059', 7, 12, 19, 20, 28, 30],
            ['2022060', 1, 4, 7, 11, 12, 13],
            ['2022061', 2, 9, 11, 14, 28, 33],
            ['2022062', 7, 8, 14, 19, 27, 32],
            ['2022063', 2, 6, 8, 9, 15, 32],
            ['2022064', 8, 11, 14, 15, 29, 32],
            ['2022065', 7, 8, 18, 21, 23, 26],
            ['2022066', 4, 10, 15, 17, 22, 31],
            ['2022067', 4, 5, 14, 16, 25, 29]]

# 数据预处理
new_df = pd.DataFrame(new_data, columns=['period', 'red1', 'red2', 'red3', 'red4', 'red5', 'red6'])
new_df.drop('period', axis=1, inplace=True)
new_scaled = scaler.transform(new_df)

# 调用模型进行预测
result = rf.predict(new_scaled)
print(result)

# 比对预测结果和官方结果 
official_result = ['07 12 19 20 28 30 + 14', '01 04 07 11 12 13 + 15', '02 09 11 14 28 33 + 05',
                   '07 08 14 19 27 32 + 06', '02 06 08 09 15 32 + 05', '08 11 14 15 29 32 + 07',
                   '07 08 18 21 23 26 + 11', '04 10 15 17 22 31 + 13', '04 05 14 16 25 29 + 08']
success = 0
for i in range(len(result)):
    if result[i] == int(official_result[i][-2:]):
        success += 1
print(f"最近10期预测中,预测成功个数为 {success}")

通过以上步骤,我们就可以进行双色球的预测工作了。完整的代码可参考以下链接:https://github.com/yourname/yourproject

回复

共1条回复 我来回复
  • 暂无回复内容