Initial commit: GasFlux project with core processing pipelines

This commit is contained in:
2026-01-05 09:33:27 +08:00
commit f085d7c5fe
50 changed files with 10634 additions and 0 deletions

142
src/gasflux/run_example.py Normal file
View File

@ -0,0 +1,142 @@
#!/usr/bin/env python3
"""
GasFlux 完整处理示例脚本
这个脚本演示了完整的GasFlux处理流程:
1. 使用data_processor.py处理原始Excel数据
2. GasFlux数据验证和处理:
- 背景校正
- 空间处理
- 克里金插值
- 生成报告
运行方法:
python run_example.py input.xlsx
python run_example.py input.xlsx --output processed_data.csv
"""
import sys
import argparse
from pathlib import Path
# 导入同一包内的模块
# 优先尝试相对导入(当作为包的一部分运行时)
# 如果失败,则尝试绝对导入(当直接运行脚本时)
try:
# 尝试相对导入
from .processing_pipelines import process_main
from .data_processor import process_file
print("✅ 成功导入GasFlux模块(相对导入)")
except ImportError:
try:
# 相对导入失败,尝试绝对导入
from src.gasflux.processing_pipelines import process_main
from src.gasflux.data_processor import process_file
print("✅ 成功导入GasFlux模块(绝对导入)")
except ImportError as e:
print(f"❌ 导入GasFlux模块失败: {e}")
print("请确保GasFlux包结构完整,或从项目根目录运行")
sys.exit(1)
def main():
"""主函数:运行完整的数据处理和GasFlux分析流程"""
parser = argparse.ArgumentParser(
description="GasFlux完整处理流程:Excel数据预处理 + 通量分析",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
使用示例:
python run_example.py data.xlsx # 基本使用
python run_example.py data.xlsx --output result.csv # 指定输出文件名
python run_example.py data.xlsx --no-gasflux # 仅预处理,不进行通量分析
处理步骤:
1. 使用data_processor.py处理Excel文件
2. 对处理后的数据进行GasFlux通量分析
"""
)
parser.add_argument('input_file', help='输入的Excel文件路径 (.xlsx 或 .xls)')
parser.add_argument('-o', '--output', help='预处理后的CSV输出文件名(可选)')
parser.add_argument('--no-gasflux', action='store_true',
help='仅执行数据预处理,跳过GasFlux通量分析')
parser.add_argument('-c', '--config', help='GasFlux配置文件路径(可选,默认使用内置配置)')
args = parser.parse_args()
print("=== GasFlux 完整处理流程 ===\n")
# 检查输入文件
input_path = Path(args.input_file)
if not input_path.exists():
print(f"❌ 错误:输入文件不存在: {input_path}")
return
if input_path.suffix.lower() not in ['.xlsx', '.xls']:
print(f"❌ 错误:输入文件必须是Excel格式: {input_path}")
return
# 确定输出文件名
if args.output:
processed_csv = Path(args.output)
else:
processed_csv = input_path.with_suffix('.processed.csv')
# 确定配置文件
if args.config:
config_file = Path(args.config)
else:
config_file = Path(__file__).parent / "data" / "gasflux_config.yaml"
print(f"输入Excel文件: {input_path}")
print(f"预处理输出CSV: {processed_csv}")
if not args.no_gasflux:
print(f"GasFlux配置文件: {config_file}")
print()
try:
# 第一步:数据预处理
print("🔄 第一步:数据预处理...")
processed_df = process_file(str(input_path), str(processed_csv))
print(f"✅ 数据预处理完成,输出文件: {processed_csv}")
print()
# 如果不需要进行GasFlux分析,直接返回
if args.no_gasflux:
print("⏭️ 跳过GasFlux通量分析")
return
# 第二步:GasFlux通量分析
print("🔄 第二步:GasFlux通量分析...")
# 检查配置文件
if not config_file.exists():
print(f"❌ 错误:GasFlux配置文件不存在: {config_file}")
return
print(f"使用数据文件: {processed_csv}")
print(f"使用配置文件: {config_file}")
print()
# 运行GasFlux处理流程
process_main(processed_csv, config_file)
print("\n✅ GasFlux通量分析完成!")
# 显示输出信息
output_dir = Path("../../examples/basic_usage/5m") / processed_csv.stem / "processing_run"
if output_dir.exists():
print(f"\n📁 GasFlux输出目录: {output_dir}")
print("📊 生成的文件:")
for file in output_dir.rglob("*"):
if file.is_file():
print(f" - {file.name}")
except Exception as e:
print(f"\n❌ 处理失败: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()