安全扫描
OpenClaw
安全
high confidence该技能是一个纯指令指南,用于获取和解析NWS洪水阈值CSV文件;其需求和指令与该目的相符,不请求无关的凭据或安装。
评估建议
这是一个获取NWS洪水阈值的简单操作指南;使用前请确保您的agent/runtime可以向water.noaa.gov发起出站HTTPS请求,并验证/处理CSV模式变更(该指南已标注已知的43列与44列不匹配问题)。将传入的CSV数据视为不可信:添加错误处理、null/-9999检查和显式解析以避免潜在的细微bug。匹配USGS ID时保留前导零(使用字符串),考虑缓存以减少重复网络调用,如果您依赖此数据进行运营决策,请验证NWS端点是当前的权威来源。...详细分析 ▾
✓ 用途与能力
名称/描述(下载NWS洪水阈值并与USGS测站匹配)与SKILL.md相符:它指向NWS CSV和测站页面,并提供下载、解析、过滤和映射阈值的代码。不请求无关的服务、二进制文件或凭据。
✓ 指令范围
运行时指令的范围狭窄,仅限于获取NWS CSV、截断已知的表头/数据不匹配、将列转换为数值、过滤和按USGS id匹配。指令不要求agent读取无关文件、访问其他环境变量或向其他端点传输数据。
✓ 安装机制
这是一个纯指令技能,没有安装规范,除SKILL.md外没有代码文件。该技能本身不执行下载或包安装。
✓ 凭证需求
不需要环境变量、凭据或配置路径。唯一的运行时依赖是到water.noaa.gov的出站网络访问(对于此目的是预期的)。
✓ 持久化与权限
always为false,该技能不请求持久/全局权限也不修改其他技能。允许正常自主调用(平台默认),但对于此功能来说并不过度。
安全有层次,运行前请审查代码。
运行时依赖
无特殊依赖
版本
latestv0.1.02026/4/15
批量发布来自all-task-skills-dedup
● 无害
安装命令
点击复制官方npx clawhub@latest install flood-risk-analysis-nws-flood-thresholds
镜像加速npx clawhub@latest install flood-risk-analysis-nws-flood-thresholds --registry https://cn.longxiaskill.com镜像同步中
技能文档
概述
美国国家气象服务(NWS)维护着美国数千个河流监测站的洪水阶段阈值。这些阈值定义了水位何时变得危险。
数据源
选项1:批量CSV下载(推荐用于多个测站)
https://water.noaa.gov/resources/downloads/reports/nwps_all_gauges_report.csv
选项2:单个测站页面
https://water.noaa.gov/gauges/
示例:https://water.noaa.gov/gauges/04118105
洪水阶段分类
| 分类 | CSV列 | 描述 |
|---|---|---|
| 行动阶段 | action stage | 需要监测的水位,可能需要准备 |
| 洪水阶段(轻度) | flood stage | 轻微财产损失,对公众有一定威胁。使用此来确定是否发生洪水。 |
| 中度洪水阶段 | moderate flood stage | 建筑物被淹,可能需要疏散 |
| 重大洪水阶段 | major flood stage | 大范围损坏,需要大量疏散 |
flood stage列作为阈值。下载批量CSV
import pandas as pd import csv import urllib.request import io
nws_url = "https://water.noaa.gov/resources/downloads/reports/nwps_all_gauges_report.csv" response = urllib.request.urlopen(nws_url) content = response.read().decode('utf-8') reader = csv.reader(io.StringIO(content)) headers = next(reader) data = [row[:43] for row in reader] # 截断为43列 nws_df = pd.DataFrame(data, columns=headers)
重要:CSV列不匹配
NWS CSV存在已知问题:表头行有43列但数据行有44列。始终将数据行截断以匹配表头数量:
data = [row[:43] for row in reader]
关键列
| 列名 | 描述 |
|---|---|
usgs id | USGS测站ID(8位字符串) |
location name | 测站名称/位置 |
state | 两个字母的州代码 |
action stage | 行动阈值(英尺) |
flood stage | 轻度洪水阈值(英尺) |
moderate flood stage | 中度洪水阈值(英尺) |
major flood stage | 重大洪水阈值(英尺) |
转换为数值
阈值列需要从字符串转换:
nws_df['flood stage'] = pd.to_numeric(nws_df['flood stage'], errors='coerce')
按州过滤
# 获取特定州的测站
state_stations = nws_df[
(nws_df['state'] == '') &
(nws_df['usgs id'].notna()) &
(nws_df['usgs id'] != '') &
(nws_df['flood stage'].notna()) &
(nws_df['flood stage'] != -9999)
]
将阈值与测站ID匹配
# 构建测站阈值字典
station_ids = ['', '', '']
thresholds = {}
for _, row in nws_df.iterrows():
usgs_id = str(row['usgs id']).strip()
if usgs_id in station_ids:
thresholds[usgs_id] = {
'name': row['location name'],
'flood': row['flood stage']
}
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 列不匹配错误 | CSV有44个数据列但43个表头 | 将行截断为43列 |
| 缺少阈值 | 测站不在NWS数据库中 | 跳过测站或使用其他来源 |
| 值为-9999 | 未定义阈值 | 过滤掉这些值 |
| usgs id为空 | 仅NWS测站 | 按usgs id != ''过滤 |
最佳实践
- 始终将CSV行截断以匹配表头数量
- 在比较前将阈值列转换为数值
- 过滤掉-9999值(表示未定义阈值)
- 按USGS ID(带前导零的8位字符串)匹配测站
- 某些测站可能有洪水阶段但没有行动/中度/重大阶段