2. 高频数据基础
📊 高频数据清洗基础
数据质量问题分类 · 清洗流程总览
📌 数据质量问题分类 缺失 · 异常 · 重复 · 时间戳错乱
① 缺失值
- NaN 空值 / None / 占位符 (如 -999)
- 结构性缺失 传感器离线、网络丢包
- 隐式缺失 时间戳跳变无记录
📎 常见处理: 前向填充 · 线性插值 · 删除阈值
② 异常值
- 统计异常 3σ · IQR · Z-score
- 业务异常 价格≤0 · 涨跌幅>50%
- 时序异常 尖峰 · 断崖 · 平台毛刺
📎 常用检测: MAD · 孤立森林 · 滑动窗口分位数
③ 重复值
- 完全重复 所有字段一致 (多笔相同)
- 部分重复 关键字段重复 (如时间+价格)
- 业务重复 同一笔订单多次上报
📎 去重策略: 精确去重 · 相似度去重 · 窗口去重
④ 时间戳错乱
- 乱序 后到先处理 (out-of-order)
- 漂移 时钟不同步 · 时区错误
- 重复/间隙 毫秒级重复戳 · 跳秒
📎 矫正方式: 排序 · 对齐NTP · 重采样
⚙️ 清洗流程总览 高频数据流水线
| 阶段 | 操作 | 高频场景要点 |
|---|---|---|
| ① 缺失值处理 | 前向填充 · 插值 · 删除 | 使用 ffill 限制最大间隔;高频数据慎用删除 |
| ② 重复值去除 | 基于时间戳+价格去重 | 毫秒级窗口去重;保留首条或最后一条 |
| ③ 异常值检测 | 滚动分位数 · 3σ · 业务规则 | 高频用滑动窗口MAD;避免误杀有效波动 |
| ④ 时间戳矫正 | 排序 · 时区转换 · 重采样 | 对齐到交易所时钟;处理闰秒/夏令时 |
| ⑤ 质量验证 | 完整性 · 顺序性 · 边界检查 | 输出清洗报告;记录丢弃比例 |
🧪 代码片段 · 高频清洗骨架
# 高频数据清洗 pipeline (Python 伪代码)
import pandas as pd
import numpy as np
def clean_high_freq(df: pd.DataFrame) -> pd.DataFrame:
# 1. 时间戳排序 & 索引化
df = df.sort_values('timestamp').reset_index(drop=True)
# 2. 缺失值前向填充 (限制最大间隔 5 笔)
df['price'] = df['price'].ffill(limit=5)
df['volume'] = df['volume'].fillna(0)
# 3. 去除完全重复行
df = df.drop_duplicates(subset=['timestamp', 'price', 'volume'])
# 4. 异常值检测 (滚动 IQR)
rolling_iqr = df['price'].rolling(20).quantile(0.75) - df['price'].rolling(20).quantile(0.25)
median = df['price'].rolling(20).median()
df['is_anomaly'] = (np.abs(df['price'] - median) > 3 * rolling_iqr)
df = df[~df['is_anomaly']].copy()
# 5. 时间戳重采样 (可选)
# df = df.set_index('timestamp').resample('1ms').ffill().reset_index()
return df
✅ 缺失值
前向填充 · 插值 · 标记
✅ 异常值
MAD · 分位数 · 业务规则
✅ 重复值
毫秒级窗口 · 关键字段
✅ 时间戳错乱
排序 · 对齐 · 重采样