"import" "operator"\n"from" "collections" "import" "Counter"\n"import" "defaultdict" "as" "dd"\n"import" "colorama"\n"import" "numpy" "as" "np"\n"import" "pandas" "as" "pd"\n"from" "openpyxl" "import" "load_workbook"\n"from" "openpyxl.utils" "import" "get_column_letter"\n"import" "os"\n"import" "random"\n\ncolorama.init()\n\n# 读取历史数据\ndf = pd.read_excel('ssq.xls', sheet_name=0, usecols=list(range(2, 9)), skiprows=2)\n\n# 将前6列(红球)存储在新的DataFrame中\nred_data = df.iloc[:, :6]\n\n# 将第7列(蓝球)存储在新的DataFrame中\nblue_data = df.iloc[:, 6]\n\nballs_data = df.iloc[:, :]\n\n# 数据预处理: 统计每个红球的出现次数\nred_counts = red_data.apply(Counter).sum()\n\n# 预测下一期红球区间出数个数\n# 预测: 生成下一期区间出数个数的数量预测\ndef predict_red(red_counts):\n next_red_counts = red_counts.copy()\n for i in range(10, 34):\n if i in next_red_counts:\n next_red_counts[i] = 0\n next_red_counts[i] += 1 # 当前逻辑保持不变\n # 增加逻辑: 如果某个区间的出数个数小于5,那么预测下一期该区间的出数个数加1\n for key, value in next_red_counts.items():\n if value < 5:\n next_red_counts[key] += 1\n return list(next_red_counts.items())\n\n# 预测: 生成下一期奇数和偶数的数量预测\ndef predict_odd_even(red_data):\n # 增加逻辑: 如果上一期的奇数个数大于等于6,预测下一期奇数个数减1;\n # 如果上一期的偶数个数大于等于6,预测下一期偶数个数减1。\n prev_odd_count = len([num for num in red_data if num % 2 == 1])\n prev_even_count = len([num for num in red_data if num % 2 == 0])\n if prev_odd_count >= 6:\n odd_count = max(0, prev_odd_count - 1)\n else:\n odd_count = prev_odd_count\n if prev_even_count >= 6:\n even_count = max(0, prev_even_count - 1)\n else:\n even_count = prev_even_count\n return {'奇数': odd_count, '偶数': even_count}\n\n# 历史数据分析法:计算红球数字的概率权重\nred_weights_history = red_data.apply(lambda x: x.value_counts(normalize=True))\n\n# 统计学分析法:计算红球数字的概率权重\nred_weights_statistics = red_data.apply(lambda x: x.value_counts(normalize=True))\n\n# 趋势分析法:计算红球数字的概率权重\nred_weights_trend = red_data.apply(lambda x: x.value_counts(normalize=True))\n\n# 分组选号法:计算红球数字的概率权重\nred_weights_group = red_data.apply(lambda x: x.value_counts(normalize=True))\n\n# 历史数据分析法:计算蓝球数字的概率权重\nblue_weights_history = blue_data.value_counts(normalize=True)\n\n# 统计学分析法:计算蓝球数字的概率权重\nblue_weights_statistics = blue_data.value_counts(normalize=True)\n\n# 趋势分析法:计算蓝球数字的概率权重\nblue_weights_trend = blue_data.value_counts(normalize=True)\n\n# 分组选号法:计算蓝球数字的概率权重\nblue_weights_group = blue_data.value_counts(normalize=True)\n\n# 将四种分析方法计算的概率权重合并并每个值乘以100\nred_weights = pd.concat([red_weights_history, red_weights_statistics, red_weights_trend, red_weights_group], axis=1).sum(axis=1)\nblue_weights = pd.concat([blue_weights_history, blue_weights_statistics, blue_weights_trend, blue_weights_group], axis=1).sum(axis=1)\n\n# 获取最近几期的红球和蓝球号码\nrecent_winners = df.tail(20)\nrecent_winners_red = recent_winners.iloc[:, :6].values.flatten()\nrecent_winners_blue = recent_winners.iloc[:, 6].values.flatten()\n\n\ncount_red = {}\ncount_blue = {}\n\nfor i in recent_winners_red:\n count_red[i] = count_red.get(i, 0) + 1\n\nfor i in recent_winners_blue:\n count_blue[i] = count_blue.get(i, 0) + 1\n\n# 计算每个数字的自动权重调整因子系数\nred_auto_weights = {num: 1 / (freq ** 2) for num, freq in count_red.items()}\nblue_auto_weights = {num: 1 / (freq ** 2) for num, freq in count_blue.items()}\n\n# 合并红球权重字典\nmerged_red_weights = {}\nfor num, weight in red_weights.items():\n if num in red_auto_weights:\n merged_red_weights[num] = weight * red_auto_weights[num]\n\n# 合并蓝球权重字典\nmerged_blue_weights = {}\nfor num, weight in blue_weights_history.items():\n if num in blue_auto_weights:\n merged_blue_weights[num] = weight * blue_auto_weights[num]\n\n# 为红球和蓝球生成完整的权重字典,包括所有可能出现的数字\nnumbers_red = [i for i in range(1, 34)]\nnumbers_blue = [i for i in range(1, 17)]\n\nfor num in numbers_red:\n if num not in merged_red_weights.keys():\n merged_red_weights.update({num: 1})\n\nfor num in numbers_blue:\n if num not in merged_blue_weights.keys():\n merged_blue_weights.update({num: 1})\n\n# 从红球权重字典中根据概率随机选择6个红球\nred_ball_list = list(merged_red_weights.keys())\nred_weights_list = list(merged_red_weights.values())\n\n# 从蓝球权重字典中根据概率随机选择1个蓝球\nblue_ball_list = list(merged_blue_weights.keys())\nblue_weights_list = list(merged_blue_weights.values())\n\nprint('\n')\nwhile True:\n selected_red_combinations = []\n while True:\n user_input = input('请输入所下注数: ')\n os.system('cls')\n try:\n Note_number = int(user_input)\n break\n except ValueError:\n print('输入的不是数字,请重新输入。')\n print()\n print('\n')\n user_inputb = input('请选择是否测试本期中奖率:(输入'y'或者'n') ')\n os.system('cls')\n if user_inputb.lower() == 'y':\n while True:\n print('\n')\n user_inputc = input('请输入本期中奖红球号码(并以空格分开): ')\n print()\n if len(user_inputc.split()) != 6:\n print('输入的红球号码数量不正确,请重新输入。')\n print()\n else:\n try:\n red_ballsa = [int(num) for num in user_inputc.split()]\n if all(1 <= i <= 33 for i in red_ballsa):\n break\n else:\n print('输入的不是有效的数字,请重新输入。')\n print()\n except ValueError:\n print('输入的不是有效的数字,请重新输入。')\n print()\n num_list = user_inputc.split()\n user_inputc = [int(num) for num in num_list] # 转换成整数类型\n while True:\n print()\n user_inputd = input('请输入本期中奖蓝球号码: ')\n print()\n try:\n blue_balld = int(user_inputd)\n if 1 <= blue_balld <= 16:\n break\n except ValueError:\n print('输入的不是有效的数字,请重新输入。')\n print()\n os.system('cls')\n countaa = {}\n my_dict = {}\n my_list_a = []\n historical_data = defaultdict(int)\n xx = 0\n xxx = 0\n new_list = []\n for _ in range(int(user_input)):\n while True:\n red_selected_balls = []\n new_selected_balls = []\n blue_selected_ball = []\n while True:\n red_selected_balls.append(random.choices(red_ball_list, weights=red_weights_list, k=1)[0])\n new_selected_balls.append(random.choices(red_ball_list, weights=red_weights_list, k=1)[0])\n if len(red_selected_balls) >= 6:\n break\n blue_selected_ball = random.choices(blue_ball_list, weights=blue_weights_list, k=1)[0]\n new_selected_balls.append(random.choices(blue_ball_list, weights=blue_weights_list, k=1)[0])\n if all(set(new_selected_balls) != set(x) for x in balls_data.values) and \n all(set(red_selected_balls) != set(x) for x in selected_red_combinations):\n selected_red_combinations.append(tuple(sorted(new_selected_balls)))\n break\n sorted_selected_red_balls = sorted(red_selected_balls)\n\n print(f'{colorama.Fore.RED} {' '.join([f'{i:02d}' for i in sorted_selected_red_balls])}{colorama.Style.RESET_ALL}', end='')\n print(f'{colorama.Fore.BLUE} {f'{blue_selected_ball:02d}'} {colorama.Style.RESET_ALL}')\n most_common_reds_formatted = [f'{i:02d}' for i in sorted_selected_red_balls]\n most_common_reds_formatted.append(' ')\n most_common_reds_formatted.append(f'{blue_selected_ball:02d}')\n my_list_a.append(most_common_reds_formatted)\n if user_inputb.lower() == 'y':\n new_lista = []\n\n common_elements_red = len(set(user_inputc) & set(red_selected_balls))\n\n\n common_elements_blue = '是' if int(user_inputd) == int(blue_selected_ball) else '否'\n if common_elements_blue == '是':\n if common_elements_red >= 3:\n word = f' 中{common_elements_red}个红球,蓝球是否中奖:( {common_elements_blue} )'\n countaa[word] = countaa.get(word, 0) + 1\n most_common_reds_formatted.append(f'{word}')\n new_list.append(list(most_common_reds_formatted))\n\n xx += 1\n else:\n word = f' 只中蓝球:( {common_elements_blue} ) '\n countaa[word] = countaa.get(word, 0) + 1\n most_common_reds_formatted.append(f'{word}')\n new_list.append(list(most_common_reds_formatted))\n xx += 1\n else:\n if common_elements_red >= 4:\n word = f' 中{common_elements_red}个红球,蓝球是否中奖:\n\n ( {common_elements_blue} )'\n\n countaa[word] = countaa.get(word, 0)\n\n + 1\n most_common_reds_formatted.append(f'{word}')\n new_list.append(list(most_common_reds_formatted))\n\n xx += 1\n xxx += 1\n\n\n if user_inputb.lower() == 'y':\n sorted_dict = dict(sorted(countaa.items(), key=operator.itemgetter(1, 0)))\n print('\n')\n for key, value in sorted_dict.items():\n print(key, ' ', '中奖注数: ', value, ' 注')\n print(' 总下注数: ', f'{int(xxx)}', ' 注')\n print(' 中奖概率: ', f'{(int(xx) / int(xxx) * 100):.2f} %')\n if (int(xx) / int(xxx) * 100)\n\n > 0:\n # 创建 DataFrame\n df = pd.DataFrame(new_list, columns=['红', '红', '红', '红', '红', '', '蓝', '奖项'])\n df.to_excel('中奖结果.xlsx', index=False)\n os.startfile('中奖结果.xlsx')\n\n\n else:\n df = pd.DataFrame(\n columns=['红', '红', '红', '红', '红', '红', '''', '蓝', '概率', '少于10', '少于20', '少于30', '30以上', '奇数','偶数'])\n for row in my_list_a:\n new_row = []\n for cell in row:\n try:\n cell = int(cell)\n except ValueError:\n pass\n new_row.append(cell)\n\n\n aa = sum(1 for i in new_row[:6] if i < 10)\n bb = sum(1 for i in new_row[:6] if 10 <= i < 20)\n cc = sum(1 for i in new_row[:6] if 20 <= i < 30)\n dd = sum(1 for i in new_row[:6] if i >= 30)\n formula = sum(1 for i in my_list_a if i[7] == row[7])\n ee = sum(1 for i in new_row[:6] if i % 2 == 1)\n ff = sum(1 for i in new_row[:6] if i % 2 == 0)\n\n formatted_row = [f'{i:02d}' if isinstance(i, int) else i for i in new_row]\n formatted_row.extend([formula, aa, bb, cc, dd, ee, ff])\n df = df._append(pd.Series(formatted_row, index=df.columns), ignore_index=True)\n\n df_sorted = df.sort_values(by=['概率', '少于10', '少于20', '少于30', '30以上', '奇数','偶数'],ascending=[False, False, False, False, False, False, False])\n df_sorted.to_excel('选号结果.xlsx', index=False)\n # 打开现有的Excel文件\n filename = '选号结果.xlsx'\n wb = openpyxl.load_workbook(filename)\n ws = wb.active\n\n data = []\n data.append([])\n data.append([])\n data.append(['下一期红球预测:'])\n\n next_red_predictions = predict_red(red_counts)\n odd_even_predictions = predict_odd_even(red_data)\n next_red_predictions_sorted = sorted(next_red_predictions, key=operator.itemgetter(1, 0), reverse=True)\n # 将预测结果写入Excel文件中\n row_index = ws.max_row + 1 # 获取下一行的索引\n for i, value in enumerate(next_red_predictions_sorted):\n ws.cell(row=row_index + i, column=1, value=str(value))\n\n row_index = ws.max_row + 2 # 获取下一行的索引\n ws.cell(row=row_index, column=1, value='奇偶预测:')\n row_index += 1\n ws.cell(row=row_index, column=1, value='奇数:')\n # 或者 odd_values = odd_even_predictions['odd'] # 如果odd_even_predictions['odd']是整数的话\n for key, values in odd_even_predictions.items():\n for i, value in enumerate(values):\n if key == 'odd':\n ws.cell(row=row_index + 1 + i, column=1, value=value)\n elif key == 'even':\n ws.cell(row=row_index + 1 + i, column=2, value=value)\n\n ws.cell(row=row_index, column=2, value='偶数:')\n for i, value in enumerate(odd_even_predictions['even']):\n ws.cell(row=row_index + 1 + i, column=2, value=value)\n\n # 设置列宽\n column_list = [1, 9] # 第一列和第9列的列索引\n for column in column_list:\n column_letter = get_column_letter(column)\n ws.column_dimensions[column_letter].width = 15\n\n # 保存更改到Excel文件并打开文件\n wb.save(filename)\n os.startfile(filename)\n\n print('\n')\n input('按回车键继续...')\n os.system('cls')\n\n for i, value in enumerate(values):\n ^^^^^^^^^^^^^^^^^^^^^^^\n TypeError:\n 'int' object is not iterable: 这段代码中存在一些错误,导致无法完整运行。以下是我找到的一些错误和问题:\n\n1. 缺少导入模块的代码,例如导入运算符模块(import operator)和导入openpyxl.utils.get_column_letter模块(from openpyxl.utils import get_column_letter)。\n2. 在导入colorama之后,缺少对colorama.init()的调用,以初始化colorama模块。\n3. 在导入numpy和pandas时,应将其分别导入为np和pd,而不是作为numpy和pandas导入。\n4. 第一个代码块中的一些行没有正确缩进,导致语法错误。请仔细检查缩进。\n5. 在预测函数predict_red和predict_odd_even

双色球号码预测 - 使用历史数据和统计学分析

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

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