import os from collections import Counter from random import choices from colorama import Fore, Style import pandas as pd import openpyxl from openpyxl.utils import get_column_letter

读取历史数据

df = pd.read_excel('ssq.xls', sheet_name=0, usecols=list(range(2, 9)), skiprows=2)

将前6列(红球)存储在新的DataFrame中

red_data = df.iloc[:, :6]

将第7列(蓝球)存储在新的DataFrame中

blue_data = df.iloc[:, 6]

balls_data = df.iloc[:, :]

数据预处理: 统计每个红球的出现次数

red_counts = red_data.apply(Counter).sum()

预测下一期红球区间出数个数

def predict_red(red_counts): next_red_counts = red_counts.copy() for i in range(10, 34): if i in next_red_counts: next_red_counts[i] = 0 next_red_counts[i] += 1 # 当前逻辑保持不变 # 增加逻辑: 如果某个区间的出数个数小于5,那么预测下一期该区间的出数个数加1 if next_red_counts[i] < 5: next_red_counts[i] += 1 return list(next_red_counts.items())

预测: 生成下一期奇数和偶数的数量预测

def predict_odd_even(red_data): # 增加逻辑: 如果上一期的奇数个数大于等于6,预测下一期奇数个数减1; # 如果上一期的偶数个数大于等于6,预测下一期偶数个数减1。 prev_odd_count = len([num for num in red_data if num % 2 == 1]) prev_even_count = len([num for num in red_data if num % 2 == 0]) if prev_odd_count >= 6: odd_count = max(0, prev_odd_count - 1) else: odd_count = prev_odd_count if prev_even_count >= 6: even_count = max(0, prev_even_count - 1) else: even_count = prev_even_count return {'奇数': odd_count, '偶数': even_count}

历史数据分析法:计算红球数字的概率权重

red_weights_history = red_data.apply(lambda x: x.value_counts(normalize=True))

统计学分析法:计算红球数字的概率权重

red_weights_statistics = red_data.apply(lambda x: x.value_counts(normalize=True))

趋势分析法:计算红球数字的概率权重

red_weights_trend = red_data.apply(lambda x: x.value_counts(normalize=True))

分组选号法:计算红球数字的概率权重

red_weights_group = red_data.apply(lambda x: x.value_counts(normalize=True))

历史数据分析法:计算蓝球数字的概率权重

blue_weights_history = blue_data.value_counts(normalize=True)

统计学分析法:计算蓝球数字的概率权重

blue_weights_statistics = blue_data.value_counts(normalize=True)

趋势分析法:计算蓝球数字的概率权重

blue_weights_trend = blue_data.value_counts(normalize=True)

分组选号法:计算蓝球数字的概率权重

blue_weights_group = blue_data.value_counts(normalize=True)

将四种分析方法计算的概率权重合并并每个值乘以100

red_weights = pd.concat([red_weights_history, red_weights_statistics, red_weights_trend, red_weights_group], axis=1).sum(axis=1) blue_weights = pd.concat([blue_weights_history, blue_weights_statistics, blue_weights_trend, blue_weights_group], axis=1).sum(axis=1)

获取最近几期的红球和蓝球号码

recent_winners = df.tail(20) recent_winners_red = recent_winners.iloc[:, :6].values.flatten() recent_winners_blue = recent_winners.iloc[:, 6].values.flatten()

count_red = {} count_blue = {}

for i in recent_winners_red: count_red[i] = count_red.get(i, 0) + 1

for i in recent_winners_blue: count_blue[i] = count_blue.get(i, 0) + 1

计算每个数字的自动权重调整因子系数

red_auto_weights = {num: 1 / (freq ** 2) for num, freq in count_red.items()} blue_auto_weights = {num: 1 / (freq ** 2) for num, freq in count_blue.items()}

合并红球权重字典

merged_red_weights = {} for num, weight in red_weights.items(): if num in red_auto_weights: merged_red_weights[num] = weight * red_auto_weights[num]

合并蓝球权重字典

merged_blue_weights = {} for num, weight in blue_weights_history.items(): if num in blue_auto_weights: merged_blue_weights[num] = weight * blue_auto_weights[num]

numbers_red = [i for i in range(1, 34)] numbers_blue = [i for i in range(1, 17)]

for num in numbers_red: if num not in merged_red_weights.keys(): merged_red_weights.update({num: 1})

for num in numbers_blue: if num not in merged_blue_weights.keys(): merged_blue_weights.update({num: 1})

从红球权重字典中根据概率随机选择6个红球

red_ball_list = list(merged_red_weights.keys()) red_weights_list = list(merged_red_weights.values())

从蓝球权重字典中根据概率随机选择1个蓝球

blue_ball_list = list(merged_blue_weights.keys()) blue_weights_list = list(merged_blue_weights.values())

print(f'
' f'{colorama.Fore.RED}双色球选号结果:{colorama.Style.RESET_ALL}
' f' {colorama.Fore.GREEN}红球:{colorama.Style.RESET_ALL}
' f' {colorama.Fore.BLUE}蓝球:{colorama.Style.RESET_ALL}
') while True: selected_red_combinations = [] while True: user_input = input('请输入所下注数: ') os.system('cls') try: Note_number = int(user_input) break except ValueError: print('输入的不是数字,请重新输入。') print() print(f'
' f'{colorama.Fore.RED}双色球选号结果:{colorama.Style.RESET_ALL}
' f' {colorama.Fore.GREEN}红球:{colorama.Style.RESET_ALL}
' f' {colorama.Fore.BLUE}蓝球:{colorama.Style.RESET_ALL}
') user_inputb = input('请选择是否测试本期中奖率:(输入'y'或者'n') ') os.system('cls') if user_inputb.lower() == 'y': while True: print(f'
' f'{colorama.Fore.RED}双色球选号结果:{colorama.Style.RESET_ALL}
' f' {colorama.Fore.GREEN}红球:{colorama.Style.RESET_ALL}
' f' {colorama.Fore.BLUE}蓝球:{colorama.Style.RESET_ALL}
') user_inputc = input('请输入本期中奖红球号码(并以空格分开): ') print() if len(user_inputc.split()) != 6: print('输入的红球号码数量不正确,请重新输入。') print() else: try: red_ballsa = [int(num) for num in user_inputc.split()] if all(1 <= i <= 33 for i in red_ballsa): break else: print('输入的不是有效的数字,请重新输入。') print() except ValueError: print('输入的不是有效的数字,请重新输入。') print() num_list = user_inputc.split() user_inputc = [int(num) for num in num_list] # 转换成整数类型 while True: print() user_inputd = input('请输入本期中奖蓝球号码: ') print() try: blue_balld = int(user_inputd) if 1 <= blue_balld <= 16: break else: print('输入的不是有效的数字,请重新输入。') print() except ValueError: print('输入的不是有效的数字,请重新输入。') print() os.system('cls') countaa = {} my_dict = {} my_list_a = [] historical_data = df.values xx = 0 xxx = 0 new_list = [] for _ in range(int(user_input)): while True: red_selected_balls = [] new_selected_balls = [] blue_selected_ball = [] while True: red_selected_balls.append(choices(red_ball_list, weights=red_weights_list, k=1)[0]) new_selected_balls.append(choices(red_ball_list, weights=red_weights_list, k=1)[0]) if len(red_selected_balls) >= 6: break blue_selected_ball = choices(blue_ball_list, weights=blue_weights_list, k=1)[0] new_selected_balls.append(choices(blue_ball_list, weights=blue_weights_list, k=1)[0]) if all(set(new_selected_balls) != set(x) for x in balls_data.values) and
all(set(red_selected_balls) != set(x) for x in selected_red_combinations): selected_red_combinations.append(tuple(sorted(new_selected_balls))) break sorted_selected_red_balls = sorted(red_selected_balls)

            print(f'{colorama.Fore.RED} {' '.join([f'{i:02d}' for i in sorted_selected_red_balls])}{colorama.Style.RESET_ALL}', end='')
            print(f'{colorama.Fore.BLUE} {f'{blue_selected_ball:02d}'} {colorama.Style.RESET_ALL}')
            most_common_reds_formatted = [f'{i:02d}' for i in sorted_selected_red_balls]
            most_common_reds_formatted.append(' ')
            most_common_reds_formatted.append(f'{blue_selected_ball:02d}')
            my_list_a.append(most_common_reds_formatted)
            if user_inputb.lower() == 'y':
                new_lista = []

                common_elements_red = len(set(user_inputc) & set(red_selected_balls))

                common_elements_blue = '是' if int(user_inputd) == int(blue_selected_ball) else '否'
                if common_elements_blue == '是':
                    if common_elements_red >= 3:
                        word = f' 中{common_elements_red}个红球,蓝球是否中奖:( {common_elements_blue} )'
                        countaa[word] = countaa.get(word, 0) + 1
                        most_common_reds_formatted.append(f'{word}')
                        new_list.append(list(most_common_reds_formatted))

                        xx += 1
                    else:
                        word = f' 只中蓝球:( {common_elements_blue} ) '
                        countaa[word] = countaa.get(word, 0) + 1
                        most_common_reds_formatted.append(f'{word}')
                        new_list.append(list(most_common_reds_formatted))
                        xx += 1
                else:
                    if common_elements_red >= 4:
                        word = f' 中{common_elements_red}个红球,蓝球是否中奖:

                        ( {common_elements_blue} )'
                        countaa[word] = countaa.get(word, 0) + 1
                        most_common_reds_formatted.append(f'{word}')
                        new_list.append(list(most_common_reds_formatted))

                        xx += 1
                        xxx += 1

    if user_inputb.lower() == 'y':
        sorted_dict = dict(sorted(countaa.items(), key=operator.itemgetter(1, 0)))
        print('\

') for key, value in sorted_dict.items(): print(key, ' ', '中奖注数: ', value, ' 注') print(' 总下注数: ', f'{int(xxx)}', ' 注') print(' 中奖概率: ', f'{(int(xx) / int(xxx) * 100):.2f} %') if (int(xx) / int(xxx) * 100) > 0: # 创建 DataFrame df = pd.DataFrame(new_list, columns=['红', '红', '红', '红', '红', '', '蓝', '奖项']) df.to_excel('中奖结果.xlsx', index=False) os.startfile('中奖结果.xlsx')

    else:
        df = pd.DataFrame(
            columns=['红', '红', '红', '红', '红', '红', ''', '蓝', '概率', '少于10', '少于20', '少于30', '30以上', '奇数','偶数'])
        for row in my_list_a:
            new_row = []
            for cell in row:
                try:
                    cell = int(cell)
                except ValueError:
                    pass
                new_row.append(cell)

            aa = sum(1 for i in new_row[:6] if i < 10)
            bb = sum(1 for i in new_row[:6] if 10 <= i < 20)
            cc = sum(1 for i in new_row[:6] if 20 <= i < 30)
            dd = sum(1 for i in new_row[:6] if i >= 30)
            formula = sum(1 for i in my_list_a if i[7] == row[7])
            ee = sum(1 for i in new_row[:6] if i % 2 == 1)
            ff = sum(1 for i in new_row[:6] if i % 2 == 0)

            formatted_row = [f'{i:02d}' if isinstance(i, int) else i for i in new_row]
            formatted_row.extend([formula, aa, bb, cc, dd, ee, ff])
            df = df._append(pd.Series(formatted_row, index=df.columns), ignore_index=True)

        df_sorted = df.sort_values(by=['概率', '少于10', '少于20', '少于30', '30以上', '奇数','偶数'],ascending=[False, False, False, False, False, False, False])
        df_sorted.to_excel('选号结果.xlsx', index=False)
        # 打开现有的Excel文件
        filename = '选号结果.xlsx'
        wb = openpyxl.load_workbook(filename)
        ws = wb.active

        data = []
        data.append([])
        data.append([])
        data.append(['下一期红球预测:'])

        next_red_predictions = predict_red(red_counts)
        odd_even_predictions = predict_odd_even(red_data)
        next_red_predictions_sorted = sorted(next_red_predictions, key=operator.itemgetter(1, 0), reverse=True)
        # 将预测结果写入Excel文件中
        row_index = ws.max_row + 1  # 获取下一行的索引
        for i, value in enumerate(next_red_predictions_sorted):
            ws.cell(row=row_index + i, column=1, value=str(value))

        row_index = ws.max_row + 2  # 获取下一行的索引
        ws.cell(row=row_index, column=1, value='奇偶预测:')
        row_index += 1
        ws.cell(row=row_index, column=1, value='奇数:')
        # 或者 odd_values = odd_even_predictions['odd']  # 如果odd_even_predictions['odd']是整数的话
        for key, values in odd_even_predictions.items():
            for i, value in enumerate(values):
                if key == 'odd':
                    ws.cell(row=row_index + 1 + i, column=1, value=value)
                elif key == 'even':
                    ws.cell(row=row_index + 1 + i, column=2, value=value)

        ws.cell(row=row_index, column=2, value='偶数:')
        for i, value in enumerate(odd_even_predictions['even']):
            ws.cell(row=row_index + 1 + i, column=2, value=value)

        # 设置列宽
        column_list = [1, 9]  # 第一列和第9列的列索引
        for column in column_list:
            column_letter = get_column_letter(column)
            ws.column_dimensions[column_letter].width = 15

        # 保存更改到Excel文件并打开文件
        wb.save(filename)
        os.startfile(filename)

print('\

') input('按回车键继续...') os.system('cls')

双色球选号助手:使用Python分析历史数据并生成预测号码

原文地址: https://www.cveoy.top/t/topic/o7I7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录