import multiprocessing import os import matplotlib matplotlib.use('Agg') matplotlib.rcParams['font.family'] = 'SimHei' matplotlib.rcParams['font.sans-serif'] = ['SimHei'] import numpy as np from matplotlib import pyplot as plt from utils.file.trans_methods import read_file_to_df from utils.file.trans_methods import read_excel_files import pandas as pd def select_data(file, curve_wv, curve_ap, save_path): name = os.path.basename(file).split("@")[0] try: df = read_file_to_df(file) df.dropna(subset=['有功功率 kW均值', '风速 m/s均值', '有功功率设定 kW均值'], inplace=True) ap_gt_0_df = df[df['有功功率 kW均值'] > 0] ap_le_0_df = df[df['有功功率 kW均值'] <= 0] ap_le_0_df["marker"] = -1 ap = ap_gt_0_df['有功功率 kW均值'].values wv = ap_gt_0_df['风速 m/s均值'].values ap_set = ap_gt_0_df['有功功率设定 kW均值'].values ap_gt_0_in = [0] * ap_gt_0_df.shape[0] for i in range(len(ap_set)): wind_speed = wv[i] active_power = ap[i] active_power_set = ap_set[i] if active_power >= 2200 - 200: ap_gt_0_in[i] = 1 else: diffs = np.abs(curve_wv - wind_speed) # 找到差值最小的索引和对应的差值 minDiff, idx = np.min(diffs), np.argmin(diffs) # 使用找到的索引获取对应的值 closestValue = curve_ap[idx] if active_power - closestValue >= -100: ap_gt_0_in[i] = 1 ap_gt_0_df['marker'] = ap_gt_0_in df = pd.concat([ap_gt_0_df, ap_le_0_df]) df.to_csv(os.path.join(save_path, name + '.csv'), index=False, encoding='utf-8') df = df[['时间', '风速 m/s均值', '有功功率 kW均值', '有功功率设定 kW均值', 'marker']] df = df[df['marker'] == 1] x = df['风速 m/s均值'].values y = df['有功功率 kW均值'].values # 使用scatter函数绘制散点图 if not df.empty: plt.scatter(x, y, s=10, c='blue') # 添加标题和坐标轴标签 plt.title(name) plt.xlabel('风速均值') plt.ylabel('有功功率均值') # 保存 plt.savefig(os.path.join(save_path, name + '均值.png')) except Exception as e: print(os.path.basename(file), "出错", str(e)) raise e if __name__ == '__main__': wind_power_df = read_file_to_df(r"D:\中能智能\matlib计算相关\标记derating\PV_Curve.csv") curve_wv = wind_power_df["风速"].values curve_ap = wind_power_df["功率"].values all_files = read_excel_files(r"Z:\collection_data\1进行中\诺木洪风电场-甘肃-华电\清理数据\min-666") save_path = r"D:\trans_data\诺木洪\清理数据\min-666-derating" # save_path = r"Z:\collection_data\1进行中\诺木洪风电场-甘肃-华电\清理数据\min-666-marker" # for file in all_files: with multiprocessing.Pool(10) as pool: pool.starmap(select_data, [(i, curve_wv, curve_ap, save_path) for i in all_files])