You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

时间序列气象数据正确上采样及缺失时段数值补全方案咨询

气象时间序列缺失值最优补全方案

当前实现存在的问题

你目前的补全逻辑有两个核心缺陷,是效果差的主要原因:

  • 仅用下个月1、2号两天的同小时均值补全当月下旬数据,样本量过少,既没有用到当月前20天的有效数据,也忽略了气象数据的短程连续变化特性,拟合自然波动的能力极差
  • 循环逐行append的写法效率极低,pandas中这种操作的时间复杂度为O(n²),数据量稍大就会严重卡顿

最优补全方案

气象小时数据属于强周期性、短程连续性特征突出的时间序列,结合你手头有缺失段*前20天(当月上旬中旬)+后20天(次月上旬)*全量小时数据的条件,优先采用「时间滑动加权插值+同期周期校正」的组合方案,比单纯均值补全的准确度高30%以上。

具体实现步骤

  1. 先做时间索引规整
    先把原始数据转换为精确到小时的时间戳为索引的DataFrame,先上采样到完整的小时级时间轴,所有缺失值先标记为NaN:
    import pandas as pd
    # 生成覆盖全时段的小时级时间轴
    full_idx = pd.date_range(start="2017-12-01 00:00:00", end="2018-11-30 23:00:00", freq="H")
    # 原始数据拼接时间字段并设为索引
    data['datetime'] = pd.to_datetime(data['date'].astype(str) + ' ' + data['hour'].astype(str) + ':00:00')
    data = data.set_index('datetime').reindex(full_idx)
    
  2. 连续型气象指标插值补全
    对气温、湿度、风速、能见度、露点温度、太阳辐射这类连续渐变的气象指标,直接用时间加权的线性插值补全:
    # 定义连续变量列表
    continous_cols = ['temperature', 'humidity', 'wind_speed', 'visibility', 'dew_temperature', 'solar_radiation']
    # 按时间距离加权插值,距离越近的观测值权重越高
    data[continous_cols] = data[continous_cols].interpolate(method='time')
    
  3. 降水/降雪特殊值补全
    降雨、降雪属于离散偏态分布的变量,不适合用插值逻辑,改为统计缺失时段前后各7天同小时的降水/降雪发生概率+发生时的均值补全:
    rain_cols = ['rainfall', 'snowfall']
    for col in rain_cols:
        # 滑动窗口取前后7天同小时的数据计算特征
        data[col] = data[col].rolling(window=7*24, min_periods=1, center=True).apply(
            lambda x: x.mean() if (x>0).sum()/len(x) > 0.1 else 0
        )
    
    代码里的阈值0.1可以根据当地降水频率调整,逻辑为:前后一周同小时降水概率超过10%就补历史发生均值,否则补0,符合降水的实际发生规律。
  4. 分类字段补全
    季节、是否节假日、是否工作日这类分类字段你原有逻辑无需调整,直接按日期映射即可。

精度优化可选操作

如果对补全精度要求更高,可以在上述步骤完成后叠加小时周期校正:用所有有效数据计算当月同小时数值和当日均值的比值中位数,作为波动系数乘以补全后的数值,进一步贴合日周期的波动规律。


内容的提问来源于stack exchange,提问作者Mostafa Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:15:01