58 lines
2.7 KiB
Python
58 lines
2.7 KiB
Python
import os
|
||
|
||
import app.algorithms.api_ex.flow_data_clean as flow_data_clean
|
||
import app.algorithms.api_ex.pressure_data_clean as pressure_data_clean
|
||
|
||
|
||
############################################################
|
||
# 流量监测数据清洗 ***卡尔曼滤波法***
|
||
############################################################
|
||
# 2025/08/21 hxyan
|
||
|
||
|
||
def flow_data_clean(input_csv_file: str) -> str:
|
||
"""
|
||
读取 input_csv_path 中的每列时间序列,使用一维 Kalman 滤波平滑并用预测值替换基于 3σ 检测出的异常点。
|
||
保存输出为:<input_filename>_cleaned.xlsx(与输入同目录),并返回输出文件的绝对路径。如有同名文件存在,则覆盖。
|
||
:param: input_csv_file: 输入的 CSV 文件明或路径
|
||
:return: 输出文件的绝对路径
|
||
"""
|
||
|
||
# 提供的 input_csv_path 绝对路径,以下为 默认脚本目录下同名 CSV 文件,构建绝对路径,可根据情况修改
|
||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||
input_csv_path = os.path.join(script_dir, input_csv_file)
|
||
|
||
# 检查文件是否存在
|
||
if not os.path.exists(input_csv_path):
|
||
raise FileNotFoundError(f"指定的文件不存在: {input_csv_path}")
|
||
# 调用 Fdataclean.clean_flow_data_kf 函数进行数据清洗
|
||
out_xlsx_path = flow_data_clean.clean_flow_data_kf(input_csv_path)
|
||
print("清洗后的数据已保存到:", out_xlsx_path)
|
||
|
||
|
||
############################################################
|
||
# 压力监测数据清洗 ***kmean++法***
|
||
############################################################
|
||
# 2025/08/21 hxyan
|
||
|
||
|
||
def pressure_data_clean(input_csv_file: str) -> str:
|
||
"""
|
||
读取 input_csv_path 中的每列时间序列,使用Kmean++清洗数据。
|
||
保存输出为:<input_filename>_cleaned.xlsx(与输入同目录),并返回输出文件的绝对路径。如有同名文件存在,则覆盖。
|
||
原始数据在 sheet 'raw_pressure_data',处理后数据在 sheet 'cleaned_pressusre_data'。
|
||
:param input_csv_path: 输入的 CSV 文件路径
|
||
:return: 输出文件的绝对路径
|
||
"""
|
||
|
||
# 提供的 input_csv_path 绝对路径,以下为 默认脚本目录下同名 CSV 文件,构建绝对路径,可根据情况修改
|
||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||
input_csv_path = os.path.join(script_dir, input_csv_file)
|
||
|
||
# 检查文件是否存在
|
||
if not os.path.exists(input_csv_path):
|
||
raise FileNotFoundError(f"指定的文件不存在: {input_csv_path}")
|
||
# 调用 Fdataclean.clean_flow_data_kf 函数进行数据清洗
|
||
out_xlsx_path = pressure_data_clean.clean_pressure_data_km(input_csv_path)
|
||
print("清洗后的数据已保存到:", out_xlsx_path)
|