From SW's laptop

master
sanginnwoo 2022-12-07 23:31:23 +09:00
parent 7ba5eefc4c
commit a748d20de2
2 changed files with 308 additions and 229 deletions

View File

@ -5,8 +5,10 @@ Sang Inn Woo, Ph.D. @ Incheon National University
Starting Date: 2022-11-10 Starting Date: 2022-11-10
""" """
import psycopg2 as pg2 import psycopg2 as pg2
import sys
import numpy as np import numpy as np
import settle_prediction_steps_main import settle_prediction_steps_main
import matplotlib.pyplot as plt
''' '''
@ -20,52 +22,45 @@ fill_height: height of surcharge fill
nod: number of date nod: number of date
''' '''
def settlement_prediction(point_name):
# connect the database # connect the database
connection = pg2.connect("host=localhost dbname=postgres user=postgres password=lab36981 port=5432") connection = pg2.connect("host=localhost dbname=postgres user=postgres password=lab36981 port=5432")
# set cursor # set cursor
cursor = connection.cursor() cursor = connection.cursor()
# select all monitoring points # select monitoring data for the monitoring point
postgres_select_query = """SELECT * FROM apptb_surset01""" postgres_select_query = """SELECT * FROM apptb_surset02 WHERE cons_code='""" \
cursor.execute(postgres_select_query)
point_record = cursor.fetchall()
# for a monitoring point, set name
point_name = point_record[0][3]
# select monitoring data for the monitoring point
postgres_select_query = """SELECT * FROM apptb_surset02 WHERE cons_code='""" \
+ point_name + """' ORDER BY nod ASC""" + point_name + """' ORDER BY nod ASC"""
cursor.execute(postgres_select_query) cursor.execute(postgres_select_query)
monitoring_record = cursor.fetchall() monitoring_record = cursor.fetchall()
# initialize time, surcharge, and settlement lists # initialize time, surcharge, and settlement lists
time = [] time = []
surcharge = [] surcharge = []
settlement = [] settlement = []
# fill list # fill lists
for row in monitoring_record: for row in monitoring_record:
settlement.append(float(row[6])) settlement.append(float(row[6]))
surcharge.append(float(row[8])) surcharge.append(float(row[8]))
time.append(float(row[12])) time.append(float(row[12]))
# convert lists to np arrays # convert lists to np arrays
settlement = np.array(settlement) settlement = np.array(settlement)
surcharge = np.array(surcharge) surcharge = np.array(surcharge)
time = np.array(time) time = np.array(time)
# run the settlement prediction and get results # run the settlement prediction and get results
results = settle_prediction_steps_main.run_settle_prediction(point_name=point_name, results = settle_prediction_steps_main.run_settle_prediction(point_name=point_name,
np_time=time, np_time=time,
np_surcharge=surcharge, np_surcharge=surcharge,
np_settlement=settlement, np_settlement=settlement,
final_step_predict_percent=90, final_step_predict_percent=90,
additional_predict_percent=300, additional_predict_percent=300,
plot_show=True, plot_show=False,
print_values=True, print_values=False,
run_original_hyperbolic=True, run_original_hyperbolic=True,
run_nonlinear_hyperbolic=True, run_nonlinear_hyperbolic=True,
run_weighted_nonlinear_hyperbolic=True, run_weighted_nonlinear_hyperbolic=True,
@ -73,28 +68,113 @@ results = settle_prediction_steps_main.run_settle_prediction(point_name=point_na
run_step_prediction=True, run_step_prediction=True,
asaoka_interval=3) asaoka_interval=3)
# if there are prediction data for the given data point, delete it first # if there are prediction data for the given data point, delete it first
postgres_delete_query = """DELETE FROM apptb_pred02 WHERE cons_code='""" + point_name + """'""" postgres_delete_query = """DELETE FROM apptb_pred02 WHERE cons_code='""" + point_name + """'"""
cursor.execute(postgres_delete_query) cursor.execute(postgres_delete_query)
connection.commit() connection.commit()
time = results[0] # insert predicted settlement into database
predicted_settlement = results[1] for i in range(5):
for i in range(5):
# get time and settlement arrays
time = results[2 * i] time = results[2 * i]
predicted_settlement = results[2 * i + 1] predicted_settlement = results[2 * i + 1]
# for each prediction time
for j in range(len(time)): for j in range(len(time)):
# construct insert query
postgres_insert_query \ postgres_insert_query \
= """INSERT INTO apptb_pred02 (cons_code, prediction_progress_days, predicted_settlement, prediction_method) """\ = """INSERT INTO apptb_pred02 (cons_code, prediction_progress_days, predicted_settlement, prediction_method) """\
+ """VALUES (%s, %s, %s, %s)""" + """VALUES (%s, %s, %s, %s)"""
# set data to insert
record_to_insert = (point_name, time[j], predicted_settlement[j], i) record_to_insert = (point_name, time[j], predicted_settlement[j], i)
# execute the insert query
cursor.execute(postgres_insert_query, record_to_insert) cursor.execute(postgres_insert_query, record_to_insert)
connection.commit() # commit changes
connection.commit()
def read_database_and_plot(point_name):
# connect the database
connection = pg2.connect("host=localhost dbname=postgres user=postgres password=lab36981 port=5432")
# set cursor
cursor = connection.cursor()
# select monitoring data for the monitoring point
postgres_select_query = """SELECT * FROM apptb_surset02 WHERE cons_code='""" \
+ point_name + """' ORDER BY nod ASC"""
cursor.execute(postgres_select_query)
monitoring_record = cursor.fetchall()
# initialize time, surcharge, and settlement lists
time_monitored = []
surcharge_monitored = []
settlement_monitored = []
# fill lists
for row in monitoring_record:
settlement_monitored.append(float(row[6]))
surcharge_monitored.append(float(row[8]))
time_monitored.append(float(row[12]))
# convert lists to np arrays
settlement_monitored = np.array(settlement_monitored)
surcharge_monitored = np.array(surcharge_monitored)
time_monitored = np.array(time_monitored)
prediction_method = 0
# select monitoring data for the monitoring point
postgres_select_query = """SELECT prediction_progress_days, predicted_settlement """ \
+ """FROM apptb_pred02 WHERE cons_code= '""" + point_name \
+ """' and prediction_method = """ + str(prediction_method) \
+ """ ORDER BY prediction_progress_days ASC"""
cursor.execute(postgres_select_query)
prediction_record = cursor.fetchall()
# initialize time, surcharge, and settlement lists
time_predicted = []
settlement_predicted = []
# fill lists
for row in prediction_record:
time_predicted.append(float(row[0]))
settlement_predicted.append(float(row[1]))
# convert lists to np arrays
settlement_predicted = np.array(settlement_predicted)
time_predicted = np.array(time_predicted)
# 그래프 크기, 서브 그래프 개수 및 비율 설정
fig, axes = plt.subplots(2, 1, figsize=(12, 9), gridspec_kw={'height_ratios': [1, 3]})
# 성토고 그래프 표시
axes[0].plot(time_monitored, surcharge_monitored, color='black', label='surcharge height')
# 성토고 그래프 설정
axes[0].set_ylabel("Surcharge height (m)", fontsize=15)
axes[0].set_xlim(left=0)
axes[0].grid(color="gray", alpha=.5, linestyle='--')
axes[0].tick_params(direction='in')
# 계측 및 예측 침하량 표시
axes[1].scatter(time_monitored, -settlement_monitored, s=50,
facecolors='white', edgecolors='black', label='measured data')
axes[1].plot(time_predicted, -settlement_predicted,
linestyle='--', color='red', label='Original Hyperbolic')
# python3 controller.py 1_SP-5
if __name__ == '__main__':
args = sys.argv[1:]
point_name = args[0]
#settlement_prediction(point_name=point_name)
read_database_and_plot(point_name=point_name)

View File

@ -570,14 +570,13 @@ def run_settle_prediction(point_name,
print("Error in Final Settlement (Asaoka): %0.3f" % final_error_asaoka) print("Error in Final Settlement (Asaoka): %0.3f" % final_error_asaoka)
# ========================================== # ==========================================
# Post-Processing #2 : 그래프 작성 # Post-Processing #2 : 그래프 작성
# ========================================== # ==========================================
# 만약 그래프 도시가 필요할 경우,
if plot_show:
# 그래프 크기, 서브 그래프 개수 및 비율 설정 # 그래프 크기, 서브 그래프 개수 및 비율 설정
fig, axes = plt.subplots(2, 1, figsize=(12, 9), gridspec_kw={'height_ratios': [1, 3]}) fig, axes = plt.subplots(2, 1, figsize=(12, 9), gridspec_kw={'height_ratios': [1, 3]})
@ -756,7 +755,7 @@ def run_settle_prediction(point_name,
rmse_hyper_original, rmse_hyper_nonlinear, rmse_hyper_weight_nonlinear, rmse_hyper_original, rmse_hyper_nonlinear, rmse_hyper_weight_nonlinear,
rmse_asaoka, rmse_step, rmse_asaoka, rmse_step,
final_error_hyper_original, final_error_hyper_nonlinear, final_error_hyper_weight_nonlinear, final_error_hyper_original, final_error_hyper_nonlinear, final_error_hyper_weight_nonlinear,
final_error_asaoka, final_error_step, is_multi_step] final_error_asaoka, final_error_step]
''' '''
run_settle_prediction(input_file='data/2-5_No.39.csv', run_settle_prediction(input_file='data/2-5_No.39.csv',