analyze_numbers
Analyze lottery number statistics, identifying hot and cold numbers, for games like Double Color Ball and Seven Happiness Lottery. Specify lottery type and periods for detailed insights.
Instructions
分析彩票号码统计信息,包括热号、冷号等
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lottery_type | Yes | 彩票类型 | |
| periods | No | 分析期数 |
Implementation Reference
- src/swlc_mcp/server.py:1142-1170 (handler)MCP tool handler implementation for 'analyze_numbers'. Fetches historical lottery results, performs analysis using SWLCService.analyze_numbers(), and formats a detailed text response with hot/cold numbers and frequency stats.elif name == "analyze_numbers": lottery_type = arguments.get("lottery_type") periods = arguments.get("periods", 30) results = await lottery_service.get_historical_data(lottery_type, periods) if results: analysis = lottery_service.analyze_numbers(results) text = f"""{lottery_type}号码分析(最近{periods}期): 热门号码(前10):{' '.join(analysis.hot_numbers)} 冷门号码(后10):{' '.join(analysis.cold_numbers)} 统计信息: - 分析期数:{analysis.consecutive_analysis['total_periods']}期 - 最高频号码:{analysis.consecutive_analysis['most_frequent'][0]} (出现{analysis.consecutive_analysis['most_frequent'][1]}次) - 最低频号码:{analysis.consecutive_analysis['least_frequent'][0]} (出现{analysis.consecutive_analysis['least_frequent'][1]}次) 详细频率统计:""" # 添加详细频率信息 sorted_freq = sorted(analysis.frequency_stats.items(), key=lambda x: x[1], reverse=True) for num, freq in sorted_freq[:15]: # 显示前15个 text += f"\n号码 {num}: {freq}次" return [types.TextContent(type="text", text=text)] else: return [types.TextContent(type="text", text="获取数据失败,无法进行分析")]
- src/swlc_mcp/server.py:961-981 (registration)Registration of the 'analyze_numbers' tool in the MCP server's list_tools() method, defining its name, description, and input schema.name="analyze_numbers", description="分析彩票号码统计信息,包括热号、冷号等", inputSchema={ "type": "object", "properties": { "lottery_type": { "type": "string", "enum": ["双色球", "福彩3D", "七乐彩", "快乐8"], "description": "彩票类型" }, "periods": { "type": "integer", "minimum": 5, "maximum": 1000, "default": 30, "description": "分析期数" } }, "required": ["lottery_type"] } ),
- src/swlc_mcp/server.py:963-980 (schema)Input schema definition for the 'analyze_numbers' tool, specifying parameters for lottery_type (required) and optional periods.inputSchema={ "type": "object", "properties": { "lottery_type": { "type": "string", "enum": ["双色球", "福彩3D", "七乐彩", "快乐8"], "description": "彩票类型" }, "periods": { "type": "integer", "minimum": 5, "maximum": 1000, "default": 30, "description": "分析期数" } }, "required": ["lottery_type"] }
- src/swlc_mcp/server.py:790-853 (helper)SWLCService.analyze_numbers method: Computes frequency statistics, identifies hot and cold numbers, and provides consecutive analysis from a list of LotteryResult objects. Uses database stats if available and fresh, otherwise computes from provided results.def analyze_numbers(self, results: List[LotteryResult]) -> LotteryAnalysis: """分析号码统计""" # 首先尝试从数据库获取统计信息 if results: lottery_type = results[0].lottery_type db_stats = self.db.get_number_statistics(lottery_type) # 检查统计信息是否需要更新 should_update_stats = False if not db_stats: should_update_stats = True else: # 检查最新数据的新鲜度 latest_result = results[0] if results else None if latest_result and not self._is_data_fresh(latest_result.draw_date, lottery_type): should_update_stats = True if not should_update_stats and db_stats: logger.info(f"从本地数据库获取{lottery_type}号码统计") # 排序找出热号和冷号 sorted_nums = sorted(db_stats.items(), key=lambda x: x[1], reverse=True) hot_numbers = [num for num, _ in sorted_nums[:10]] cold_numbers = [num for num, _ in sorted_nums[-10:]] return LotteryAnalysis( hot_numbers=hot_numbers, cold_numbers=cold_numbers, frequency_stats=db_stats, consecutive_analysis={ "total_periods": len(results), "most_frequent": sorted_nums[0] if sorted_nums else ("", 0), "least_frequent": sorted_nums[-1] if sorted_nums else ("", 0) } ) # 如果数据库没有统计信息或需要更新,从结果中计算 logger.info("从结果数据计算号码统计") frequency = {} all_numbers = [] for result in results: all_numbers.extend(result.numbers) if result.special_numbers: all_numbers.extend(result.special_numbers) # 统计频率 for num in all_numbers: frequency[num] = frequency.get(num, 0) + 1 # 排序找出热号和冷号 sorted_nums = sorted(frequency.items(), key=lambda x: x[1], reverse=True) hot_numbers = [num for num, _ in sorted_nums[:10]] cold_numbers = [num for num, _ in sorted_nums[-10:]] return LotteryAnalysis( hot_numbers=hot_numbers, cold_numbers=cold_numbers, frequency_stats=frequency, consecutive_analysis={ "total_periods": len(results), "most_frequent": sorted_nums[0] if sorted_nums else ("", 0), "least_frequent": sorted_nums[-1] if sorted_nums else ("", 0) } )