正好手上有2003年-2024年所有雙色球中獎的記錄,用這20幾年的數(shù)據(jù)分析舰罚,然后來預(yù)測,應(yīng)該有一定的參考性薛耻。
聲明:本文主要目的為編程學(xué)習营罢,數(shù)據(jù)僅用來作為統(tǒng)計之用,且數(shù)據(jù)來源公開合法饼齿。本文無任何導(dǎo)向愤钾。個人看法僅供參考。
1候醒,準備數(shù)據(jù)。
首先杂瘸,我們需要采集公開的雙色球中獎記錄倒淫,我這里采集了2003-2025年所有的雙色球記錄,記錄如下:
接下來败玉,需要根據(jù)這些數(shù)據(jù)預(yù)處理敌土。
因為數(shù)據(jù)比較完善,所以基本上都是正確的运翼。
2返干,建立預(yù)測模型
將所有的數(shù)據(jù)分成訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)。
代碼如下:
import pandas as pd
import matplotlib.pyplot as plt
from IPython.core.display import HTML
# 設(shè)置 Matplotlib 使用的中文字體
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑體
plt.rcParams['axes.unicode_minus'] = False # 支持負號顯示
# 讀取數(shù)據(jù)
df = pd.read_csv('lottery_results_2003_2024.csv', encoding='gbk')
def collect_next_numbers(red_balls, blue_drum):
next_red_numbers = []
next_blue_numbers = []
# 遍歷數(shù)據(jù)血淌,查找符合條件的下一期號碼
for i in range(len(df) - 1):
current_reds = set(df.iloc[i][2:8]) # 當前紅球
current_blue = df.iloc[i, 8] # 當前藍球
# 如果當前紅球與輸入紅球有交集且當前藍球符合輸入值
if current_reds.intersection(red_balls) and current_blue == blue_drum:
next_reds = df.iloc[i + 1][2:8] # 下一期紅球
next_blue = df.iloc[i + 1, 8] # 下一期藍球
next_red_numbers.extend(next_reds)
next_blue_numbers.append(next_blue) # 注意矩欠,這里是單獨一個藍球
return next_red_numbers, next_blue_numbers
# 只判斷一個紅球時
def collect_next_numbers_one(red_ball):
next_red_numbers = []
next_blue_numbers = []
# 遍歷數(shù)據(jù),查找符合條件的下一期號碼
for i in range(len(df) - 1):
current_reds = set(df.iloc[i][2:8]) # 當前紅球
# 如果當前紅球與輸入紅球有交集且當前藍球符合輸入值
if red_ball in current_reds:
next_reds = df.iloc[i + 1][2:8] # 下一期紅球
next_red_numbers.extend(next_reds)
return next_red_numbers
def analyze_frequencies(numbers):
frequency = pd.Series(numbers).value_counts()
return frequency
# 輸入紅球和藍球
input_red_balls = [2, 3, 17, 18, 22, 33] # 示例輸入
input_blue_ball = 16 # 示例輸入
for i in input_red_balls:
next_red_numbers = collect_next_numbers_one(i)
# 統(tǒng)計紅球頻率
red_frequency = analyze_frequencies(next_red_numbers)
# 獲取紅球頻率最高和最低的前5個號碼
top_red_5 = red_frequency.nlargest(5)
#display(HTML(f'當紅球是:<span style="color: red;font-size:30px">{i}</span>時,下一次出現(xiàn)頻率最高的數(shù)字是:'))
# 將 Series 轉(zhuǎn)換為 DataFrame
top_red_5_df = top_red_5.reset_index()
top_red_5_df.columns = ['紅球號碼', '頻率'] # 重命名列
# 使用 HTML 格式化輸出
html_table = top_red_5_df.to_html(index=False, border=0, justify='center', classes='table table-bordered', escape=False)
# 添加自定義樣式
styled_html = f'''
<div style="margin: 0 auto; width: 50%; text-align: center;">
<h3>當紅球是<span style="color: red;font-size:30px">{i}</span>時,下一次紅球前5頻率</h3>
{html_table.replace('table', 'table style="width:100%; text-align:center;"')}
</div>
'''
# 顯示美觀的 HTML 表格
display(HTML(styled_html))
display(HTML('<h1>當本次出現(xiàn)的紅球其中有一個出現(xiàn),并且籃球也出現(xiàn)時的概率統(tǒng)計如下:</h1>'))
# 收集下一期出現(xiàn)的號碼
next_red_numbers, next_blue_numbers = collect_next_numbers(input_red_balls, input_blue_ball)
# 統(tǒng)計紅球頻率
red_frequency = analyze_frequencies(next_red_numbers)
# 統(tǒng)計藍球頻率
blue_frequency = analyze_frequencies(next_blue_numbers)
# 獲取紅球頻率最高和最低的前5個號碼
top_red_5 = red_frequency.nlargest(5)
#bottom_red_5 = red_frequency.nsmallest(5)
# 獲取藍球頻率最高和最低的前5個號碼
top_blue_5 = blue_frequency.nlargest(5)
# 輸出紅球結(jié)果
print("紅球出現(xiàn)頻率最高的前5個號碼:")
print(top_red_5)
# 輸出藍球結(jié)果
print("\n藍球出現(xiàn)頻率最高的號碼:")
print(top_blue_5)
# 繪制紅球頻率柱狀圖
plt.figure(figsize=(12, 6))
plt.bar(top_red_5.index.astype(str), top_red_5.values, color='blue', label='紅球最高頻率')
plt.xlabel('號碼')
plt.ylabel('頻率')
plt.title('紅球出現(xiàn)頻率')
plt.legend()
plt.show()
# 繪制藍球頻率柱狀圖
plt.figure(figsize=(12, 6))
plt.bar(top_blue_5.index.astype(str), top_blue_5.values, color='green', label='藍球最高頻率')
plt.xlabel('號碼')
plt.ylabel('頻率')
plt.title('藍球出現(xiàn)頻率')
plt.legend()
plt.show()
代碼講解:
本次使用的預(yù)測需求是:
使用上一次出現(xiàn)的號碼悠夯,來計算下次出現(xiàn)號碼頻率最高的前5個癌淮。
例如,第2025011期 2025-01-26(周日)21:15:00開獎結(jié)果
6 歷史上沦补,6出現(xiàn)了之后乳蓄,大概率會出現(xiàn)什么呢?
13
17
22
24
29
11 歷史上夕膀,籃球11出現(xiàn)之后虚倒,大概率會出現(xiàn)什么呢?
接下來产舞,我們運行代碼魂奥,看看計算結(jié)果:
圖解:當紅球是6時,下一期出現(xiàn)9的次數(shù)是131次庞瘸,出現(xiàn)6的次數(shù)是127次捧弃,出現(xiàn)10的次數(shù)是127次,出現(xiàn)20的次數(shù)是126,出現(xiàn)8的次數(shù)是125.
通過本次統(tǒng)計违霞,得到的號碼有5組嘴办。
相信大家有自己的判斷了。
3买鸽,計算紅球和藍球同時出現(xiàn)的情況
接下來為了使結(jié)果更加精確涧郊,我們把需求整得準確一點。
要求紅球和藍球同時出現(xiàn)的情況下眼五,下一期哪些號碼出現(xiàn)的頻率最高妆艘。
例如,我們只計算當藍球11號出現(xiàn)時看幼,紅球6后面出現(xiàn)的數(shù)字批旺。
根據(jù)預(yù)測,得到結(jié)果如下:
這是出現(xiàn)頻率比較高的號碼诵姜。
數(shù)據(jù)是根據(jù)代碼統(tǒng)計的結(jié)果汽煮,沒有預(yù)測的效果,請慎重參考棚唆。
還需要更多數(shù)據(jù)參考暇赤,請關(guān)注我,我會繼續(xù)為大家分析數(shù)據(jù)宵凌。
#有哪些好玩的Python代碼#
#暢聊人工智能#