Files
UAV-CO2/DATA_PROCESSOR_README.md

296 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 无人机数据处理工具
将Excel格式的无人机测量数据转换为GasFlux标准输入格式的完整解决方案。
## 📋 处理流程
### 输入数据格式
Excel文件必须包含以下列顺序可以不同
| 列名 | 数据类型 | 说明 |
|------|----------|------|
| `日期` | 字符串 | 日期 (YYYY-MM-DD 或 YYYY/MM/DD) |
| `时间` | 字符串 | 时间 (HH:MM:SS 或 H:MM:SS) |
| `经度` | 数值 | GPS经度坐标 (原始大数值) |
| `纬度` | 数值 | GPS纬度坐标 (原始大数值) |
| `高程` | 数值 | 飞行器高程 |
| `融合高程` | 数值 | 融合后的海拔高度 |
| `速度x` | 数值 | 东向速度分量 |
| `速度y` | 数值 | 北向速度分量 |
| `速度z` | 数值 | 垂直速度分量 |
| `四元数_q0-q3` | 数值 | 姿态四元数 |
| `pitch` | 数值 | 俯仰角 |
| `roll` | 数值 | 横滚角 |
| `yaw` | 数值 | 偏航角 |
| `CH4` | 数值 | 甲烷浓度 |
| `H2O` | 数值 | 水蒸气浓度 |
| `修正风向` | 数值 | 修正后的风向 |
| `修正风速` | 数值 | 修正后的风速 |
| `原始风向` | 数值 | 原始风向 |
| `原始风速` | 数值 | 原始风速 |
| `风温` | 数值 | 风温 (温度) |
## 🔄 处理步骤详解
### 1. 列删除
自动删除以下不需要的列:
- `高程`, `速度x`, `速度y`, `速度z`
- `四元数_q0`, `四元数_q1`, `四元数_q2`, `四元数_q3`
- `pitch`, `roll`, `yaw`
- `H2O`, `原始风向`, `原始风速`
### 2. 时间修正
根据文件名提取小时信息并修正时间列:
**文件名示例**: `08_34_01_间隔高度5m.xlsx`
- 提取: `08` (小时)
- 时间转换: `0:34:01``08:34:01`
### 3. 坐标转换
经纬度坐标除以 `10^7` 进行单位转换:
```
原始经度: 1157855289 → 转换后: 115.7855289
原始纬度: 403491370 → 转换后: 40.3491370
```
### 4. 气压计算(智能优化)
使用 `qiya.py` 模块智能计算地面气压,支持两种计算模式:
#### 🎯 三级智能计算策略
- **高度变化小**默认容差≤10米只计算一次平均气压应用到所有行
- **中等变化**:使用高度分档策略,每个档位计算一次气压
- **高度变化大**:逐行计算气压,支持进度条显示
#### 📏 高度分档优化
- **分档间隔**默认2米一个档位可自定义
- **档位计算**:每个档位使用中间高度和平均位置计算一次气压
- **减少API调用**:大幅降低重复计算,提高效率
#### 📊 计算参数
- **日期格式**: 转换为 `YYYY-MM-DD`(自动提取日期部分)
- **时间格式**: 提取小时部分 `HH`
- **海拔高度**: 使用 `融合高程` 列或档位中心高度
- **API调用**: Open-Meteo 历史天气数据
- **进度条**: 自动显示计算进度需要安装tqdm
#### ⚙️ 自定义参数
```python
# 自定义参数
df = calculate_pressure(
df,
max_samples=None,
height_tolerance=10.0, # 高度变化容差
height_bin_size=2.0 # 高度分档间隔
)
```
### 5. 高度调整
`融合高程` 进行基准调整:
```
调整后高度 = 原始高度 - 最小高度
```
### 6. 时间戳融合
`日期``时间` 列合并:
```
输入: 日期="2024-01-15", 时间="08:34:01"
输出: timestamp="2024-01-15 08:34:01"
```
### 7. 字段重命名
转换为GasFlux标准字段名
| 原始字段 | GasFlux字段 | 数据类型 |
|----------|-------------|----------|
| `日期+时间` | `timestamp` | datetime |
| `经度` | `latitude` | float |
| `纬度` | `longitude` | float |
| `融合高程` | `height_ato` | float |
| `修正风向` | `windir` | float |
| `修正风速` | `windspeed` | float |
| `风温` | `temperature` | float |
| `气压计算结果` | `pressure` | float |
| `CH4` | `ch4` | float |
## 🚀 使用方法
### 1. 交互式输入模式(推荐新用户)
```bash
# 直接运行脚本,会自动进入交互式模式
python data_processor.py
# 或者明确指定交互式模式
python data_processor.py --interactive
```
在交互式模式下,程序会提示您:
- 输入Excel文件路径
- 指定输出CSV文件路径可选
- 确认处理参数
### 2. 命令行参数模式
```bash
# 基本用法
python data_processor.py your_data.xlsx
# 指定输出路径
python data_processor.py input.xlsx -o output.csv
# 查看帮助
python data_processor.py --help
```
### 3. Python脚本直接调用推荐
```python
# 最简单的方式
from src.gasflux.data_processor import process_file
# 处理文件并返回DataFrame
df = process_file('your_data.xlsx')
# 或者指定输出文件名
df = process_file('input.xlsx', 'output.csv')
# 使用返回的DataFrame进行进一步分析
print(df.head())
print(df['ch4'].describe())
```
### 4. 完整使用脚本
复制以下代码到新文件(如 `process_my_data.py`
```python
from src.gasflux.data_processor import process_file
# 修改这里的输入文件名
input_file = "08_34_01_间隔高度5m.xlsx" # 您的Excel文件名
output_file = "processed_data.csv" # 输出文件名(可选)
try:
df = process_file(input_file, output_file)
print("✅ 处理成功!")
print(f"数据形状: {df.shape}")
print(f"列名: {list(df.columns)}")
print(df.head())
except Exception as e:
print(f"❌ 处理失败: {e}")
```
### Python代码调用
```python
from src.gasflux.data_processor import process_excel_file
# 处理单个文件
df = process_excel_file('path/to/data.xlsx')
# 查看结果
print(df.head())
print(df.columns)
```
## 📊 输出格式
处理后的数据完全符合GasFlux输入要求
```csv
timestamp,latitude,longitude,height_ato,windspeed,windir,temperature,pressure,ch4
2024-01-15 08:34:01,115.785529,40.349137,10.5,3.2,180.5,22.3,1013.25,2.15
2024-01-15 08:34:02,115.785530,40.349138,10.8,3.1,181.2,22.4,1013.26,2.18
...
```
## ⚙️ 配置选项
### 文件名格式
脚本根据文件名自动提取时间信息:
- 格式: `{HH}_{MM}_{SS}_{其他信息}.xlsx`
- 示例: `08_34_01_间隔高度5m.xlsx` → 小时=08
### 气压计算
- 默认只计算前20行数据避免过多API调用
- 可以修改 `max_samples` 参数调整计算数量
## 🔧 依赖要求
```bash
pip install pandas openpyxl requests
```
确保GasFlux的`qiya.py`模块可用。
## ⚠️ 注意事项
### 数据质量
- 确保Excel文件格式正确
- 检查日期时间格式
- 验证经纬度坐标范围
### API限制
- Open-Meteo有每日请求限制
- 批量处理时注意请求频率
- 网络连接稳定很重要
### 内存使用
- 大文件处理时注意内存占用
- 可以分批处理超大数据集
## 🎯 应用场景
### 无人机通量测量
1. **数据采集**: 无人机飞行收集原始数据
2. **数据处理**: 使用本脚本转换为标准格式
3. **通量计算**: 输入GasFlux进行气体通量分析
### 数据预处理工作流
```
原始Excel → 数据处理脚本 → GasFlux格式 → 通量计算 → 结果分析
```
## 📈 处理结果验证
处理完成后检查:
- ✅ 时间戳格式正确 (YYYY-MM-DD HH:MM:SS)
- ✅ 经纬度坐标合理范围
- ✅ 高度值从0开始 (已减去最小值)
- ✅ 气压值在合理范围 (900-1100 hPa)
- ✅ 所有必需字段都存在
## 🛠️ 故障排除
### 常见问题
#### 1. 文件读取错误
```
确保Excel文件未损坏列名与预期一致
```
#### 2. 时间格式错误
```
检查文件名格式,确包含小时信息 (HH_MM_SS...)
```
#### 3. 气压计算失败
```
检查网络连接,确认日期格式正确
```
#### 4. 坐标转换异常
```
验证经纬度数据是数值类型,不是字符串
```
## 📞 支持
如遇问题,请检查:
1. 输入数据格式是否正确
2. 网络连接是否正常
3. GasFlux依赖是否完整安装
4. Python版本兼容性
---
**版本**: 1.0.0
**最后更新**: 2024年12月