|
@@ -54,7 +54,7 @@ def get_process_NWP(database):
|
|
"""
|
|
"""
|
|
# NPW数据
|
|
# NPW数据
|
|
engine = create_database(database)
|
|
engine = create_database(database)
|
|
- sql_NWP = "select C_PRE_TIME,C_T,C_RH,C_PRESSURE,C_WD10,C_WD30,C_WD50,C_WD70,C_WD80,C_WD90,C_WD100,C_WD170,C_WS10,C_WS30,C_WS50,C_WS70,C_WS80,C_WS90,C_WS100,C_WS170 from t_nwp"
|
|
|
|
|
|
+ sql_NWP = "select C_PRE_TIME,C_T,C_RH,C_PRESSURE, C_SWR, C_WD10,C_WD30,C_WD50,C_WD70,C_WD80,C_WD90,C_WD100,C_WD170,C_WS10,C_WS30,C_WS50,C_WS70,C_WS80,C_WS90,C_WS100,C_WS170 from t_nwp" # 光的NWP字段
|
|
NWP = exec_sql(sql_NWP, engine)
|
|
NWP = exec_sql(sql_NWP, engine)
|
|
|
|
|
|
#删除后三位
|
|
#删除后三位
|
|
@@ -76,57 +76,32 @@ def get_process_NWP(database):
|
|
utils.savedata.saveData("NWP.csv",NWP)
|
|
utils.savedata.saveData("NWP.csv",NWP)
|
|
return NWP
|
|
return NWP
|
|
|
|
|
|
-def get_process_turbine(database):
|
|
|
|
- """
|
|
|
|
- 从数据库中获取风头数据,并进行简单处理
|
|
|
|
- :param database:
|
|
|
|
- :return:
|
|
|
|
- """
|
|
|
|
-
|
|
|
|
- # 获取NWP数据
|
|
|
|
- NWP = utils.savedata.readData("NWP.csv")
|
|
|
|
- NWP_date = NWP.iloc[:,0]
|
|
|
|
- print(NWP_date)
|
|
|
|
-
|
|
|
|
- # 机头数据
|
|
|
|
- engine = create_database(database)
|
|
|
|
- for i in arg.turbineloc:
|
|
|
|
- print("导出风机{}的数据".format(i))
|
|
|
|
- sql_turbine = "select C_TIME,C_DATA1 as C_WS, C_DATA2 as C_WD, C_DATA3 as C_ACTIVE_POWER from t_wind_turbine_status_data WHERE C_EQUIPMENT_NO=" + str(i) + " and C_DATA1 != -99 AND C_DATA1 != 0" #+ " and C_WS>0 and C_ACTIVE_POWER>0"
|
|
|
|
- turbine = exec_sql(sql_turbine, engine)
|
|
|
|
-
|
|
|
|
- #直接导出所有数据
|
|
|
|
- utils.savedata.saveData("turbine-all/turbine-{}.csv".format(i), turbine)
|
|
|
|
-
|
|
|
|
- #每15分钟导出一个数据
|
|
|
|
- filtered_df = turbine[turbine['C_TIME'].isin(NWP_date)]
|
|
|
|
- utils.savedata.saveData("turbine-15/turbine-{}.csv".format(i), filtered_df)
|
|
|
|
|
|
|
|
-def get_process_tower(database):
|
|
|
|
|
|
+def get_process_weather(database):
|
|
"""
|
|
"""
|
|
- 获取测风塔数据
|
|
|
|
|
|
+ 获取环境检测仪数据
|
|
:param database:
|
|
:param database:
|
|
:return:
|
|
:return:
|
|
"""
|
|
"""
|
|
engine = create_database(database)
|
|
engine = create_database(database)
|
|
- print("现有测风塔:{}".format(arg.towerloc))
|
|
|
|
- for i in arg.towerloc:
|
|
|
|
- print("测风塔{}导出数据".format(i))
|
|
|
|
|
|
+ print("现有环境监测仪:{}".format(arg.weatherloc))
|
|
|
|
+ for i in arg.weatherloc:
|
|
|
|
+ print("环境监测仪{}导出数据".format(i))
|
|
# 删除没用的列
|
|
# 删除没用的列
|
|
- drop_colmns = ["C_DATA1","C_DATA2","C_DATA3","C_DATA4","C_DATA5","C_DATA6","C_DATA7","C_DATA8","C_DATA9","C_DATA10","C_IS_GENERATED","C_ABNORMAL_CODE"]
|
|
|
|
|
|
+ drop_colmns = ["C_ID", "C_EQUIPMENT_NO", "C_DATA1","C_DATA2","C_DATA3","C_DATA4","C_DATA5","C_DATA6","C_DATA7","C_DATA8","C_DATA9","C_DATA10", "C_STATUS", "C_IS_GENERATED","C_ABNORMAL_CODE"]
|
|
|
|
|
|
get_colmns = []
|
|
get_colmns = []
|
|
# 查询表的所有列名
|
|
# 查询表的所有列名
|
|
- result_set = exec_sql("SHOW COLUMNS FROM t_wind_tower_status_data", engine)
|
|
|
|
|
|
+ result_set = exec_sql("SHOW COLUMNS FROM t_weather_station_status_data", engine)
|
|
for name in result_set.iloc[:,0]:
|
|
for name in result_set.iloc[:,0]:
|
|
if name not in drop_colmns:
|
|
if name not in drop_colmns:
|
|
get_colmns.append(name)
|
|
get_colmns.append(name)
|
|
|
|
|
|
all_columns_str = ", ".join([f'{col}' for col in get_colmns])
|
|
all_columns_str = ", ".join([f'{col}' for col in get_colmns])
|
|
|
|
|
|
- tower_sql = "select " + all_columns_str + " from t_wind_tower_status_data where C_EQUIPMENT_NO="+str(i)
|
|
|
|
- tower = exec_sql(tower_sql, engine)
|
|
|
|
- utils.savedata.saveData("tower/tower-{}.csv".format(i), tower)
|
|
|
|
|
|
+ weather_sql = "select " + all_columns_str + " from t_weather_station_status_data where C_EQUIPMENT_NO="+str(i)
|
|
|
|
+ weather = exec_sql(weather_sql, engine)
|
|
|
|
+ utils.savedata.saveData("weather/weather-{}.csv".format(i), weather)
|
|
|
|
|
|
def get_process_power(database):
|
|
def get_process_power(database):
|
|
"""
|
|
"""
|
|
@@ -136,8 +111,23 @@ def get_process_power(database):
|
|
"""
|
|
"""
|
|
engine = create_database(database)
|
|
engine = create_database(database)
|
|
sql_power = "select C_TIME,C_REAL_VALUE from t_power_station_status_data"
|
|
sql_power = "select C_TIME,C_REAL_VALUE from t_power_station_status_data"
|
|
- power = exec_sql(sql_power, engine)
|
|
|
|
- utils.savedata.saveData("power.csv", power)
|
|
|
|
|
|
+ powers = exec_sql(sql_power, engine)
|
|
|
|
+ utils.savedata.saveData("power.csv", powers)
|
|
|
|
+ power5, power_index = [], [0] # 功率表,索引表
|
|
|
|
+ ps = 0
|
|
|
|
+ # 获取5分钟一个间隔的功率数据
|
|
|
|
+ for i, power in powers.iterrows():
|
|
|
|
+ real_value = power['C_REAL_VALUE']
|
|
|
|
+ ps += real_value
|
|
|
|
+ if str(power['C_TIME'].minute)[-1] in ('0', '5'):
|
|
|
|
+ power_index.append(i)
|
|
|
|
+ num = power_index[-1] - power_index[-2]
|
|
|
|
+ num = num if num != 0 else 1
|
|
|
|
+ psa = round(ps / num, 2)
|
|
|
|
+ power5.append([power['C_TIME'], psa])
|
|
|
|
+ ps = 0
|
|
|
|
+ power5 = pd.DataFrame(power5, columns=['C_TIME', 'C_REAL_VALUE'])
|
|
|
|
+ utils.savedata.saveData("power5.csv", power5)
|
|
|
|
|
|
|
|
|
|
def get_process_dq(database):
|
|
def get_process_dq(database):
|
|
@@ -161,57 +151,49 @@ def get_process_cdq(database):
|
|
engine = create_database(database)
|
|
engine = create_database(database)
|
|
sql_cdq = "select C_FORECAST_TIME AS C_TIME, C_ABLE_VALUE from t_forecast_power_ultra_short_term_his"
|
|
sql_cdq = "select C_FORECAST_TIME AS C_TIME, C_ABLE_VALUE from t_forecast_power_ultra_short_term_his"
|
|
cdq = exec_sql(sql_cdq, engine)
|
|
cdq = exec_sql(sql_cdq, engine)
|
|
- cdq['C_TIME'] = cdq['C_TIME'].dt.strftime('%Y-%m-%d %H:%M:%S')
|
|
|
|
|
|
+ cdq['C_TIME'] = pd.to_datetime(cdq['C_TIME'], unit='ms')
|
|
utils.savedata.saveData("cdq.csv", cdq)
|
|
utils.savedata.saveData("cdq.csv", cdq)
|
|
|
|
|
|
|
|
|
|
-def get_turbine_info(database):
|
|
|
|
- """
|
|
|
|
- 获取风机信息
|
|
|
|
- :param database:
|
|
|
|
- :return:
|
|
|
|
- """
|
|
|
|
- engine = create_engine(database)
|
|
|
|
- sql_turbine = "select C_ID, C_LATITUDE as '纬度', C_LONGITUDE as '经度', C_HUB_HEIGHT as '轮毂高度' from t_wind_turbine_info"
|
|
|
|
- turbine_info = exec_sql(sql_turbine, engine)
|
|
|
|
- utils.savedata.saveData("风机信息.csv", turbine_info)
|
|
|
|
-
|
|
|
|
def indep_process():
|
|
def indep_process():
|
|
"""
|
|
"""
|
|
进一步数据处理:时间统一处理等
|
|
进一步数据处理:时间统一处理等
|
|
:return:
|
|
:return:
|
|
"""
|
|
"""
|
|
- # 测风塔数据处理
|
|
|
|
- for i in arg.towerloc:
|
|
|
|
- tower = utils.savedata.readData("/tower/tower-{}.csv".format(i))
|
|
|
|
|
|
+ # 环境监测仪数据处理
|
|
|
|
+ for i in arg.weatherloc:
|
|
|
|
+ weather = utils.savedata.readData("/weather/weather-{}.csv".format(i))
|
|
# 判断每一列是否全是 -99
|
|
# 判断每一列是否全是 -99
|
|
- all_minus_99 = (tower == -99).all()
|
|
|
|
|
|
+ all_minus_99 = (weather == -99).all()
|
|
|
|
|
|
# 获取全是 -99 的列的列名
|
|
# 获取全是 -99 的列的列名
|
|
cols_to_drop = all_minus_99[all_minus_99 == True].index.tolist()
|
|
cols_to_drop = all_minus_99[all_minus_99 == True].index.tolist()
|
|
|
|
|
|
# 使用 drop() 方法删除列
|
|
# 使用 drop() 方法删除列
|
|
- tower = tower.drop(cols_to_drop, axis=1)
|
|
|
|
|
|
+ weather = weather.drop(cols_to_drop, axis=1)
|
|
|
|
+
|
|
# MBD: 将一部分是-99的列删除,把-99替换为nan
|
|
# MBD: 将一部分是-99的列删除,把-99替换为nan
|
|
- tower_nan = tower.replace(-99, np.nan, inplace=False)
|
|
|
|
|
|
+ weather_nan = weather.replace(-99, np.nan, inplace=False)
|
|
# nan 超过80% 删除
|
|
# nan 超过80% 删除
|
|
- tower = tower.dropna(axis=1, thresh=len(tower_nan) * 0.8)
|
|
|
|
- utils.savedata.saveData("/tower/tower-{}-process.csv".format(i), tower)
|
|
|
|
-
|
|
|
|
- # 测风塔时间统一
|
|
|
|
- tower1 = utils.savedata.readData("/tower/tower-{}-process.csv".format(1))
|
|
|
|
|
|
+ weather = weather.dropna(axis=1, thresh=len(weather_nan) * 0.8)
|
|
|
|
+ weather = weather.replace(np.nan, -99, inplace=False)
|
|
|
|
+ # 删除取值全部相同的列
|
|
|
|
+ weather = weather.loc[:, (weather != weather.iloc[0]).any()]
|
|
|
|
+ utils.savedata.saveData("/weather/weather-{}-process.csv".format(i), weather)
|
|
|
|
+
|
|
|
|
+ # 时间统一
|
|
|
|
+ weather1 = utils.savedata.readData("/weather/weather-{}-process.csv".format(1))
|
|
# tower2 = utils.savedata.readData("/tower/tower-{}-process.csv".format(2))
|
|
# tower2 = utils.savedata.readData("/tower/tower-{}-process.csv".format(2))
|
|
# tower1 = tower1[tower1['C_TIME'].isin(tower2['C_TIME'])]
|
|
# tower1 = tower1[tower1['C_TIME'].isin(tower2['C_TIME'])]
|
|
# tower2 = tower2[tower2['C_TIME'].isin(tower1['C_TIME'])]
|
|
# tower2 = tower2[tower2['C_TIME'].isin(tower1['C_TIME'])]
|
|
|
|
|
|
- utils.savedata.saveData("/tower/tower-{}-process.csv".format(1), tower1)
|
|
|
|
|
|
+ utils.savedata.saveData("/weather/weather-{}-process.csv".format(1), weather1)
|
|
# utils.savedata.saveData("/tower/tower-{}-process.csv".format(2), tower2)
|
|
# utils.savedata.saveData("/tower/tower-{}-process.csv".format(2), tower2)
|
|
|
|
|
|
# 所有表时间统一
|
|
# 所有表时间统一
|
|
- filenames = ["/NWP.csv","/power.csv", "/dq.csv", '/tower/tower-1-process.csv']
|
|
|
|
|
|
+ filenames = ["/NWP.csv","/power.csv", "power5.csv", "/dq.csv", "/cdq.csv", '/weather/weather-1-process.csv']
|
|
dataframes = []
|
|
dataframes = []
|
|
- for i in arg.turbineloc:
|
|
|
|
- filenames.append("/turbine-15/turbine-{}.csv".format(i))
|
|
|
|
|
|
+
|
|
for name in filenames:
|
|
for name in filenames:
|
|
dataframes.append(utils.savedata.readData(name))
|
|
dataframes.append(utils.savedata.readData(name))
|
|
|
|
|
|
@@ -335,11 +317,9 @@ def data_process(database):
|
|
"""
|
|
"""
|
|
clear_data()
|
|
clear_data()
|
|
get_process_dq(database)
|
|
get_process_dq(database)
|
|
- # get_process_cdq(database)
|
|
|
|
|
|
+ get_process_cdq(database)
|
|
get_process_NWP(database)
|
|
get_process_NWP(database)
|
|
- get_process_turbine(database)
|
|
|
|
- get_turbine_info(database)
|
|
|
|
- get_process_tower(database)
|
|
|
|
|
|
+ get_process_weather(database)
|
|
get_process_power(database)
|
|
get_process_power(database)
|
|
indep_process()
|
|
indep_process()
|
|
NWP_indep_process()
|
|
NWP_indep_process()
|