這是一個基于Python開發的降雨預測系統,使用機器學習算法對指定月份的降雨概率進行預測。該系統提供了友好的圖形用戶界面(GUI),支持數據可視化和交互式操作。
## 功能特點
- ?? 生成歷史降雨數據(2015-2024年)
- ?? 使用邏輯回歸模型進行降雨預測
- ?? 可視化預測結果
- ?? 顯示每日降雨概率
- ?? 直觀的圖形用戶界面
- ?? 詳細的預測結果表格
- ?? 完整的中文支持
## 環境要求
- Python 3.7+
- 必需的Python庫:
- pandas:數據處理
- numpy:數值計算
- scikit-learn:機器學習模型
- matplotlib:數據可視化
- seaborn:增強可視化效果
- tkinter:GUI界面(Python標準庫自帶)
## 使用說明
1. 在控制面板中:
- 設置起始年份(默認2015)
- 設置當前年份(默認2024)
- 選擇要預測的月份(1-12)
2. 操作步驟:
- 點擊"生成數據"按鈕生成歷史數據
- 點擊"訓練模型"按鈕訓練預測模型
- 點擊"預測結果"按鈕查看預測結果
3. 查看結果:
- 圖表區域顯示降雨概率曲線
- 表格區域顯示詳細的每日預測數據
- 輸出區域顯示操作狀態和模型評估結果
## 注意事項
1. 數據說明
- 歷史數據為模擬生成,用于演示系統功能
- 預測結果僅供參考,不應用于實際天氣預報
2. 性能優化
- 首次運行時,模型訓練可能需要幾秒鐘
- 數據量較大時,建議增加起始年份以減少處理時間
降雨預測系統代碼說明:
## 1. 導入庫和初始化設置
```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import seaborn as sns
import warnings
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from datetime import datetime, timedelta
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import os
```
### 導入庫說明
- **數據處理**:pandas(pd), numpy(np)
- **機器學習**:sklearn (LogisticRegression, StandardScaler, train_test_split)
- **數據可視化**:matplotlib.pyplot, seaborn
- **GUI界面**:tkinter (tk, ttk, messagebox)
- **日期處理**:datetime
- **圖表嵌入**:matplotlib.backends.backend_tkagg
### 中文字體設置
```python
try:
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'SimSun', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
# 檢查字體可用性
font_names = [f.name for f in fm.fontManager.ttflist]
chinese_font_found = False
for font in ['SimHei', 'Microsoft YaHei', 'SimSun', 'Arial Unicode MS']:
if font in font_names:
print(f"找到中文字體: {font}")
chinese_font_found = True
break
```
- 設置matplotlib支持中文顯示
- 按優先級嘗試多個中文字體
- 檢查系統中可用的中文字體
## 2. RainPredictor類
### 2.1 初始化
```python
def __init__(self, start_year=2015, current_year=2024, month=3):
self.start_year = start_year
self.current_year = current_year
self.month = month
self.data = None
self.model = None
self.scaler = StandardScaler()
```
- 初始化年份范圍和預測月份
- 創建StandardScaler實例用于特征標準化
### 2.2 生成歷史數據
```python
def generate_historical_data(self):
```
功能:
- 生成模擬的歷史天氣數據
- 考慮月份天數(閏年處理)
- 生成特征數據:
- 溫度(temperature)
- 濕度(humidity)
- 氣壓(pressure)
- 降雨情況(rainfall)
- 添加日期特征(day_sin, day_cos)
### 2.3 訓練模型
```python
def train_model(self):
```
功能:
- 準備特征數據
- 標準化特征
- 分割訓練集和測試集
- 訓練邏輯回歸模型
- 計算模型評估指標
### 2.4 預測當前月份
``