DesignStormAnalyzer 是一个专业的暴雨频率分析系统,实现了基于逐小时降雨数据的 场次暴雨识别与频率分析。系统支持两种核心排频方法:
- 🌧️ 场次最大值排频 (event_max):基于智能场次识别的频率分析,提供更丰富的样本量
- 📊 年最大值排频 (annual_max):基于滑动窗口年最大值的频率分析,符合水文规范要求
系统采用"滑动时间窗口计算 + P-III型分布频率分析"的先进水文统计方法, 结合现代化的数据处理技术,为水文工程设计和科研提供可靠的暴雨频率分析结果。
- ✅ 数据预处理:时间序列连续性检查、异常值识别、缺测数据插补
- ✅ 数据提取:支持场次最大值和年最大值两种排频方法
- ✅ 频率分析:P-III型分布参数估计和拟合检验
- ✅ 设计值推求:计算不同频率设计暴雨值
- ✅ 成果输出:自动生成表格、图件和技术报告
pip install -r requirements.txtpython main.py <excel_file_path>python main.py rainfall_data.xlsx --sheet "降雨数据"python main.py rainfall_data.xlsx --config config.yamlpython main.py rainfall_data.xlsx --output ./resultsExcel文件要求:
- 第一列:逐小时时间序列(datetime格式)
- 第二列:降雨强度(mm/h)
示例:
| 时间 | 降雨量(mm/h) |
|---|---|
| 2020-01-01 00:00 | 0.0 |
| 2020-01-01 01:00 | 1.2 |
| 2020-01-01 02:00 | 3.5 |
| ... | ... |
程序运行后会在输出目录生成以下文件:
暴雨场次统计表_24h.xlsx- 1日场次暴雨序列(仅场次排频方法)暴雨场次统计表_72h.xlsx- 3日场次暴雨序列(仅场次排频方法)暴雨场次统计表_168h.xlsx- 7日场次暴雨序列(仅场次排频方法)参数统计表.xlsx- 各历时统计参数设计暴雨成果表.xlsx- 核心成果表滑动求和数据表.xlsx- 原始降雨数据和各历时滑动累计降雨量24h累积雨量排序.xlsx- 24小时滑动累积雨量从大到小排序(>1mm)72h累积雨量排序.xlsx- 72小时滑动累积雨量从大到小排序(>1mm)168h累积雨量排序.xlsx- 168小时滑动累积雨量从大到小排序(>1mm)
频率曲线图.png- 经验点据和理论曲线设计值对比图.png- 不同历时设计值对比场次暴雨趋势图_24h.png- 场次暴雨变化趋势
analysis_report.md- Markdown格式技术报告analysis.log- 程序运行日志
配置文件 config.yaml 包含以下主要参数:
# 分析历时(小时)
analysis:
durations: [24, 72, 168] # 1日、3日、7日
design_frequencies: [0.01, 0.02, 0.05, 0.10] # 1%, 2%, 5%, 10%
cs_cv_ratio: 4.0 # Cs/Cv比值
frequency_method: 'annual_max' # 排频方法: 'event_max'或'annual_max'
# 水文年度起始
water_year:
start_month: 1 # 1=自然年度, 5=水文年度(5月1日起)
start_day: 1
# 质量控制
quality_control:
missing_threshold: 0.10 # 缺测率阈值10%
outlier_method: '3sigma' # 异常值检测方法
interpolation: 'linear' # 插补方法逐小时降雨数据(Excel)
↓
[阶段1] 数据预处理与质量控制
├─ 时间序列连续性检查
├─ 异常值识别与处理
├─ 缺测数据插补
└─ 水文年度划分
↓
[阶段2] 数据提取
├─ 滑动窗口累计降雨量计算
├─ event_max: 场次暴雨识别与提取
├─ annual_max: 年最大值提取
├─ 1日(24h)序列构建
├─ 3日(72h)序列构建
└─ 7日(168h)序列构建
↓
[阶段3] P-III型分布频率分析
├─ 统计参数估计(X̄, Cᵥ, Cₛ)
├─ 经验频率计算(Weibull公式)
├─ 理论频率曲线拟合
└─ 适线检验(R, RMSE)
↓
[阶段4] 设计暴雨值推求
├─ 计算P=1%, 2%, 5%, 10%对应的设计雨量
└─ 生成设计暴雨成果表
↓
输出成果(表格+图件+报告)
项目根目录/
├── main.py # 主程序入口
├── config.yaml # 配置文件
├── requirements.txt # 依赖包列表
├── setup.py # 安装配置
├── README.md # 使用说明
├── .gitignore # Git忽略规则
│
├── src/ # 源代码目录
│ ├── __init__.py
│ │
│ ├── data_module/ # 数据预处理模块
│ │ ├── __init__.py
│ │ └── loader.py # 数据加载和质量控制
│ │
│ ├── extraction_module/ # 场次暴雨提取模块
│ │ ├── __init__.py
│ │ └── rainfall_event_analysis.py # 场次暴雨分析器
│ │
│ ├── frequency_module/ # 频率分析模块
│ │ ├── __init__.py
│ │ └── pearson3.py # P-III型分布
│ │
│ └── visualization_module/ # 可视化模块
│ ├── __init__.py
│ ├── frequency_curve.py # 频率曲线绘制
│ ├── report_generator.py # 报告生成器
│ └── font_config.py # 中文字体配置
│
└── test/ # 测试目录
├── generate_test_data.py # 测试数据生成
├── run_example.sh # Linux/Mac测试脚本
├── run_example.bat # Windows测试脚本
└── results/ # 测试结果输出目录
- 时间序列连续性自动检查
- 多重异常值检测(绝对阈值、3σ准则、孤立尖峰)
- 智能缺测数据插补(线性、样条、前向填充)
- event_max: 基于降雨阈值和无雨间隔的智能场次识别
- annual_max: 基于滑动窗口的年最大值提取
- 统一使用滑动窗口进行累计降雨量计算
- 自动记录起止时间、持续时间和降雨强度特征
- P-III型分布双线性插值模比系数表
- 多种参数估计方法(矩法、经验关系)
- 支持手动设置P-III分布参数
- 全面拟合检验(相关系数R、RMSE、NSE)
- SlidingWindowData: 滑动窗口数据容器
- SlidingWindowExtractor: 滑动窗口数据提取器
- FrequencyAnalyzer: 频率分析器(支持两种排频方法)
- 使用numpy卷积计算滑动累计,效率高
- 支持任意历时的滑动窗口计算
- 自动处理时间序列的连续性
- 自动生成Excel表格和高质量PNG图件
- Markdown格式技术报告便于编辑
- 详细运行日志便于问题追溯
新增的滑动求和数据表包含以下列:
| 列名 | 说明 |
|---|---|
| 时间 | 降雨记录时间(YYYY-MM-DD HH:MM格式) |
| 降雨(mm/h) | 逐小时降雨强度 |
| 24h累积降雨量(mm) | 24小时滑动窗口累计降雨量 |
| 72h累积降雨量(mm) | 72小时滑动窗口累计降雨量 |
| 168h累积降雨量(mm) | 168小时滑动窗口累计降雨量(如有) |
数据说明:
- 滑动累计降雨量表示以该时间点为结束的滑动窗口内累计降雨量
- 表格数据长度受最长滑动窗口影响,确保所有历时数据完整
- 空值用NaN填充,表示该位置无法计算有效滑动窗口值
每个历时生成独立的排序累积雨量表,包含以下列:
| 列名 | 说明 |
|---|---|
| 时间 | 滑动窗口中心时间(YYYY-MM-DD HH:MM格式) |
| 累积雨量(mm) | 滑动窗口累计降雨量 |
数据特性:
- 数据筛选: 只包含累积雨量 > 1mm 的有效降雨事件
- 排序方式: 按累积雨量从大到小降序排列
- 独立表格: 每个历时(24h、72h、168h)生成单独的工作表
- 应用场景: 便于快速查找历史强降雨事件,进行极值分析和工程设计参考
- 时间序列必须为逐小时间隔
- 建议数据长度≥30年以满足频率分析要求
- 缺测率应<10%,否则影响分析精度
- 水文年度起始应根据主汛期特征确定
- Cs/Cv比值可根据区域特性调整(3.0-4.0)
- 拟合检验阈值可根据精度要求调整
- 务必与邻近站点对比验证合理性
- 对于拟合不佳情况需人工复核
- 设计值为统计期望,工程应用需考虑安全系数
Q: 拟合检验不通过怎么办?
- 检查是否有极端异常值影响参数估计
- 尝试调整Cs/Cv比值(3.0-4.0范围内)
- 考虑分时段率定或采用其他分布
Q: 不同历时设计值出现倒挂?
- 核查各历时场次提取是否正确
- 检查场次识别参数是否合理
- 必要时强制约束单调性
Q: 场次数量过多或过少?
- 调整降雨阈值和无雨间隔参数
- 检查数据质量和连续性
- 根据区域气候特征优化识别条件
Q: event_max与annual_max结果差异大?
- 这是正常现象,两种方法有不同的应用场景
- event_max提供更丰富的样本量,统计更可靠
- annual_max符合规范要求,工程设计接受度高
- 可根据具体需求选择合适的方法
- 《水利水电工程设计洪水计算规范》(SL44-2006)
- 《水文计算手册》
- 《暴雨统计参数计算技术规程》
- 版本: v2.1
- 更新日期: 2025-11-02
- 开发语言: Python 3.8+
- 许可证: MIT
- ✅ 代码质量: 添加完整的类型提示和文档字符串
- ✅ 配置优化: 物理阈值和日志级别支持配置化
- ✅ 错误处理: 增强Excel文件检查和配置验证
- ✅ 现代化: 修复已弃用的API调用,提升代码健壮性
- ✅ 类型安全: 使用typing模块,提升代码可维护性
- ✅ 配置完善: 添加完整的配置验证机制
- ✅ 重大更新: 支持event_max和annual_max两种排频方法
- ✅ 方法命名: 统一使用简洁明了的方法命名
- ✅ 滑动窗口: 统一使用滑动窗口进行累计降雨量计算
- ✅ 结构重构: 代码组织更清晰,采用src/目录结构
- ✅ 功能增强: 自动记录场次起止时间、持续时间等详细信息
- ✅ 字体支持: 解决中文图表显示问题
- ✅ 测试完善: 提供完整的测试脚本和数据
- ✅ 实现基于年最大值的频率分析功能
- ✅ 支持P-III型分布拟合和参数估计
- ✅ 提供完整的可视化输出功能
如有问题或建议,欢迎反馈。
免责声明: 本程序为科研和工程辅助工具,最终成果需经专业人员审核后方可用于工程设计。