Skip to content

miboyu/DesignStormAnalyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DesignStormAnalyzer - 基于逐小时降雨数据的暴雨频率分析算法

🌟 项目简介

DesignStormAnalyzer 是一个专业的暴雨频率分析系统,实现了基于逐小时降雨数据的 场次暴雨识别与频率分析。系统支持两种核心排频方法:

  • 🌧️ 场次最大值排频 (event_max):基于智能场次识别的频率分析,提供更丰富的样本量
  • 📊 年最大值排频 (annual_max):基于滑动窗口年最大值的频率分析,符合水文规范要求

系统采用"滑动时间窗口计算 + P-III型分布频率分析"的先进水文统计方法, 结合现代化的数据处理技术,为水文工程设计和科研提供可靠的暴雨频率分析结果。

功能特性

  • ✅ 数据预处理:时间序列连续性检查、异常值识别、缺测数据插补
  • ✅ 数据提取:支持场次最大值和年最大值两种排频方法
  • ✅ 频率分析:P-III型分布参数估计和拟合检验
  • ✅ 设计值推求:计算不同频率设计暴雨值
  • ✅ 成果输出:自动生成表格、图件和技术报告

安装依赖

pip install -r requirements.txt

使用方法

基本用法

python main.py <excel_file_path>

指定Sheet名称

python main.py rainfall_data.xlsx --sheet "降雨数据"

使用配置文件

python main.py rainfall_data.xlsx --config config.yaml

指定输出目录

python main.py rainfall_data.xlsx --output ./results

输入数据格式

Excel文件要求:

  • 第一列:逐小时时间序列(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符合规范要求,工程设计接受度高
  • 可根据具体需求选择合适的方法

参考文献

  1. 《水利水电工程设计洪水计算规范》(SL44-2006)
  2. 《水文计算手册》
  3. 《暴雨统计参数计算技术规程》

版本信息

  • 版本: v2.1
  • 更新日期: 2025-11-02
  • 开发语言: Python 3.8+
  • 许可证: MIT

版本更新记录

v2.1 (2025-11-02) - 代码质量提升版本

  • 代码质量: 添加完整的类型提示和文档字符串
  • 配置优化: 物理阈值和日志级别支持配置化
  • 错误处理: 增强Excel文件检查和配置验证
  • 现代化: 修复已弃用的API调用,提升代码健壮性
  • 类型安全: 使用typing模块,提升代码可维护性
  • 配置完善: 添加完整的配置验证机制

v2.0 (2025-11-01) - 双排频方法版本

  • 重大更新: 支持event_max和annual_max两种排频方法
  • 方法命名: 统一使用简洁明了的方法命名
  • 滑动窗口: 统一使用滑动窗口进行累计降雨量计算
  • 结构重构: 代码组织更清晰,采用src/目录结构
  • 功能增强: 自动记录场次起止时间、持续时间等详细信息
  • 字体支持: 解决中文图表显示问题
  • 测试完善: 提供完整的测试脚本和数据

v1.0 (2025-01-31) - 初始版本

  • ✅ 实现基于年最大值的频率分析功能
  • ✅ 支持P-III型分布拟合和参数估计
  • ✅ 提供完整的可视化输出功能

联系方式

如有问题或建议,欢迎反馈。


免责声明: 本程序为科研和工程辅助工具,最终成果需经专业人员审核后方可用于工程设计。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •